Exemplo de políticas para controlar o acesso à API do Amazon EC2
Você pode usar as políticas do IAM para conceder aos usuários as permissões necessárias para que eles trabalhem com o Amazon EC2. Para obter instruções detalhadas, consulte Criação de políticas do IAM no Guia do usuário do IAM.
Os exemplos a seguir mostram declarações de políticas que você pode usar para conceder aos usuários as permissões para o uso do Amazon EC2. Essas políticas são criadas para solicitações feitas com a AWS CLI ou com o AWS SDK. Nos exemplos a seguir, substitua cada espaço reservado
por suas próprias informações.
Exemplos
- Acesso somente leitura
- Restringir acesso a uma região específica
- Trabalhar com instâncias
- Executar instâncias (RunInstances)
- Trabalhar com Instâncias spot
- Trabalhar com Instâncias reservadas
- Marcar recursos
- Trabalhar com funções do IAM
- Trabalhar com tabelas de rotas
- Permitir que uma instância específica visualize recursos em outros serviços da AWS
- Trabalhar com modelos de execução
- Trabalhar com metadados de instância
- Trabalhar com volumes e snapshots do Amazon EBS
Para obter exemplos de políticas para trabalhar no console do Amazon EC2, consulte Exemplo de políticas para controlar o acesso ao console do Amazon EC2.
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 é possível 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, é possível 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
Exemplos
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 é possível 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 na região Leste dos EUA (Norte da Virgínia) (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 é possível 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 instrução permite que os usuários encerrem todas as instâncias na região Leste dos EUA (Norte da Virgínia) (us-east-1
) que pertencem à conta da AWS especificada, mas somente quando a instância tiver a etiqueta "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:
account-id
:instance/i-1234567890abcdef0", "arn:aws:ec2:us-east-1:account-id
:instance/i-0598c7d356eba48d7" ] }, { "Effect": "Allow", "Action": "ec2:TerminateInstances", "Resource": "arn:aws:ec2:us-east-1:account-id
:instance/*", "Condition": { "StringEquals": { "aws:ResourceTag/purpose": "test" } } } ] }
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 baseada no Amazon EBS cria um volume. Portanto, o usuário deve ter permissões para usar esses recursos do Amazon EC2. É possível 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.
Recursos
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-id
:instance/*", "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
:account-id
:key-pair/*", "arn:aws:ec2:region
:account-id
:security-group/*", "arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:network-interface/*" ] } ] }
Como alternativa, a política a seguir permite que os usuários executem instâncias em todas as AMIs pertencentes à Amazon ou a determinados parceiros confiáveis e verificados. 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-id
:instance/*", "arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
:account-id
:network-interface/*", "arn:aws:ec2:region
:account-id
:key-pair/*", "arn:aws:ec2:region
:account-id
:security-group/*" ] } ] }
Tipos de 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 é possível 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-id
:instance/*" ], "Condition": { "StringEquals": { "ec2:InstanceType": ["t2.micro", "t2.small"] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region
::image/ami-*", "arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:network-interface/*", "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
:account-id
:key-pair/*", "arn:aws:ec2:region
:account-id
:security-group/*" ] } ] }
Se desejar, é possível 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-id
:instance/*" ], "Condition": { "StringNotEquals": { "ec2:InstanceType": ["t2.micro", "t2.small"] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region
::image/ami-*", "arn:aws:ec2:region
:account-id
:network-interface/*", "arn:aws:ec2:region
:account-id
:instance/*", "arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
:account-id
:key-pair/*", "arn:aws:ec2:region
:account-id
:security-group/*" ] } ] }
Sub-redes
A política a seguir permite que os usuários executem instâncias usando apenas a sub-rede especificada, subnet-
. 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).12345678
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:
region
:account-id
:subnet/subnet-12345678
", "arn:aws:ec2:region
:account-id
:network-interface/*", "arn:aws:ec2:region
:account-id
:instance/*", "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
::image/ami-*", "arn:aws:ec2:region
:account-id
:key-pair/*", "arn:aws:ec2:region
:account-id
:security-group/*" ] } ] }
Se desejar, é possível 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-
for especificada. Essa negação substitui qualquer outra política criada para permitir a execução de instâncias em outras sub-redes.12345678
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:
region
:account-id
:network-interface/*" ], "Condition": { "ArnNotEquals": { "ec2:Subnet": "arn:aws:ec2:region
:account-id
:subnet/subnet-12345678
" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region
::image/ami-*", "arn:aws:ec2:region
:account-id
:network-interface/*", "arn:aws:ec2:region
:account-id
:instance/*", "arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
:account-id
:key-pair/*", "arn:aws:ec2:region
:account-id
:security-group/*" ] } ] }
Volumes do EBS
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 do Amazon EC2 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:
account-id
: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
. Se os usuários não passarem essas tags específicas ou não especificarem nenhuma tag, haverá talha na solicitação.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:
region
::image/*", "arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:network-interface/*", "arn:aws:ec2:region
:account-id
:security-group/*", "arn:aws:ec2:region
:account-id
:key-pair/*" ] }, { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
:account-id
:instance/*" ], "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" , "aws:RequestTag/purpose": "webserver" } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region
:account-id
:*/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }
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-id
:subnet/*", "arn:aws:ec2:region
:account-id
:network-interface/*", "arn:aws:ec2:region
:account-id
:security-group/*", "arn:aws:ec2:region
:account-id
:key-pair/*" ] }, { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region
:account-id
:volume/*", "arn:aws:ec2:region
:account-id
:instance/*" ], "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": ["environment","webserver"] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region
:account-id
:*/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }
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-id
:*/*", "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-id
:launch-template/lt-09477bcd97b0d310e" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region
:account-id
:instance/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }
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
garante que as instâncias usem o tipo de GPU elástico eg1.medium
ou eg1.large
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:
account-id
:elastic-gpu/*" ], "Condition": { "StringEquals": { "ec2:Region": "us-east-2", "ec2:ElasticGpuType": [ "eg1.medium", "eg1.large" ] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/ami-*", "arn:aws:ec2:*:account-id
:network-interface/*", "arn:aws:ec2:*:account-id
:instance/*", "arn:aws:ec2:*:account-id
:subnet/*", "arn:aws:ec2:*:account-id
:volume/*", "arn:aws:ec2:*:account-id
:key-pair/*", "arn:aws:ec2:*:account-id
:security-group/*" ] } ] }
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-id
: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-id
: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-id
:subnet/*", "arn:aws:ec2:region
:account-id
:network-interface/*" ], "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region
:account-id
:launch-template/*" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": ["arn:aws:ec2:region
:account-id
:subnet/*", "arn:aws:ec2:region
:account-id
:network-interface/*" ], "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region
:account-id
:launch-template/*" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } } ] }
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-id
:launch-template/*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region
:account-id
:launch-template/*" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:region
:account-id
:launch-template/*", "Condition": { "StringEquals": { "aws:ResourceTag/Purpose": "Webservers" } } } ] }
Trabalhar com Instâncias spot
É possível usar a ação RunInstances para criar solicitações de instância spot e marcar solicitações de 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 terá êxito. -
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, será necessário 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 um curinga*
na instrução de permissão CreateTags, caso contrário, a chamada falhará.
É possível 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, é possível 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, permita 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 etiqueta 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 etiqueta 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 etiqueta 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 etiqueta, 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 etiqueta 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 etiqueta 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 visualizar, modificar e comprar Instâncias reservadas na sua conta.
Não é possível definir permissões em nível de recurso para 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
. Nenhuma outra etiqueta é permitida, e o usuário não pode marcar outros tipos de recurso.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:
region
:account-id
:instance/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" } } } ] }
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. 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-id
:*/*", "Condition": { "StringEquals": { "aws:RequestTag/anycompany:environment-type": ["test","prod"], "aws:ResourceTag/owner": "${aws:username}" } } } ] }
É possível 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:
account-id
: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 do owner
e com um valor do nome de usuário. 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-id
:*/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "prod", "aws: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 devem ter permissão para usar a ação iam:PassRole
para passar o perfil para a instância.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation", "ec2:DisassociateIamInstanceProfile" ], "Resource": "arn:aws:ec2:us-east-1:
account-id
:instance/*", "Condition": { "StringEquals": { "aws:ResourceTag/department":"test" } } }, { "Effect": "Allow", "Action": "ec2:DescribeIamInstanceProfileAssociations", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id
:role/DevTeam*" } ] }
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-id
: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-id
:route-table/*" ], "Condition": { "StringEquals": { "ec2:Vpc": "arn:aws:ec2:region
:account-id
: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 é possível anexar a uma função do IAM. A política permite que uma instância exiba recursos em vários serviços da AWS. Ela usa a chave de condição global 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.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeVolumes", "s3:ListAllMyBuckets", "dynamodb:ListTables", "rds:DescribeDBInstances" ], "Resource": [ "*" ], "Condition": { "ArnEquals": { "ec2:SourceInstanceARN": "arn:aws:ec2:
region
:account-id
:instance/i-093452212644b0dd6" } } } ] }
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-
). Os usuários não podem trabalhar com outros modelos de execução.09477bcd97b0d3abc
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:CreateLaunchTemplateVersion", "ec2:ModifyLaunchTemplate" ], "Effect": "Allow", "Resource": "arn:aws:ec2:
region
:account-id
: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-id
:launch-template/*", "Condition": { "StringEquals": { "aws: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, é possível 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 do Auto Scaling que está usando um modelo de inicializaçã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, configure 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:
-
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 comonull
. -
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.
-
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, é possível 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âmetroVersion
. -
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.
-
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 na Referência de comandos da AWS CLI.
Exemplos
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" } } } ] }
Negar a rejeição do IMDSv2
A política a seguir especifica que não é possível chamar a API ModifyInstanceMetadataOptions
e permitir a opção de IMDSv1 ou IMDSv2. Se você chamar a API ModifyInstanceMetadataOptions
, o atributo HttpTokens
deverá ser definido como required
.
{ "Version": "2012-10-17", "Statement": [{ "Sid": "DenyIMDSv1HttpTokensModification", "Effect": "Deny", "Action": "ec2:ModifyInstanceMetadataOptions", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringNotEquals": { "ec2:Attribute/HttpTokens": "required" }, "Null": { "ec2:Attribute/HttpTokens": false } } }] }
Especificar 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 permite que apenas usuários com o perfil ec2-imds-admins
façam alterações. nas opções de metadados da instância. 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" } } } ] }
Trabalhar com volumes e snapshots do Amazon EBS
Para obter exemplos de políticas para trabalhar com volumes e snapshots do Amazon EBS, consulte Exemplos de políticas baseadas em identidade para o Amazon EBS.