Elementos de política JSON do IAM: Condition - AWS Identity and Access Management

Elementos de política JSON do IAM: Condition

O elemento Condition (ou bloco Condition) permite que você especifique as condições sob as quais uma política está em vigor. O elemento Condition é opcional. No elemento Condition, crie expressões em que você usa operadores de condição (equal, less than, entre outros) para fazer a correspondência de chaves e valores de contexto na política com os valores e chaves no contexto da solicitação. Para saber mais sobre o contexto da solicitação, consulte Solicitação.

"Condition" : { "{condition-operator}" : { "{condition-key}" : "{condition-value}" }}

A chave de contexto especificada em uma política de condição pode ser uma chave de contexto de condição global ou uma chave de contexto específica do serviço. As chaves de contexto de condição globais têm o prefixo aws:. As chaves de contexto específicas de serviços têm o prefixo do serviço. Por exemplo, o Amazon EC2 permite que você escreva uma condição usando a chave de contexto ec2:InstanceType, que é exclusiva para esse serviço. Para visualizar as chaves de contexto do IAM específicas do serviço com o prefixo iam:, consulte Chaves de contexto de condição do IAM e do AWS STS.

Os nomes de chave de contexto não diferenciam maiúsculas de minúsculas. Por exemplo, incluir a chave de contexto aws:SourceIP é equivalente a testar o elemento AWS:SourceIp. A diferenciação de maiúsculas e minúsculas nos valores da chave de contexto depende do operador de condição que você usa. Por exemplo, a condição a seguir inclui o operador StringEquals para garantir que apenas solicitações feitas por johndoe sejam aceitas. Os usuários chamados JohnDoe não têm permissão de acesso.

"Condition" : { "StringEquals" : { "aws:username" : "johndoe" }}

A seguinte condição usa o operador StringEqualsIgnoreCase para corresponder usuários chamados johndoe ou JohnDoe.

"Condition" : { "StringEqualsIgnoreCase" : { "aws:username" : "johndoe" }}

Algumas chaves de contexto são compatíveis com pares de chave-valor que permitem especificar parte do nome da chave. Os exemplos incluem a chave de contexto aws:RequestTag/tag-key, a kms:EncryptionContext:encryption_context_key do AWS KMS e a chave de contexto ResourceTag/tag-key compatível com múltiplos serviços.

  • Se você usar a chave de contexto ResourceTag/tag-key para um serviço, como o Amazon EC2, será necessário especificar um nome de chave para tag-key.

  • Os nomes de chave não diferenciam maiúsculas de minúsculas. Isso significa que, se você especificar "aws:ResourceTag/TagKey1": "Value1" no elemento de condição da política, a condição corresponderá a uma chave de tag de recurso chamada TagKey1 ou tagkey1, mas não ambas.

  • Os serviços da AWS compatíveis com esses atributos podem permitir que você crie vários nomes de chave que diferem apenas por maiúsculas e minúsculas. Por exemplo, é possível etiquetar uma instância do Amazon EC2 com ec2=test1 e EC2=test2. Quando você usa uma condição, como "aws:ResourceTag/EC2": "test1", para permitir o acesso a esse recurso, o nome da chave corresponde a ambas as tags, mas apenas um valor é correspondente. Isso pode resultar em falhas de condição inesperadas.

Importante

Como prática recomendada, certifique-se de que os membros de sua conta sigam uma convenção de nomenclatura consistente ao nomear atributos de par de chave-valor. Os exemplos incluem tags ou contextos de criptografia do AWS KMS. Você pode aplicar isso usando a chave de contexto aws:TagKeys para a marcação, ou a kms:EncryptionContextKeys para o contexto de criptografia do AWS KMS.

O contexto da solicitação

Quando um principal faz uma solicitação à AWS, a AWS reúne as informações da solicitação em um contexto de solicitação. As informações são usadas para avaliar e autorizar a solicitação. É possível usar o elemento Condition de uma política JSON para testar chaves de contexto específicas em relação ao contexto da solicitação. Por exemplo, é possível criar uma política que use a chave de contexto aws:CurrentTime para permitir que um usuário execute ações somente durante um intervalo de datas.

Quando uma solicitação é enviada, a AWS avalia cada chave de contexto na política e retorna um valor true, false, not present e, ocasionalmente, null (uma string de dados vazia). Uma chave de contexto que não está na solicitação é considerada uma não correspondência. Por exemplo, a política a seguir permite remover seu próprio dispositivo de autenticação multifator (MFA), mas somente se você fez login usando MFA na última hora (3.600 segundos).

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowRemoveMfaOnlyIfRecentMfa", "Effect": "Allow", "Action": [ "iam:DeactivateMFADevice" ], "Resource": "arn:aws:iam::*:user/${aws:username}", "Condition": { "NumericLessThanEquals": {"aws:MultiFactorAuthAge": "3600"} } } }

O contexto da solicitação pode retornar os seguintes valores:

  • True (verdadeiro): se o solicitante tiver feito login usando MFA na última hora ou menos, a condição retornará true.

  • False (falso): se o solicitante tiver feito login usando MFA há mais de uma hora, a condição retorna false.

  • Not present (não presente): se o solicitante tiver feito uma solicitação usando suas chaves de acesso do usuário do IAM na AWS CLI ou na API da AWS, a chave não estará presente. Nesse caso, a chave não estará presente e não será correspondente.

  • Null: para chaves de contexto definidas pelo usuário, como passar etiquetas em uma solicitação, é possível incluir uma string vazia. Nesse caso, o valor no contexto da solicitação é null. Um valor null pode retornar true em alguns casos. Por exemplo, se você usar o operador de condição ForAllValues de múltiplos valores com a chave de contexto aws:TagKeys, poderá ter resultados inesperados se o contexto da solicitação retornar como null. Para obter mais informações, consulte aws:TagKeys e Chaves de contexto de múltiplos valores.

O bloco de condição

O exemplo a seguir mostra o formato básico de um elemento Condition:

"Condition": {"StringLike": {"s3:prefix": ["janedoe/*"]}}

Um valor da solicitação é representado por uma chave de contexto, neste caso, s3:prefix. O valor da chave de contexto é comparado a um valor especificado como um valor literal, como janedoe/*. O tipo de comparação a fazer é especificado pelo operador de condição (aqui StringLike). Você pode criar condições que comparam strings, datas, números etc., usando comparações boolianas típicas, comoigual a, maior que e menor que. Ao usar operadores de string ou operadores de ARN, você também pode usar uma variável de política no valor da chave de contexto. O exemplo a seguir inclui a variável aws:username.

"Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}

Em algumas circunstâncias, as chaves de contexto podem conter múltiplos valores. Por exemplo, uma solicitação ao Amazon DynamoDB pode solicitar o retorno ou a atualização de vários atributos de uma tabela. Uma política de acesso às tabelas do DynamoDB pode incluir a chave de contexto dynamodb:Attributes, que contém todos os atributos listados na solicitação. Você pode testar os múltiplos atributos na solicitação em relação a uma lista de atributos permitidos em uma política usando operadores de conjunto no elemento Condition. Para obter mais informações, consulte Chaves de contexto de múltiplos valores.

Quando a política é avaliada durante uma solicitação, a AWS substitui a chave pelo valor correspondente da solicitação. (Neste exemplo, a AWS usaria a data e a hora da solicitação.) A condição é avaliada para retornar verdadeiro ou falso, o que, então, é considerado ao avaliar se a política como um todo permite ou nega a solicitação.

Vários valores em uma condição

Um elemento Condition pode conter múltiplos operadores de condição, e cada operador de condição pode conter múltiplos pares de chave-valor de contexto. A figura a seguir ilustra isso.

Para obter mais informações, consulte Chaves de contexto de múltiplos valores.