¿Cómo puedo restringir el acceso para lanzar instancias de Amazon EC2 únicamente desde AMI etiquetadas?

4 minutos de lectura
0

Quiero restringir el acceso de los usuarios para que puedan lanzar instancias de Amazon Elastic Compute Cloud (Amazon EC2) únicamente desde imágenes de máquina de Amazon (AMI) etiquetadas. ¿Cómo puedo restringir el acceso para lanzar instancias de EC2 mediante etiquetas de AMI?

Resolución

Para restringir el acceso de los usuarios para lanzar instancias de EC2 mediante AMI etiquetadas, cree una AMI a partir de una instancia existente (o utilice una AMI existente) y, a continuación, agregue una etiqueta a la AMI. A continuación, cree una política de AWS Identity and Access Management (IAM) personalizada con una condición de etiqueta que restrinja los permisos de los usuarios para lanzar únicamente las instancias que utilicen la AMI etiquetada.

En este ejemplo de política de IAM, hay tres ID de sentencia (Sids):

  • Sid ReadOnlyAccess permite a los usuarios ver cualquier recurso de EC2 de su cuenta mediante Describe*, que incluye todas las acciones de EC2 que comienzan por Describe. Sid ReadOnlyAccess también permite a los usuarios obtener la salida de la consola y las capturas de pantalla de una instancia de EC2. Para obtener más información, consulte GetConsoleOutput y GetConsoleScreenshot. Los permisos de Amazon CloudWatch para DescribeAlarms y GetMetricStatistics permiten que la información básica sobre el estado de las instancias de EC2 aparezca en la consola de Amazon EC2. El permiso de IAM para ListInstanceProfiles permite que los perfiles de instancia existentes se muestren en la lista de roles de IAM de la página Configurar detalles de la instancia al lanzar una instancia de EC2. Sin embargo, la API ListInstanceProfiles no permite a los usuarios adjuntar un rol de IAM a una instancia de EC2.
  • Sid ActionsRequiredtoRunInstancesInVPC concede a los usuarios permiso para ejecutar la API RunInstances mediante cualquier instancia, par de claves, grupo de seguridad, volumen, interfaz de red o subred de la región us-east-1 mediante permisos de nivel de recurso al especificar el ARN de cada recurso.
  • Sid LaunchingEC2withAMIsAndTags permite a los usuarios lanzar instancias de EC2 mediante una AMI si la AMI tiene un Entorno de etiquetas con el valor establecido en Prod, y la AMI se encuentra en la regiónus-east-1. El permiso de nivel de recurso se establece en un ARN para cualquier AMI que se encuentre en la región us-east-1, y la condición coincide con el valor de la clave de etiqueta EC2:ResourceTag/Environment y el valor clave Prod.

La siguiente política de IAM utiliza permisos de nivel de recurso para los recursos necesarios para la acción de la APIRunInstances. Para obtener más información sobre los recursos necesarios para RunInstances, consulte Permisos de nivel de recursos admitidos.

Nota:

  • Esta política permite a los usuarios enumerar los roles al lanzar una instancia de EC2, pero los usuarios no pueden lanzar una instancia con un rol adjunto a menos que tengan el permiso iam:PassRole.
  • Esta política no permite a los usuarios crear nuevos grupos de seguridad. Los usuarios deben seleccionar un grupo de seguridad existente para lanzar una instancia de EC2, a menos que tengan el permiso CreateSecurityGroup de EC2. La acción de la API EC2:CreateSecurityGroup otorga acceso para crear solo un grupo de seguridad; esta acción no añade ni modifica ninguna regla. Para añadir reglas entrantes, los usuarios deben tener permisos para la acción de la API AuthorizeSecurityGroupIngress de EC2 entrante y la acción de la API AuthorizeSecurityGroupEgress de EC2 saliente.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ReadOnlyAccess",
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "ec2:GetConsole*",
        "cloudwatch:DescribeAlarms",
        "cloudwatch:GetMetricStatistics",
        "iam:ListInstanceProfiles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "ActionsRequiredtoRunInstancesInVPC",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:us-east-1:AccountId:instance/*",
        "arn:aws:ec2:us-east-1:AccountId:key-pair/*",
        "arn:aws:ec2:us-east-1:AccountId:security-group/*",
        "arn:aws:ec2:us-east-1:AccountId:volume/*",
        "arn:aws:ec2:us-east-1:AccountId:network-interface/*",
        "arn:aws:ec2:us-east-1:AccountId:subnet/*"
      ]
    },
    {
      "Sid": "LaunchingEC2withAMIsAndTags",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "arn:aws:ec2:us-east-1::image/ami-*",
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/Environment": "Prod"
        }
      }
    }
  ]
}