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.
Resolución
Para restringir el acceso de los usuarios para lanzar instancias de EC2 únicamente mediante AMI etiquetadas, realice una de las siguientes acciones:
- Cree una AMI a partir de una instancia existente.
- Utilice una AMI existente y, a continuación, añada una etiqueta a la AMI.
A continuación, cree una política de AWS Identity and Access Management (IAM) personalizada. La política de IAM usa una condición de etiqueta que restringe los permisos de los usuarios para lanzar únicamente las instancias que utilicen la AMI etiquetada.
En el siguiente ejemplo de política de IAM, se utilizan estos valores de Sid (ID de instrucción):
- ReadOnlyAccess permite a los usuarios ver los recursos de EC2 de su cuenta mediante Describe*, que incluye todas las acciones de EC2 que comienzan por Describe. ReadOnlyAccess también permite a los usuarios obtener la salida de la consola y las capturas de la consola de una instancia. Los permisos de Amazon CloudWatch para DescribeAlarms y GetMetricStatistics permiten que la información sobre el estado de las instancias 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. La lista de roles de IAM se muestra en la página Configurar detalles de la instancia al lanzar una instancia. Sin embargo, la API ListInstanceProfiles no permite a los usuarios adjuntar un rol de IAM a una instancia.
- ActionsRequiredtoRunInstancesInVPC concede a los usuarios permiso para ejecutar la API RunInstances. Puede usar cualquier instancia, par de claves, grupo de seguridad, volumen, interfaz de red o subred de la región de AWS us-east-1. Los permisos en el nivel de recurso especifican el ARN de cada recurso.
- LaunchingEC2withAMIsAndTags permite a los usuarios lanzar instancias mediante una AMI. La AMI debe tener una etiqueta de Entorno con el valor establecido en Prod en la región us-east-1. El permiso en el nivel de recurso se establece en un ARN para cualquier AMI que se encuentre en la región us-east-1. La condición coincide con el valor de la clave de etiqueta EC2:ResourceTag/Environment y el valor de la clave Prod.
La siguiente política de IAM utiliza permisos en el nivel de recurso compatibles para los recursos necesarios para la acción de la API RunInstances.
Nota:
- Esta política permite a los usuarios enumerar los roles cuando lanzan una instancia. Sin embargo, 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. A menos que tengan el permiso CreateSecurityGroup de EC2, los usuarios deben seleccionar un grupo de seguridad existente para iniciar una instancia de EC2. La acción de la API EC2:CreateSecurityGroup concede 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 de EC2 AuthorizeSecurityGroupIngress entrante y la acción de la API de EC2 AuthorizeSecurityGroupEgress saliente.
- Esta política no permite a los usuarios adjuntar el nombre de la instancia ni modificar ni adjuntar etiquetas al recurso de la instancia de EC2. A menos que los usuarios tengan el permiso CreateTags al crear la instancia, deberán dejar las etiquetas y el nombre en blanco.
{ "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"
}
}
}
]
}