Elementos de política de IAM Variables y etiquetas - 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.

Elementos de 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.

Introduction

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. Las variables se introdujeron en la versión 2012-10-17. Las versiones anteriores del lenguaje de la política no admiten variables de política. 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 IAM Elementos de política JSON: Version. Para obtener más información sobre las versiones de política, consulte Control de versiones IAM políticas.

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 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 IAM usuarios y funciones. 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 IAM usuarios y roles que utilizan IAM etiquetas de recursos.

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

Puede utilizar una variable de política en la Resource pero solo en la parte de recursos del ARN. Esta parte del ARN aparece después de la 5.a columna (:). No puede utilizar una variable para reemplazar partes del ARN antes del quinto punto, como el servicio o la cuenta. Para obtener más información sobre el formato de ARN, consulte. ARN de IAM.

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 Identificadores ú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

Puede utilizar una variable de política para Condition en cualquier condición que implique a los operadores de cadena o a los operadores de ARN. Los operadores de cadena incluyen StringEqualsde StringLike, y StringNotLike. Los operadores de ARN incluyen ArnEquals y ArnLike. No puede utilizar una variable de política con otros operadores, como Numericde Datede Booleande Binaryde IP Address, o bien Null los operadores. Para obtener más información sobre los operadores de condición, consulte IAM Elementos de política JSON: Operadores de condición.

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 completo a recursos de IAM, solo si la etiqueta costCenter se ha asociado al recurso. La etiqueta también debe tener un valor de 12345 o bien 67890. Si la etiqueta no tiene ningún valor o tiene cualquier otro valor, la solicitud produce un error.

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

Solicitar información que puede utilizar para variables de política

Puedes utilizar la función Condition elemento de una política JSON para comparar claves en el contexto de la solicitud con los valores de clave que especifique en su política. Cuando se utiliza una variable de política, AWS sustituye un valor de la clave de contexto de solicitud en lugar de la variable de la política.

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 firmadas con credenciales de seguridad temporales. Para obtener más información sobre las credenciales de seguridad temporales, consulte Credenciales de seguridad temporales en IAM).

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

Valores de clave principal

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. Lo siguiente tabla muestra los valores de estas claves para diferentes tipos de entidades 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 IAM-user-name : ID único User
Usuario federado (ausente) account:caller-specified-name 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 federada web.

(ausente)

role-id:caller-specified-role-name

donde role-id es el identificador exclusivo del rol y el nombre del rol especificado por el intermediario se indica mediante el parámetro RoleSessionName pasado 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 usuarios en federación basada en SAML.

(ausente)

role-id:caller-specified-role-name

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

AssumedRole
Rol asumido (ausente)

role-id:caller-specified-role-name

donde role-id es el identificador exclusivo del rol y el nombre del rol especificado por el intermediario se indica mediante el parámetro RoleSessionName pasado a la solicitud AssumeRole.

AssumedRole
Rol asignado a una instancia Amazon EC2 (ausente)

role-id:ec2-instance-id

donde role-id es el identificador exclusivo del rol y ec2-instance-id 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.

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

  • caller-specified-name y caller-specified-role-name son nombres que pasa el proceso de llamada (como una aplicación o servicio) cuando realiza una llamada para obtener credenciales temporales.

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

Información disponible en solicitudes para 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 lo siguiente: .

Información específica del servicio

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: