Amazon Elastic Compute Cloud
Guía del usuario de instancias de Linux

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 ver ejemplos de políticas de IAM específicas de Amazon VPC, consulte Control del acceso a los recursos de 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 sobre qué ARN puede usar con las acciones de la API de Amazon EC2, consulte Permisos de nivel de recursos admitidos para las acciones de la API de 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: 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 UE (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 sobre qué ARN puede usar con las acciones de la API de Amazon EC2, consulte Permisos de nivel de recursos admitidos para las acciones de la API de 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 sobre qué ARN puede usar con las acciones de la API de Amazon EC2, consulte Permisos de nivel de recursos admitidos para las acciones de la API de 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 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 Permisos de nivel de recursos para etiquetar.

{ "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: creación de 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 Permisos de nivel de recursos para etiquetar.

{ "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: creación de 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 RunInstances de la API lanza una o varias instancias. RunInstances necesita 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

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 Permisos de nivel de recursos para etiquetar.

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

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

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

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

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 recursos de la plantilla de lanzamiento en la solicitud RunInstances.

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

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: Etiquetado de 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 environment 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/environment": ["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 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: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" } } } ] }