Estrutura da política - Amazon Elastic Compute Cloud

Estrutura da política

Os tópicos a seguir explicam a estrutura de uma política do IAM.

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 allow (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 Políticas de exemplo para trabalhar com a AWS CLI ou um AWS SDK.

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 do IAM no 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 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.

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.

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.

Chave da condição ec2:SourceInstanceARN

A chave de condição ec2:SourceInstanceARN pode ser usada para condições que especificam o ARN da instância a partir da qual é feita uma solicitação. Esta é uma chave de condição global da AWS e não é específica do serviço. Para obter exemplos de políticas, consulte Amazon EC2: anexar ou desanexar volumes em uma instância do EC2 e Exemplo: permitir que uma instância específica visualize recursos em outros serviços da AWS. A chave ec2:SourceInstanceARN não pode ser usada como uma variável para preencher o ARN para o elemento Resource na instrução.

Para obter um exemplo de declarações de políticas para o Amazon EC2, consulte Políticas de exemplo para trabalhar com a AWS CLI ou um AWS SDK.

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 oferece suporte somente a propriedades que sejam de um tipo de dados primitivo (como uma string ou um inteiro) ou objetos complexos AttributeValue que tenham apenas uma propriedade Value (como os objetos Description ou ImdsSupport da ação de API ModifyImageAttribute).

Importante

A chave de condição não pode ser usada com objetos complexos que tenham várias propriedades, como o objeto LaunchPermission da ação da API ModifyImageAttribute.

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": "*" } } } ] }
Chave de condição Ação API
ec2:DhcpOptionsID
  • CreateDhcpOptions

ec2:ImageID
  • CopyImage

  • CreateImage

  • ImportImage

  • RegisterImage

ec2:InstanceID
  • RunInstances

  • ImportInstance

ec2:InternetGatewayID
  • CreateInternetGateway

ec2:NetworkAclID
  • CreateNetworkAcl

ec2:NetworkInterfaceID
  • CreateNetworkInterface

ec2:PlacementGroupName
  • CreatePlacementGroup

ec2:RouteTableID
  • CreateRouteTable

ec2:SecurityGroupID
  • CreateSecurityGroup

ec2:SnapshotID
  • CopySnapshot

  • CreateSnapshot

  • CreateSnapshots

  • ImportSnapshots

ec2:SubnetID
  • CreateSubnet

ec2:VolumeID
  • CreateVolume

  • ImportVolume

ec2:VpcID
  • CreateVpc

ec2:VpcPeeringConnectionID
  • CreateVpcPeeringConnection

Recomendamos evitar usar chaves de condição ec2:ResourceID com essas ações de API. Em vez disso, se você precisar filtrar o acesso com base em IDs de recursos específicos, recomendamos fazer isso usando o elemento de política Resource da seguinte forma:

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

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.