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 booleanos (igual, menor que, etc.) para asignar las claves de condición y los valores de la política contra 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 condición que especifique puede ser una clave de condición global o una clave de condición específica del servicio. Las claves de condición globales tienen el prefijo aws:. Las claves de condición específicas de servicios tienen el prefijo del servicio. Por ejemplo, Amazon EC2 le permite escribir una condición utilizando la clave ec2:InstanceType, que es exclusiva de dicho servicio. Para ver las claves de condición de IAM específicas de servicios con el prefijo iam:, consulte Claves de contexto de condición de IAM y AWS STS.

Los nombres de las claves de condición no distinguen entre mayúsculas y minúsculas. Por ejemplo, la inclusión de la clave de condición 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 condición 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 realizadas por 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 condición 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 condición global aws:RequestTag/tag-key, AWS KMS kms:EncryptionContext:encryption_context_key y la clave de condición ResourceTag/tag-key compatibles con varios servicios. Si utiliza la clave de condición 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 "ec2: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 ambas. Puede que los servicios de AWS que admiten estos atributos le permitan crear varios nombres de clave que únicamente se diferencian por las mayúsculas y las minúsculas. Un ejemplo es el etiquetado de una instancia Amazon EC2 con foo=bar1 y Foo=bar2. Cuando se utiliza una condición como "ec2:ResourceTag:Foo": "bar1" 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

Le recomendamos 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 condición aws:TagKeys para el etiquetado, o kms:EncryptionContextKeys para el contexto de cifrado 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 condiciones específicas con respecto al contexto de la solicitud. Por ejemplo, puede crear una política que utilice la clave de condición 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 condición de la política, devuelve un valor de true, false, not present, y, de vez en cuando, null (una cadena de datos vacía). Una clave 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", "iam:DeleteVirtualMFADevice" ], "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 condición 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 condición 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 Uso de varias claves y valores.

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, en este caso s3:prefix. El valor de la 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, etc., mediante el uso de comparaciones booleanas típicas como igual, superior a e inferior a. Cuando se utilizan operadores de cadena u operadores ARN, también se puede utilizar una variable de política en el valor de condición. El siguiente ejemplo incluye la variable aws:username.

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

En determinadas circunstancias, las claves 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 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 usando un conjunto de operadores del elemento Condition. Para obtener más información, consulte Creación de una condición con varias claves o valores.

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.

Varios valores en un elemento Condition

Un elemento Condition puede contener varias condiciones y cada una de ellas puede contener, a su vez, varios pares de clave-valor. La siguiente figura ilustra este caso.

Para obtener más información, consulte Creación de una condición con varias claves o valores.