Políticas de ejemplo para trabajar con la AWS CLI o un SDK de AWS - Amazon Elastic Compute Cloud

Políticas de ejemplo para trabajar con la AWS CLI o un SDK de AWS

Tiene que conceder a los usuarios los permisos que necesitan para Amazon EC2 mediante políticas de IAM. Los siguientes ejemplos muestran instrucciones de política que puede utilizar para controlar los permisos que los usuarios tienen en Amazon EC2. Estas políticas están diseñadas para solicitudes que se realizan con la AWS CLI o un SDK de AWS. Para obtener más información, consulte Creación de políticas de IAM en la Guía del usuario de IAM. Para ver políticas de ejemplo para trabajar en la consola de Amazon EC2, consulte Políticas de ejemplo para trabajar en la consola de Amazon EC2. Para obtener ejemplos de políticas de IAM específicas de Amazon VPC, consulte Identity and Access Management para Amazon VPC.

En los ejemplos siguientes, reemplace cada marcador de posición del usuario con su propia información.

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

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.

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-12345678. El grupo no puede iniciar instancias en cualquier otra subred (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: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-12345678 está especificada. Esta denegación anula cualquier otra política creada para permitir el lanzamiento de instancias en otras subredes.

{ "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 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.

La clave ec2:SourceInstanceARN es una clave de condición global de AWS y, por lo tanto, se puede usar para otras acciones de servicios, no solo para Amazon EC2.

{ "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-09477bcd97b0d3abc. Los usuarios no pueden trabajar con otras plantillas de lanzamiento.

{ "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:
  1. 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 como null.

  2. 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.

  3. 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ámetro Version.

  4. 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.

  5. 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.

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.