AWS Identity and Access Management
Guía del usuario

Elementos de la política de IAM: Variables y etiquetas

Utilice las variables de las políticas de AWS Identity and Access Management (IAM) como marcadores de posición cuando no sepa el valor exacto de un recurso o una clave de condición al escribir la política.

nota

Si AWS no puede resolver una variable, esto puede provocar que toda la declaración no sea válida. Por ejemplo, si utiliza la variable aws:TokenIssueTime, la variable se resuelve a un valor solo cuando el solicitante se ha autenticado mediante credenciales temporales (una función de IAM). Para evitar que las variables causen declaraciones no válidas, utilice el operador de condición IfExist.

Introducción

En las políticas de IAM, hay muchas acciones que le permiten asignar un nombre para los recursos concretos cuyo acceso desea controlar. Por ejemplo, la siguiente política permite a los usuarios enumerar y escribir objetos con un prefijo David en el bucket mybucket de Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket"], "Condition": {"StringLike": {"s3:prefix": ["David/*"]}} }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/David/*"] } ] }

Puede darse el caso de que no sepa el nombre exacto del recurso cuando escribe la política. Es posible que le interese generalizar la política de modo que se adapte a muchos usuarios sin necesidad de realizar una única copia de la política para cada usuario. Por ejemplo, es posible que desee permitir que cada usuario tenga acceso a sus propios objetos en un bucket de Amazon S3, como en el ejemplo anterior. Sin embargo, no cree una política independiente para cada usuario que especifique explícitamente el nombre del usuario como parte del recurso. En su lugar, cree una única política de grupo que sirva para todos los usuarios de dicho grupo.

Puede hacerlo usando variables de política, una característica que le permite especificar comodines en una política. Cuando se evalúa una política, las variables de esta se sustituyen por valores procedentes del contexto de la solicitud.

En el siguiente ejemplo se muestra una política para un bucket de Amazon S3 que utiliza una variable de política.

{ "Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket"], "Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}} }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"] } ] }

Cuando esta política se evalúa, IAM reemplaza la variable ${aws:username}por el nombre fácil de recordar del usuario real actual. Esto significa que una única política aplicada a un grupo de usuarios puede controlar el acceso a un bucket con el nombre de usuario incluido como parte del recurso.

La variable se marca con un prefijo $ seguido de un par de llaves ({ }). Dentro de los caracteres ${ }, se puede incluir el nombre del valor de la solicitud que quiere utilizar en la política. Los valores que puede utilizar se tratan más adelante en esta página.

nota

Para poder utilizar las variales de políticas debe incluir el Version el elemento en una declaración, y la versión debe ser una que admita las variables de la política. Variables se introdujeron en la versión 2012-10-17. Las versiones anteriores del lenguaje de políticas no son compatibles con las variables de políticas. Si no incluye el elemento Version ni lo establece en la fecha correspondiente a esta versión, las variables como ${aws:username} se tratarán como cadenas literales en la política.

El elemento de política Version es diferente de la versión de una política. El elemento de política Version se utiliza en una política y define la versión del lenguaje de la política. Una versión de política, por otro lado, se crea al cambiar una política administrada por el cliente en IAM. La política modificada no anula la política existente. En cambio, IAM crea una nueva versión de la política administrada. Para obtener más información sobre el elemento de política Version, consulte Elementos de política JSON de IAM: Version. Para obtener más información sobre las versiones de política, consulte Control de versiones de políticas de IAM.

Puede utilizar las variables de políticas de forma similar para permitir a cada usuario administrar sus propias claves de acceso. Una política que permita a un usuario cambiar de forma programada la clave de acceso del usuario David tiene este aspecto:

{ "Version": "2012-10-17", "Statement": [{ "Action": ["iam:*AccessKey*"], "Effect": "Allow", "Resource": ["arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/David"] }] }

Si esta política se asocia al usuario David, dicho usuario puede cambiar su propia clave de acceso. Al igual que con las políticas para obtener acceso a objetos de Amazon S3 específicos de un usuario, tendrá que crear para cada usuario una política independiente que contenga el nombre del usuario. Después, tendrá que asociar cada política a los usuarios individuales.

Si utiliza una variable de política, puede crear una política de este tipo:

{ "Version": "2012-10-17", "Statement": [{ "Action": ["iam:*AccessKey*"], "Effect": "Allow", "Resource": ["arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/${aws:username}"] }] }

Cuando utiliza una variable de política para el nombre de usuario de este tipo, no tiene que tener una política independiente para cada usuario individual. En su lugar, puede asociar esta nueva política a un grupo de IAM que incluya a todos los que deben tener permiso de administración de sus propias claves de acceso. Cuando un usuario realiza una solicitud para modificar su clave de acceso, IAM sustituye el nombre de usuario de la solicitud actual por la variable ${aws:username} y evalúa la política.

Etiquetas como variables de la política

En algunos servicios de AWS puede asociar sus propios atributos personalizados a los recursos creados por dichos servicios. Por ejemplo, puede aplicar etiquetas a buckets de Amazon S3o a usuarios y roles de IAM. Estas etiquetas son pares de clave–valor. Puede definir el nombre de la clave de la etiqueta y el valor asociado a dicho nombre de clave. Podría, por ejemplo, crear una etiqueta con una clave department y un valor Human Resources. Para obtener más información sobre la etiquetación de entidades de IAM, consulte Etiquetado de entidades de IAM. Para obtener información acerca de cómo etiquetar recursos creados por otros servicios de AWS, consulte la documentación de dicho servicio. Para obtener más información acerca de cómo utilizar Tag Editor, consulte Uso de Tag Editor en la Guía del usuario de Consola de administración de AWS.

Puede etiquetar identidades de IAM para simplificar la detección , la organización y el seguimiento de recursos de IAM. También puede etiquetar identidades de IAM para controlar el acceso a recursos o para el etiquetado en sí. Para obtener más información sobre cómo usar etiquetas de para controlar el acceso, consulte Control del acceso a y para usuarios y roles de IAM mediante etiquetas de recursos de IAM.

Dónde puede utilizar variables de política

Puede utilizar variables de política en el elemento Resource y en la comparación de cadenas en el elemento Condition.

Elemento de recurso

Una variable de política puede aparecer como la última parte del ARN que identifica un recurso. La política siguiente puede asociarse a un grupo. Da a cada usuario del grupo acceso completo por programación a un objeto específico del usuario (su propio "directorio principal") en Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket"], "Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}} }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"] } ] }

nota

En este ejemplo se utiliza la clave aws:username, que devuelve el nombre fácil de recordar del usuario (como "Adele" o "David"). En algunos casos, es posible que le sea útil usar en su lugar la clave aws:userid, que es un valor globalmente único. Para obtener más información, consulte ID únicos.

La política siguiente puede utilizarse para un grupo de IAM. Da a los usuarios de ese grupo la posibilidad de crear, utilizar y eliminar colas que tienen sus nombres y que se encuentran en la región us-east-2.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListForConsole", "Effect": "Allow", "Action": "sqs:ListQueues", "Resource": "*" }, { "Sid": "AllQueueActions", "Effect": "Allow", "Action": "sqs:*", "Resource": "arn:aws:sqs:us-east-2:*:${aws:username}-queue" } ] }

Para reemplazar parte de un ARN por un valor de etiqueta, incluya el prefijo y el nombre de clave entre ${}. Por ejemplo, el siguiente elemento Resource se refiere únicamente a un bucket que tiene el mismo nombre que el valor en la solicitud de la etiqueta department del usuario.

"Resource": ["arn:aws:s3:::bucket/${aws:PrincipalTag/department}"]

Elemento de condición

Una variable de política también puede utilizarse con valores Condition en cualquier condición en la que participen operadores de cadena (StringEquals, StringLike, StringNotLike, etc.) u operadores de ARN (ArnEquals, ArnLike, etc.). La siguiente política de temas de Amazon SNS da a los usuarios de la cuenta 999999999999 de AWS la posibilidad de administrar el tema (realizar todas sus acciones) solo si la dirección URL coincide con su nombre de usuario de AWS.

{ "Version": "2012-10-17", "Statement": [{ "Principal": {"AWS": "999999999999"}, "Effect": "Allow", "Action": "sns:*", "Condition": {"StringLike": {"sns:endpoint": "https://example.com/${aws:username}/*"}} }] }

Al hacer referencia a una etiqueta en una expresión del elemento Condition, utilice el prefijo y el nombre de la clave pertinentes como clave de condición. A continuación, utilice el valor que desea probar en el valor de condición. Por ejemplo, el siguiente ejemplo de política permite el acceso a un recurso solo si la etiqueta costCenter se ha asociado al recurso. La etiqueta también debe tener un valor de 12345 o 67890. Si la etiqueta no tiene ningún valor o tiene algún otro valor, se producirá un error en la solicitud.

{ "Version": "2015-01-01", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*", "Condition": { "StringLike": { "iam:ResourceTag/costCenter": [ "12345", "67890" ] } } } ] }

Información de la solicitud que puede utilizar para variables de políticas

Los valores que se pueden sustituir por variables de políticas deben provenir del contexto de solicitud actual.

Información disponible en todas las solicitudes

Las políticas contienen claves cuyos valores se pueden utilizar como variables de políticas. (En determinadas circunstancias, las claves no contienen un valor —consulte la información que se indica a continuación de la lista).

  • aws:CurrentTime Puede utilizarse con condiciones que comprueban la fecha y la hora.

  • aws:EpochTime Fecha de inicio u hora Unix para utilizarla con condiciones de fecha y hora.

  • aws:TokenIssueTime Fecha y hora de generación de las credenciales de seguridad temporales; puede usarse con las condiciones de fecha y hora. Nota: esta clave solo está disponible en las solicitudes que se firman con credenciales de seguridad temporales. Para obtener más información sobre las credenciales de seguridad temporales, consulte Credenciales de seguridad temporales).

  • aws:principaltype Valor que indica si el principal es una cuenta, un usuario o un rol asumido o federado —(véanse las explicaciones que se dan más adelante).

  • aws:SecureTransport Valor booleano que indica si la solicitud se envió mediante SSL.

  • aws:SourceIp Dirección IP del solicitante para usarla con las condiciones de dirección IP. Consulte Operadores de condición de dirección IP para obtener información acerca de cuándo SourceIp es válida y cuándo debe utilizar una clave específica de VPC en su lugar.

  • aws:UserAgent Este valor es una cadena que contiene información sobre la aplicación cliente del solicitante. El cliente genera esta cadena y podría no ser fiable. Solo puede utilizar esta clave de contexto de la AWS CLI.

  • aws:userid ID exclusivo del usuario actual —consulte la tabla que se muestra a continuación.

  • aws:username Cadena que contiene el nombre fácil de recordar del usuario actual —consulte la tabla que se muestra a continuación.

  • ec2:SourceInstanceARN Nombre de recurso de Amazon (ARN) de la instancia Amazon EC2 desde la que se realiza la solicitud. Esta clave está presente solo si la solicitud proviene de una instancia Amazon EC2 que utiliza un rol de IAM asociado a un perfil de instancia EC2.

importante

Los nombres de clave no distinguen entre mayúsculas y minúsculas. Por ejemplo, aws:CurrentTime equivale a AWS:currenttime.

Los valores de aws:username, aws:userid y aws:principaltype dependen del tipo de principal que inició la solicitud. Por ejemplo, la solicitud podría realizarse con las credenciales de un usuario de IAM, un rol de IAM o la Usuario de la cuenta raíz de AWS. La de la tabla siguiente muestra los valores de estas claves para diferentes tipos de principales.

Principal aws:username aws:userid aws:principaltype
Usuario de la cuenta raíz de AWS (ausente) ID de cuenta de AWS Account
Usuario de IAM Nombre-usuario-IAM ID único User
Usuario federado (ausente) cuenta:nombre-especificado-por-intermediario FederatedUser
Usuario federado web (Login with Amazon, Amazon Cognito, Facebook, Google)

Para obtener más información acerca de las claves de la política que están disponibles cuando usa la identidad federada web, consulte Identificación de usuarios con identidad web federada.

(ausente)

Id rol:nombre-de-rol-especificado-por-intermediario

donde el id de rol es el identificador exclusivo del rol y el nombre de rol especificado por el intermediario se especifica mediante el parámetro RoleSessionName transferido a la solicitud AssumeRoleWithWebIdentity.

AssumedRole
Usuario federado SAML

Para obtener más información acerca de las claves de política que están disponibles cuando usa la federación SAML, consulte Identificación única de los usuarios en la federación basada en SAML.

(ausente)

Id rol:nombre-de-rol-especificado-por-intermediario

donde el id de rol es el id exclusivo del rol y el nombre-de-rol-especificado-por-intermediario se especifica mediante el elemento Attribute con el nombre de atributo establecido en https://aws.amazon.com/SAML/attributes/RoleSessionName.

AssumedRole
Rol asumido (ausente)

Id rol:nombre-de-rol-especificado-por-intermediario

donde el id de función es el identificador exclusivo del función y el nombre de función especificado por el intermediario se especifica mediante el parámetro RoleSessionName transferido a la solicitud AssumeRole.

AssumedRole
Rol asignado a una instancia Amazon EC2 (ausente)

id-rol:id-instancia-ec2

donde el id de función es el id exclusivo de la función y el id-instancia-ec2 es el identificador exclusivo de la instancia EC2.

AssumedRole
Intermediario anónimo (solo Amazon SQS, Amazon SNS y Amazon S3) (ausente) (ausente) Anonymous

Para los elementos de esta tabla , lista tenga en cuenta lo siguiente:

  • ausente significa que el valor actual no está en la información de solicitud actual y que cualquier intento de asociarlo dará un error y hará que la declaración no sea válida.

  • id-rol es un identificador exclusivo asignado a cada rol en el momento de su creación. Puede visualizar el ID de rol con el comando de la AWS CLI: aws iam get-role --role-name rolename

  • nombre-especificado-por-intermediario y nombre-de-rol-especificado-por-intermediario son nombres (como una aplicación o un servicio) que el proceso de llamada transmite cuando realiza una llamada para obtener credenciales temporales.

  • id-instancia-ec2 es un valor asignado a la instancia cuando esta se lanza y aparece en la página Instances (Instancias) de la consola de Amazon EC2. También puede mostrar el ID de instancia ejecutando el comando de la AWS CLI: aws ec2 describe-instances

Información disponible en las solicitudes de usuarios federados

Los usuarios federados son usuarios que se autentican mediante un sistema distinto de IAM. Por ejemplo, una empresa puede tener una aplicación para su uso interno que realiza llamadas a AWS. Puede ser poco práctico dar una identidad de IAM a todos los usuarios de la empresa que usen la aplicación. En lugar de ello, la empresa puede utilizar una aplicación proxy (nivel intermedio) que tenga una única identidad de IAM o la empresa puede utilizar un proveedor de identidades (IdP) SAML. La aplicación proxy o el proveedor de identidades SAML autentican a usuarios individuales que utilizan la red corporativa. Una aplicación proxy puede, pues, utilizar su identidad de IAM para obtener credenciales de seguridad temporales para usuarios individuales. Un proveedor de identidades SAML puede efectivamente intercambiar información de identidad para credenciales de seguridad temporales de AWS. En ese caso, las credenciales temporales pueden utilizarse para obtener acceso a los recursos de AWS.

Del mismo modo, puede crear una aplicación para un dispositivo móvil en el que la aplicación necesite obtener acceso a recursos de AWS. En ese caso, puede utilizar las identidades federadas web, donde la aplicación autentica al usuario mediante un proveedor de identidades popular como Login with Amazon, Amazon Cognito, Facebook o Google. Entonces, la aplicación puede usar la información de autenticación del usuario de estos proveedores para obtener credenciales de seguridad temporales para obtener acceso a recursos de AWS.

La manera recomendada de utilizar la federación de identidades web consiste en aprovechar Amazon Cognito y los SDK para móviles de AWS. Para obtener más información, consulte los siguientes temas:

Información específica de los servicios

Las solicitudes también pueden incluir claves y valores específicos del servicio en su contexto de solicitud. Algunos ejemplos son los siguientes:

  • s3:prefix

  • s3:max-keys

  • s3:x-amz-acl

  • sns:Endpoint

  • sns:Protocol

Para obtener más información sobre las claves específicas del servicio que puede utilizar para obtener valores para variables de políticas, consulte la documentación de los servicios individuales. Por ejemplo, consulte los siguientes temas:

Caracteres especiales

Hay algunas variables de política predefinidas especiales que tienen valores fijos que le permiten representar caracteres que, de otro modo, tendrían un significado especial. Si estos caracteres especiales forman parte de la cadena que intenta hacer corresponder y se insertan literalmente, es posible que se interpreten erróneamente. Por ejemplo, insertar un * asterisco en la cadena se interpretaría como un comodín que coincide con cualquier carácter, salvo un * literal. En estos casos puede utilizar las variables de política predefinidas siguientes:

  • ${*}: debe utilizarse cuando se necesite un carácter asterisco *.

  • ${?}: debe utilizarse cuando se necesite un interrogante ?.

  • ${$}: debe utilizarse cuando necesite un signo de dólar $.

Estas variables de política predefinida se pueden utilizar en todas las cadenas donde pueda usar variables de política estándar.

Para obtener más información

Para obtener más información acerca de las políticas, consulte los siguientes temas: