IAM Elementos de política JSON: Operadores de condición - AWS Identity and Access Management

Si proporcionásemos una traducción de la versión en inglés de la guía, prevalecerá la versión en inglés de la guía si hubiese algún conflicto. La traducción se proporciona mediante traducción automática.

IAM Elementos de política JSON: Operadores de condición

Utilice operadores de condición en el elemento Condition para hacer coincidir la clave y el valor de la política con los valores del contexto de la solicitud. Para obtener más información sobre el parámetro Condition, consulte IAM Elementos de política JSON: Condition.

El operador de condición que puede utilizar en una política depende de la clave de condición que elija. Puede elegir una clave de condición global o una clave de condición específica del servicio. Para saber qué operador de condición puede utilizar para una clave de condición global, consulte AWS Claves de contexto de condición globales de. Para saber qué operador de condición puede utilizar para una clave de condición específica del servicio, consulte Claves de condición, recursos y acciones de AWS Servicios y elija el servicio que desea ver.

importante

Si la clave especificada en una condición de política no está presente en el contexto de la solicitud, los valores no coincidirán. Esto se aplica a todos los operadores de condición excepto ...IfExists y Null check. Estos operadores prueban si la clave está presente (existe) en el contexto de la solicitud.

Los operadores de condición pueden agruparse en las categorías siguientes:

Operadores de condición de cadena

Los operadores de condición de cadena le permiten desarrollar elementos Condition que restringen el acceso comparando una clave con el valor de una cadena.

Operador de condición ​Descripción

StringEquals

Coincidencia exacta; distingue entre mayúsculas y minúsculas.

StringNotEquals

Coincidencia negada.

StringEqualsIgnoreCase

Coincidencia exacta; no distingue entre mayúsculas y minúsculas.

StringNotEqualsIgnoreCase

Coincidencia negada; no distingue entre mayúsculas y minúsculas.

StringLike

Coincidencia que distingue entre mayúsculas y minúsculas. Los valores pueden incluir un comodín de coincidencias de varios caracteres (*) o un comodín de coincidencia de un único carácter (?) en cualquier parte de la cadena.

nota

Si una clave contiene varios valores, StringLike se puede calificar con operadores de grupo—ForAllValues:StringLike y ForAnyValue:StringLike. Para obtener más información, consulte Creación de una condición con varias claves o valores.

StringNotLike

Coincidencia negada que distingue entre mayúsculas y minúsculas. Los valores pueden incluir un comodín de coincidencias de varios caracteres (*) o un comodín de coincidencia de un único carácter (?) en cualquier parte de la cadena.

Por ejemplo, la instrucción siguiente contiene un elemento Condition que utiliza el operador de condición StringEquals con la clave aws:PrincipalTag para especificar que el principal que realiza la solicitud debe etiquetarse con la categoría de trabajo iamuser-admin.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/*", "Condition": {"StringEquals": {"aws:PrincipalTag/job-category": "iamuser-admin"}} } }

Si la clave especificada en una condición de política no está presente en el contexto de la solicitud, los valores no coincidirán. En este ejemplo, la clave aws:PrincipalTag/job-category está presente en el contexto de la solicitud si el principal utiliza un usuario IAM con etiquetas asociadas. También se incluye para un principal con un rol de IAM con etiquetas o etiquetas de sesión asociadas. Si un usuario sin la etiqueta intenta ver o editar una clave de acceso, la condición devuelve false y la instrucción deniega la solicitud implícitamente.

Puedes utilizar un variable de política con el String operador de condición.

En el siguiente ejemplo se utiliza el operador de condición StringLike para establecer una coincidencia de cadena con una variable de política y crear una política que permita a un usuario de IAM utilizar la consola de Amazon S3 para administrar su propio "directorio principal" en un bucket de Amazon S3. La política permite las acciones especificadas en un bucket de S3, siempre y cuando s3:prefix coincida con uno de los patrones especificados.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::BUCKET-NAME", "Condition": {"StringLike": {"s3:prefix": [ "", "home/", "home/${aws:username}/" ]}} }, { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::BUCKET-NAME/home/${aws:username}", "arn:aws:s3:::BUCKET-NAME/home/${aws:username}/*" ] } ] }

Para ver un ejemplo de una política que muestre cómo utilizar el elemento Condition para restringir el acceso a recursos en función de un ID de aplicación y un ID de usuario de las identidades federadas web, consulte Amazon S3: Permite Amazon Cognito usuarios para obtener acceso a objetos en su bucket.

Operadores de condición numérica

Los operadores de condición numérica le permiten desarrollar elementos Condition que restringen el acceso comparando una clave con un valor entero o un valor decimal.

Operador de condición ​Descripción

NumericEquals

Coincidencia

NumericNotEquals

Coincidencia negada.

NumericLessThan

Coincidencia "menos que"

NumericLessThanEquals

Coincidencia "menos que o igual"

NumericGreaterThan

Coincidencia "más que"

NumericGreaterThanEquals

Coincidencia "superior a o igual"

Por ejemplo, la siguiente instrucción contiene un elemento Condition que utiliza el operador de condición NumericLessThanEquals con la clave s3:max-keys para especificar que el solicitante puede incluir en la lista hasta 10 objetos en example_bucket a la vez.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::example_bucket", "Condition": {"NumericLessThanEquals": {"s3:max-keys": "10"}} } }

Si la clave especificada en una condición de política no está presente en el contexto de la solicitud, los valores no coincidirán. En este ejemplo, la clave s3:max-keys siempre está presente en la solicitud cuando se realiza la operación ListBucket. Si esta política permitía todas las operaciones Amazon S3, solo se permitirían las operaciones que incluyen la clave de contexto max-keys con un valor inferior o igual a 10.

No puede utilizar un variable de política con el Numeric operador de condición.

Operadores de condición de fecha

Los operadores de condición de fecha le permiten desarrollar elementos Condition que restringen el acceso comparando una clave con el valor de una fecha/hora. Los operadores de condición se usan con la clave aws:CurrentTime o las claves aws:EpochTime. Debe especificar valores de fecha y hora con una de las implementaciones W3C de los formatos de fecha ISO 8601 o en la fecha de inicio (UNIX).

nota

Los comodines no están permitidos en los operadores de condición de fecha.

Operador de condición ​Descripción

DateEquals

Coincidencia con una fecha específica.

DateNotEquals

Coincidencia negada.

DateLessThan

Coincidencia antes de una fecha y hora específicas.

DateLessThanEquals

Coincidencia en una fecha y hora específicas o antes.

DateGreaterThan

Coincidencia después de una fecha y hora específicas.

DateGreaterThanEquals

Coincidencia en una fecha y hora específicas o después.

Por ejemplo, la instrucción siguiente contiene un elemento Condition que utiliza el operador de condición DateGreaterThan con la clave aws:TokenIssueTime. Esta condición especifica que las credenciales de seguridad temporales utilizadas para realizar la solicitud se emitieron en 2020. Esta política se puede actualizar mediante programación todos los días para asegurarse de que los miembros de la cuenta utilizan credenciales nuevas.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/*", "Condition": {"DateGreaterThan": {"aws:TokenIssueTime": "2020-01-01T00:00:01Z"}} } }

Si la clave especificada en una condición de política no está presente en el contexto de la solicitud, los valores no coincidirán. La clave aws:TokenIssueTime está presente en el contexto de la solicitud solo cuando el principal utiliza credenciales temporales para realizar la solicitud. Estas claves no están presentes en solicitudes de la AWS CLI, la API de AWS o el SDK de AWS realizadas con claves de acceso. En este ejemplo, si un usuario IAM intenta ver o editar una clave de acceso, se deniega la solicitud.

No puede utilizar un variable de política con el Date operador de condición.

Operadores de condición booleana

Las condiciones booleanas le permiten crear elementos Condition que restringen el acceso comparando una clave con "true" o "false".

Operador de condición ​Descripción

Bool

Coincidencia booleana

Por ejemplo, la siguiente instrucción utiliza el operador de condición Bool con la clave aws:SecureTransport para especificar que la solicitud debe utilizar SSL.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/*", "Condition": {"Bool": {"aws:SecureTransport": "true"}} } }

Si la clave especificada en una condición de política no está presente en el contexto de la solicitud, los valores no coincidirán. La clave aws:SecureTransport siempre está presente en el contexto de la solicitud.

No puede utilizar un variable de política con el Boolean operador de condición.

Operadores de condición binaria

El operador de condición BinaryEquals le permite crear elementos Condition que prueban valores de clave que están en formato binario. Compara el valor del byte de la clave especificada con una representación codificada en base 64 del valor binario de la política.

"Condition" : { "BinaryEquals": { "key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA==" } }

Si la clave especificada en una condición de política no está presente en el contexto de la solicitud, los valores no coincidirán.

No puede utilizar un variable de política con el Binary operador de condición.

Operadores de condición de dirección IP

Los operadores de condición de la dirección IP le permiten crear elementos Condition que restringen el acceso basándose en una comparación de una clave con una dirección IPv4 o IPv6 o un rango de direcciones IP. Puede utilizarlos con la clave aws:SourceIp. El valor debe tener el formato CIDR estándar (por ejemplo, 203.0.113.0/24 o 2001: DB8:1234:5678::/64). Si especifica una dirección IP sin el prefijo de enrutamiento asociado, IAM utiliza el valor del prefijo predeterminado /32.

Algunos dispositivos AWS admiten IPv6 usando :: para representar un rango de 0. Para saber si un servicio es compatible con IPv6, consulte la documentación correspondiente a dicho servicio.

Operador de condición ​Descripción

IpAddress

La dirección o el rango IP especificado

NotIpAddress

Todas las direcciones IP, salvo la dirección o el rango IP especificado

Por ejemplo, la siguiente instrucción utiliza el operador de condición IpAddress con la clave aws:SourceIp para especificar que la solicitud debe provenir del rango IP 203.0.113.0 a 203.0.113.255.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/*", "Condition": {"IpAddress": {"aws:SourceIp": "203.0.113.0/24"}} } }

La clave de condición aws:SourceIp se resuelve en la dirección IP de la que proviene la solicitud. Si la solicitud se origina en una instancia Amazon EC2, aws:SourceIp toma el valor de la dirección IP pública de la instancia.

Si la clave especificada en una condición de política no está presente en el contexto de la solicitud, los valores no coincidirán. La clave aws:SourceIp se incluye siempre en el contexto de la solicitud, excepto cuando el solicitante utiliza un punto de enlace de la VPC para realizar la solicitud. En este caso, la condición devuelve false y la instrucción deniega la solicitud implícitamente.

No puede utilizar un variable de política con el IP Address operador de condición.

En el siguiente ejemplo se muestra cómo combinar direcciones IPv4 e IPv6 para incluir todas las direcciones IP válidas de su organización. Le recomendamos que aumente las políticas de su organización con los rangos de direcciones IPv6 además de los rangos de IPv4 que ya tiene para asegurarse de que las políticas seguirán funcionando a medida que realiza la transición a IPv6.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "someservice:*", "Resource": "*", "Condition": { "IpAddress": { "aws:SourceIp": [ "203.0.113.0/24", "2001:DB8:1234:5678::/64" ] } } } }

La clave de condición aws:SourceIp funciona solo en una política JSON si se llama a la API que se está probando directamente como usuario. Si en su lugar utiliza un servicio para llamar al servicio de destino en su nombre, el servicio de destino verá la dirección IP del servicio de llamada en lugar de la dirección IP del usuario de origen. Esto puede ocurrir, por ejemplo, si utiliza AWS CloudFormation para llamar a Amazon EC2 para crear instancias en su lugar. Actualmente no se puede transferir la dirección IP de origen mediante un servicio de llamada al servicio de destino para que lo evalúe una política de JSON. En este tipo de llamadas a la API de servicio, no utilice la clave de condición aws:SourceIp.

Operadores de condición de nombre de recurso de Amazon (ARN)

Los operadores de condición de nombre de recurso de Amazon (ARN) le permiten crear elementos Condition que restringen el acceso comparando una clave con un ARN. El ARN se considera una cadena. No todos los servicios admiten la comparación de ARN mediante este operador. Si el operador de condición de ARN no funciona, intente usar operadores de condición de cadena.

Operador de condición ​Descripción

ArnEquals, ArnLike

Coincidencia del ARN que distingue entre mayúsculas y minúsculas. Cada uno de los seis componentes del ARN delimitados por dos puntos se comprueba por separado y cada uno de ellos puede incluir un comodín (*) para coincidencias de varios caracteres o un comodín (?) para coincidencias de un único carácter. Se comportan de forma idéntica.

ArnNotEquals, ArnNotLike

Coincidencia negada del ARN. Se comportan de forma idéntica.

Puedes utilizar un variable de política con el ARN operador de condición.

En el siguiente ejemplo de política basada en recursos se muestra una política asociada a una cola de Amazon SQS a la que desea enviar mensajes SNS. Da a Amazon SNS permiso para enviar mensajes a la cola (o colas) de su elección, pero solo si el servicio envía los mensajes en nombre de un determinado tema (o temas) de Amazon SNS. La cola se especifica en el campo Resource y el tema de Amazon SNS se especifica como el valor de la clave SourceArn.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"AWS": "123456789012"}, "Action": "SQS:SendMessage", "Resource": "arn:aws:sqs:REGION:123456789012:QUEUE-ID", "Condition": {"ArnEquals": {"aws:SourceArn": "arn:aws:sns:REGION:123456789012:TOPIC-ID"}} } }

Si la clave especificada en una condición de política no está presente en el contexto de la solicitud, los valores no coincidirán. La clave aws:SourceArn está presente en el contexto de la solicitud solo si un recurso activa un servicio para llamar a otro servicio en nombre del propietario del recurso. Si un usuario IAM intenta realizar esta operación directamente, la condición devuelve false y la instrucción deniega la solicitud implícitamente.

... Operadores de condición IfExists

Puede añadir IfExists al final de cualquier nombre de operador de condición, excepto el Null condición—por ejemplo, StringLikeIfExists. Puede hacer esto para decir: "Si la clave de política está presente en el contexto de la solicitud, procese la clave tal y como se especifica en la política. Si la clave no está presente, el elemento de condición se evalúa en verdadero". Otros elementos de condición de la instrucción pueden seguir sin obtener una coincidencia, pero no una clave que falte cuando se comprueba con ...IfExists.

Ejemplo de uso de IfExists

Muchas claves de condición describen información sobre un determinado tipo de recurso y solo existen cuando se obtiene acceso a ese tipo de recurso. Estas claves de condición no están presentes en otros tipos de recursos. Esto no crea ningún problema cuando la instrucción de la política se aplica únicamente a un tipo de recurso. Sin embargo, en algunos casos una única instrucción se aplica a varios tipos de recursos, como, por ejemplo, cuando la instrucción de la política hace referencia a acciones de varios servicios o cuando una acción determinada de un servicio obtiene acceso a diferentes tipos de recursos en el mismo servicio. En estos casos, la inclusión de una clave de condición que se aplique únicamente a uno de los recursos de la instrucción de la política puede hacer que el elemento Condition de la instrucción dé un error y que su "Effect" no se aplique.

Por ejemplo, tomemos el siguiente ejemplo de política:

{ "Version": "2012-10-17", "Statement": { "Sid": "THISPOLICYDOESNOTWORK", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": {"StringLike": {"ec2:InstanceType": [ "t1.*", "t2.*", "m3.*" ]}} } }

El propósito de la política anterior es habilitar al usuario para que pueda lanzar cualquier instancia de tipo t1, t2 o m3. Sin embargo, lanzar una instancia requiere poder obtener acceso a muchos recursos, además de obtener acceso a la instancia en sí; por ejemplo, imágenes, pares de claves, grupos de seguridad, etc. Toda la instrucción se evalúa con respecto a todos los recursos exigidos para lanzar la instancia. Estos recursos adicionales no tienen la clave de condición ec2:InstanceType, por lo que la comprobación StringLike da un error y no se concede al usuario la capacidad para lanzar cualquier tipo de instancia. Para solucionar este problema, utilice en su lugar el operador de condición StringLikeIfExists. De esta forma, la prueba solo se realiza si la clave de condición existe. Puede leer lo siguiente: "Si el recurso que se está comprobando tiene un "ec2:InstanceType" clave de condición, permitir la acción solo si el valor de clave comienza por "t1.*", "t2.*" o "m3.*". Si el recurso que se está comprobando no tiene esta clave de condición, no deberá tenerse en cuenta". La instrucción DescribeActions incluye las acciones requeridas para ver la instancia en la consola.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RunInstance", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "StringLikeIfExists": { "ec2:InstanceType": [ "t1.*", "t2.*", "m3.*" ]}} }, { "Sid": "DescribeActions", "Effect": "Allow", "Action": [ "ec2:DescribeImages", "ec2:DescribeInstances", "ec2:DescribeVpcs", "ec2:DescribeKeyPairs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ], "Resource": "*" }] }

Operador de condición para comprobar la existencia de claves de condición

Utilice un operador de condición Null para comprobar si una clave de condición está presente en el momento de la autorización. En la instrucción de la política, utilice true (la clave no existe —es nula) o false (la clave existe y su valor no es nulo).

No puede utilizar un variable de política con el Null operador de condición.

Por ejemplo, puede utilizar este operador de condición para determinar si un usuario utiliza sus propias credenciales para la operación o credenciales temporales. Si el usuario utiliza credenciales temporales, la clave aws:TokenIssueTime existe y tiene un valor. En el siguiente ejemplo se muestra una condición que establece que el usuario no debe utilizar credenciales temporales (la clave no debe existir) para utilizar la API de Amazon EC2.

{ "Version": "2012-10-17", "Statement":{ "Action":"ec2:*", "Effect":"Allow", "Resource":"*", "Condition":{"Null":{"aws:TokenIssueTime":"true"}} } }