Saltar al contenido

¿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 puedes utilizar. Para controlar el acceso a los recursos de EC2, usa etiquetas de recursos.

Resolución

Crea una política que conceda permisos para lanzar las instancias en la VPC, pero restringe los permisos de la identidad de IAM para administrar las instancias. Para restringir la administración de instancias, utiliza 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

Sigue estos pasos:

  1. Abre la consola de IAM.

  2. Elige Políticas y, a continuación, selecciona Crear política.

  3. Selecciona la pestaña JSON y, a continuación, introduce la siguiente política personalizada:

    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "GrantIAMPassRoleOnlyForEC2",
          "Action": [
            "iam:PassRole"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:iam::account_number:role/role_name",
            "arn:aws:iam::account_number:role/role_nameE"
          ],
          "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:a:instance/*",
            "arn:aws:ec2:region:account_number: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:account_number:network-interface/*",
            "arn:aws:ec2:region:account_number:key-pair/*",
            "arn:aws:ec2:region:account_number:security-group/*"
          ]
        },
        {
          "Sid": "EC2RunInstancesVpcSubnet",
          "Effect": "Allow",
          "Action": "ec2:RunInstances",
          "Resource": "arn:aws:ec2:region:account_number:subnet/*",
          "Condition": {
            "StringEquals": {
              "ec2:Vpc": "arn:aws:ec2:region:account_number: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:account_number:vpc/VPCID"
            }
          }
        },
        {
          "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:account_number:instance/*",
            "arn:aws:ec2:region:account_number:volume/*"
          ],
          "Condition": {
            "StringEquals": {
              "ec2:ResourceTag/TAG-KEY": "Tag_key"
            }
          }
        },
        {
          "Sid": "AllowCreateTagsOnlyLaunching",
          "Effect": "Allow",
          "Action": [
            "ec2:CreateTags"
          ],
          "Resource": [
            "arn:aws:ec2:region:account_number:instance/*",
            "arn:aws:ec2:region:account_number:volume/*"
          ],
          "Condition": {
            "StringEquals": {
              "ec2:CreateAction": "RunInstances"
            }
          }
        }
      ]
    }

    **Nota:**Sustituye los parámetros **account_number **, region, tag_key, tag_value, VPC-ID y role_name por sus valores.

  4. Selecciona Revisar política y, a continuación, introduce un nombre.

  5. Selecciona Crear política.
    Nota: Debes sustituir algunos elementos por recursos específicos de tu entorno. Para obtener más información, consulta Identificar los recursos de AWS con nombres de recursos de Amazon (ARN).

Adjuntar la política a un índice

Sigue estos pasos:

  1. Abre la consola de IAM.
  2. En el panel de navegación, elige Grupos de usuarios y, a continuación, el nombre del grupo.
    Nota: Se recomienda adjuntar políticas a los grupos de usuarios y, a continuación, agregar al usuario al grupo correspondiente.
  3. Selecciona Agregar permisos y, a continuación, elige Asociar políticas.
  4. Introduce el nombre de la política y, después, elige tu política.
  5. Elige Asociar política.

Al adjuntar la política personalizada, la identidad de IAM puede acceder a la consola de administración de AWS. A continuación, la identidad de IAM puede abrir el panel de EC2 e iniciar 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 controlan las claves de condición PrincipalTag, ResourceTag, RequestTag y TagKeys el acceso a las políticas de IAM?

Elementos de la política de IAM: variables y etiquetas

Nombres y rutas descriptivos