¿Cómo puedo crear una política de IAM para conceder permisos de forma explícita para crear y administrar instancias de EC2 en una VPC específica que tenga etiquetas?

5 minutos de lectura
0

Quiero crear una política de AWS Identity and Access Management (IAM) que conceda permisos de forma explícita a las identidades de IAM para administrar instancias de Amazon Elastic Compute Cloud (Amazon EC2) en una nube privada virtual (VPC).

Descripción breve

La política de IAM debe limitar los permisos de la identidad de IAM para administrar las instancias de la VPC que tienen etiquetas.

Amazon EC2 proporciona permisos parciales en el nivel de recurso, pero en el nivel de servicio hay varias acciones, recursos y condiciones que puede utilizar. Para controlar el acceso a los recursos de EC2, utilice etiquetas de recursos.

Resolución

Cree una política que conceda permisos para lanzar las instancias en la VPC, pero restrinja los permisos de la identidad de IAM para administrar las instancias. Para restringir la administración de instancias, utilice la condición de política ec2:ResourceTag.

Creación de una política administrada para asociarla a las entidades de IAM que lancen sus instancias

Siga estos pasos:

  1. Abra la consola de IAM, seleccione Políticas y, a continuación, elija Crear política.

  2. Seleccione la pestaña JSON y, a continuación, introduzca la siguiente política personalizada:

    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "GrantIAMPassRoleOnlyForEC2",
          "Action": [
            "iam:PassRole"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:iam::ACCOUNTNUMBER:role/ROLENAME",
            "arn:aws:iam::ACCOUNTNUMBER:role/ROLENAME"
          ],
          "Condition": {
            "StringEquals": {
              "iam:PassedToService": "ec2.amazonaws.com"
            }
          }
        },
        {
          "Sid": "ReadOnlyEC2WithNonResource",
          "Action": [
            "ec2:Describe*",
            "iam:ListInstanceProfiles"
          ],
          "Effect": "Allow",
          "Resource": "*"
        },
        {
          "Sid": "ModifyingEC2WithNonResource",
          "Action": [
            "ec2:CreateKeyPair",
            "ec2:CreateSecurityGroup"
          ],
          "Effect": "Allow",
          "Resource": "*"
        },
        {
          "Sid": "RunInstancesWithTagRestrictions",
          "Effect": "Allow",
          "Action": "ec2:RunInstances",
          "Resource": [
            "arn:aws:ec2:REGION:ACCOUNTNUMBER:instance/*",
            "arn:aws:ec2:REGION:ACCOUNTNUMBER:volume/*"
          ],
          "Condition": {
            "StringEquals": {
              "aws:RequestTag/TAG-KEY": "TAG-VALUE"
            }
          }
        },
        {
          "Sid": "RemainingRunInstancePermissionsNonResource",
          "Effect": "Allow",
          "Action": "ec2:RunInstances",
          "Resource": [
            "arn:aws:ec2:REGION::image/*",
            "arn:aws:ec2:REGION::snapshot/*",
            "arn:aws:ec2:REGION:ACCOUNTNUMBER*:network-interface/*",
            "arn:aws:ec2:REGION:ACCOUNTNUMBER*:key-pair/*",
            "arn:aws:ec2:REGION:ACCOUNTNUMBER*:security-group/*"
          ]
        },
        {
          "Sid": "EC2RunInstancesVpcSubnet",
          "Effect": "Allow",
          "Action": "ec2:RunInstances",
          "Resource": "arn:aws:ec2:REGION:ACCOUNTNUMBER:subnet/*",
          "Condition": {
            "StringEquals": {
              "ec2:Vpc": "arn:aws:ec2:REGION:ACCOUNTNUMBER:vpc/VPC-ID"
            }
          }
        },
        {
          "Sid": "EC2VpcNonResourceSpecificActions",
          "Effect": "Allow",
          "Action": [
            "ec2:DeleteNetworkAcl",
            "ec2:DeleteNetworkAclEntry",
            "ec2:DeleteRoute",
            "ec2:DeleteRouteTable",
            "ec2:AuthorizeSecurityGroupEgress",
            "ec2:AuthorizeSecurityGroupIngress",
            "ec2:RevokeSecurityGroupEgress",
            "ec2:RevokeSecurityGroupIngress",
            "ec2:DeleteSecurityGroup",
            "ec2:CreateNetworkInterfacePermission",
            "ec2:CreateRoute",
            "ec2:UpdateSecurityGroupRuleDescriptionsEgress",
            "ec2:UpdateSecurityGroupRuleDescriptionsIngress"
          ],
          "Resource": "*",
          "Condition": {
            "StringEquals": {
              "ec2:Vpc": "arn:aws:ec2:REGION:ACCOUNTNUMBER:vpc/VPC-ID"
            }
          }
        },
        {
          "Sid": "AllowInstanceActionsTagBased",
          "Effect": "Allow",
          "Action": [
            "ec2:RebootInstances",
            "ec2:StopInstances",
            "ec2:TerminateInstances",
            "ec2:StartInstances",
            "ec2:AttachVolume",
            "ec2:DetachVolume",
            "ec2:AssociateIamInstanceProfile",
            "ec2:DisassociateIamInstanceProfile",
            "ec2:GetConsoleScreenshot",
            "ec2:ReplaceIamInstanceProfileAssociation"
          ],
          "Resource": [
            "arn:aws:ec2:REGION:ACCOUNTNUMBER:instance/*",
            "arn:aws:ec2:REGION:ACCOUNTNUMBER:volume/*"
          ],
          "Condition": {
            "StringEquals": {
              "ec2:ResourceTag/TAG-KEY": "TAG-VALUE"
            }
          }
        },
        {
          "Sid": "AllowCreateTagsOnlyLaunching",
          "Effect": "Allow",
          "Action": [
            "ec2:CreateTags"
          ],
          "Resource": [
            "arn:aws:ec2:REGION:ACCOUNTNUMBER:instance/*",
            "arn:aws:ec2:REGION:ACCOUNTNUMBER:volume/*"
          ],
          "Condition": {
            "StringEquals": {
              "ec2:CreateAction": "RunInstances"
            }
          }
        }
      ]
    }

    Nota: Sustituya los parámetros ACCOUNTNUMBER, REGION, TAG-KEY, TAG-VALUE, VPC-ID y ROLENAME por sus valores.

  3. (Opcional) Para asignar la política solo a usuarios o grupos de IAM, sustituya los parámetros TAG-KEY o TAG-VALUE por la variable de la política de IAM ${aws:username}. Esta variable de política permite a IAM rellenar previamente los parámetros con el nombre fácil de recordar del usuario de IAM. Los usuarios de IAM pueden lanzar una instancia solo en la VPC especificada y controlar sus propias instancias.

  4. Seleccione Revisar política y, a continuación, introduzca un nombre. Por ejemplo, introduzca VPC_Lockdown_VPC-ID.

  5. Seleccione Crear política.
    Nota: Debe sustituir algunos elementos por recursos específicos de su entorno. Para obtener más información, consulte Nombres de recursos de Amazon (ARN).

Asociación de una política a un usuario, grupo o rol

Siga estos pasos:

  1. Abra la consola de IAM.
  2. En el panel de navegación, seleccione Usuarios, Grupos o Roles. A continuación, seleccione la identidad de IAM.
  3. Seleccione Agregar permisos, a continuación, elija Asociar políticas.
  4. Introduzca el nombre de la política y, después, elija su política.
  5. Elija Asociar política.

Cuando se asocia la política personalizada, la identidad de IAM puede iniciar sesión en la consola de administración de AWS, abrir el panel de EC2 y lanzar una instancia de EC2. La identidad de IAM debe especificar la subred, la VPC y la etiqueta para lanzar la instancia de EC2.

La condición ec2:ResourceTags restringe las siguientes acciones:

  • Iniciar una instancia.
  • Detener una instancia.
  • Reiniciar una instancia.
  • Finalizar una instancia.
  • Asociar un volumen a la instancia
  • Desasociar un volumen de la instancia.
  • Desasociar el perfil de instancia de IAM de la instancia.
  • Asociar un perfil de instancia.
  • Sustituir la asociación de perfiles de instancia de IAM de la instancia.
  • Obtener una captura de pantalla de la instancia en la consola.

Esta política restringe las siguientes acciones en el caso de la VPC:

  • Eliminar los grupos de seguridad.
  • Crear y eliminar rutas.
  • Eliminar las tablas de rutas.
  • Eliminar listas de control de acceso de la red (ACL de red).
  • Eliminar las entradas de la ACL de red.
  • Autorizar o revocar reglas de entrada y salida del grupo de seguridad.
  • Crear permisos de interfaz de red.
  • Actualizar la descripción del grupo de seguridad para las reglas de entrada y salida.

Información relacionada

¿Cómo puedo crear una política de IAM para la restricción basada en etiquetas con las claves de condición PrincipalTag, ResourceTag, RequestTag y TagKeys?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 7 meses