

# Condiciones con varias claves de contexto o valores
<a name="reference_policies_condition-logic-multiple-context-keys-or-values"></a>

Puede utilizar el elemento `Condition` de una política para probar varias claves de contexto o valores para una única clave de contexto en una solicitud. Cuando se realiza una solicitud a AWS, ya sea mediante programación o a través de la Consola de administración de AWS, la solicitud incluye información sobre la entidad principal, la operación, las etiquetas y mucho más. Puede utilizar las claves de contexto para probar los valores de las claves de contexto coincidentes de la solicitud, con las claves de contexto especificadas en la condición de política. Para conocer la información y los datos incluidos en una solicitud, consulte [El contexto de la solicitud](reference_policies_elements_condition.md#AccessPolicyLanguage_RequestContext).

**Topics**
+ [Lógica de evaluación para varias claves de contexto o valores](#reference_policies_multiple-conditions-eval)
+ [Lógica de evaluación de los operadores de condición con coincidencia negada](#reference_policies_multiple-conditions-negated-matching-eval)

## Lógica de evaluación para varias claves de contexto o valores
<a name="reference_policies_multiple-conditions-eval"></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 mayoría de las claves de contexto admiten el uso de varios valores, a menos que se especifique lo contrario.
+ Si su instrucción de política tiene varios [operadores de condición](reference_policies_elements_condition_operators.md), los operadores de condición se evalúan mediante un operador lógico `AND`.
+ Si su instrucción de política tiene varias claves de contexto asociadas a un único operador de condición, las claves de contexto se evalúan mediante un operador lógico `AND`.
+ Si un operador de condición contiene varios valores para una clave de contexto, esos valores se evalúan mediante un operador lógico `OR`.
+ Si un operador de condición con coincidencia negada contiene varios valores para una clave de contexto, esos valores se evalúan mediante un operador lógico `NOR`. 

Todas las claves de contexto de un bloque de elementos de condición deben resolverse como verdaderas para invocar el efecto `Allow` o `Deny` deseado. En la siguiente figura, se ilustra la lógica de evaluación de una condición con varios operadores de condición y pares clave-valor de contexto.

![\[Bloque de condición que muestra cómo se aplican AND y OR a varias claves de contexto y valores\]](http://docs.aws.amazon.com/es_es/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block_AND_2.diagram.png)


Por ejemplo, la siguiente política de bucket de S3 ilustra cómo se representa la figura anterior en una política. El bloque de condición incluye los operadores de condición `StringEquals` y `ArnLike` y las claves de contexto `aws:PrincipalTag` y `aws:PrincipalArn`. Para invocar el efecto `Allow` o `Deny` deseado, todas las claves de contexto en el bloque de condición deben resolverse como verdaderas. El usuario que realiza la solicitud debe tener ambas claves de etiqueta de las entidades principales, *departamento* y *rol*, que incluyen uno de los valores de clave de etiqueta especificados en la política. Además, el ARN de la entidad principal del usuario que realiza la solicitud debe coincidir con uno de los valores `aws:PrincipalArn` especificados en la política que se evaluarán como verdaderos.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ExamplePolicy",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:root"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/department": [
            "finance",
            "hr",
            "legal"
          ],
          "aws:PrincipalTag/role": [
            "audit",
            "security"
          ]
        },
        "ArnLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::222222222222:user/Ana",
            "arn:aws:iam::222222222222:user/Mary"
          ]
        }
      }
    }
  ]
}
```

------

La siguiente tabla muestra cómo AWS evalúa esta política en función de los valores de clave de condición en su solicitud.


| Condición de política | Contexto de la solicitud | Resultado | 
| --- | --- | --- | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: legal<br />aws:PrincipalTag/role: audit<br />aws:PrincipalArn: <br />  arn:aws:iam::222222222222:user/Mary</pre>  |  **Match** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalTag/role: audit<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki</pre>  | **No match** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalTag/role: payroll<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Mary</pre>  | **No match** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  |  No hay `aws:PrincipalTag/role` en el contexto de la solicitud. <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Mary</pre>  | **No match**  | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | No hay `aws:PrincipalTag` en el contexto de la solicitud. <pre>aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Mary</pre>  | **No match**  | 

## Lógica de evaluación de los operadores de condición con coincidencia negada
<a name="reference_policies_multiple-conditions-negated-matching-eval"></a>

Algunos [operadores de condición,](reference_policies_elements_condition_operators.md) como `StringNotEquals` o `ArnNotLike`, utilizan la coincidencia negada para comparar los pares clave-valor de contexto de su política con los pares clave-valor de contexto de una solicitud. Cuando se especifican varios valores para una clave de contexto única en una política con operadores de condición con coincidencia negada, los permisos vigentes funcionan como un operador lógico `NOR`. En la coincidencia negada, un operador lógico `NOR` o `NOT OR` devuelve verdadero solo si todos los valores se evalúan como falsos.

En la siguiente figura, se ilustra la lógica de evaluación de una condición con varios operadores de condición y pares clave-valor de contexto. La figura incluye un operador de condición con coincidencia negada para la clave de contexto 3.

![\[Bloque de condición que muestra cómo se aplican AND y OR a varias claves de contexto y valores cuando se utiliza un operador de condición con coincidencia negada\]](http://docs.aws.amazon.com/es_es/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block_AND_Negated_NOR_2.diagram.png)


Por ejemplo, la siguiente política de bucket de S3 ilustra cómo se representa la figura anterior en una política. El bloque de condición incluye los operadores de condición `StringEquals` y `ArnNotLike` y las claves de contexto `aws:PrincipalTag` y `aws:PrincipalArn`. Para invocar el efecto `Allow` o `Deny` deseado, todas las claves de contexto en el bloque de condición deben resolverse como verdaderas. El usuario que realiza la solicitud debe tener ambas claves de etiqueta de las entidades principales, *departamento* y *rol*, que incluyen uno de los valores de clave de etiqueta especificados en la política. Dado que el operador de condición `ArnNotLike` usa la coincidencia negada, el ARN de la entidad principal del usuario que realiza la solicitud no debe coincidir con ninguno de los valores `aws:PrincipalArn` especificados en la política que se evaluarán como verdaderos.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ExamplePolicy",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:root"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/department": [
            "finance",
            "hr",
            "legal"
          ],
          "aws:PrincipalTag/role": [
            "audit",
            "security"
          ]
        },
        "ArnNotLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::222222222222:user/Ana",
            "arn:aws:iam::222222222222:user/Mary"
          ]
        }
      }
    }
  ]
}
```

------

La siguiente tabla muestra cómo AWS evalúa esta política en función de los valores de clave de condición en su solicitud.


| Condición de política | Contexto de la solicitud | Resultado | 
| --- | --- | --- | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: legal<br />aws:PrincipalTag/role: audit<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki<br /></pre>  |  **Match** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalTag/role: audit<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Mary</pre>  | **No match** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalTag/role: payroll<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki</pre>  | **No match** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | >No hay `aws:PrincipalTag/role` en el contexto de la solicitud. <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki</pre>  | **No match** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | No hay `aws:PrincipalTag` en el contexto de la solicitud. <pre>aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki</pre>  | **No match**  | 