

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

El elemento `Condition` (o el *bloque* `Condition`) permite especificar condiciones que se aplican cuando la política surte efecto. El elemento `Condition` es opcional. En el elemento `Condition`, se crean expresiones en las que se usan [operadores de condición](reference_policies_elements_condition_operators.md) (igual, menor que, etc.) para hacer coincidir las claves de contexto y los valores de la política con las claves y valores en el contexto de la solicitud. Para obtener más información sobre el contexto de la solicitud, consulte [Componentes de una solicitud](intro-structure.md#intro-structure-request).

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

La clave de contexto que especifique en una condición de política puede ser una [clave de contexto de condición global](reference_policies_condition-keys.md) o una clave de contexto específica de un servicio. Las claves de contexto de condición globales tienen el prefijo `aws:`. Las claves de contexto específicas de un servicio tienen el prefijo del servicio. Por ejemplo, Amazon EC2 le permite escribir una condición con la clave de contexto `ec2:InstanceType`, que es exclusiva de dicho servicio. Para ver las claves de contexto de IAM específicas del servicio con el prefijo `iam:`, consulte [Claves de contexto de condición de IAM y AWS STS](reference_policies_iam-condition-keys.md).

Los *nombres* de las claves de contexto no distinguen entre mayúsculas y minúsculas. Por ejemplo, la inclusión de la clave de contexto `aws:SourceIP` es equivalente a las pruebas de `AWS:SourceIp`. El uso de mayúsculas y minúsculas en los *valores* de la clave de contexto depende del [operador de condición](reference_policies_elements_condition_operators.md) que utilice. Por ejemplo, la siguiente condición incluye el operador `StringEquals` para garantizar que únicamente coincidan las solicitudes que realice `john`. A los usuarios denominados `John` se les niega el acceso.

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

La siguiente condición utiliza el operador [`StringEqualsIgnoreCase`](reference_policies_elements_condition_operators.md#Conditions_String) para que coincida con los usuarios `john` o `John`.

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

Algunas de las claves de contexto admiten los pares clave-valor, con los que puede especificar una parte del nombre de la clave. Entre los ejemplos se incluyen la clave de contexto [`aws:RequestTag/tag-key`](reference_policies_condition-keys.md#condition-keys-requesttag), la [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) de AWS KMS y la clave de contexto [`ResourceTag/tag-key`](reference_policies_condition-keys.md#condition-keys-resourcetag) compatibles con varios servicios.
+ Si utiliza la clave de contexto `ResourceTag/tag-key` para un servicio como [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policy-structure.html#amazon-ec2-keys), debe especificar un nombre de clave para `tag-key`. 
+ **Los nombres de las claves no distinguen entre mayúsculas y minúsculas.** Esto significa que si especifica `"aws:ResourceTag/TagKey1": "Value1"` en el elemento de condición de su política, la condición coincidirá con una clave de etiqueta de recurso denominada `TagKey1` o `tagkey1`, pero no con ambas.
+ Los servicios de AWS que admiten estos atributos pueden permitirle crear varios nombres de clave que solo difieran por caso. Por ejemplo, puede etiquetar una instancia de Amazon EC2 con `ec2=test1` y `EC2=test2`. Cuando se utiliza una condición como `"aws:ResourceTag/EC2": "test1"` para permitir el acceso a dicho recurso, el nombre de clave coincide con ambas etiquetas, pero solo un valor coincide. Esto puede generar errores inesperados de la condición.

**importante**  
La práctica recomendada es que se asegure de que los miembros de su cuenta sigan una convención de nomenclatura coherente al nombrar los atributos de par clave-valor. Entre los ejemplos se incluyen etiquetas o contextos de cifrado de AWS KMS. Para imponer este comportamiento, utilice la clave de contexto [`aws:TagKeys`](reference_policies_condition-keys.md#condition-keys-tagkeys) para el etiquetado o [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 el contexto de cifrado de AWS KMS.
+ Para obtener una lista de todos los operadores de condición y una descripción de cómo funcionan, consulte [Operadores de condición](reference_policies_elements_condition_operators.md).
+ A menos que se especifique lo contrario, todas las claves de contexto pueden tener varios valores. Para ver una descripción de cómo gestionar las claves de contexto que tienen varios valores, consulte [Operadores de conjunto para claves de contexto multivalor](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys).
+ Para obtener una lista de todas las claves de contexto disponibles en todo el mundo, consulte [Claves de contexto de condición globales de AWS](reference_policies_condition-keys.md).
+ Para conocer las claves de contexto de condición definidas por cada servicio, consulte [Acciones, recursos y claves de condición para servicios de AWS](reference_policies_actions-resources-contextkeys.html).

## El contexto de la solicitud
<a name="AccessPolicyLanguage_RequestContext"></a>

Cuando una [entidad principal](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html?icmpid=docs_homepage_addtlrcs#principal) realiza una [solicitud](intro-structure.md#intro-structure-request) a AWS, AWS recopila la información de la solicitud en un contexto de solicitud. El contexto de la solicitud incluye información sobre la entidad principal, los recursos, las acciones y otras propiedades del entorno. La evaluación de la política compara las propiedades de la política con las propiedades enviadas en la solicitud para evaluar y autorizar las acciones que puede realizar en AWS.

Puede utilizar el elemento `Condition` de una política JSON para probar claves de contexto específicas con respecto al contexto de la solicitud. Por ejemplo, puede crear una política que utilice la clave de contexto [aws:CurrentTime](reference_policies_condition-keys.md#condition-keys-currenttime) para [permitir a un usuario realizar acciones específicas solo durante un intervalo de fechas específico](reference_policies_examples_aws-dates.md).

En el siguiente ejemplo se muestra una representación del contexto de la solicitud cuando Martha Rivera envía una solicitud para desactivar su 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=...
```

El contexto de la solicitud se compara con una política que permite a los usuarios eliminar su propio dispositivo de autenticación multifactor (MFA), pero solo si han iniciado sesión con la MFA en la última hora (3600 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"}
        }
    }
}
```

------

En este ejemplo, la política coincide con el contexto de la solicitud: la acción es la misma, el recurso coincide con el comodín «\$1» y el valor para `aws:MultiFactorAuthAge` es 2800, que es inferior a 3600, por lo que la política permite esta solicitud de autorización.

AWS evalúa cada clave de contexto de la política y devuelve un valor de *verdadero* o *falso*. Una clave de contexto que no está presente en la solicitud no se considera una discordancia.

El contexto de la solicitud puede devolver los siguientes valores:
+ **True**: si el solicitante ha iniciado sesión con MFA en la última hora o menos, la condición devuelve *true*.
+ **False**: si el solicitante ha iniciado sesión con MFA hace más de una hora, la condición devuelve *false*.
  + **Not present**: si el solicitante realizó una solicitud con sus claves de acceso de usuario de IAM en la AWS CLI o la API de AWS, la clave no está presente. En este caso, la clave no está presente y no coincidirá.

**nota**  
En algunos casos, cuando el valor de la clave de condición no está presente, la condición puede devolver un valor verdadero. Por ejemplo, si agrega el calificador `ForAllValues`, la solicitud devuelve el valor verdadero si la clave de contexto no está en la solicitud. Para evitar que las claves de contexto que faltan o las claves de contexto con valores vacíos se evalúen como verdadero, puede incluir el [Operador de condición nula](reference_policies_elements_condition_operators.md#Conditions_Null) en su política con un valor `false` para comprobar si la clave de contexto existe y su valor no es nulo.

## El bloque de condición
<a name="AccessPolicyLanguage_ConditionBlock"></a>

En el siguiente ejemplo se muestra el formato básico de un elemento `Condition`:

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

Un valor de la solicitud está representado por una clave de contexto, en este caso `s3:prefix`. El valor de clave de contexto se compara con un valor que especifique como valor literal, como `jane/*`. El tipo de comparación que debe realizarse se especifica con el [operador de condición](reference_policies_elements_condition_operators.md) (aquí, `StringLike`). Puede crear condiciones para comparar cadenas, fechas, números, y más, mediante el uso de comparaciones booleanas típicas como igual, superior a e inferior a. Cuando se utilizan [operadores de cadena](reference_policies_elements_condition_operators.md#Conditions_String) u [operadores de ARN](reference_policies_elements_condition_operators.md#Conditions_ARN), también se puede utilizar una [variable de política](reference_policies_variables.md) en el valor de clave de contexto. El siguiente ejemplo incluye la variable `aws:username`. 

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

En determinadas circunstancias, las claves de contexto pueden contener múltiples valores. Por ejemplo, una solicitud a Amazon DynamoDB podría pedir la devolución o actualización de varios atributos de una tabla. Una política para obtener acceso a tablas de DynamoDB puede incluir la clave de contexto `dynamodb:Attributes`, que contiene todos los atributos indicados en la solicitud. Puede probar los diversos atributos de la solicitud con una lista de atributos permitidos de una política utilizando un conjunto de operadores del elemento `Condition`. Para obtener más información, consulte [Operadores de conjunto para claves de contexto multivalor](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys). 

Cuando se evalúa la política durante una solicitud, AWS sustituye la clave por el valor correspondiente de la solicitud. (En este ejemplo, AWS utilizaría la fecha y la hora de la solicitud). La condición se evalúa para devolver true o false, lo cual, a su vez, se examina para saber si la política en su conjunto permite o deniega la solicitud. 

### Múltiples valores en un elemento Condition
<a name="Condition-multiple-conditions"></a>

Un elemento `Condition` puede contener varios operadores de condición y cada uno de ellos puede contener, a su vez, varios pares de clave-valor de contexto. La siguiente figura ilustra este caso. 

![\[diagramas de bloques de operadores de dos condiciones. El primer bloque incluye dos marcadores de posición clave de contexto, cada uno con varios valores. El segundo bloque de condición incluye una clave de contexto con varios valores.\]](http://docs.aws.amazon.com/es_es/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block.diagram.png)


Para obtener más información, consulte [Operadores de conjunto para claves de contexto multivalor](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys). 