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

Los siguientes ejemplos muestran instrucciones de política que puede utilizar para controlar los permisos que los usuarios de IAM tienen en Amazon EC2. Estas políticas están diseñadas para solicitudes que se realizan con la AWS CLI o un AWS SDK. 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.

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 utilizar con qué acciones de la API de Amazon EC2, consulte Acciones, recursos y claves de condición para Amazon EC2 en la Guía del usuario de IAM.

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: Limitar 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, lanzar, 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 utilizar con qué acciones de la API de Amazon EC2, consulte Acciones, recursos y claves de condición para Amazon EC2 en la Guía del usuario de IAM.

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 utilizar con qué acciones de la API de Amazon EC2, consulte Acciones, recursos y claves de condición para Amazon EC2 en la Guía del usuario de IAM.

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 EE.UU. Este (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:123456789012:instance/i-1234567890abcdef0", "arn:aws:ec2:us-east-1:123456789012:instance/i-0598c7d356eba48d7" ] }, { "Effect": "Allow", "Action": "ec2:TerminateInstances", "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/purpose": "test" } } } ] }

Uso de volúmenes

Ejemplo: Asociar y separar volúmenes

Cuando para una acción de una API el intermediario tiene que especificar varios recursos, usted debe crear una instrucción de política que permita a los usuarios obtener acceso a todos los recursos necesarios. Si necesita utilizar un elemento Condition con uno o varios de estos recursos, debe crear varias instrucciones, tal y como se muestra en este ejemplo.

La siguiente política permite a los usuarios adjuntar volúmenes con la etiqueta "volume_user=iam-user-name" a instancias con la etiqueta "department=dev" y separar dichos volúmenes de dichas instancias. Si asocia esta política a un grupo de IAM, la variable de política aws:username da a cada usuario de IAM del grupo permiso para adjuntar o separar volúmenes de las instancias con una etiqueta llamada volume_user que tiene su nombre de usuario de IAM como valor.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/department": "dev" } } }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition": { "StringEquals": { "ec2:ResourceTag/volume_user": "${aws:username}" } } } ] }

Ejemplo: Crear un volumen

La siguiente política permite a los usuarios utilizar la acción CreateVolume de la API. Se permite al usuario crear un volumen únicamente si este está cifrado y si el tamaño del volumen es inferior a 20 GiB.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateVolume" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition":{ "NumericLessThan": { "ec2:VolumeSize" : "20" }, "Bool":{ "ec2:Encrypted" : "true" } } } ] }

Ejemplo: Crear un volumen con etiquetas

La siguiente política contiene la clave de condición aws:RequestTag que exige a los usuarios que etiqueten todos los volúmenes que creen con las etiquetas costcenter=115 y stack=prod. La clave de condición aws:TagKeys utiliza el modificador ForAllValues para indicar que solo las claves costcenter y stack están permitidas en la solicitud (no se puede especificar ninguna otra etiqueta). Si los usuarios no transmiten estas etiquetas en concreto o si no especifican ninguna etiqueta, la solicitud dará un error.

En las acciones de creación de recursos que aplican etiquetas, los usuarios también 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 CreateVolume. Los usuarios no pueden etiquetar volúmenes que ya existen ni otros recursos. Para obtener más información, consulte Concesión de permisos para etiquetar recursos durante la creación.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCreateTaggedVolumes", "Effect": "Allow", "Action": "ec2:CreateVolume", "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition": { "StringEquals": { "aws:RequestTag/costcenter": "115", "aws:RequestTag/stack": "prod" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["costcenter","stack"] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "CreateVolume" } } } ] }

La siguiente política permite a los usuarios crear un volumen sin tener que especificar etiquetas. La acción CreateTags solo se evalúa si se especifican etiquetas en la solicitud CreateVolume. Si los usuarios especifican etiquetas, la etiqueta tiene que ser purpose=test. No se permite ninguna otra etiqueta en la solicitud.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CreateVolume", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:1234567890:volume/*", "Condition": { "StringEquals": { "aws:RequestTag/purpose": "test", "ec2:CreateAction" : "CreateVolume" }, "ForAllValues:StringEquals": { "aws:TagKeys": "purpose" } } } ] }

Uso de instantáneas

A continuación se incluyen políticas de ejemplo para CreateSnapshot (instantánea de un punto en el tiempo de un volumen de EBS) y CreateSnapshots (instantáneas de varios volúmenes).

Ejemplo: Crear una instantánea

La siguiente política permite a los clientes utilizar la acción CreateSnapshot de la API. El cliente puede crear instantáneas únicamente si este está cifrado y si el tamaño del volumen es inferior a 20 GiB.

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*" }, { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition":{ "NumericLessThan":{ "ec2:VolumeSize":"20" }, "Bool":{ "ec2:Encrypted":"true" } } } ] }

Ejemplo: Crear instantáneas

La siguiente política permite a los clientes utilizar la acción CreateSnapshots de la API. El cliente puede crear instantáneas solo si todos los volúmenes de la instancia son de tipo GP2.

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":[ "arn:aws:ec2:us-east-1::snapshot/*", "arn:aws:ec2:*:*:instance/*" ] }, { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1:*:volume/*", "Condition":{ "StringLikeIfExists":{ "ec2:VolumeType":"gp2" } } } ] }

Ejemplo: Crear una instantánea con etiquetas

La siguiente política incluye la clave de condición aws:RequestTag que exige al cliente aplicar las etiquetas costcenter=115 y stack=prod a cualquier instantánea nueva. La clave de condición aws:TagKeys utiliza el modificador ForAllValues para indicar que solo las claves costcenter y stack se pueden especificar en la solicitud. La solicitud falla si no se cumple alguna de estas condiciones.

En las acciones de creación de recursos que aplican etiquetas, los clientes también deben tener permisos para utilizar la acción CreateTags. La tercera instrucción utiliza la clave de condición ec2:CreateAction para permitir a los clientes crear etiquetas únicamente en el contexto de CreateSnapshot. Los clientes no pueden etiquetar volúmenes que ya existen ni otros recursos. Para obtener más información, consulte Concesión de permisos para etiquetar recursos durante la creación.

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1:123456789012:volume/*" }, { "Sid":"AllowCreateTaggedSnapshots", "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/costcenter":"115", "aws:RequestTag/stack":"prod" }, "ForAllValues:StringEquals":{ "aws:TagKeys":[ "costcenter", "stack" ] } } }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "ec2:CreateAction":"CreateSnapshot" } } } ] }

Ejemplo: Crear instantáneas con etiquetas

La siguiente política incluye la clave de condición aws:RequestTag que exige al cliente aplicar las etiquetas costcenter=115 y stack=prod a cualquier instantánea nueva. La clave de condición aws:TagKeys utiliza el modificador ForAllValues para indicar que solo las claves costcenter y stack se pueden especificar en la solicitud. La solicitud falla si no se cumple alguna de estas condiciones.

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":[ "arn:aws:ec2:us-east-1::snapshot/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:volume/*" ] }, { "Sid":"AllowCreateTaggedSnapshots", "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/costcenter":"115", "aws:RequestTag/stack":"prod" }, "ForAllValues:StringEquals":{ "aws:TagKeys":[ "costcenter", "stack" ] } } }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "ec2:CreateAction":"CreateSnapshots" } } } ] }

La siguiente política permite a los clientes crear una instantánea sin tener que especificar etiquetas. La acción CreateTags se evalúa solo si se especifican etiquetas en la solicitud CreateSnapshot o CreateSnapshots. Si se especifica una etiqueta, la etiqueta debe ser purpose=test. No se permite ninguna otra etiqueta en la solicitud.

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"*" }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/purpose":"test", "ec2:CreateAction":"CreateSnapshot" }, "ForAllValues:StringEquals":{ "aws:TagKeys":"purpose" } } } ] }
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"*" }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/purpose":"test", "ec2:CreateAction":"CreateSnapshots" }, "ForAllValues:StringEquals":{ "aws:TagKeys":"purpose" } } } ] }

La siguiente política permite crear instantáneas solo si el volumen de origen se etiqueta con User:username para el cliente y la propia instantánea se etiqueta con Environment:Dev y User:username. El cliente puede añadir etiquetas adicionales a la instantánea.

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition":{ "StringEquals":{ "ec2:ResourceTag/User":"${aws:username}" } } }, { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/Environment":"Dev", "aws:RequestTag/User":"${aws:username}" } } }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*" } ] }

La siguiente política de CreateSnapshots permite crear instantáneas solo si el volumen de origen se etiqueta con User:username para el cliente y la propia instantánea se etiqueta con Environment:Dev y User:username.

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1:*:instance/*", }, { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition":{ "StringEquals":{ "ec2:ResourceTag/User":"${aws:username}" } } }, { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/Environment":"Dev", "aws:RequestTag/User":"${aws:username}" } } }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*" } ] }

La siguiente política permite la eliminación de una instantánea solo si la instantánea está etiquetada con User:nombre de usuario para el cliente.

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:DeleteSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "ec2:ResourceTag/User":"${aws:username}" } } } ] }

La siguiente política permite a un cliente crear una instantánea, pero deniega la acción si la instantánea que se está creando tiene una clave de etiqueta value=stack.

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":[ "ec2:CreateSnapshot", "ec2:CreateTags" ], "Resource":"*" }, { "Effect":"Deny", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "ForAnyValue:StringEquals":{ "aws:TagKeys":"stack" } } } ] }

La siguiente política permite a un cliente crear instantáneas, pero deniega la acción si las instantáneas que se están creando tienen una clave de etiqueta value=stack.

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":[ "ec2:CreateSnapshots", "ec2:CreateTags" ], "Resource":"*" }, { "Effect":"Deny", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "ForAnyValue:StringEquals":{ "aws:TagKeys":"stack" } } } ] }

La siguiente política le permite combinar varias acciones en una sola política. Solo puede crear una instantánea (en el contexto de CreateSnapshots) cuando la instantánea se crea en la región us-east-1. Solo puede crear instantáneas (en el contexto de CreateSnapshots) cuando las instantáneas se crean en la región us-east-1 y cuando el tipo de instancia es t2*.

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":[ "ec2:CreateSnapshots", "ec2:CreateSnapshot", "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:snapshot/*", "arn:aws:ec2:*:*:volume/*" ], "Condition":{ "StringEqualsIgnoreCase": { "ec2:Region": "us-east-1" }, "StringLikeIfExists": { "ec2:InstanceType": ["t2.*"] } } } ] }

Ejemplo: Modificar la configuración de permisos de las instantáneas

La siguiente política permite la modificación de una instantánea solo si la instantánea está etiquetada con User:username, donde username es el nombre de usuario de la cuenta de AWS del cliente. La solicitud falla si no se cumple esta condición.

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2: ModifySnapshotAttribute", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "ec2:ResourceTag/user-name":"${aws:username}" } } } ] }

Lanzar 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 lanzar una instancia, consulte Claves de condición, acciones y recursos de Amazon EC2 en la Guía del usuario de IAM.

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 lanzar 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:instance/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*", "arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:network-interface/*" ] } ] }

Como alternativa, la siguiente política permite a los usuarios lanzar instancias desde todas las AMI propiedad de Amazon. 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:instance/*", "arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

Tipos de instancias

La siguiente política permite a los usuarios lanzar instancias utilizando únicamente el tipo de instancia t2.micro o t2.small, que usted podría utilizar para controlar costos. Los usuarios no pueden lanzar 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: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:subnet/*", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

Como alternativa, puede crear una política que deniegue a los usuarios permisos para lanzar 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: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:network-interface/*", "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

Subredes

La siguiente política permite a los usuarios lanzar instancias utilizando únicamente la subred especificada, subnet-12345678. El grupo no puede lanzar 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:subnet/subnet-12345678", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region::image/ami-*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

Como alternativa, puede crear una política que deniegue a los usuarios permisos para lanzar 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:network-interface/*" ], "Condition": { "ArnNotEquals": { "ec2:Subnet": "arn:aws:ec2:region:account:subnet/subnet-12345678" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

Volúmenes de EBS

La siguiente política permite a los usuarios lanzar instancias únicamente si los volúmenes EBS de la instancia están cifrados. El usuario debe lanzar 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 lanzar 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 Concesión de 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:123456789012: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. La clave de condición aws:TagKeys utiliza el modificador ForAllValues para indicar que solo las claves environment y purpose están permitidas en la solicitud (no se puede especificar ninguna otra etiqueta). Si no se especifica ninguna etiqueta en la solicitud, esta dará un error.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region::image/*", "arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:security-group/*", "arn:aws:ec2:region:account:key-pair/*" ] }, { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:instance/*" ], "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" , "aws:RequestTag/purpose": "webserver" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["environment","purpose"] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "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:subnet/*", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:security-group/*", "arn:aws:ec2:region:account:key-pair/*" ] }, { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:instance/*" ], "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": ["environment","webserver"] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "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:*/*", "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 sólo 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:launch-template/lt-09477bcd97b0d310e" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:instance/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }

GPU elásticas

En la siguiente política, los usuarios pueden lanzar una instancia y especificar la GPU elástica que se va a asociar a la instancia. Los usuarios pueden lanzar 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 utiliza el modificador ForAnyValue para indicar que solo los tipos de GPU elástica eg1.medium y eg1.large están permitidos en la solicitud.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:account:elastic-gpu/*" ], "Condition": { "StringEquals": { "ec2:Region": "us-east-2" }, "ForAnyValue:StringLike": { "ec2:ElasticGpuType": [ "eg1.medium", "eg1.large" ] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/ami-*", "arn:aws:ec2:*:account:network-interface/*", "arn:aws:ec2:*:account:instance/*", "arn:aws:ec2:*:account:subnet/*", "arn:aws:ec2:*:account:volume/*", "arn:aws:ec2:*:account:key-pair/*", "arn:aws:ec2:*:account: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:launch-template/lt-09477bcd97b0d310e" } } } ] }

En este ejemplo, los usuarios pueden lanzar 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:launch-template/*" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } } ] }

En el siguiente ejemplo, la política permite a los usuarios lanzar 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:subnet/*", "arn:aws:ec2:region:account:network-interface/*" ], "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account:launch-template/*" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": ["arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:network-interface/*" ], "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account:launch-template/*" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } } ] }

En el siguiente ejemplo, se le permite a los usuarios lanzar 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:launch-template/*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account:launch-template/*" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:region:account:launch-template/*", "Condition": { "StringEquals": { "ec2:ResourceTag/Purpose": "Webservers" } } } ] }

Uso de Instancias de spot

Puede utilizar la acción RunInstances para crear solicitudes de instancia de spot y etiquetar las solicitudes instancia de spot 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 una 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 una 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 instancia de spot y no tiene la intención de etiquetar la solicitud instancia de spot al crearla, no tiene que permitir explícitamente el recurso spot-instances-request; la llamada se realizará correctamente.

  • Si utiliza RunInstances para crear una solicitud instancia de spot y tiene la intención de etiquetar la solicitud instancia de spot al crearla, debe incluir el recurso spot-instances-request en la instrucción Allow 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 la solicitud de instancia de spot durante la creación, debe especificar el recurso spot-instances-request o el comodín * en la instrucción CreateTags allow; 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

Para utilizar RunInstances para crear solicitudes de instancia de spot, puede omitir spot-instances-request de la lista Resource si no desea etiquetar las solicitudes instancia 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 instancia de spot no está etiquetada 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, esta condición no se admite porque Amazon EC2 no evalúa el recurso spot-instances-request en la instrucción RunInstances si la solicitud 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: etiquetas solicitudes de instancia 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 una 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 etiqueta durante la creación para solicitudes de instancia 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 conceder 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 conceder 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 especifican etiquetas 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 instancia de spot no etiquetadas.

Tenga en cuenta que especificar otra 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: Usar 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. El modificador ForAllValues se usa con la clave de condición aws:TagKeys para indicar que solo se permite la clave environment en la solicitud (no se permite ninguna otra etiqueta). 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:instance/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "environment" ] } } } ] }

La siguiente política permite a los usuarios etiquetar cualquier recurso etiquetable que ya tenga una etiqueta con una clave owner y un valor de nombre de usuario de IAM. 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:*/*", "Condition": { "StringEquals": { "aws:RequestTag/anycompany:environment-type": ["test","prod"], "ec2: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:123456789012: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 owner y un valor de nombre de usuario de IAM. 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:*/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "prod", "ec2:ResourceTag/owner": "${aws:username}" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["environment"] } } } ] }

Ejemplo: Usar 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 de IAM 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:region:account:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/department":"test" } } }, { "Effect": "Allow", "Action": "ec2:DescribeIamInstanceProfileAssociations", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*" } ] }

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:role/TestRole-*" } ] }

Ejemplo: Usar tablas de enrutamiento

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:route-table/*" ], "Condition": { "StringEquals": { "ec2:Vpc": "arn:aws:ec2:region:account: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 para todo AWS y, por tanto, se puede usar para otras acciones de servicio, 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:instance/i-093452212644b0dd6" } } } ] }

Ejemplo: Usar 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: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:launch-template/*", "Condition": { "StringEquals": { "ec2: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 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 lanzar una instancia con RunInstances. Si la entidad principal no tiene permisos RunInstances, no podrá lanzar una instancia. Para obtener más información, consulte las políticas en Trabajar con instancias y Lanzar 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 lanzará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 AWS CLI Command Reference.

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" } } } ] }

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.

nota

Cuando la siguiente política y la anterior se aplican a una cuenta a través de un SCP, no puede utilizar la consola de EC2 para lanzar instancias porque la consola aún no admite los parámetros MetadataHttpPutResponseHopLimit y MetadataHttpTokens.

{ "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 elimina la capacidad del grupo general de administradores de modificar las opciones de metadatos de instancias y permite que solo los usuarios con el rol ec2-imds-admins realicen cambios. 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" } } } ] }