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

Elementos de política JSON de IAM: Condition

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 (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 Solicitud.

"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 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.

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 que utilice. Por ejemplo, la siguiente condición incluye el operador StringEquals para garantizar que únicamente coincidan las solicitudes que realice johndoe. A los usuarios denominados JohnDoe se les niega el acceso.

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

La siguiente condición utiliza el operador StringEqualsIgnoreCase para que coincida con los usuarios johndoe o JohnDoe.

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

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, la kms:EncryptionContext:encryption_context_key de AWS KMS y la clave de contexto ResourceTag/tag-key compatibles con varios servicios.

  • Si utiliza la clave de contexto ResourceTag/tag-key para un servicio como Amazon EC2, 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 para el etiquetado o kms:EncryptionContextKeys para el contexto de cifrado de AWS KMS.

El contexto de la solicitud

Cuando una entidad principal realiza una solicitud a AWS, AWS recopila la información de la solicitud en un contexto de solicitud. La información se utiliza para evaluar y autorizar la solicitud. 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 para permitir a un usuario realizar acciones específicas solo durante un intervalo de fechas específico.

Cuando se envía una solicitud, AWS evalúa cada clave de contexto de la política y devuelve un valor de true, false, not present y, de vez en cuando, null (una cadena de datos vacía). Una clave de contexto que no está presente en la solicitud no se considera una discordancia. Por ejemplo, la siguiente política permite eliminar su propio dispositivo de autenticación multifactor (MFA), pero solo si ha iniciado sesión con MFA en la última hora (3600 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"} } } }

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á.

  • Null: para las claves de contexto definidas por el usuario, como la transferencia de etiquetas en una solicitud, es posible incluir una cadena vacía. En este caso, el valor en el contexto de la solicitud es null. Un valor null puede devolver true en algunos casos. Por ejemplo, si utiliza el operador de condición ForAllValues con varios valores con la clave de contexto aws:TagKeys, puede experimentar resultados inesperados si el contexto de la solicitud devuelve un valor null. Para obtener más información, consulte aws:TagKeys y Claves de contexto multivalor.

El bloque de condición

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

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

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 janedoe/*. El tipo de comparación que debe realizarse se especifica con el operador de condición (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 u operadores de ARN, también se puede utilizar una variable de política 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 Claves de contexto multivalor.

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

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.

Para obtener más información, consulte Claves de contexto multivalor.