Políticas de ejemplo para controlar el acceso a la API de Amazon EC2
Puede utilizar las políticas de IAM para conceder a los usuarios los permisos necesarios para trabajar con Amazon EC2. Para obtener instrucciones paso a paso, consulte Creación de políticas de IAM en la Guía del usuario de IAM.
Los siguientes ejemplos muestran instrucciones de política que puede utilizar para conceder permisos a los usuarios para utilizar Amazon EC2. Estas políticas están diseñadas para solicitudes que se realizan mediante la AWS CLI o un SDK de AWS. En los ejemplos siguientes, reemplace cada marcador de posición del usuario
con su propia información.
Ejemplos
- Acceso de solo lectura
- Restringir el acceso a una región específica
- Trabajar con instancias
- Lanzar instancias (RunInstances)
- Trabajar con Instancias de spot
- Trabajar con Instancias reservadas
- Etiquetar recursos
- Trabajar con roles de IAM
- Trabajar con tablas de ruteo
- Permitir que una instancia específica vea los recursos de otros servicios de AWS
- Trabajar con plantillas de lanzamiento
- Trabajar con metadatos de instancias
- Uso de volúmenes e instantáneas de Amazon EBS
Para ver políticas de ejemplo para trabajar en la consola de Amazon EC2, consulte Políticas de ejemplo para controlar el acceso a la consola de Amazon EC2.
Ejemplo: Acceso de solo lectura
La siguiente política concede a los usuarios permisos para usar todas las acciones de la API de Amazon EC2 cuyos nombres empiecen por Describe
. El elemento Resource
utiliza un carácter comodín para indicar que los usuarios pueden especificar todos los recursos con estas acciones de API. El carácter comodín * también es necesario en los casos en los que la acción de la API no admita permisos de nivel de recursos. Para obtener más información acerca de qué ARN puede usar con qué acciones de la API de Amazon EC2, consulte Acciones, recursos y claves de condición para Amazon EC2.
Los usuarios no tienen permiso para realizar ninguna acción en los recursos (a menos que otra instrucción les de permiso para ello), porque, de forma predeterminada, se les deniega el permiso para usar acciones de la API.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" } ] }
Ejemplo: Restringir el acceso a una región específica
La siguiente política deniega a los usuarios el permiso para usar todas las acciones de la API de Amazon EC2 a menos que la región sea Europa (Fráncfort). Utiliza la clave de condición global aws:RequestedRegion
, que admiten todas las acciones de la API de Amazon EC2.
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:RequestedRegion": "eu-central-1" } } } ] }
De forma alternativa, puede usar la clave de condición ec2:Region
, que es específica de Amazon EC2 y que admiten todas las acciones de la API de Amazon EC2.
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:*", "Resource": "*", "Condition": { "StringNotEquals": { "ec2:Region": "eu-central-1" } } } ] }
Trabajar con instancias
Ejemplos
Ejemplo: Describir, iniciar, detener, comenzar y terminar todas las instancias
La siguiente política concede a los usuarios permisos para usar las acciones de la API especificadas en el elemento Action
. El elemento Resource
utiliza un carácter comodín * para indicar que los usuarios pueden especificar todos los recursos con estas acciones de API. El carácter comodín * también es necesario en los casos en los que la acción de la API no admita permisos de nivel de recursos. Para obtener más información acerca de qué ARN puede usar con qué acciones de la API de Amazon EC2, consulte Acciones, recursos y claves de condición para Amazon EC2.
Los usuarios no tienen permiso para utilizar cualquier otra acción de la API (a menos que otra instrucción les de permiso para ello), porque, de forma predeterminada, se les deniega el permiso para usar acciones de la API.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeImages", "ec2:DescribeKeyPairs", "ec2:DescribeSecurityGroups", "ec2:DescribeAvailabilityZones", "ec2:RunInstances", "ec2:TerminateInstances", "ec2:StopInstances", "ec2:StartInstances" ], "Resource": "*" } ] }
Ejemplo: Describir todas las instancias y detener, comenzar y terminar solo instancias determinadas
La siguiente política permite a los usuarios describir todas las instancias, iniciar y detener únicamente las instancias i-1234567890abcdef0 y i-0598c7d356eba48d7, y terminar únicamente las instancias de la Región EE.UU. Este (Norte de Virginia) (us-east-1
) con la etiqueta de recurso "purpose=test
".
La primera instrucción utiliza un comodín * para el elemento Resource
para indicar que los usuarios pueden especificar todos los recursos con la acción; en este caso, pueden generar una lista de todas las instancias. El carácter comodín * también es necesario en los casos en que la acción de la API no admite permisos de nivel de recursos (en este caso, ec2:DescribeInstances
). Para obtener más información acerca de qué ARN puede usar con qué acciones de la API de Amazon EC2, consulte Acciones, recursos y claves de condición para Amazon EC2.
La segunda instrucción utiliza permisos de nivel de recursos para las acciones StopInstances
y StartInstances
. Las instancias específicas se indican mediante sus ARN en el elemento Resource
.
La tercera instrucción permite a los usuarios terminar todas las instancias de la región Este de EE. UU. (Norte de Virginia) (us-east-1
) que pertenezcan a la cuenta de AWS especificada, pero solo si la instancia tiene la etiqueta "purpose=test"
. El elemento Condition
estipula cuando la instrucción de la política está en vigor.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:StopInstances", "ec2:StartInstances" ], "Resource": [ "arn:aws:ec2:us-east-1:
account-id
:instance/i-1234567890abcdef0", "arn:aws:ec2:us-east-1:account-id
:instance/i-0598c7d356eba48d7" ] }, { "Effect": "Allow", "Action": "ec2:TerminateInstances", "Resource": "arn:aws:ec2:us-east-1:account-id
:instance/*", "Condition": { "StringEquals": { "aws:ResourceTag/purpose": "test" } } } ] }
Iniciar instancias (RunInstances)
La acción de la API RunInstances lanza una o varias Instancias bajo demanda o una o varias Instancias de spot. RunInstances
requiere una AMI y crea una instancia. Los usuarios pueden especificar un par de claves y un grupo de seguridad en la solicitud. El lanzamiento en una VPC requiere una subred y crea una interfaz de red. El lanzamiento desde una AMI con respaldo de Amazon EBS crea un volumen. Por lo tanto, el usuario debe tener permisos para usar estos recursos de Amazon EC2. Puede crear una instrucción de política que exija a los usuarios que especifiquen un parámetro opcional en RunInstances
o que restrinja los valores de un parámetro a valores determinados.
Para obtener más información sobre los permisos de nivel de recurso necesarios para iniciar una instancia, consulte Claves de condición, acciones y recursos de Amazon EC2.
De forma predeterminada, los usuarios no tienen permisos para describir, comenzar, detener o terminar las instancias resultantes. Una de las posibles maneras de conceder a los usuarios permisos para administrar las instancias obtenidas consiste en crear una etiqueta específica para cada instancia y, a continuación, crear una instrucción que les permita administrar instancias con dicha etiqueta. Para obtener más información, consulte Trabajar con instancias.
Recursos
AMI
La siguiente política permite a los usuarios iniciar instancias utilizando únicamente las AMI especificadas, ami-9e1670f7
y ami-45cf5c3c
. Los usuarios no pueden lanzar una instancia con otras AMI (a menos que otra instrucción conceda a los usuarios permiso para ello).
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:
region
::image/ami-9e1670f7", "arn:aws:ec2:region
::image/ami-45cf5c3c", "arn:aws:ec2:region
:account-id
:instance/*", "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
:account-id
:key-pair/*", "arn:aws:ec2:region
:account-id
:security-group/*", "arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:network-interface/*" ] } ] }
Como alternativa, la siguiente política permite a los usuarios iniciar instancias desde todas las AMI propiedad de Amazon o de determinados socios verificados y de confianza. El elemento Condition
de la primera instrucción prueba si ec2:Owner
es amazon
. Los usuarios no pueden lanzar una instancia con otras AMI (a menos que otra instrucción conceda a los usuarios permiso para ello).
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:
region
::image/ami-*" ], "Condition": { "StringEquals": { "ec2:Owner": "amazon" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region
:account-id
:instance/*", "arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
:account-id
:network-interface/*", "arn:aws:ec2:region
:account-id
:key-pair/*", "arn:aws:ec2:region
:account-id
:security-group/*" ] } ] }
Tipos de instancias
La siguiente política permite a los usuarios iniciar instancias utilizando únicamente el tipo de instancia t2.micro
o t2.small
, que usted podría utilizar para controlar costos. Los usuarios no pueden iniciar instancias más grandes porque el elemento Condition
de la primera instrucción prueba si ec2:InstanceType
es t2.micro
o t2.small
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:
region
:account-id
:instance/*" ], "Condition": { "StringEquals": { "ec2:InstanceType": ["t2.micro", "t2.small"] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region
::image/ami-*", "arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:network-interface/*", "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
:account-id
:key-pair/*", "arn:aws:ec2:region
:account-id
:security-group/*" ] } ] }
Como alternativa, puede crear una política que deniegue a los usuarios permisos para iniciar instancias, salvo los tipos de instancias t2.micro
y t2.small
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:
region
:account-id
:instance/*" ], "Condition": { "StringNotEquals": { "ec2:InstanceType": ["t2.micro", "t2.small"] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region
::image/ami-*", "arn:aws:ec2:region
:account-id
:network-interface/*", "arn:aws:ec2:region
:account-id
:instance/*", "arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
:account-id
:key-pair/*", "arn:aws:ec2:region
:account-id
:security-group/*" ] } ] }
Subredes
La siguiente política permite a los usuarios iniciar instancias utilizando únicamente la subred especificada, subnet-
. El grupo no puede iniciar instancias en cualquier otra subred (a menos que otra instrucción conceda a los usuarios permiso para ello).12345678
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:
region
:account-id
:subnet/subnet-12345678
", "arn:aws:ec2:region
:account-id
:network-interface/*", "arn:aws:ec2:region
:account-id
:instance/*", "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
::image/ami-*", "arn:aws:ec2:region
:account-id
:key-pair/*", "arn:aws:ec2:region
:account-id
:security-group/*" ] } ] }
Como alternativa, puede crear una política que deniegue a los usuarios permisos para iniciar una instancia en cualquier otra subred. La instrucción actúa así denegando el permiso para crear una interfaz de red, salvo en la ubicación donde la subred subnet-
está especificada. Esta denegación anula cualquier otra política creada para permitir el lanzamiento de instancias en otras subredes.12345678
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:
region
:account-id
:network-interface/*" ], "Condition": { "ArnNotEquals": { "ec2:Subnet": "arn:aws:ec2:region
:account-id
:subnet/subnet-12345678
" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region
::image/ami-*", "arn:aws:ec2:region
:account-id
:network-interface/*", "arn:aws:ec2:region
:account-id
:instance/*", "arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
:account-id
:key-pair/*", "arn:aws:ec2:region
:account-id
:security-group/*" ] } ] }
Volúmenes de EBS
La siguiente política permite a los usuarios iniciar instancias únicamente si los volúmenes EBS de la instancia están cifrados. El usuario debe iniciar una instancia desde una AMI que se creó con instantáneas cifradas para garantizar el cifrado del volumen raíz. Cualquier volumen adicional que el usuario adjunte a la instancia durante el lanzamiento también debe estar cifrado.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*:*:volume/*" ], "Condition": { "Bool": { "ec2:Encrypted": "true" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/ami-*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:key-pair/*", "arn:aws:ec2:*:*:security-group/*" ] } ] }
Etiquetas
Etiquetar instancias durante la creación
La siguiente política permite a los usuarios iniciar instancias y etiquetarlas durante la creación. En las acciones de creación de recursos que aplican etiquetas, los usuarios deben tener permisos para utilizar la acción CreateTags
. La segunda instrucción utiliza la clave de condición ec2:CreateAction
para permitir a los usuarios crear etiquetas únicamente en el contexto de RunInstances
y solo para instancias. Los usuarios no pueden etiquetar recursos ya existentes ni tampoco etiquetar volúmenes utilizando la solicitud RunInstances
.
Para obtener más información, consulte Conceder permisos para etiquetar recursos de Amazon EC2 durante la creación.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:
account-id
:instance/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }
Etiquetar instancias y volúmenes durante la creación con etiquetas específicas
La siguiente política contiene la clave de condición aws:RequestTag
que exige a los usuarios que etiqueten todas las instancias que se creen con RunInstances
, con las etiquetas environment=production
y purpose=webserver
. Si los usuarios no transmiten estas etiquetas en concreto o si no especifican ninguna etiqueta, la solicitud dará un error.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:
region
::image/*", "arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:network-interface/*", "arn:aws:ec2:region
:account-id
:security-group/*", "arn:aws:ec2:region
:account-id
:key-pair/*" ] }, { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
:account-id
:instance/*" ], "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" , "aws:RequestTag/purpose": "webserver" } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region
:account-id
:*/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }
Etiquetar instancias y volúmenes durante la creación con al menos una etiqueta específica
La siguiente política utiliza el modificador ForAnyValue
en la condición aws:TagKeys
para indicar que debe especificarse como mínimo una etiqueta en la solicitud y que esta debe contener la clave environment
o webserver
. La etiqueta debe aplicarse tanto a las instancias como a los volúmenes. Se puede especificar cualquier valor de etiqueta en la solicitud.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:
region
::image/*", "arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:network-interface/*", "arn:aws:ec2:region
:account-id
:security-group/*", "arn:aws:ec2:region
:account-id
:key-pair/*" ] }, { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
:account-id
:instance/*" ], "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": ["environment","webserver"] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region
:account-id
:*/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }
Si las instancias se etiquetan durante la creación, deben etiquetarse con una etiqueta específica
En la siguiente política, los usuarios no tienen que especificar etiquetas en la solicitud, pero si lo hacen, la etiqueta tiene que ser purpose=test
. No se permite ninguna otra etiqueta. Los usuarios pueden aplicar etiquetas a todos los recursos de la solicitud RunInstances
que lo admitan.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:
region
:account-id
:*/*", "Condition": { "StringEquals": { "aws:RequestTag/purpose": "test", "ec2:CreateAction" : "RunInstances" }, "ForAllValues:StringEquals": { "aws:TagKeys": "purpose" } } } ] }
Para no permitir ninguna etiqueta llamada al crear para RunInstances
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRun", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*", "arn:aws:ec2:us-east-1:*:spot-instances-request/*" ] }, { "Sid": "VisualEditor0", "Effect": "Deny", "Action": "ec2:CreateTags", "Resource": "*" } ] }
Permitir solo etiquetas específicas para spot-instances-request. La incoherencia sorpresa número 2 entra en juego aquí. En circunstancias normales, no especificar ninguna etiqueta dará como resultado No autenticado. En el caso de spot-instances-request, esta política no se evaluará si no hay etiquetas spot-instances-request, por lo que una solicitud Subasta en ejecución sin etiqueta tendrá éxito.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRun", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*", ] }, { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" } } } ] }
Etiquetas en una plantilla de lanzamiento
En el siguiente ejemplo, los usuarios pueden lanzar instancias, pero solo si usan una plantilla de lanzamiento específica (lt-09477bcd97b0d310e
). La clave de condición ec2:IsLaunchTemplateResource
evita que los usuarios invaliden cualquiera de los recursos especificados en la plantilla de lanzamiento. La segunda parte de la instrucción permite a los usuarios etiquetar instancias en el momento de la creación — Esta parte es necesaria si se especifican las etiquetas para la instancia en la plantilla de lanzamiento.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:
region
:account-id
:launch-template/lt-09477bcd97b0d310e" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region
:account-id
:instance/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }
GPU elásticas
En la siguiente política, los usuarios pueden iniciar una instancia y especificar la GPU elástica que se va a asociar a la instancia. Los usuarios pueden iniciar instancias en cualquier región, pero solo pueden conectar una GPU elástica durante un lanzamiento en la región us-east-2
.
La clave de condición ec2:ElasticGpuType
garantiza que las instancias usen el tipo de GPU elástico eg1.medium
o eg1.large
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:
account-id
:elastic-gpu/*" ], "Condition": { "StringEquals": { "ec2:Region": "us-east-2", "ec2:ElasticGpuType": [ "eg1.medium", "eg1.large" ] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/ami-*", "arn:aws:ec2:*:account-id
:network-interface/*", "arn:aws:ec2:*:account-id
:instance/*", "arn:aws:ec2:*:account-id
:subnet/*", "arn:aws:ec2:*:account-id
:volume/*", "arn:aws:ec2:*:account-id
:key-pair/*", "arn:aws:ec2:*:account-id
:security-group/*" ] } ] }
Plantillas de lanzamiento
En el siguiente ejemplo, los usuarios pueden lanzar instancias, pero solo si usan una plantilla de lanzamiento específica (lt-09477bcd97b0d310e
). Los usuarios pueden omitir parámetros de la plantilla de lanzamiento al especificarlos en la acción RunInstances
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:
region
:account-id
:launch-template/lt-09477bcd97b0d310e" } } } ] }
En este ejemplo, los usuarios pueden iniciar instancias, pero solo si usan una plantilla de lanzamiento. La política usa la clave de condición ec2:IsLaunchTemplateResource
para evitar que los usuarios invaliden cualquiera de los ARN preexistentes de la plantilla de lanzamiento.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:
region
:account-id
:launch-template/*" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } } ] }
En el siguiente ejemplo, la política permite a los usuarios iniciar instancias, pero solo si usan una plantilla de lanzamiento. Los usuarios no pueden omitir los parámetros de subred y de interfaz de red de la solicitud; estos parámetros solo pueden especificarse en la plantilla de lanzamiento. La primera parte de la instrucción utiliza el elemento NotResource para permitir todos los demás recursos, excepto las subredes y las interfaces de red. La segunda parte de la instrucción permite los recursos de subred y de interfaz de red, pero solo si provienen de la plantilla de lanzamiento.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "NotResource": ["arn:aws:ec2:
region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:network-interface/*" ], "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region
:account-id
:launch-template/*" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": ["arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:network-interface/*" ], "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region
:account-id
:launch-template/*" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } } ] }
En el siguiente ejemplo, se le permite a los usuarios iniciar instancias solo si usan una plantilla de lanzamiento que contenga la etiqueta Purpose=Webservers
. Los usuarios no pueden omitir ninguno de los parámetros de la plantilla de lanzamiento en la acción RunInstances
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "NotResource": "arn:aws:ec2:
region
:account-id
:launch-template/*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region
:account-id
:launch-template/*" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:region
:account-id
:launch-template/*", "Condition": { "StringEquals": { "aws:ResourceTag/Purpose": "Webservers" } } } ] }
Trabajar con Instancias de spot
Puede utilizar la acción RunInstances para crear solicitudes de instancias de spot y etiquetarlas durante la creación. El recurso que se debe especificar para RunInstances es spot-instances-request
.
El recurso spot-instances-request
se evalúa en la política de IAM de la siguiente manera:
-
Si no etiqueta la solicitud de instancia de spot durante la creación, Amazon EC2 no evalúa el recurso
spot-instances-request
en la instrucción RunInstances. -
Si etiqueta la solicitud de instancia de spot durante la creación, Amazon EC2 evalúa el recurso
spot-instances-request
en la instrucción RunInstances.
Por lo tanto, para el recurso spot-instances-request
, se aplican las siguientes reglas a la política de IAM:
-
Si utiliza RunInstances para crear una solicitud de instancia de spot y no tiene la intención de etiquetar dicha solicitud durante la creación, no es necesario que permita explícitamente el recurso
spot-instances-request
; la llamada se realizará correctamente. -
Si utiliza RunInstances para crear una solicitud de instancia de spot y tiene la intención de etiquetar dicha solicitud durante la creación, debe incluir el recurso
spot-instances-request
en la instrucción de permiso de RunInstances; de lo contrario, la llamada devolverá un error. -
Si utiliza RunInstances para crear una solicitud de instancia de spot y tiene la intención de etiquetar dicha solicitud durante la creación, debe especificar el recurso
spot-instances-request
o incluir el comodín*
en la instrucción de permiso de CreateTags; de lo contrario, la llamada devolverá un error.
Puede solicitar Instancias de spot mediante RunInstances o RequestSpotInstances. Las siguientes políticas de IAM de ejemplo siguientes solo se aplican cuando se solicita Instancias de spot mediante RunInstances.
Ejemplo: solicitud de Instancias de spot mediante RunInstances
La siguiente política permite a los usuarios solicitar Instancias de spot mediante la acción RunInstances. El recurso spot-instances-request
, creado por RunInstances, solicita Instancias de spot.
nota
Si va a utilizar RunInstances para crear solicitudes de instancias de spot, puede omitir spot-instances-request
de la lista Resource
si no tiene la intención de etiquetar las solicitudes de instancias de spot durante la creación. Esto se debe a que Amazon EC2 no evalúa el recurso spot-instances-request
en la instrucción RunInstances si la solicitud de instancia de spot no se etiqueta durante la creación.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRun", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*", "arn:aws:ec2:us-east-1:*:spot-instances-request/*" ] } ] }
aviso
NO ADMITIDO: ejemplo: denegar permiso a los usuarios para solicitar Instancias de spot utilizando RunInstances
No se admite la política siguiente para el recurso spot-instances-request
.
La siguiente política tiene por objeto conceder a los usuarios el permiso para iniciar Instancias bajo demanda, pero denegar a los usuarios el permiso para solicitar Instancias de spot. El recurso spot-instances-request
, creado por RunInstances, es el recurso que solicita Instancias de spot. La segunda instrucción tiene por objeto denegar la acción RunInstances para el recurso spot-instances-request
. Sin embargo, no se admite esta condición porque Amazon EC2 no evalúa el recurso spot-instances-request
en la instrucción RunInstances si la solicitud de instancia de spot no se etiqueta durante la creación.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*"
]
},
{
"Sid": "DenySpotInstancesRequests - NOT SUPPORTED - DO NOT USE!",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*"
}
]
}
Ejemplo: etiquetar solicitudes de instancias de spot durante la creación
La siguiente política permite a los usuarios etiquetar todos los recursos que se crean durante el lanzamiento de la instancia. La primera instrucción permite a RunInstances crear los recursos enumerados. El recurso spot-instances-request
, creado por RunInstances, es el recurso que solicita Instancias de spot. La segunda instrucción proporciona un comodín *
para permitir que se etiqueten todos los recursos cuando se crean durante el lanzamiento de la instancia.
nota
Si etiqueta la solicitud de instancia de spot durante la creación, Amazon EC2 evalúa el recurso spot-instances-request
en la instrucción RunInstances. Por lo tanto, debe permitir explícitamente el recurso spot-instances-request
para la acción RunInstances; de lo contrario, la llamada devolverá un error.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRun", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*", "arn:aws:ec2:us-east-1:*:spot-instances-request/*" ] }, { "Sid": "TagResources", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "*" } ] }
Ejemplo: denegar el etiquetado durante la creación para solicitudes de instancias de spot
La política siguiente deniega a los usuarios el permiso para etiquetar los recursos que se crean durante el lanzamiento de la instancia.
La primera instrucción permite a RunInstances crear los recursos enumerados. El recurso spot-instances-request
, creado por RunInstances, es el recurso que solicita Instancias de spot. La segunda instrucción proporciona un comodín *
para denegar todos los recursos que se etiquetan cuando se crean durante el lanzamiento de la instancia. Si spot-instances-request
o cualquier otro recurso se etiqueta durante la creación, la llamada RunInstances devolverá un error.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRun", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*", "arn:aws:ec2:us-east-1:*:spot-instances-request/*" ] }, { "Sid": "DenyTagResources", "Effect": "Deny", "Action": "ec2:CreateTags", "Resource": "*" } ] }
aviso
NO ADMITIDO – Ejemplo: permitir la creación de una solicitud de instancia de spot solo si se le asigna una etiqueta específica
No se admite la política siguiente para el recurso spot-instances-request
.
La siguiente política tiene por objeto otorgar a RunInstances el permiso para crear una solicitud de instancia de spot solo si la solicitud se etiqueta con una etiqueta específica.
La primera instrucción permite a RunInstances crear los recursos enumerados.
La segunda instrucción tiene por objeto otorgar a los usuarios el permiso para crear una solicitud de instancia de spot solo si la solicitud tiene la etiqueta environment=production
. Si esta condición se aplica a los demás recursos creados por RunInstances, si no se especifica ninguna etiqueta se producirá un error Unauthenticated
. Sin embargo, si no se especifica ninguna etiqueta para la solicitud de instancia de spot, Amazon EC2 no evalúa el recurso spot-instances-request
en la instrucción RunInstances, lo que da como resultado que RunInstances cree solicitudes de instancias de spot no etiquetadas.
Tenga en cuenta que especificar una etiqueta que no sea environment=production
da como resultado un error Unauthenticated
, ya que si un usuario etiqueta una solicitud de instancia de spot, Amazon EC2 evalúa el recurso spot-instances-request
en la instrucción RunInstances.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowRun",
"Effect": "Allow",
"Action": [
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:security-group/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:instance/*"
]
},
{
"Sid": "RequestSpotInstancesOnlyIfTagIs_environment=production - NOT SUPPORTED - DO NOT USE!",
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/environment": "production"
}
}
},
{
"Sid": "TagResources",
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": "*"
}
]
}
Ejemplo: denegar la creación de una solicitud de instancia de spot si se le asigna una etiqueta específica
La siguiente política deniega a RunInstances el permiso para crear una solicitud de instancia de spot si la solicitud está etiquetada con environment=production
.
La primera instrucción permite a RunInstances crear los recursos enumerados.
La segunda instrucción deniega a los usuarios el permiso para crear una solicitud de instancia de spot si la solicitud tiene la etiqueta environment=production
. Si environment=production
se especifica como etiqueta, se produce un error Unauthenticated
. Especificar otras etiquetas o no especificar ninguna etiqueta dará como resultado la creación de una solicitud de instancia de spot.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRun", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*", "arn:aws:ec2:us-east-1:*:spot-instances-request/*" ] }, { "Sid": "DenySpotInstancesRequests", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" } } }, { "Sid": "TagResources", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "*" } ] }
Ejemplo: Trabajar con Instancias reservadas
La siguiente política da a los usuarios permiso para ver, modificar y adquirir Instancias reservadas en su cuenta.
No se pueden establecer permisos de nivel de recursos para Instancias reservadas individuales. Esta política significa que los usuarios tienen acceso a todas las Instancias reservadas de la cuenta.
El elemento Resource
utiliza un comodín * para indicar que los usuarios pueden especificar todos los recursos con la acción; en dicho caso, pueden generar una lista y modificar todas las Instancias reservadas de la cuenta. También pueden adquirir Instancias reservadas utilizando las credenciales de cuenta. El carácter comodín * también es necesario en los casos en los que la acción de la API no admita permisos de nivel de recursos.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeReservedInstances", "ec2:ModifyReservedInstances", "ec2:PurchaseReservedInstancesOffering", "ec2:DescribeAvailabilityZones", "ec2:DescribeReservedInstancesOfferings" ], "Resource": "*" } ] }
Para permitir a los usuarios ver y modificar las Instancias reservadas de su cuenta, pero no adquirir otras Instancias reservadas nuevas.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeReservedInstances", "ec2:ModifyReservedInstances", "ec2:DescribeAvailabilityZones" ], "Resource": "*" } ] }
Ejemplo: Etiquetar recursos
La siguiente política permite a los usuarios utilizar la acción CreateTags
para aplicar etiquetas a una instancia solo si la etiqueta contiene la clave environment
y el valor production
. No se permite ninguna otra etiqueta y el usuario no puede etiquetar ningún otro tipo de recurso.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:
region
:account-id
:instance/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" } } } ] }
La siguiente política permite a los usuarios etiquetar cualquier recurso etiquetable que ya tenga una etiqueta con una clave de owner
y un valor del nombre de usuario. Asimismo, los usuarios deben especificar una etiqueta con una clave de anycompany:environment-type
y un valor que sea test
o prod
en la solicitud. Los usuarios pueden especificar más etiquetas en la solicitud.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:
region
:account-id
:*/*", "Condition": { "StringEquals": { "aws:RequestTag/anycompany:environment-type": ["test","prod"], "aws:ResourceTag/owner": "${aws:username}" } } } ] }
Puede crear una política de IAM que permita a los usuarios eliminar etiquetas específicas de un recurso. Por ejemplo, la siguiente política permite a los usuarios eliminar etiquetas de un volumen si las claves de etiqueta especificadas en la solicitud son environment
o cost-center
. Se puede especificar cualquier valor para la etiqueta, pero la clave de etiqueta debe coincidir con una de las dos claves indicadas.
nota
Si elimina un recurso, también se eliminarán todas las etiquetas que este tenga asociadas. Los usuarios no necesitan permisos para utilizar la acción ec2:DeleteTags
para eliminar un recurso que tenga etiquetas; solo los necesitan para realizar la acción de eliminación.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DeleteTags", "Resource": "arn:aws:ec2:us-east-1:
account-id
:volume/*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": ["environment","cost-center"] } } } ] }
Esta política permite a los usuarios eliminar únicamente la etiqueta environment=prod
en cualquier recurso solo si el recurso ya está etiquetado con la clave de owner
y un valor del nombre de usuario. Los usuarios no pueden eliminar ninguna etiqueta de recurso más.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DeleteTags" ], "Resource": "arn:aws:ec2:
region
:account-id
:*/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "prod", "aws:ResourceTag/owner": "${aws:username}" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["environment"] } } } ] }
Ejemplo: Trabajar con roles de IAM
La siguiente política permite a los usuarios asociar, sustituir y desasociar un rol de IAM a instancias que tienen la etiqueta department=test
. Para sustituir o desasociar un rol de IAM, se necesita un ID de asociación, por lo que la política también concede a los usuarios permiso para utilizar la acción ec2:DescribeIamInstanceProfileAssociations
.
Los usuarios deben tener permiso para utilizar la acción iam:PassRole
con objeto de poder pasar el rol a la instancia.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation", "ec2:DisassociateIamInstanceProfile" ], "Resource": "arn:aws:ec2:us-east-1:
account-id
:instance/*", "Condition": { "StringEquals": { "aws:ResourceTag/department":"test" } } }, { "Effect": "Allow", "Action": "ec2:DescribeIamInstanceProfileAssociations", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id
:role/DevTeam*" } ] }
La siguiente política permite a los usuarios adjuntar o reemplazar un rol de IAM para cualquier instancia. Los usuarios solo pueden asociar o sustituir roles de IAM con nombres que empiecen por TestRole-
. En el caso de la acción iam:PassRole
, asegúrese de especificar el nombre del rol de IAM y no el perfil de instancia (si los nombres son diferentes). Para obtener más información, consulte Perfiles de instancias.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation" ], "Resource": "*" }, { "Effect": "Allow", "Action": "ec2:DescribeIamInstanceProfileAssociations", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::
account-id
:role/TestRole-*" } ] }
Ejemplo: Trabajar con tablas de ruteo
La siguiente política permite a los usuarios añadir, eliminar y reemplazar rutas únicamente para las tablas de ruteo que están asociadas a la VPC vpc-ec43eb89
. Para especificar una VPC para la clave de condición ec2:Vpc
, debe especificar el ARN completo de la VPC.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DeleteRoute", "ec2:CreateRoute", "ec2:ReplaceRoute" ], "Resource": [ "arn:aws:ec2:
region
:account-id
:route-table/*" ], "Condition": { "StringEquals": { "ec2:Vpc": "arn:aws:ec2:region
:account-id
:vpc/vpc-ec43eb89" } } } ] }
Ejemplo: Permitir que una instancia específica vea los recursos de otros servicios de AWS
El siguiente es un ejemplo de una política que puede asociar a un rol de IAM. La política permite que una instancia vea los recursos de diversos servicios de AWS. Usa la clave de condición ec2:SourceInstanceARN
para especificar que la instancia desde la que se realiza la solicitud debe ser i-093452212644b0dd6
. Si el mismo rol de IAM está asociado a otra instancia, la otra instancia no puede realizar ninguna de estas acciones.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeVolumes", "s3:ListAllMyBuckets", "dynamodb:ListTables", "rds:DescribeDBInstances" ], "Resource": [ "*" ], "Condition": { "ArnEquals": { "ec2:SourceInstanceARN": "arn:aws:ec2:
region
:account-id
:instance/i-093452212644b0dd6" } } } ] }
Ejemplo: Trabajar con plantillas de lanzamiento
La siguiente política permite a los usuarios crear una versión de una plantilla de lanzamiento y modificar una plantilla de lanzamiento, pero solo para la plantilla de lanzamiento lt-
. Los usuarios no pueden trabajar con otras plantillas de lanzamiento.09477bcd97b0d3abc
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:CreateLaunchTemplateVersion", "ec2:ModifyLaunchTemplate" ], "Effect": "Allow", "Resource": "arn:aws:ec2:
region
:account-id
:launch-template/lt-09477bcd97b0d3abc
" } ] }
La siguiente política permite a los usuarios eliminar cualquier plantilla de lanzamiento o versión de la misma, siempre que contenga la etiqueta Purpose
=Testing
.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:DeleteLaunchTemplate", "ec2:DeleteLaunchTemplateVersions" ], "Effect": "Allow", "Resource": "arn:aws:ec2:
region
:account-id
:launch-template/*", "Condition": { "StringEquals": { "aws:ResourceTag/Purpose": "Testing" } } } ] }
Trabajar con metadatos de instancias
Las políticas siguientes garantizan que los usuarios solo puedan recuperar metadatos de instancias mediante Servicio de metadatos de instancia, versión 2 (IMDSv2). Puede combinar las cuatro políticas siguientes en una sola política con cuatro instrucciones. Cuando se combina como una sola política, puede utilizar la política como una política de control de servicios (SCP). Puede funcionar igual de bien que una política de denegación que se aplique a una política de IAM existente (quitando y limitando los permisos existentes) o como una SCP que se aplique globalmente a una cuenta, una unidad organizativa (OU) o una organización completa.
nota
Las siguientes políticas de opciones de metadatos de RunInstances se deben utilizar junto con una política que conceda a la entidad principal permisos para iniciar una instancia con RunInstances. Si la entidad principal no tiene permisos RunInstances, no podrá iniciar una instancia. Para obtener más información, consulte las políticas en Trabajar con instancias y Iniciar instancias (RunInstances).
importante
Si utiliza grupos de Auto Scaling y necesita exigir el uso de IMDSv2 en todas las instancias nuevas, los grupos de Auto Scaling deben usar plantillas de lanzamiento.
Cuando un grupo de Auto Scaling utiliza una plantilla de lanzamiento, los permisos ec2:RunInstances
de la entidad principal de IAM se comprueban cuando se crea un nuevo grupo de Auto Scaling. También se comprueban cuando se actualiza un grupo de Auto Scaling existente para utilizar una nueva plantilla de lanzamiento o una nueva versión de una plantilla de lanzamiento.
Las restricciones sobre el uso de IMDSv1 en entidades principales de IAM para RunInstances
solo se comprueban cuando se crea o actualiza un grupo de Auto Scaling que utiliza una plantilla de lanzamiento. Para un grupo de Auto Scaling configurado para usar la plantilla de lanzamiento Latest
o Default
, los permisos no se comprueban cuando se crea una nueva versión de la plantilla de lanzamiento. Para que se comprueben los permisos, debe configurar el grupo de Auto Scaling para que utilice una versión específica de la plantilla de lanzamiento.
Para forzar el uso de IMDSv2 en instancias lanzadas por grupos de Auto Scaling, se requieren los siguientes pasos adicionales:
-
Deshabilite el uso de configuraciones de lanzamiento para todas las cuentas de la organización mediante políticas de control de servicios (SCP) o límites de permisos de IAM para las nuevas entidades principales que se crean. Para las entidades principales de IAM existentes con permisos de grupos de Auto Scaling, actualice sus políticas asociadas con esta clave de condición. Para deshabilitar el uso de configuraciones de lanzamiento, cree o modifique la SCP, el límite de permisos o la política de IAM correspondientes con la clave de condición
"autoscaling:LaunchConfigurationName"
con el valor especificado comonull
. -
Para las nuevas plantillas de lanzamiento, configure las opciones de metadatos de la instancia en la plantilla de lanzamiento. Para las plantillas de lanzamiento existentes, cree una nueva versión de la plantilla de lanzamiento y configure las opciones de metadatos de la instancia en la nueva versión.
-
En la política que otorga a cualquier entidad principal el permiso para usar una plantilla de lanzamiento, restrinja la asociación de
$latest
y$default
especificando"autoscaling:LaunchTemplateVersionSpecified": "true"
. Al restringir el uso a una versión específica de una plantilla de lanzamiento, puede asegurarse de que las nuevas instancias se iniciarán con la versión en la que están configuradas las opciones de metadatos de la instancia. Para obtener más información, consulte LaunchTemplateSpecification en la Referencia de la API de Amazon EC2 Auto Scaling, en concreto el parámetroVersion
. -
Para un grupo de Auto Scaling que utilice una configuración de lanzamiento, reemplace la configuración de lanzamiento por una plantilla de lanzamiento. Para obtener más información, consulte Reemplazar una configuración de lanzamiento por una plantilla de lanzamiento en la Guía del usuario de Amazon EC2 Auto Scaling.
-
Para un grupo de Auto Scaling que utilice una plantilla de lanzamiento, asegúrese de que utiliza una nueva plantilla de lanzamiento con las opciones de metadatos de la instancia configuradas o una nueva versión de la plantilla de lanzamiento actual con las opciones de metadatos de la instancia configuradas. Para obtener más información, consulte update-auto-scaling-group en la Referencia de comandos de la AWS CLI.
Ejemplos
Requerir el uso de IMDSv2
La siguiente política especifica que no se puede llamar a la API RunInstances a menos que la instancia también requiera el uso de IMDSv2 (indicado por "ec2:MetadataHttpTokens": "required"
). Si no especifica que la instancia requiere IMDSv2, obtendrá un error UnauthorizedOperation
cuando llame a la API RunInstances.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireImdsV2", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringNotEquals": { "ec2:MetadataHttpTokens": "required" } } } ] }
Denegar la exclusión voluntaria de IMDSv2
La siguiente política especifica que no se puede llamar a la API de ModifyInstanceMetadataOptions
y se permite la opción IMDSv1 o IMDSv2. Si llama a la API de ModifyInstanceMetadataOptions
, el atributo HttpTokens
debe estar establecido en required
.
{ "Version": "2012-10-17", "Statement": [{ "Sid": "DenyIMDSv1HttpTokensModification", "Effect": "Deny", "Action": "ec2:ModifyInstanceMetadataOptions", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringNotEquals": { "ec2:Attribute/HttpTokens": "required" }, "Null": { "ec2:Attribute/HttpTokens": false } } }] }
Especificar el límite máximo de saltos
La siguiente política especifica que no se puede llamar a la API RunInstances a menos que también especifique un límite de saltos y que el límite de saltos no sea superior a 3. Si no se cumplen estos requisitos, aparece un error UnauthorizedOperation
al llamar a la API RunInstances.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "MaxImdsHopLimit", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "NumericGreaterThan": { "ec2:MetadataHttpPutResponseHopLimit": "3" } } } ] }
Limitar quién puede modificar las opciones de metadatos de instancia
La siguiente política solo permite que los usuarios con el rol ec2-imds-admins
hagan cambios en las opciones de metadatos de instancia. Si alguna entidad principal que no sea el rol ec2-imds-admins
intenta llamar a la API ModifyInstanceMetadataOptions, aparecerá un error UnauthorizedOperation
. Esta instrucción podría utilizarse para controlar el uso de la API ModifyInstanceMetadataOptions; actualmente no hay controles de acceso detallados (condiciones) para la API ModifyInstanceMetadataOptions.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOnlyImdsAdminsToModifySettings", "Effect": "Deny", "Action": "ec2:ModifyInstanceMetadataOptions", "Resource": "*", "Condition": { "StringNotLike": { "aws:PrincipalARN": "arn:aws:iam::*:role/ec2-imds-admins" } } } ] }
Exigir que las credenciales de rol se recuperen de IMDSv2
La siguiente política especifica que si esta política se aplica a un rol y el servicio EC2 asume el rol y las credenciales resultantes se utilizan para firmar una solicitud, la solicitud debe estar firmada por las credenciales de rol EC2 recuperadas de IMDSv2. De lo contrario, todas sus llamadas a la API obtendrán un error UnauthorizedOperation
. Esta instrucción/política se puede aplicar de manera general porque, si la solicitud no está firmada por las credenciales del rol de EC2, no tiene ningún efecto.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireAllEc2RolesToUseV2", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NumericLessThan": { "ec2:RoleDelivery": "2.0" } } } ] }
Uso de volúmenes e instantáneas de Amazon EBS
Para obtener ejemplos de políticas para trabajar con volúmenes e instantáneas de Amazon EBS, consulte Ejemplos de políticas basadas en identidad para Amazon EBS.