Políticas de exemplo para trabalhar com a AWS CLI ou um AWS SDK - Amazon Elastic Compute Cloud

Políticas de exemplo para trabalhar com a AWS CLI ou um AWS SDK

Os exemplos a seguir mostram declarações de políticas que você pode usar para controlar as permissões que os usuários do IAM têm para o Amazon EC2. Essas políticas são projetadas para solicitações feitas com a AWS CLI ou com o AWS SDK. Para obter exemplos de políticas para trabalhar no console do Amazon EC2, consulte Políticas de exemplo para trabalhar no console do Amazon EC2. Para obter exemplos de políticas do IAM específicas da Amazon VPC, consulte Identity and Access Management para a Amazon VPC.

Exemplo: acesso somente leitura

A política a seguir concede aos usuários permissões para utilizar todas as ações da API do Amazon EC2 cujos nomes começam com Describe. O elemento Resource usa um caractere curinga para indicar que os usuários podem especificar todos os recursos com essas ações da API. O caractere curinga * também é necessário em casos onde a ação da API não é compatível com as permissões em nível de recurso. Para obter mais informações sobre quais ARNs você pode usar com quais ações de API do Amazon EC2, consulte Ações, recursos e chaves de condição do Amazon EC2 no .

Os usuários não têm permissão para executar nenhuma ação nos recursos (a menos que outra declaração conceda a eles permissão para fazer isso) porque, por padrão, a permissão para usar ações da API é negada para os usuários.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" } ] }

Exemplo: restringir acesso a uma região específica

A política a seguir nega permissão aos usuários para uso de todas as ações da API do Amazon EC2 a menos que a região seja a Europa (Frankfurt). Ela usa a chave de condição global aws:RequestedRegion, que é compatível com todas as ações da API do Amazon EC2.

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:RequestedRegion": "eu-central-1" } } } ] }

Como alternativa, você pode usar a chave de condição ec2:Region, que é específica ao Amazon EC2 e é compatível com todas as ações da API do Amazon EC2.

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:*", "Resource": "*", "Condition": { "StringNotEquals": { "ec2:Region": "eu-central-1" } } } ] }

Trabalhar com instâncias

Exemplo: descrever, executar, interromper, iniciar e encerrar todas as instâncias

A política a seguir concede aos usuários permissões para utilizar as ações da API especificadas no elemento Action. O elemento Resource usa um caractere curinga * para indicar que os usuários podem especificar todos os recursos com essas ações da API. O caractere curinga * também é necessário em casos onde a ação da API não é compatível com as permissões em nível de recurso. Para obter mais informações sobre quais ARNs você pode usar com quais ações de API do Amazon EC2, consulte Ações, recursos e chaves de condição do Amazon EC2 no .

Os usuários não têm permissão para usar qualquer outra ação da API (a menos que outra declaração conceda a eles permissão para fazer isso) porque, por padrão, a permissão para usar ações da API são negadas para os usuários.

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

Exemplo: descrever todas as instâncias e interromper, iniciar e encerrar somente instâncias específicas

A política a seguir permite que os usuários descrevam todas as instâncias, iniciem e parem somente as instâncias i-1234567890abcdef0 e i-0598c7d356eba48d7 e encerrem somente instâncias em Leste dos EUA (Norte da Virgínia) Região (us-east-1) com a tag de recurso "purpose=test".

A primeira declaração usa um caractere curinga * para o elemento Resource para indicar que os usuários podem especificar todos os recursos com a ação. Nesse caso, os usuários podem listar todas as instâncias. O caractere curinga * também é necessário em casos onde a ação da API não é compatível com permissões em nível de recurso (nesse caso, ec2:DescribeInstances). Para obter mais informações sobre quais ARNs você pode usar com quais ações de API do Amazon EC2, consulte Ações, recursos e chaves de condição do Amazon EC2 no .

A segunda declaração usa permissões em nível de recurso para as ações StopInstances e StartInstances. As instâncias específicas são indicadas por seus ARNs no elemento Resource.

A terceira declaração permite que os usuários encerrem todas as instâncias em Leste dos EUA (Norte da Virgínia) Região (us-east-1) que pertencem à conta da AWS especificada, mas somente quando a instância tiver a tag "purpose=test". O elemento Condition qualifica quando a declaração de política está em 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" } } } ] }

Trabalhar com volumes

Exemplo: anexar e desanexar volumes

Quando uma ação da API exige que um chamador especifique vários recursos, você deve criar uma declaração de política que permita que os usuários acessem todos os recursos necessários. Se você precisar usar um elemento Condition com um ou mais desses recursos, deverá criar várias declarações conforme mostrado neste exemplo.

As políticas a seguir permitem que os usuários anexem volumes com a tag "volume_user=iam-user-name” a instâncias com a tag "department=dev" e desanexem esses volumes dessas instâncias. Se você anexar essa política a um grupo do IAM, a variável da política aws:username fornecerá a cada usuário do IAM no grupo permissão para anexar e desanexar volumes das instâncias com uma tag chamada volume_user que tem o nome do usuário do IAM como um 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}" } } } ] }

Exemplo: criar um volume

A política a seguir permite que os usuários usem a ação da API CreateVolume. O usuário terá permissão para criar um volume somente se o volume for criptografado e se seu tamanho for menor que 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" } } } ] }

Exemplo: criar um volume com tags

As política a seguir inclui a chave de condição aws:RequestTag que requer que os usuários marquem todos os volumes que criarem com as tags costcenter=115 e stack=prod. A chave de condição aws:TagKeys usa o modificador ForAllValues para indicar que somente as chaves costcenter e stack são permitidas na solicitação (nenhuma outra tag pode ser especificada). Se os usuários não passarem essas tags específicas ou não especificarem nenhuma tag, haverá talha na solicitação.

Para ações de criação de recursos que aplicam tags, os usuários também devem ter permissões para usar a ação CreateTags. A segunda declaração usa a chave de condição ec2:CreateAction para permitir que os usuários criem tags somente no contexto de CreateVolume. Os usuários não podem marcar volumes existentes ou quaisquer outros recursos. Para obter mais informações, consulte Conceder permissão para marcar recursos durante a criação.

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

A política a seguir permite que os usuários criem um volume sem precisar especificar tags. A ação CreateTags só será avaliada se as tags forem especificadas na solicitação CreateVolume. Se os usuários especificam tags, a tag deverá ser purpose=test. Nenhuma outra tag é permitida na solicitação.

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

Trabalhar com snapshots

Veja a seguir exemplos de políticas para CreateSnapshot (snapshot point-in-time de um volume do EBS) e CreateSnapshots (snapshots de vários volumes).

Exemplo: criar um snapshot

A política a seguir permite que os clientes usem a ação da API CreateSnapshot. O cliente poderá criar snapshots somente se o volume for criptografado e se seu tamanho for menor que 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" } } } ] }

Exemplo: criar snapshots

A política a seguir permite que os clientes usem a ação da API CreateSnapshots. O cliente só poderá criar snapshots se todos os volumes da instância forem do 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" } } } ] }

Exemplo: criar um snapshot com tags

A política a seguir inclui a chave de condição aws:RequestTag que requer que o cliente aplique as tags costcenter=115 e stack=prod a todos os novos snapshots. A chave de condição aws:TagKeys usa o modificador ForAllValues para indicar que somente as chaves costcenter e stack podem ser especificadas na solicitação. A solicitação falhará se qualquer uma destas condições não for atendida.

Para ações de criação de recursos que aplicam tags, os clientes também devem ter permissões para usar a ação CreateTags. A terceira declaração usa a chave de condição ec2:CreateAction para permitir que os clientes criem tags somente no contexto de CreateSnapshot. Os clientes não podem marcar volumes existentes nem quaisquer outros recursos. Para obter mais informações, consulte Conceder permissão para marcar recursos durante a criação.

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

Exemplo: criar snapshots com tags

A política a seguir inclui a chave de condição aws:RequestTag que requer que o cliente aplique as tags costcenter=115 e stack=prod a todos os novos snapshots. A chave de condição aws:TagKeys usa o modificador ForAllValues para indicar que somente as chaves costcenter e stack podem ser especificadas na solicitação. A solicitação falhará se qualquer uma destas condições não for atendida.

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

A política a seguir permite que os clientes criem um snapshot sem precisar especificar tags. A ação CreateTags só será avaliada se as tags forem especificadas na solicitação CreateSnapshot ou CreateSnapshots. Se uma tag for especificada, ela deverá ser purpose=test. Nenhuma outra tag é permitida na solicitação.

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

As seguintes políticas só permitirão que snapshots sejam criados se o volume de origem for marcado com User:username para o cliente, e o snapshot em si for marcado com Environment:Dev e User:username. O cliente pode adicionar outras tags ao snapshot.

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

A seguinte política de CreateSnapshots só permitirá que snapshots sejam criados se o volume de origem for marcado com User:username para o cliente e o snapshot em si for marcado com Environment:Dev e 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/*" } ] }

A seguinte política só permitirá a exclusão de um snapshot se ele for marcado com o Usuário:usuário para o 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}" } } } ] }

A seguinte política permite que um cliente crie um snapshot mas negará a ação se o snapshot que está sendo criado tiver uma chave de tag 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" } } } ] }

A seguinte política permite que um cliente crie snapshots, mas negará a ação se o snapshot que está sendo criado tiver uma chave de tag 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" } } } ] }

A política a seguir permite combinar várias ações em uma única política. Você só pode criar um snapshot (no contexto de CreateSnapshots) quando o snapshot é criado na região us-east-1. Você só pode criar snapshots (no contexto de CreateSnapshots) quando os snapshots são criados na região us-east-1 e quando o tipo de instância é 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.*"] } } } ] }

Exemplo: Copiar snapshots

As permissões no nível do recurso especificadas para a ação CopySnapshot (Copiar snapshot) se aplicam somente ao novo snapshot. Elas não podem ser especificadas para o snapshot de origem.

A política de exemplo a seguir permite que as entidades copiem snapshots somente se o novo snapshot for criado com a chave de tag de purpose e um valor de tag de production (purpose=production).

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCopySnapshotWithTags", "Effect": "Allow", "Action": "ec2:CopySnapshot", "Resource": "arn:aws:ec2:*:123456789012:snapshot/*", "Condition": { "StringEquals": { "aws:RequestTag/purpose": "production" } } } ] }

Exemplo: modificar configurações de permissão para snapshots

A política a seguir só permite a modificação de um snapshot se ele for marcado com User:username, em que username (nome de usuário) é o nome de usuário da conta da AWS do cliente. A solicitação falhará se essa condição não for atendida.

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

Executar instâncias (RunInstances)

A ação da API RunInstances inicia uma ou mais Instâncias on-demand ou uma ou mais Instâncias spot. RunInstances requer uma AMI e cria uma instância. Os usuários podem especificar um par de chaves e um grupo de segurança na solicitação. A inicialização em uma VPC requer uma sub-rede, e cria uma interface de rede. A inicialização de uma AMI com suporte do Amazon EBS cria um volume. Portanto, o usuário deve ter permissões para usar esses recursos do Amazon EC2. Você pode criar um declaração de política que exija que os usuários especifiquem um parâmetro opcional em RunInstances ou restringir os usuários a valores específicos para um parâmetro.

Para obter mais informações sobre as permissões em nível de recurso que são necessárias para executar uma instância, consulte Ações, recursos e chaves de condição do Amazon EC2 no .

Observe que, por padrão, os usuários não têm permissões para descrever, iniciar, interromper ou encerrar as instâncias resultantes. Uma maneira de conceder aos usuários permissão para gerenciar as instâncias resultantes é criar uma tag específica para cada instância e criar uma declaração que permita que eles gerenciem instâncias com aquela tag. Para obter mais informações, consulte Trabalhar com instâncias.

AMIs

A política a seguir permite que os usuários iniciem instâncias usando apenas as AMIs especificadas, ami-9e1670f7 e ami-45cf5c3c. Os usuários não podem executar uma instância usando outras AMIs (a menos que outra declaração conceda permissão para os usuários fazerem isso).

{ "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, a política a seguir permite que os usuários executem instâncias em todas as AMIs de propriedade da Amazon. O elemento Condition da primeira declaração testa se ec2:Owner é amazon. Os usuários não podem executar uma instância usando outras AMIs (a menos que outra declaração conceda permissão para os usuários fazerem isso).

{ "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 instância

A política a seguir permite que os usuários executem instâncias usando somente o tipo de instância t2.micro ou t2.small, o que você pode fazer para controlar os custos. Os usuários não podem executar instâncias maiores porque o elemento Condition da primeira declaração testa se ec2:InstanceType é t2.micro ou 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/*" ] } ] }

Se desejar, você pode criar uma política que negue aos usuários permissões para executar qualquer instância, com exceção dos tipos de instância t2.micro e 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/*" ] } ] }

Sub-redes

A política a seguir permite que os usuários executem instâncias usando apenas a sub-rede especificada, subnet-12345678. O grupo não pode executar instâncias em outra sub-rede (a menos que outra declaração conceda permissão para os usuários fazerem isso).

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

Se desejar, você pode criar uma política que negue aos usuários permissões para executar uma instância em qualquer outra sub-rede. A declaração faz isso negando permissão para criar uma interface de rede, exceto quando a sub-rede subnet-12345678 for especificada. Essa negação substitui qualquer outra política criada para permitir a execução de instâncias em outras sub-redes.

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

Volumes do EC2

A política a seguir permite que os usuários executem instâncias somente se os volumes do EBS para a instância estiverem criptografados. O usuário deve executar uma instância em uma AMI criada com snapshots criptografados, para garantir que o volume raiz esteja criptografado. Qualquer volume adicional que o usuário anexe à instância durante a execução também deve estar criptografado.

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

Tags

Marque instâncias na criação

A política a seguir permite que os usuários executem instâncias e as marquem durante a criação. Para ações de criação de recursos que aplicam tags, os usuários devem ter permissões para usar a ação CreateTags. A segunda declaração usa a chave de condição ec2:CreateAction para permitir que os usuários criem tags somente no contexto de RunInstances e somente para instâncias. Os usuários não podem marcar recursos existentes e não podem marcar volumes usando a solicitação RunInstances.

Para obter mais informações, consulte Conceder permissão para marcar recursos durante a criação.

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

Marque instâncias e volumes na criação com tags específicas

As política a seguir inclui a chave de condição aws:RequestTag que requer que os usuários marquem todas as instâncias e os volumes criados por RunInstances com as tags environment=production e purpose=webserver. A chave de condição aws:TagKeys usa o modificador ForAllValues para indicar que somente as chaves environment e purpose são permitidas na solicitação (nenhuma outra tag pode ser especificada). Se nenhuma tag for especificada na solicitação, haverá falha na solicitação.

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

Marque instâncias e volumes na criação com pelo menos uma tag específica

A política a seguir usa o modificador ForAnyValue na condição aws:TagKeys para indicar que pelo menos uma tag deve ser especificada na solicitação e deve conter a chave environment ou webserver. A tag deve ser aplicada a instâncias e a volumes. Qualquer valor de tag pode ser especificado na solicitação.

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

Se forem marcadas na criação, as instâncias deverão ser marcadas com uma tag específica

Na política a seguir, os usuários não precisam especificar tags na solicitação, mas se o fizerem, a tag deverá ser purpose=test. Nenhuma outra tag é permitida. Os usuários podem aplicar as tags a qualquer recurso marcável na solicitação RunInstances.

{ "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 não permitir que ninguém adicione tags na criação 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 apenas tags específicas para spot-instances-request. A inconsistência surpresa número 2 entra em jogo aqui. Em circunstâncias normais, não especificar tag alguma resultará em Não autenticado. No caso de spot-instances-request, esta política não será avaliada se não houver tags spot-instances-request, portanto, uma solicitação Spot on Run sem tag será bem-sucedida.

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

Tags em um modelo de execução

No exemplo a seguir, os usuários poderão executar instâncias, mas apenas se usarem um modelo de execução específico (lt-09477bcd97b0d310e). A chave de condição ec2:IsLaunchTemplateResource impede que os usuários substituam alguns recursos especificados no modelo de execução. A segunda parte da instrução permite que os usuários marquem instâncias durante a criação; essa parte da instrução será necessária se as tags forem especificadas para a instância no modelo de execução.

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

GPUs elásticas

Na política a seguir, os usuários podem executar uma instância e especificar uma GPU elástica para anexar à instância. Os usuários podem executar instâncias em qualquer região, mas só podem anexar uma GPU elástica durante uma execução na região us-east-2.

A chave de condição ec2:ElasticGpuType usa o modificador ForAnyValue para indicar que somente os tipos de GPU elásticas eg1.medium e eg1.large são permitidos na solicitação.

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

Modelos de execução

No exemplo a seguir, os usuários poderão executar instâncias, mas apenas se usarem um modelo de execução específico (lt-09477bcd97b0d310e). Os usuários podem substituir quaisquer parâmetros no modelo de execução especificando os parâmetros na ação 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" } } } ] }

Neste exemplo, os usuários poderão executar instâncias apenas se usarem um modelo de execução. A política usa a chave de condição ec2:IsLaunchTemplateResource para impedir que os usuários substituam os ARNs pré-existentes no modelo de execução.

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

No exemplo a seguir, a política permitirá que o usuário execute instâncias, mas apenas se usarem um modelo de execução. Os usuários não podem substituir os parâmetros de interface de rede e sub-rede na solicitação; esses parâmetros só podem ser especificados no modelo de execução. A primeira parte da instrução usa o elemento NotResource para permitir todos os outros recursos, exceto interfaces de rede e sub-redes. A segunda parte da instrução permite recursos de interface de rede e sub-rede, mas somente se eles forem originários do modelo de execução.

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

O exemplo a seguir permitirá que os usuários executem instâncias somente se usarem um modelo de execução, e somente se o modelo de execução tiver a tag Purpose=Webservers. Os usuários não podem substituir nenhum dos parâmetros do modelo de execução na ação 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" } } } ] }

Trabalhar com Instâncias spot

Você pode usar a ação RunInstances para criar solicitações Instância spot e marcar solicitações Instância spot na criação. O recurso a ser especificado para RunInstances é spot-instances-request.

O recurso spot-instances-request é avaliado na política do IAM da seguinte forma:

  • Se você não marcar uma solicitação de Instância spot na criação, o Amazon EC2 não avaliará o recurso spot-instances-request na instrução RunInstances.

  • Se você marcar uma solicitação de Instância spot na criação, o Amazon EC2 avaliará o recurso spot-instances-request na instrução RunInstances.

Portanto, para o recurso spot-instances-request, as seguintes regras se aplicam à diretiva do IAM:

  • Caso você use RunInstances para criar uma solicitação de Instância spot e não pretenda marcar a solicitação de Instância spot na criação, não será necessário permitir explicitamente o recurso spot-instances-request; a chamada será bem-sucedida.

  • Caso use RunInstances para criar uma solicitação de Instância spot e pretenda marcar a solicitação de Instância spot na criação, você deverá incluir o recurso spot-instances-request na instrução de permissão RunInstances, caso contrário, a chamada falhará.

  • Caso você use RunInstances para criar uma solicitação de Instância spot e pretenda marcar a solicitação de Instância spot na criação, especifique o recurso spot-instances-request ou curinga * na instrução de permissão CreateTags, caso contrário, a chamada falhará.

Você pode solicitar Instâncias spot usando RunInstances ou RequestSpotInstances. Os exemplos de políticas do IAM a seguir se aplicam somente ao solicitar Instâncias spot usando RunInstances.

Exemplo: solicitar Instâncias spot usando RunInstances

A política a seguir permite que os usuários solicitem Instâncias spot usando a ação RunInstances. O recurso spot-instances-request, que é criado por RunInstances, solicita Instâncias spot.

nota

Para usar RunInstances a fim de criar solicitações de Instância spot, você pode omitir spot-instances-request da lista Resource caso pretenda marcar as solicitações de Instância spot na criação. Isso ocorre porque o Amazon EC2 não avalia o recurso spot-instances-request na instrução RunInstances se a solicitação de Instância spot não estiver marcada na criação.

{ "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/*" ] } ] }
Atenção

NÃO COMPATÍVEL – Exemplo: negar permissão aos usuários para solicitar Instâncias spot usando RunInstances

A política a seguir não é compatível com o recurso spot-instances-request.

A política a seguir destina-se a conceder permissão aos usuários para iniciar Instâncias on-demand, mas negar a permissão de solicitação Instâncias spot. O recurso spot-instances-request, criado por RunInstances, é o recurso que solicita Instâncias spot. A segunda instrução destina-se a negar a ação RunInstances para o recurso spot-instances-request. No entanto, esta condição não é compatível porque o Amazon EC2 não avalia o recurso spot-instances-request na instrução RunInstances se a solicitação de Instância spot não estiver marcada na criação.

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

Exemplo: marcar solicitações de Instância spot na criação

A política a seguir permite que os usuários marquem todos os recursos criados durante o lançamento da instância. A primeira instrução permite que RunInstances crie os recursos listados. O recurso spot-instances-request, criado por RunInstances, é o recurso que solicita Instâncias spot. A segunda instrução fornece um curinga * para permitir que todos os recursos sejam marcados quando criados no momento da execução da instância.

nota

Se você marcar uma solicitação de Instância spot na criação, o Amazon EC2 avaliará o recurso spot-instances-request na instrução RunInstances. Portanto, você deve permitir explicitamente o recurso spot-instances-request para a ação RunInstances, caso contrário, a chamada falhará.

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

Exemplo: negar marcações na criação para solicitações de Instância spot

A política a seguir nega aos usuários a permissão para marcar os recursos criados durante a execução da instância.

A primeira instrução permite que RunInstances crie os recursos listados. O recurso spot-instances-request, criado por RunInstances, é o recurso que solicita Instâncias spot. A segunda instrução fornece um curinga * para evitar que todos os recursos sejam marcados, quando criados, no momento da execução da instância. Se spot-instances-request ou qualquer outro recurso estiver marcado na criação, a chamada RunInstances falhará.

{ "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": "*" } ] }
Atenção

NÃO COMPATÍVEL – Exemplo: permitir a criação de uma solicitação de Instância spot apenas se lhe for atribuída uma tag específica

A política a seguir não é compatível com o recurso spot-instances-request.

A política a seguir destina-se a conceder permissão à RunInstances para criar uma solicitação de Instância spot somente se a solicitação for marcada com uma tag específica.

A primeira instrução permite que RunInstances crie os recursos listados.

A segunda instrução destina-se a conceder permissão aos usuários para criar uma solicitação de Instância spot somente se a solicitação tiver a tag environment=production. Se essa condição for aplicada a outros recursos criados por RunInstances, não especificar nenhuma tag gerará um erro Unauthenticated. No entanto, se nenhuma tag for especificada para a solicitação de Instância spot, o Amazon EC2 não avaliará o recurso spot-instances-request na instrução RunInstances, o que resultará em solicitações de Instância spot não marcadas sendo criadas pela RunInstances.

Observe que especificar outra tag, além de environment=production, gera um erro Unauthenticated, pois se um usuário marca uma solicitação de Instância spot, o Amazon EC2 avalia o recurso spot-instances-request na instrução 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": "*" } ] }

Exemplo: negar a criação de uma solicitação de Instância spot se lhe for atribuída uma tag específica

A política a seguir nega à RunInstances a permissão para criar uma solicitação de Instância spot se a solicitação estiver marcada com environment=production.

A primeira instrução permite que RunInstances crie os recursos listados.

A segunda instrução nega permissão aos usuários para criar uma solicitação de Instância spot se a solicitação tiver a tag environment=production. Especificar environment=production como tag gerará um erro Unauthenticated. Especificar outras tags ou não especificar tags resultará na criação de uma solicitação de Instância 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": "*" } ] }

Exemplo: trabalhar com Instâncias reservadas

A política a seguir concede aos usuários permissão para exibir, modificar e comprar Instâncias reservadas na sua conta.

Não é possível definir permissões em nível de recurso para instâncias Instâncias reservadas. Essa política significa que os usuários têm acesso a todas as Instâncias reservadas na conta.

O elemento Resource usa um caractere curinga * para indicar que os usuários podem especificar todos os recursos com a ação. Nesse caso, os usuários podem listar e modificar todas as Instâncias reservadas na conta. Eles também podem comprar Instâncias reservadas usando as credenciais da conta. O caractere curinga * também é necessário em casos onde a ação da API não é compatível com as permissões em nível de recurso.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeReservedInstances", "ec2:ModifyReservedInstances", "ec2:PurchaseReservedInstancesOffering", "ec2:DescribeAvailabilityZones", "ec2:DescribeReservedInstancesOfferings" ], "Resource": "*" } ] }

Para permitir que os usuários exibam e modifiquem as Instâncias reservadas na conta, mas não comprem novas Instâncias reservadas.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeReservedInstances", "ec2:ModifyReservedInstances", "ec2:DescribeAvailabilityZones" ], "Resource": "*" } ] }

Exemplo: marcar recursos

A política a seguir permite que os usuários usem a ação CreateTags para aplicar tags a uma instância somente se a tag contiver a chave environment e o valor production. O modificador ForAllValues é usado com a chave de condição aws:TagKeys para indicar que somente a chave environment é permitida na solicitação (nenhuma outra tag é permitida). O usuário não pode marcar nenhum outro 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" ] } } } ] }

A política a seguir permite que os usuários marquem qualquer recurso marcável que já tenha uma tag com a chave owner e um valor do nome de usuário do IAM. Além disso, os usuários devem especificar uma tag com uma chave de anycompany:environment-type e um valor de test ou de prod na solicitação. Os usuários podem especificar tags adicionais na solicitação.

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

Você pode criar uma política do IAM que permite que os usuários excluam tags específicas de um recurso. Por exemplo, a política a seguir permite que os usuários excluam tags de um volume se as chaves das tags especificadas na solicitação forem environment ou cost-center. Qualquer valor pode ser especificado para a tag, mas a chave da tag deve corresponder a uma das chaves especificadas.

nota

Se você excluir um recurso, todas as tags associadas ao recurso também serão excluídas. Os usuários não precisam de permissões para utilizar a ação ec2:DeleteTags para excluir um recurso que tenha tags. Eles precisam apenas das permissões para executar a ação de exclusão.

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

Essa política permite que os usuários excluam somente a tag environment=prod em qualquer recurso e apenas se o recurso já estiver marcado com a chave owner e com um valor do nome de usuário do IAM. Os usuários não podem excluir nenhuma outra tag de um recurso.

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

Exemplo: trabalhar com funções do IAM

A política a seguir permite que os usuários anexem, substituam e desanexem uma função do IAM para instâncias que tenham a tag department=test. As substituição ou a desanexação de uma função do IAM requer um ID de associação, portanto, a política também concede aos usuários permissão para usar a ação ec2:DescribeIamInstanceProfileAssociations.

Os usuários do IAM devem ter permissão para usar a ação iam:PassRole para passar a função para a instância.

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

A política a seguir permite que os usuários anexem ou substituam uma função do IAM para qualquer instância. Os usuários podem anexar ou substituir apenas funções do IAM com nomes que começam com TestRole-. Para a ação iam:PassRole, especifique o nome da função do IAM e não o perfil da instância (se os nomes forem diferentes). Para obter mais informações, consulte Perfis de instância.

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

Exemplo: trabalhar com tabelas de rotas

A política a seguir permite aos usuários adicionar, remover e substituir rotas em tabelas de rotas associadas à VPC vpc-ec43eb89 somente. Para especificar uma VPC para a chave de condição ec2:Vpc, especifique o ARN total da 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" } } } ] }

Exemplo: permitir que uma instância específica visualize recursos em outros serviços da AWS

O exemplo a seguir é de uma política que você pode anexar a uma função do IAM. As políticas permitem que uma instância exiba recursos em vários serviços da AWS. Ele usa a chave de condição ec2:SourceInstanceARN para especificar que a instância na qual a solicitação é feita deve ser a instância i-093452212644b0dd6. Se a mesma função do IAM estiver associada a outra instância, a outra instância não poderá executar nenhuma dessas ações.

A chave ec2:SourceInstanceARN é uma chave de condição em toda a AWS, portanto, ela pode ser usada para outras ações de serviço, não apenas para o 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" } } } ] }

Exemplo: trabalhar com modelos de execução

A política a seguir permite que os usuários criem uma versão de modelo de execução e alterem um modelo de execução, mas somente um modelo de execução específico (lt-09477bcd97b0d3abc). Os usuários não podem trabalhar com outros modelos de execução.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:CreateLaunchTemplateVersion", "ec2:ModifyLaunchTemplate" ], "Effect": "Allow", "Resource": "arn:aws:ec2:region:account:launch-template/lt-09477bcd97b0d3abc" } ] }

A política a seguir permite que os usuários excluam qualquer modelo de execução e versão de modelo de execução, desde que o modelo tenha a tag 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" } } } ] }

Trabalhar com metadados de instância

As políticas a seguir garantem que os usuários possam recuperar somente metadados de instância usando o Serviço de metadados da instância versão 2 (IMDSv2). É possível combinar as quatro políticas a seguir em uma única política com quatro instruções. Quando combinadas como uma única política, você pode usar a política como uma política de controle de serviço (SCP). Ela pode funcionar tão bem como uma política de negação aplicada a uma política existente do IAM (retirando e limitando a permissão existente) ou como uma SCP aplicada globalmente em uma conta, uma unidade organizacional (UO) ou uma organização inteira.

nota

As seguintes políticas de opções de metadados de RunInstances devem ser usadas em conjunto com uma política que concede ao principal permissões para executar uma instância com RunInstances. Se o principal também não tiver permissões para RunInstances, não poderá executar uma instância. Para obter mais informações, consulte as políticas em Trabalhar com instâncias e Executar instâncias (RunInstances).

Importante

Se você usar grupos do Auto Scaling e precisar exigir o uso do IMDSv2 em todas as novas instâncias, seus grupos do Auto Scaling deverão usar modelos de execução.

Quando um grupo do Auto Scaling usa um modelo de execução, as permissões de ec2:RunInstances do principal do IAM são verificadas quando um novo grupo do Auto Scaling é criado. Elas também são verificadas quando um grupo existente do Auto Scaling é atualizado para usar um novo modelo de execução ou uma nova versão de um modelo de execução.

As restrições sobre o uso do IMDSv1 em principais do IAM para RunInstances são verificadas somente quando um grupo de Auto Scaling que está usando um modelo de execução é criado ou atualizado. Para um grupo do Auto Scaling configurado para usar o modelo de execução Latest ou Default, as permissões não são verificadas quando uma nova versão do modelo de execução é criada. Para que as permissões sejam verificadas, você deve configurar o grupo do Auto Scaling para usar uma versão específica do modelo de execução.

Para impor o uso do IMDSv2 em instâncias executadas por grupos do Auto Scaling, as seguintes etapas adicionais são necessárias:

  1. Desabilite o uso de configurações de execução para todas as contas em sua organização usando SCPs (service control policies - políticas de controle de serviço) ou limites de permissões do IAM para novos principais criados. Para principais existentes do IAM com permissões de grupo do Auto Scaling, atualize suas políticas associadas com essa chave de condição. Para desabilitar o uso de configurações de execução, crie ou modifique a SCP relevante, o limite de permissões ou a política do IAM com a "autoscaling:LaunchConfigurationName" chave de condição com o valor especificado como null.

  2. Para novos modelos de execução, configure as opções de metadados da instância no modelo de execução. Para modelos de execução existentes, crie uma versão do modelo de execução e configure as opções de metadados da instância na nova versão.

  3. Na política que concede a qualquer principal permissão para usar um modelo de execução, restrinja a associação de $latest e $default especificando "autoscaling:LaunchTemplateVersionSpecified": "true". Ao restringir o uso a uma versão específica de um modelo de execução, você pode garantir que novas instâncias serão executadas usando a versão na qual as opções de metadados da instância estão configuradas. Para obter mais informações, consulte LaunchTemplateSpecification no Referência da API do Amazon EC2 Auto Scaling, especificamente o parâmetro Version.

  4. Para um grupo do Auto Scaling que usa uma configuração de execução, substitua a configuração de execução por um modelo de execução. Para obter mais informações, consulte Substituir uma configuração de execução por um modelo de execução no Guia do usuário do Amazon EC2 Auto Scaling.

  5. Para um grupo do Auto Scaling que usa um modelo de execução, certifique-se de que ele usa um novo modelo de execução com as opções de metadados da instância configuradas ou usa uma nova versão do modelo de execução atual com as opções de metadados da instância configuradas. Para obter mais informações, consulte update-auto-scaling-group no AWS CLI Command Reference.

Exigir o uso de IMDSv2

A política a seguir especifica que não é possível chamar a API RunInstances a menos que a instância também esteja optada para exigir o uso de IMDSv2 (indicado por "ec2:MetadataHttpTokens": "required"). Se você não especificar que a instância requer IMDSv2, receberá um erro UnauthorizedOperation ao chamar a 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 o limite máximo de saltos

A política a seguir especifica que não é possível chamar a API RunInstances a menos que também especifique um limite de saltos, que não pode ser superior a 3. Se isso não for feito, você receberá um erro UnauthorizedOperation ao chamar a API RunInstances.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "MaxImdsHopLimit", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "NumericGreaterThan": { "ec2:MetadataHttpPutResponseHopLimit": "3" } } } ] }

Limitar quem pode modificar as opções de metadados da instância

A política a seguir remove a capacidade da população geral de administradores de modificar opções de metadados de instância e permite que somente usuários com a função ec2-imds-admins façam alterações. Se qualquer principal diferente da função ec2-imds-admins tentar chamar a API ModifyInstanceMetadataOptions, receberá um erro UnauthorizedOperation. Essa instrução pode ser usada para controlar o uso da API ModifyInstanceMetadataOptions. No momento, não há controles de acesso refinados (condições) para a 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 as credenciais de função sejam recuperadas de IMDSv2

A política a seguir especifica que, se essa política for aplicada a uma função e a função for assumida pelo serviço do EC2 e as credenciais resultantes forem usadas para assinar uma solicitação, a solicitação deverá ser assinada pelas credenciais de função do EC2 recuperadas do IMDSv2. Caso contrário, todas as suas chamadas de API receberão um erro UnauthorizedOperation. Essa instrução/política pode ser aplicada de modo geral porque, se a solicitação não for assinada por credenciais de função do EC2, ela não terá efeito.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireAllEc2RolesToUseV2", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NumericLessThan": { "ec2:RoleDelivery": "2.0" } } } ] }