AWS Identity and Access Management
Guía del usuario

Claves de contexto de condición globales de AWS

Puede usar el elemento Condition de una política de JSON en IAM para probar el valor de las claves incluidas en el contexto de evaluación de todas las solicitudes de API de AWS. Estas claves proporcionan información sobre la propia solicitud o sobre los recursos a los que se refiere. Puede comprobar que las claves han especificado valores antes de permitir la acción que ha solicitado el usuario. De este modo, dispondrá de control detallado sobre cuándo las instrucciones de la política de JSON coinciden o no coinciden con una solicitud de API entrante. Para obtener información sobre cómo utilizar el elemento Condition en una política de JSON, consulte Elementos de política JSON de IAM: Condition.

En este tema se describen las claves disponibles globalmente (con el aws:). Los servicios de AWS, como IAM, proporcionan claves específicas del servicio que son pertinentes para las acciones y los recursos que se definen por dicho servicio. Para obtener más información, consulte Claves de condición, recursos y acciones de los servicios de AWS. La documentación de un servicio que admite las claves de condición a menudo dispone de información adicional. Por ejemplo, para obtener información acerca de las claves que puede utilizar en las políticas de recursos de Amazon S3, consulte las Claves de política de Amazon S3 en la Guía para desarrolladores de Amazon Simple Storage Service.

Algunas claves de condiciones globales están disponibles para todos los servicios de AWS, otras solo son compatibles con algunos servicios. Puede utilizar estas claves en las políticas de IAM, pero no necesariamente en políticas basadas en recursos.

Claves disponibles para todos los servicios

AWS proporciona claves de condición predefinidas para todos los servicios de AWS compatibles con el IAM para controlar el acceso: Para obtener más información acerca de la escritura de políticas para estos servicios, consulte Claves de condición, recursos y acciones de los servicios de AWS.

aws:CurrentTime

Funciona con operadores de fecha.

Son la fecha y hora actuales para comprobar las condiciones de fecha y hora.

aws:EpochTime

Funciona con operadores de fecha.

Fecha y hora actuales en tiempo Unix para comprobar las condiciones de fecha y hora.

aws:MultiFactorAuthAge

Funciona con operadores numéricos.

Comprueba cuánto tiempo (en segundos) ha transcurrido desde que se emitieron las credenciales de seguridad validadas por MFA con las que se ha realizado la solicitud utilizando la autenticación multifactor (MFA). La clave no estará presente si no se ha utilizado la MFA. Consulte Uso de Multi-Factor Authentication (MFA) en AWS. Por lo tanto, se trata de otra clave con la que debería considerar usar las versiones *IfExists de los operadores de comparación. Esto garantiza que los resultados de la comparación sean los previstos incluso cuando la clave no está presente en el contexto de la solicitud.

aws:MultiFactorAuthPresent

Funciona con operadores booleanos.

Comprueba si se utilizó la autenticación multifactor (MFA) para validar las credenciales de seguridad temporales con las que se hace la solicitud actual. Esta clave está presente en el contexto de la solicitud solo cuando el usuario utiliza credenciales temporales para realizar la solicitud. Estas claves no están presentes en solicitudes de laAWS CLI, la API de AWS o el SDK de AWS realizadas con claves de acceso.

Las credenciales temporales se utilizan con roles de IAM, usuarios federados, usuarios de IAM con tokens temporales de sts:GetSessionToken y usuarios de la Consola de administración de AWS. Los usuarios inician sesión en la consola con credenciales de nombre de usuario y contraseña a largo plazo. Sin embargo, en segundo plano, la consola genera credenciales temporales en nombre del usuario. La clave aws:MultiFactorAuthPresent nunca está presente cuando se llama a una API o a un comando de la CLI con credenciales a largo plazo, como los pares de claves de acceso. Por lo tanto, le recomendamos que cuando compruebe esta clave utilice las versiones ...IfExists de los operadores de condición.

Es importante entender que el siguiente elemento Condition no es una forma fiable de comprobar si una solicitud se ha autenticado mediante MFA:

##### WARNING: NOT RECOMMENDED ##### "Effect" : "Deny", "Condition" : { "Bool" : { "aws:MultiFactorAuthPresent" : false } }

Esta combinación del efecto Deny, el elemento Bool y el valor false deniega las solicitudes que se pueden autenticar con MFA, pero que no han sido autenticadas de ese modo. Se aplica únicamente a las credenciales temporales que admiten el uso de MFA. Esta instrucción no deniega el acceso a las solicitudes realizadas con las credenciales a largo plazo ni a las solicitudes que se han autenticado con MFA. Utilice este ejemplo con precaución ya que su lógica es complicada y no comprueba si realmente se usó la autenticación tipo MFA.

Además no utilice la combinación del efecto Deny, el elemento Null y true ya que se comporta de la misma manera y la lógica es incluso más complicada.

Combinación recomendada

Le recomendamos que utilice el operador BoolIfExists para comprobar si se ha autenticado una solicitud con MFA.

"Effect" : "Deny", "Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : false } }

Esta combinación de Deny, BoolIfExists y false deniega las solicitudes que no están autenticadas con MFA. En concreto, deniega las solicitudes de credenciales temporales que no incluyen MFA. También deniega las solicitudes realizadas con credenciales a largo plazo, como las operaciones de la AWS CLI o de la API de AWS realizadas con claves de acceso. El operador *IfExists comprueba la presencia de la clave aws:MultiFactorAuthPresent y si PODRÍA estar presente o no, como lo indica su existencia. Utilícelo cuando desee denegar solicitudes que no están autenticadas con MFA. Esto es más seguro, pero puede interrumpir cualquier código o script que utilice claves de acceso para obtener acceso a la AWS CLI o la API de AWS.

Combinaciones alternativas

También puede utilizar el operador BoolIfExists para permitir solicitudes autenticadas con MFA y solicitudes de la AWS CLI o la API de AWS realizadas con las credenciales a largo plazo.

"Effect" : "Allow", "Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : true } }

Esta condición coincide tanto si la clave existe y está presente como si la clave no existe. Esta combinación de Allow, BoolIfExists y true permite solicitudes autenticadas mediante MFA o solicitudes que no pueden autenticarse con MFA. Esto significa que las operaciones de la AWS CLI, la API de AWS y el SDK de AWS están permitidas cuando el solicitante utiliza sus claves de acceso a largo plazo. Esta combinación no permite solicitudes de credenciales temporales que podrían, pero no incluyen MFA.

Al crear una política con el editor visual de la consola de IAM y elegir MFA required (MFA requerida), se aplica esta combinación. Esta configuración requiere MFA para acceso a la consola, pero permite el acceso mediante programación sin MFA.

También puede utilizar el operador Bool para permitir solicitudes programáticas y de consola solo cuando se autentique mediante MFA.

"Effect" : "Allow", "Condition" : { "Bool" : { "aws:MultiFactorAuthPresent" : true } }

Esta combinación de Allow, Bool y true permite solo las solicitudes autenticadas con MFA. Se aplica únicamente a las credenciales temporales que admiten el uso de MFA. Esta instrucción no permite el acceso a las solicitudes realizadas con las claves de acceso a largo plazo ni a las solicitudes realizadas con credenciales temporales sin MFA.

No utilice una estructura de política similar a la siguiente para comprobar si la clave de MFA está presente:

##### WARNING: USE WITH CAUTION ##### "Effect" : "Allow", "Condition" : { "Null" : { "aws:MultiFactorAuthPresent" : false } }

Esta combinación del efecto Allow, el elemento Null y el valor false permite únicamente las solicitudes que se pueden autenticar con MFA, independientemente de si la solicitud está, de hecho, autenticada. Esto permite todas las solicitudes realizadas con credenciales temporales y deniega el acceso para las credenciales a largo plazo. Utilice este ejemplo con precaución ya que no comprueba si realmente se usó la autenticación tipo MFA.

aws:PrincipalOrgID

Funciona con operadores de cadena.

Es el identificador de una organización que ha creado con AWS Organizations. Esta clave global es una alternativa a mostrar todos los ID de todas las cuentas de AWS de una organización. Puede usar esta clave de condición para simplificar la especificación del elemento Principal en una política basada en recursos. En lugar de mostrar todas las cuentas de la organización, puede especificar el ID de organización en el elemento de condición. Al añadir y quitar cuentas, las políticas que especifiquen aws:PrincipalOrgID incluirán automáticamente las cuentas correctas y no requerirán una actualización manual.

Por ejemplo, la siguiente política de bucket de Amazon S3 permite a los miembros de cualquier cuenta de la organización o-xxxxxxxxxxx añadir un objeto al bucket policy-ninja-dev.

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowPutObject", "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::policy-ninja-dev/*", "Condition": {"StringEquals": {"aws:PrincipalOrgID":["o-xxxxxxxxxxx"]} } } }

nota

Esta condición global también se aplica a la cuenta maestra de una organización de AWS.

Para obtener más información acerca de AWS Organizations, consulte ¿Qué es AWS Organizations? en la Guía del usuario de AWS Organizations.

aws:PrincipalArn

Funciona con operadores ARN.

Comprueba el nombre de recurso de Amazon (ARN) del usuario o la función de IAM que ha realizado la solicitud.

aws:RequestedRegion

Funciona con operadores de cadena.

Comprueba si se hace una solicitud de AWS a una región específica. Puede utilizar esta clave de condición global para controlar las regiones a las que los usuarios pueden hacer solicitudes. Para ver la lista de regiones de AWS para cada servicio, consulte Regiones y puntos de enlace de AWS en la Referencia general de Amazon Web Services.

Los servicios globales, como IAM, tienen un único punto de enlace. Sin embargo, dado que este punto de enlace se encuentra físicamente en la región US East (N. Virginia), las llamadas a IAM se hacen siempre a la región us-east-1. Por ejemplo, si crea una política que deniegue el acceso a todos los servicios cuando la región solicitada no sea us-west-2, las llamadas a IAM siempre generarán un error. Para ver un ejemplo de cómo evitar este problema, consulte NotAction con Deny.

nota

La clave de condición aws:RequestedRegion le permite controlar qué punto de enlace de un servicio se invoca, pero no controlar el impacto de la operación. Algunos servicios afectan a varias regiones. Por ejemplo, Amazon S3 tiene operaciones de API que controlan la replicación entre regiones. Puede invocar s3:PutBucketReplication en una región (lo que se consigue con la clave de condición aws:RequestedRegion), pero afectar también a otras regiones en función de las opciones de configuración de replicaciones.

Puede usar esta clave de contexto para limitar el acceso a los servicios de AWS a un conjunto de regiones determinado. Por ejemplo, la política siguiente permite a un usuarios ver todas las instancias Amazon EC2 en la Consola de administración de AWS. Sin embargo, solo permite realizar cambios en las instancias de Irlanda (eu-west-1), Londres (eu-west-2) o París (eu-west-3).

{ "Version": "2012-10-17", "Statement": [ { "Sid": "InstanceConsoleReadOnly", "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeIamInstanceProfileAssociations", "ec2:DescribeInstanceAttribute", "ec2:DescribeReservedInstancesOfferings", "ec2:DescribeClassicLinkInstances", "ec2:DescribeSpotInstanceRequests", "ec2:GetReservedInstancesExchangeQuote", "ec2:DescribeInstanceCreditSpecifications", "ec2:DescribeSpotFleetInstances", "ec2:DescribeScheduledInstances", "ec2:DescribeScheduledInstanceAvailability", "ec2:DescribeReservedInstancesModifications", "ec2:DescribeReservedInstances", "ec2:DescribeReservedInstancesListings", "ec2:DescribeInstanceStatus" ], "Resource": "*" }, { "Sid": "InstanceWriteRegionRestricted", "Effect": "Allow", "Action": [ "ec2:ModifyInstancePlacement", "ec2:TerminateInstances", "ec2:ImportInstance", "ec2:StartInstances", "ec2:MonitorInstances", "ec2:RunScheduledInstances", "ec2:ResetInstanceAttribute", "ec2:RunInstances", "ec2:ModifyInstanceAttribute", "ec2:StopInstances", "ec2:AssociateIamInstanceProfile", "ec2:ModifyReservedInstances" ], "Resource": "*", "Condition": {"StringEquals": {"aws:RequestedRegion": [ "eu-west-1", "eu-west-2", "eu-west-3" ]}} } ] }
aws:SecureTransport

Funciona con operadores booleanos.

Comprueba si la solicitud se envió mediante SSL.

aws:UserAgent

Funciona con operadores de cadena.

Comprueba la aplicación cliente del solicitante.

aviso

Esta clave debe utilizarse con cuidado. Puesto que el valor aws:UserAgent lo proporciona el intermediario en un encabezado HTTP, partes no autorizadas podrían usar navegadores personalizados o modificados para proporcionar cualquier valor aws:UserAgent que eligieran. En consecuencia, aws:UserAgent no debe utilizarse para impedir que las partes no autorizadas realicen solicitudes AWS de forma directa. Puede utilizarlo para permitir únicamente aplicaciones cliente específicas y solo después de probar su política.

Claves disponibles para algunos servicios

AWS proporciona claves de condición predefinidas solo para algunos servicios de AWS compatibles con estas características. Para saber si un servicio es compatible con una de estas claves de condición, debe examinar la documentación correspondiente a dicho servicio.

nota

Si utiliza claves de condición que solo están disponibles en algunas situaciones, puede utilizar las versiones IfExists de los operadores de condición. Si faltan las claves de condición de un contexto de solicitud, el motor de políticas podría generar un error en la evaluación. Por ejemplo, utilice la siguiente política con operadores ...IfExists para satisfacer si una solicitud específica proviene de un rango de direcciones IP o de una VPC específica. Si una o ambas claves no existen, la condición seguirá aplicándose. Los valores solo se comprueban si existe la clave especificada en la solicitud.

"Condition": {"IpAddressIfExists": {"aws:SourceIp" : ["xxx"] }, "StringEqualsIfExists" : {"aws:SourceVpc" : ["yyy"]} }
aws:PrincipalTag/tag-key

Funciona con operadores de cadena.

Comprueba que la etiqueta asociada al principal que realiza la solicitud coincida con el valor y el nombre de la clave especificada.

Puede añadir atributos personalizados a un usuario o rol en forma de un par de clave–valor. Para obtener más información acerca de las etiquetas de IAM, consulte Etiquetado de entidades de IAM. Puede usar aws:PrincipalTag para controlar el acceso para principales de AWS.

En este ejemplo se muestra cómo crear una política que permite a los usuarios con la etiqueta tagManager=true administrar usuarios, grupos o roles de IAM.Para utilizar esta política, sustituya el texto rojo en cursiva del ejemplo de política por su propia información.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:*", "Resource": "*", "Condition": {"StringEquals": {"aws:PrincipalTag/tagManager": "true"}} } ] }
aws:PrincipalType

Funciona con operadores de cadena.

Comprueba el tipo de principal (usuario, cuenta, usuario federado, etc.) de la solicitud actual.

Esta clave de condición está disponible solo para algunos servicios.

aws:Referer

Funciona con operadores de cadena.

Comprueba quién ha indicado al navegador del cliente la dirección a la que se envía la solicitud. Solo es compatible con algunos servicios, como Amazon S3, como un servicio al que el navegador web puede dirigirse directamente. aws:referer permite a los propietarios del bucket Amazon S3 ayudar a evitar que sitios de terceros no autorizados utilicen su contenido en navegadores web estándar. El valor procede del encabezado de la referencia en la solicitud HTTPS enviada a AWS. El valor aws:referer lo proporciona el intermediario en un encabezado HTTP.

aviso

Esta clave debe utilizarse con cuidado. Es peligroso incluir un valor de encabezado de referencia conocido públicamente. Las partes no autorizadas podrían usar navegadores personalizados o modificados para proporcionar cualquier valor aws:referer que eligieran. En consecuencia, aws:referer no debe utilizarse para impedir que las partes no autorizadas realicen solicitudes AWS de forma directa. Se ofrece únicamente para que los clientes puedan proteger su contenido digital almacenado en Amazon S3 de referencias desde sitios de terceros no autorizados.

Esta clave de condición está disponible solo para algunos servicios.

aws:RequestTag/tag-key

Funciona con operadores de cadena.

Esta clave de contexto tiene el formato "aws:RequestTag/tag-key":"tag-value", donde tag-key y tag-value son un par formado por una clave y un valor.

Compruebe que el par de clave–valor de la etiqueta está presente en una solicitud de AWS. Por ejemplo, podría comprobar que la solicitud incluya la clave de etiqueta "Dept" y que tenga el valor "Accounting". Para obtener más información, consulte Control del acceso durante solicitudes de AWS.

Esta clave de condición está disponible solo para algunos servicios y fue introducida para Amazon EC2.

aws:ResourceTag/tag-key

Funciona con operadores de cadena.

Esta clave de contexto tiene el formato "aws:ResourceTag/tag-key":"tag-value", donde tag-key y tag-value son un par formado por una clave y un valor.

Comprueba que el par clave–valor de la etiqueta se adjunta al recurso. Por ejemplo, puede requerir que el acceso a un recurso solo se permita si el recurso tiene la clave de etiqueta "Dept" adjunta con el valor "Marketing". Para obtener más información, consulte Control del acceso a los recursos de AWS.

Esta clave de condición está disponible solo para algunos servicios.

aws:SourceAccount

Funciona con operadores de cadena.

Comprueba si el origen de la solicitud es una cuenta determinada. Por ejemplo, supongamos que tiene un bucket de S3 en su cuenta configurado para enviar eventos de creación de objetos a un tema de SNS. En ese caso, podría utilizar esta clave de condición para comprobar que Amazon S3 no se está utilizando como un suplente confuso. Amazon S3 indica a Amazon SNS la cuenta a la que pertenece el bucket.

Esta clave de condición está disponible solo para algunos servicios.

aws:SourceArn

Funciona con operadores ARN.

Comprueba el origen de la solicitud usando el Nombre de recurso de Amazon (ARN) del origen.

Esta clave de condición está disponible solo para algunos servicios.

aws:SourceIp

Funciona con operadores de direcciones IP.

Comprueba la dirección IP del solicitante, consulte Operadores de condición de dirección IP.

nota

La clave de condición aws:SourceIp debe utilizarse en una política JSON únicamente para usuarios, grupos, roles o usuarios federados de IAM que realicen llamadas a la API desde el rango de IP especificado. Esta política deniega el acceso a un servicio de AWS que realiza llamadas en su nombre. Por ejemplo, supongamos que tiene un rol de servicio que permite a AWS CloudFormation llamar a Amazon EC2 para detener una instancia. En ese caso, la solicitud se deniega, porque el servicio de destino (Amazon EC2) ve la dirección IP del servicio que llama (AWS CloudFormation) en lugar de la dirección IP del usuario de origen. No hay modo de 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.

Si la solicitud proviene de un host que utiliza un punto de enlace de Amazon VPC, entonces la clave aws:SourceIp no estará disponible. En su lugar deberá utilizar una clave específica de VPC. Para obtener más información, consulte VPC Endpoints - Controlling the Use of Endpoints en la Guía del usuario de Amazon VPC.

aws:SourceVpc

Funciona con operadores de cadena.

Restringe el acceso a una VPC específica. Para obtener más información, consulte Restricción del acceso a una VPC específica en la Guía para desarrolladores de Amazon Simple Storage Service.

Esta clave de condición está disponible para servicios que admiten el tráfico a través de un punto de enlace de la VPC.

aws:SourceVpce

Funciona con operadores de cadena.

Restringe el acceso a un punto de enlace de VPC específico. Para obtener más información, consulte Restricción del acceso a un punto de enlace de la VPC específico en la Guía para desarrolladores de Amazon Simple Storage Service.

Esta clave de condición está disponible para servicios que admiten el tráfico a través de un punto de enlace de la VPC.

aws:TagKeys

Funciona con operadores de cadena.

Esta clave de contexto tiene el formato "aws:TagKeys":"tag-key", donde tag-key es una lista de claves de etiqueta sin valores (por ejemplo, ["Dept","Cost-Center"]).

Comprueba las claves de etiqueta presentes en una solicitud de AWS.

Como práctica recomendada cuando utilice políticas para controlar el acceso mediante etiquetas, utilice la clave de condición aws:TagKeys para definir lo que se permite realizar a las claves de etiqueta. Para obtener más información y políticas de ejemplo, consulte Control del acceso en función de las claves de etiqueta.

nota

Algunos servicios admiten el etiquetado con las operaciones del recurso, como, por ejemplo, crear, modificar o eliminar un recurso. Para permitir el etiquetado y las operaciones como una sola llamada, debe crear una política que incluya tanto la acción de etiquetado como la acción de modificación del recurso. A continuación, puede utilizar la clave de condición aws:TagKeys para imponer el uso de claves de etiqueta específicas en la solicitud. Por ejemplo, para limitar las etiquetas cuando alguien crea una instantánea de Amazon EC2, debe incluir la acción de creación ec2:CreateSnapshot y la acción de etiquetado ec2:CreateTags en la política. Para ver una política para este escenario que utiliza aws:TagKeys, consulte Crear una instantánea con etiquetas en la Guía del usuario de Amazon EC2 para instancias de Linux.

Esta clave de condición está disponible solo para algunos servicios y fue introducida para Amazon EC2.

aws:TokenIssueTime

Funciona con operadores de fecha.

Comprueba la fecha y hora en que se emitieron las credenciales de seguridad temporales.

Esta clave de condición solo está disponible para algunos servicios que admiten el tráfico a través de credenciales de seguridad temporales. Para obtener información sobre los servicios que admiten el uso de credenciales temporales, consulte Servicios de AWS que funcionan con IAM.

aws:userid

Funciona con operadores de cadena.

Comprueba el ID de usuario del solicitante.

Esta clave de condición está disponible solo para algunos servicios.

aws:username

Funciona con operadores de cadena.

Comprueba el nombre de usuario del solicitante.

Esta clave de condición está disponible solo para algunos servicios.

aws:VpcSourceIp

Funciona con operadores de direcciones IP.

Cuando se utiliza en las políticas de punto de enlace de la VPC, restringe el acceso a determinadas IP desde la VPC del principal.

Esta clave de condición solo se pueden usar en las políticas de punto de enlace de la VPC. Para obtener más información, consulte Controlar el acceso a servicios con puntos de enlace de la VPC en la Guía del usuario de Amazon VPC.