Políticas baseadas em identidade do Amazon EC2 - Amazon Elastic Compute Cloud

Políticas baseadas em identidade do Amazon EC2

Por padrão, os usuários não têm permissão para criar ou modificar recursos do Amazon EC2 ou para executar tarefas usando a API do Amazon EC2, o colsole do Amazon EC2 ou a CLI. Para permitir que os usuários criem ou modifiquem recursos e realizem tarefas, você precisa criar políticas do IAM que concedam aos usuários do permissão para usar os recursos específicos e as ações de API de que precisam e, então, anexar essas políticas aos usuários ou grupos, ou perfis do IAM que exijam essas permissões.

Quando você anexa uma política a um usuário, um grupo de usuários ou um perfil, isso concede ou nega aos usuários permissão para realizar as tarefas especificadas nos recursos especificados. Para obter mais informações gerais sobre as políticas do IAM, consulte Permissões e políticas no IAM no Guia do usuário do IAM. Para obter mais informações sobre como gerenciar e criar políticas personalizadas do IAM, consulte Gerenciamento de políticas do IAM.

Uma política do IAM deve conceder ou negar permissões para usar uma ou mais ações do Amazon EC2. Ela também deve especificar os recursos que podem ser usados com a ação, que podem ser todos os recursos ou, em alguns casos, recursos específicos. A política também pode incluir condições que você aplica ao recurso.

Para começar a usar, você pode verificar se as políticas gerenciadas pela AWS para o Amazon EC2 atendem às suas necessidades. Caso contrário, você pode criar suas próprias políticas personalizadas. Para ter mais informações, consulte Políticas gerenciadas pela AWS para o Amazon EC2.

Sintaxe da política

A política do IAM é um documento JSON que consiste em uma ou mais declarações. Cada instrução é estruturada da maneira a seguir.

{ "Statement":[{ "Effect":"effect", "Action":"action", "Resource":"arn", "Condition":{ "condition":{ "key":"value" } } } ] }

Existem vários elementos que compõem uma instrução:

  • Efeito: o efeito pode ser Allow ou Deny. Por padrão, os usuários não têm permissão para usar recursos e ações da API. Por isso, todas as solicitações são negadas. Um permitir explícito substitui o padrão. Uma negação explícita substitui todas as permissões.

  • Action: a ação é a ação de API específica para a qual você está concedendo ou negando permissão. Para conhecer como especificar ação, consulte Ações do Amazon EC2.

  • Resource: o recurso afetado pela ação. Algumas ações de API do Amazon EC2 permitem incluir recursos específicos na política que podem ser criados ou modificados pela ação. Você especifica um recurso usando um nome de recurso da Amazon (ARN) ou usando o caractere curinga (*) para indicar que a instrução se aplica a todos os recursos. Para obter mais informações, consulte Permissões no nível do recurso com suporte para ações de API do Amazon EC2.

  • Condition: condições são opcionais. Elas podem ser usadas para controlar quando a política está em vigor. Para obter mais informações sobre como especificar condições para o Amazon EC2, consulte Chaves de condição do Amazon EC2.

Para obter mais informações sobre requisitos de políticas, consulte a Referência de política JSON do IAM no Guia do usuário do IAM. Para obter um exemplo de declarações de políticas do IAM para o Amazon EC2, consulte Exemplo de políticas para controlar o acesso à API do Amazon EC2.

Ações do Amazon EC2

Em uma declaração de política do IAM, é possível especificar qualquer ação de API de qualquer serviço que dê suporte ao IAM. Para o Amazon EC2, use o seguinte prefixo com o nome da ação da API: ec2:. Por exemplo: ec2:RunInstances e ec2:CreateImage.

Para especificar várias ações em uma única declaração, separe-as com vírgulas, conforme o seguinte:

"Action": ["ec2:action1", "ec2:action2"]

Também é possível especificar várias ações usando caracteres curinga. Por exemplo, é possível especificar todas as ações cujo nome começa com a palavra "Describe" da seguinte forma:

"Action": "ec2:Describe*"
nota

No momento, as ações de API do Amazon EC2 não são compatíveis com permissões em nível de recurso. Para obter mais informações sobre permissões no nível do recurso para o Amazon EC2, consulte Políticas baseadas em identidade do Amazon EC2.

Para especificar todas as ações de API do Amazon EC2, use o curinga "*" da seguinte maneira:

"Action": "ec2:*"

Para obter uma lista de ações de Amazon EC2, consulte Ações definidas pelo Amazon EC2 na Referência de autorização do serviço.

Permissões no nível do recurso com suporte para ações de API do Amazon EC2

Permissões no nível do recurso se referem à capacidade de especificar em quais recursos os usuários têm permissão para realizar ações. O Amazon EC2 tem suporte parcial para permissões no nível do recurso. Isso significa que, para determinadas ações do Amazon EC2, é possível controlar quando os usuários têm permissão para usar essas ações com base em condições que precisam ser concluídas, ou em recursos específicos que os usuários têm permissão para usar. Por exemplo, é possível conceder aos usuários permissões para ativar instâncias, mas apenas de um tipo específico, e usando uma AMI específica.

Para especificar um recurso em uma declaração de política do IAM, use o respectivo nome de recurso da Amazon (ARN). Para obter mais informações sobre como especificar o valor do ARN, consulte Nomes de recurso da Amazon (ARNs) para o Amazon EC2. Se uma ação de API não oferecer suporte a ARNs individuais, você deverá usar um curinga (*) para especificar que todos os recursos podem ser afetados pela ação.

Para visualizar tabelas que identificam quais ações de API do Amazon EC2 oferecem suporte a permissões no nível do recurso e os ARNs e chaves de condição que é possível usar em uma política, consulte Ações, recursos e chaves de condição do Amazon EC2 .

Lembre-se de que é possível aplicar permissões em nível de recurso baseadas em tags às políticas do IAM que você usa para a maioria das ações da API do Amazon EC2. Isso oferece a você mais controle sobre quais recursos o usuário pode criar, modificar ou usar. Para obter mais informações, consulte Conceder permissão para marcar recursos do Amazon EC2 durante a criação.

Nomes de recurso da Amazon (ARNs) para o Amazon EC2

Cada declaração de política do IAM se aplica aos recursos que você especifica usando os ARNs.

Um ARN tem a seguinte sintaxe geral:

arn:aws:[service]:[region]:[account-id]:resourceType/resourcePath
serviço

O serviço (por exemplo, ec2).

região

A região do recurso (por exemplo, us-east-1).

account-id

O ID da conta da AWS, sem hifens (por exemplo, 123456789012).

resourceType

O tipo de recurso (por exemplo, instance).

resourcePath

Um caminho que identifica o recurso. É possível usar o curinga * nos caminhos.

Por exemplo, é possível indicar uma instância específica (i-1234567890abcdef0) na declaração usando o ARN da maneira a seguir.

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0"

É possível especificar todas as instâncias pertencentes a uma conta específica usando o caractere curinga * da maneira a seguir.

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*"

Também é possível especificar todos os recursos do Amazon EC2 pertencentes a uma conta específica usando o caractere curinga * da maneira a seguir.

"Resource": "arn:aws:ec2:us-east-1:123456789012:*"

Para especificar todos os recursos ou caso uma ação de API específica não dê suporte a ARNs, use o curinga * no elemento Resource da maneira a seguir.

"Resource": "*"

Muitas ações da API do Amazon EC2 envolvem vários recursos. Por exemplo, AttachVolume anexa um volume do Amazon EBS a uma instância, portanto, um usuário precisa ter permissões para usar o volume e a instância. Para especificar vários recursos em uma única instrução, separe seus ARNs com vírgulas, como se segue.

"Resource": ["arn1", "arn2"]

Para obter uma lista de ARNs para recursos do Amazon EC2, consulte Tipos de recursos definidos pelo Amazon EC2.

Chaves de condição do Amazon EC2

Ema uma instrução de política, também é possível especificar condições que controlam quando ela entrará em vigor. Cada condição contém um ou mais pares de chave-valor. As chaves de condição não diferenciam maiúsculas de minúsculas. Definimos chaves de condição global da AWS, além de chaves de condição específicas do serviço adicionais.

Para obter uma lista de chaves de condição específicas do serviço para o Amazon EC2, consulte Condition keys for Amazon EC2 (Chaves de condição para o Amazon EC2). O Amazon EC2 também implementa as chaves de condição globais da AWS. Para obter mais informações, consulte Informações disponíveis em todas as solicitações no Guia do usuário do IAM.

Todas as ações do Amazon EC2 oferecem suporte às chaves de condição aws:RequestedRegion e ec2:Region. Para ter mais informações, consulte Exemplo: restringir acesso a uma região específica.

Para usar uma chave de condição em sua política do IAM, use a instrução Condition. Por exemplo, a política a seguir concede aos usuários permissão para adicionar e remover regras de entrada e saída para qualquer grupo de segurança. Ela usa a chave de condição ec2:Vpc para especificar que essas ações só podem ser executadas em grupos de segurança em uma VPC específica.

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress"], "Resource": "arn:aws:ec2:region:account:security-group/*", "Condition": { "StringEquals": { "ec2:Vpc": "arn:aws:ec2:region:account:vpc/vpc-11223344556677889" } } } ] }

Caso você especifique várias condições ou várias chaves em uma única condição, avaliamos essas condições usando uma operação AND lógica. Caso você especifique uma única condição com vários valores para uma chave, avaliamos a condição usando uma operação OR lógica. Para que as permissões sejam concedidas, todas as condições devem ser atendidas.

Também é possível usar espaços reservados quando especifica as condições. Para obter mais informações, consulte Elementos de política do IAM: variáveis e tags no Guia do usuário do IAM.

Importante

Muitas chaves de condição são específicas a um recurso, e algumas ações da API usam vários recursos. Se você gravar uma política com uma chave de condição, use o elemento Resource da declaração para especificar o recurso ao qual a chave de condição se aplica. Caso contrário, as políticas podem impedir que os usuários executem a ação, porque a verificação da condição falha para os recursos aos quais a chave de condição não se aplica. Se você não quiser especificar um recurso, ou se escreveu o elemento Action da política para incluir várias ações da API, será necessário usar o tipo de condição ...IfExists para garantir que a chave de condição seja ignorada pelos recursos que não a usam. Para obter mais informações, consulte Condições ...IfExists no Guia do usuário do IAM.

Chave da condição ec2:Attribute

A chave de condição ec2:Attribute pode ser usada para condições que filtram o acesso por um atributo de um recurso.

A chave de condição só é compatível com propriedades de um tipo de dados primitivo (como strings ou inteiros) ou objetos complexos AttributeValue com apenas uma propriedade Value (como os objetos Description ou ImdsSupport da ação ModifyImageAttribute da API). A chave de condição não pode ser usada com objetos complexos que contêm várias propriedades, como o objeto LaunchPermission da açãoModifyImageAttribute da API.

Por exemplo, a política a seguir usa a chave de condição ec2:Attribute/Description para filtrar o acesso pelo objeto complexo Descrição da ação da API ModifyImageAttribute. A chave de condição permite somente solicitações que modifiquem a descrição de uma imagem para Production ou Development.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:ModifyImageAttribute", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { "ec2:Attribute/Description": [ "Production", "Development" ] } } } ] }

A política a seguir usa a chave de condição ec2:Attribute para filtrar o acesso pela propriedade primitiva Atributo da ação da API ModifyImageAttribute. A chave de condição recusa todas as solicitações que tentam modificar a descrição de uma imagem.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:ModifyImageAttribute", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { "ec2:Attribute": "Description" } } } ] }

Chaves de condição do ec2:ResourceID

Quando as chaves de condição ec2:ResourceID a seguir forem usadas com as ações de API especificadas, o valor da chave de condição será usado para especificar o recurso resultante criado pela ação da API. As chaves de condição ec2:ResourceID não podem ser usadas para especificar um recurso de origem especificado na solicitação da API. Se você usar uma das chaves de condição ec2:ResourceID a seguir com uma API especificada, será necessário especificar sempre o curinga (*). Se você especificar um valor diferente, a condição sempre será resolvida para * em runtime. Por exemplo, para usar a chave de condição ec2:ImageId com a API CopyImage, será necessário especificar a chave de condição da seguinte forma:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CopyImage", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { ec2:ImageID": "*" } } } ] }

Recomendamos evitar usar estas chaves de condição com estas ações de API:

  • ec2:DhcpOptionsIDCreateDhcpOptions

  • ec2:ImageIDCopyImage, CreateImage, ImportImage e RegisterImage

  • ec2:InstanceID: RunInstances e ImportInstance

  • ec2:InternetGatewayIDCreateInternetGateway

  • ec2:NetworkAclIDCreateNetworkAcl

  • ec2:NetworkInterfaceIDCreateNetworkInterface

  • ec2:PlacementGroupNameCreatePlacementGroup

  • ec2:RouteTableIDCreateRouteTable

  • ec2:SecurityGroupIDCreateSecurityGroup

  • ec2:SnapshotIDCopySnapshot, CreateSnapshot, CreateSnapshots e ImportSnapshots

  • ec2:SubnetIDCreateSubnet

  • ec2:VolumeID: CreateVolume e ImportVolume

  • ec2:VpcIDCreateVpc

  • ec2:VpcPeeringConnectionIDCreateVpcPeeringConnection

Para filtrar o acesso com base em IDs de recursos específicos, recomendamos usar o elemento de política Resource conforme descrito a seguir.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CopyImage", "Resource": "arn:aws:ec2:us-east-1::image/ami-01234567890abcdef" } ] }

Chave da condição ec2:SourceInstanceARN

Use ec2:SourceInstanceARN para especificar o ARN da instância a partir da qual uma solicitação é feita. Essa é uma chave de condição global da AWS, o que significa que é possíve usá-la com outros serviços além do Amazon EC2. Para ver um exemplo de política, consulte Exemplo: permitir que uma instância específica visualize recursos em outros serviços da AWS.

Controlar o acesso usando acesso baseado em atributos

Ao criar uma política do IAM que conceda permissão aos usuários para usar recursos do EC2, é possível incluir informações de tag no elemento Condition da política para controlar o acesso com base em tags. Isso é conhecido como controle de acesso baseado em atributo (ABAC). O ABAC oferece um controle melhor sobre quais recursos um usuário pode modificar, usar ou excluir. Para obter mais informações, consulte O que é ABAC para a AWS?

Por exemplo, é possível criar uma política que permite que os usuários encerrem uma instância, mas nega a ação se a instância tiver a tag environment=production. Para fazer isso, use a chave de condição aws:ResourceTag para permitir ou negar acesso ao recurso com base nas tags anexadas ao recurso.

"StringEquals": { "aws:ResourceTag/environment": "production" }

Para saber se uma ação de API do Amazon EC2 oferece suporte ao controle de acesso usando a chave de condição aws:ResourceTag, consulte Ações, recursos e chaves de condição para Amazon EC2 . Como as ações de Describe não oferecem suporte a permissões em nível de recurso, especifique-as em uma declaração separada sem condições.

Para obter exemplos de políticas do IAM, consulte Exemplo de políticas para controlar o acesso à API do Amazon EC2.

Se você permitir ou negar aos usuários o acesso a recursos com base em tags, considere negar explicitamente aos usuários a capacidade de adicionar essas tags ou removê-las dos mesmos recursos. Caso contrário, é possível que um usuário contorne suas restrições e obtenha acesso a um recurso modificando as tags.

Conceder permissões a usuários, grupos e perfis

Para conceder acesso, adicione as permissões aos seus usuários, grupos ou perfis:

Verificar se os usuários têm as permissões necessárias

Depois que você tiver criado uma política do IAM, recomendaremos verificar se ela concede aos usuários as permissões para usar as ações de API e os recursos específicos de que eles precisam antes de colocar a política em produção.

Primeiro, crie um usuário para fins de teste e anexe a política do IAM que você criou ao usuário de teste. Em seguia, faça uma solicitação como o usuário de teste.

Se a ação do Amazon EC2 que você estiver testando criar ou modificar um recurso, será necessário fazer a solicitação usando o parâmetro DryRun (ou executar o comando da AWS CLI com a opção --dry-run). Nesse caso, a chamada conclui a verificação da autorização, mas não conclui a operação. Por exemplo, é possível verificar se o usuário pode encerrar uma determinada instância sem efetivamente encerrá-la. Caso o usuário de teste tenha as permissões obrigatórias, a solicitação retorna DryRunOperation. Do contrário, ela retorna UnauthorizedOperation.

Caso a política não conceda ao usuário as permissões que você esperava ou caso ela seja muito permissiva, é possível ajustar a política conforme necessário e testá-la novamente até obter os resultados desejados.

Importante

Pode levar alguns minutos para que as alterações de política sejam propagadas até entrarem em vigor. Por isso, recomendamos que você aguarde cinco minutos antes de testar as atualizações da política.

Caso uma verificação de autorização falhe, a solicitação retorna uma mensagem codificada com informações de diagnóstico. É possível decodificar a mensagem usando a ação DecodeAuthorizationMessage. Para obter mais informações, consulte DecodeAuthorizationMessage na Referência de API do AWS Security Token Service e decode-authorization-message na Referência de comandos da AWS CLI.