Como posso usar as tags de política do IAM para restringir a forma como uma instância do EC2 ou um volume do EBS podem ser criados e acessados?
Quero permitir que identidades do AWS Identity and Access Management (AWS IAM) tenham acesso para iniciar novas instâncias do Amazon Elastic Compute Cloud (Amazon EC2). Também quero permitir que identidades do IAM tenham acesso para criar novos volumes do Amazon Elastic Block Store (Amazon EBS), mas somente quando aplicarem tags específicas.
Breve descrição
Especifique tags para instâncias do EC2 e volumes do Amazon EBS como parte da chamada de API que cria os recursos. Aplique condições à política do IAM para exigir que os usuários do IAM marquem recursos específicos.
Os exemplos de políticas a seguir não permitem que os usuários criem grupos de segurança ou pares de chaves, portanto, os usuários devem selecionar grupos de segurança e pares de chaves existentes.
Os exemplos de políticas do IAM a seguir permitem que os usuários iniciem instâncias com as seguintes configurações:
- Valores e chaves de tags correspondentes
- Pelo menos uma tag e um valor correspondentes
- Pelo menos uma chave de tag correspondente
- Somente a lista especificada de tags
Os exemplos de políticas do IAM também permitem que os usuários gerenciem instâncias e volumes com valores e chaves de tags correspondentes.
Observação: para usar as políticas de exemplo, substitua os valores do exemplo pelos seus valores.
Resolução
Restrinja a criação de instâncias do EC2 e de volumes do EBS com base em tags
Os exemplos de políticas a seguir permitem que um usuário inicie uma instância e crie um volume com base em tags.
Iniciar instâncias do EC2 que tenham valores e chaves de tag correspondentes
No exemplo de política a seguir, a condição requestTag controla a aplicação de tags. Se o usuário aplicar uma tag que não esteja incluída na política, a ação será negada. Para reforçar a diferenciação entre maiúsculas e minúsculas, use a condição aws:TagKeys:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowToDescribeAll", "Effect": "Allow", "Action": [ "ec2:Describe*" ], "Resource": "*" }, { "Sid": "AllowRunInstances", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/*", "arn:aws:ec2:*::snapshot/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:key-pair/*" ] }, { "Sid": "AllowRunInstancesWithRestrictions", "Effect": "Allow", "Action": [ "ec2:CreateVolume", "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:network-interface/*" ], "Condition": { "StringEquals": { "aws:RequestTag/key1": "value1", "aws:RequestTag/key2": "value2" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "key1", "key2" ] } } }, { "Sid": "AllowCreateTagsOnlyLaunching", "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:network-interface/*" ], "Condition": { "StringEquals": { "ec2:CreateAction": [ "RunInstances", "CreateVolume" ] } } } ] }
Importante: para iniciar instâncias do EC2 com sucesso, a política anterior deve incluir valores e chaves de tags correspondentes. Se os pares de chave e valor não corresponderem, você receberá o erro Falha na inicialização ou uma mensagem de falha de API semelhante.
Exemplos de resultados
Chave/valor | Resultado |
key1/value1 e key2/value2 | allow |
key1/value1 | deny |
key1/value2 | deny |
no keys and values | deny |
Iniciar instâncias do EC2 que tenham pelo menos uma chave de tag correspondente
No exemplo de política a seguir, substitua o bloco de condição allowRunInstancesWithRestrictions quando pelo menos uma chave de tag tiver o nome key1. Nenhum valor específico é necessário para a tag key1 e você pode adicionar tags na solicitação RunInstances:
"Condition": { "StringEquals": { "aws:RequestTag/key1": "value1" }, "ForAnyValue:StringEquals": { "aws:TagKeys": [ "key1" ] } }
Exemplos de resultados
Chave/valor | Resultado |
key1/value1 e key2/value2 | allow |
key1/value1 | allow |
key1/value2 | allow |
no keys and values | deny |
Executar instâncias do EC2 que tenham somente a lista especificada de tags
No exemplo de política a seguir, substitua o bloco de condição allowRunInstancesWithRestrictions quando as chaves de tag key1 e key2 forem fornecidas na solicitação. Nenhum valor específico é necessário para nenhuma das chaves de tag e você não pode adicionar tags na solicitação RunInstances:
"Condition": { "StringLike": { "aws:RequestTag/key1": "*", "aws:RequestTag/key2": "*" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "key1", "key2" ] } }
Observação: na política anterior, a condição StringLike é necessária para que os valores possam incluir curingas de correspondência de vários caracteres (*).
Exemplos de resultados
Chave/valor | Resultado |
key1/AnyValue e key2/AnyValue | Allow |
key1/AnyValue | Deny |
key2/AnyValue | Deny |
No keys or values | Deny |
key1/AnyValue, key2/AnyValue, key3/AnyValue | Deny |
Restringir o gerenciamento de instâncias do EC2 e de volumes do EBS com base em valores e chaves de tags
As políticas de exemplo a seguir restringem o gerenciamento de instâncias e volumes de usuários com base em valores e chaves de tags.
Gerenciar instâncias do EC2 que tenham valores e chaves de tag correspondentes
O exemplo de política a seguir restringe o acesso de uma identidade do IAM apenas para iniciar, interromper ou reinicializar instâncias do EC2. A instância deve ter uma tag de chave Owner com um valor de tag de Bob:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances", "ec2:RebootInstances" ], "Resource": [ "arn:aws:ec2:*:111122223333:instance/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/Owner": "Bob" } } } ] }
Observação: substitua Owner pela sua chave de tag, Bob pelo nome do seu usuário do IAM e o ARN do recurso pelo ARN do seu recurso.
Para obter mais informações, consulte Posso restringir o acesso da Identidade do IAM a recursos específicos do Amazon EC2?
Gerenciar volumes do EBS que tenham valores e chaves de tags correspondentes
O exemplo de política a seguir permite que a identidade do IAM separe ou exclua um volume do EBS. Para a ação da API DeleteVolume, o volume deve ter uma chave de tag Owner com um valor de tag de Mary. Para a ação da API DetachVolume, tanto a instância quanto o volume devem ter a mesma chave de tag Owner com o valor da tag Mary:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": [ "ec2:DetachVolume", "ec2:DeleteVolume" ], "Resource": [ "arn:aws:ec2:*:111122223333:volume/*", "arn:aws:ec2:*:111122223333:instance/*" ], "Condition": { "StringEquals": { "aws:ResourceTag/Owner": "Mary" } } } ] }
Observação: substitua Owner pela sua chave de tag, Mary pelo nome do seu usuário do IAM e o ARN do recurso pelo ARN do seu recurso.
Informações relacionadas
Como crio uma política do IAM para controlar o acesso aos recursos do Amazon EC2 usando tags?
Exemplo de políticas baseadas em identidade do IAM
Conteúdo relevante
- AWS OFICIALAtualizada há um ano