

# Elementos de política JSON do IAM: Condition
<a name="reference_policies_elements_condition"></a>

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](reference_policies_elements_condition_operators.md) (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 [Componentes de uma solicitação](intro-structure.md#intro-structure-request).

```
"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](reference_policies_condition-keys.md) 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](reference_policies_iam-condition-keys.md).

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](reference_policies_elements_condition_operators.md) que você usa. Por exemplo, a condição a seguir inclui o operador `StringEquals` para garantir que apenas solicitações feitas por `john` sejam aceitas. Os usuários chamados `John` não têm permissão de acesso.

```
"Condition" : { "StringEquals" : { "aws:username" : "john" }}
```

A seguinte condição usa o operador [`StringEqualsIgnoreCase`](reference_policies_elements_condition_operators.md#Conditions_String) para corresponder usuários chamados `john` ou `John`.

```
"Condition" : { "StringEqualsIgnoreCase" : { "aws:username" : "john" }}
```

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}}`](reference_policies_condition-keys.md#condition-keys-requesttag), a [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context) do AWS KMS e a chave de contexto [`ResourceTag/{{tag-key}}`](reference_policies_condition-keys.md#condition-keys-resourcetag) 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](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policy-structure.html#amazon-ec2-keys), 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`](reference_policies_condition-keys.md#condition-keys-tagkeys) para a marcação, ou a [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context-keys](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context-keys) para o contexto de criptografia do AWS KMS.
+ Para obter uma lista de todos os operadores de condição e uma descrição de como eles funcionam, consulte [Operadores de condição](reference_policies_elements_condition_operators.md).
+ A menos que especificado de outra forma, todas as chaves de contexto podem ter múltiplos valores. Para obter uma descrição de como lidar com chaves de contexto com múltiplos valores, consulte [Operadores de conjunto para chaves de contexto de vários valores](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys).
+ Para obter uma lista de todas as chaves de contexto disponíveis globalmente, consulte [AWSChaves de contexto de condições globais da](reference_policies_condition-keys.md).
+ Para as chaves de contexto de condição definidas por cada serviço, consulte [Ações, recursos e chaves de condição dos serviços da AWS](reference_policies_actions-resources-contextkeys.html).

## O contexto da solicitação
<a name="AccessPolicyLanguage_RequestContext"></a>

Quando um [principal](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html?icmpid=docs_homepage_addtlrcs#principal) faz uma [solicitação](intro-structure.md#intro-structure-request) à AWS, a AWS reúne as informações da solicitação em um contexto de solicitação. O contexto da solicitação inclui informações sobre a entidade principal, os recursos, as ações e outras propriedades ambientais. A avaliação da política compara as propriedades da política com as propriedades enviadas na solicitação para avaliar e autorizar ações que você pode realizar na AWS.

É 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](reference_policies_condition-keys.md#condition-keys-currenttime) para [permitir que um usuário execute ações somente durante um intervalo de datas](reference_policies_examples_aws-dates.md).

O exemplo a seguir mostra uma representação do contexto da solicitação quando Martha Rivera envia uma solicitação para desativar o seu dispositivo de MFA.

```
Principal: AROA123456789EXAMPLE
Action: iam:DeactivateMFADevice
Resource: arn:aws:iam::user/martha
Context:
  – aws:UserId=AROA123456789EXAMPLE:martha
  – aws:PrincipalAccount=1123456789012
  – aws:PrincipalOrgId=o-example
  – aws:PrincipalARN=arn:aws:iam::1123456789012:assumed-role/TestAR
  – aws:MultiFactorAuthPresent=true
  – aws:MultiFactorAuthAge={{2800}}
  – aws:CurrentTime=...
  – aws:EpochTime=...
  – aws:SourceIp=...
```

O contexto da solicitação é comparado a uma política que permite que os usuários removam seu próprio dispositivo de autenticação multifator (MFA), mas somente se fizeram login usando MFA na última hora (3.600 segundos).

------
#### [ JSON ]

****  

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

------

Neste exemplo, a política corresponde ao contexto da solicitação: a ação é a mesma, o recurso corresponde ao caractere curinga “\*” e o valor para `aws:MultiFactorAuthAge` é 2800, que é menor que 3600, portanto, a política permite essa solicitação de autorização.

A AWS avalia cada chave de contexto na política e retorna um valor *verdadeiro* ou *falso*. Uma chave de contexto que não está na solicitação é considerada uma não correspondência.

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.

**nota**  
Em alguns casos, quando o valor da chave de condição não está presente, a condição ainda pode retornar verdadeira. Por exemplo, se você adicionar o qualificador `ForAllValues`, a solicitação retornará verdadeira se a chave de contexto não estiver na solicitação. Para evitar que chaves de contexto ausentes ou chaves de contexto com valores vazios sejam avaliadas como verdadeiras, você pode incluir o [operador de condição Null](reference_policies_elements_condition_operators.md#Conditions_Null) em sua política com um valor `false` para verificar se a chave de contexto existe e se seu valor não for nulo.

## O bloco de condição
<a name="AccessPolicyLanguage_ConditionBlock"></a>

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

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

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 `jane/*`. O tipo de comparação a fazer é especificado pelo [operador de condição](reference_policies_elements_condition_operators.md) (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](reference_policies_elements_condition_operators.md#Conditions_String) ou [operadores de ARN](reference_policies_elements_condition_operators.md#Conditions_ARN), você também pode usar uma [variável de política](reference_policies_variables.md) 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 [Operadores de conjunto para chaves de contexto de vários valores](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys). 

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
<a name="Condition-multiple-conditions"></a>

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. 

![Dois diagramas de blocos de operador de condição. O primeiro bloco inclui dois espaços reservados para chaves de contexto, cada um com múltiplos valores. O segundo bloco de condição inclui uma chave de contexto com múltiplos valores.](http://docs.aws.amazon.com/pt_br/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block.diagram.png)


Para obter mais informações, consulte [Operadores de conjunto para chaves de contexto de vários valores](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys). 