Elementos de la política de IAM: variables y etiquetas - AWS Identity and Access Management

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 (un rol 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 en el bucket de S3 amzn-s3-demo-bucket para proyectos de marketing.

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

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. En lugar de crear una política independiente para cada usuario, le recomendamos que cree una única política de grupo que sirva para todos los usuarios de ese grupo.

Uso de variables en políticas

Puede definir valores dinámicos dentro de las políticas mediante variables de política que establezcan marcadores de posición en una política.

Las variables se marcan mediante un prefijo $ seguido de un par de llaves ({ }) que incluyen el nombre de la variable del valor de la solicitud.

Cuando se evalúa una política, las variables de la política se sustituyen por valores procedentes de las claves de contexto condicionales pasadas en la solicitud. Las variables se pueden usar en políticas basadas en identidades, políticas de recursos, políticas de control de servicios, políticas de sesión y políticas de punto de conexión de VPC. Las políticas basadas en identidades que se utilizan como límites de permisos también admiten variables de política.

Las claves de contexto de condición global se pueden utilizar como variables en las solicitudes en los servicios de AWS. Las claves de condición específicas del servicio también se pueden usar como variables al interactuar con los recursos de AWS, pero solo están disponibles cuando se realizan solicitudes a los recursos que las admiten. Para obtener una lista de las claves de contexto disponibles para cada servicio y recurso de AWS, consulte la Referencia de autorización de servicios. En determinadas circunstancias, no puede rellenar las claves de contexto de condición global con un valor. Para obtener más información sobre cada clave, consulte Claves de contexto de condición global de AWS.

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

  • Puede utilizar cualquier clave de condición de valor único como variable. No se puede utilizar una clave de condición multivalor como variable.

En el siguiente ejemplo, se muestra una política para un usuario o rol de IAM que reemplaza un nombre de recurso específico con una variable de política. Puede reutilizar esta política si utiliza la clave de condición aws:PrincipalTag. Cuando se evalúa esta política, ${aws:PrincipalTag/team} permite la acción solo si el nombre del bucket termina con un nombre de equipo de la etiqueta de entidad principal team.

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

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.

Para obtener más información sobre esta clave de condición global, consulte aws:PrincipalTag/tag-key en la lista de claves de condición globales.

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.

Una política que permite a una entidad principal obtener objetos de la ruta /David de un bucket de S3 tiene el siguiente aspecto:

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3::amzn-s3-demo-bucket/David/*"] }] }

Si utiliza una política que se ha adjuntado al usuario David, dicho usuario obtiene objetos de su propio bucket de S3, pero usted tendrá que crear una política individual para cada usuario que incluya 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 políticas reutilizables. La siguiente política permite al usuario obtener objetos de un bucket de Amazon S3 si el valor de la clave de etiqueta aws:PrincipalTag coincide con el valor de la clave de etiqueta owner introducido en la solicitud.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowUnlessOwnedBySomeoneElse", "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["*"], "Condition": { "StringEquals": { "s3:ExistingObjectTag/owner": "${aws:PrincipalTag/owner}" } } } ] }

Cuando utiliza una variable de política en lugar de un usuario de este tipo, no tiene que tener una política independiente para cada usuario individual. En el siguiente ejemplo, la política se adjunta a un rol de IAM que asumen los gerentes de producto mediante credenciales de seguridad temporales. Cuando un usuario solicita agregar un objeto de Amazon S3, IAM sustituye el valor de etiqueta dept de la solicitud actual por la variable ${aws:PrincipalTag} y evalúa la política.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowOnlyDeptS3Prefix", "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/${aws:PrincipalTag/dept}/*"], } ] }

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 S3 o a usuarios de IAM. Estas etiquetas son pares clave-valor. Puede definir el nombre de la clave de la etiqueta y el valor que es 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 Etiquetas para recursos de AWS Identity and Access Management. 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 AWS Management Console.

Puede etiquetar recursos 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 utilizar etiquetas de para controlar el acceso, consulte Control de acceso a usuarios y roles de IAM y para ellos mediante etiquetas.

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 el elemento Resource, pero solo en la parte de recurso del ARN. Esta parte del ARN aparece después de los quintos dos puntos (:). No puede utilizar una variable para reemplazar partes del ARN antes de los quintos dos puntos, como el servicio o la cuenta. Para obtener más información sobre el formato del ARN, consulte ARN de IAM.

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 de recurso se refiere únicamente a un bucket que tiene el mismo nombre que el valor en la solicitud de la etiqueta de departamento del usuario.

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

Muchos recursos de AWS utilizan ARN que contienen un nombre creado por el usuario. La siguiente política de IAM garantiza que solo los usuarios previstos con valores de etiquetas de acceso, proyecto, aplicación y entorno de acceso coincidentes puedan modificar sus recursos. Además, al utilizar coincidencias con caracteres comodín *, pueden permitir sufijos de nombres de recursos personalizados.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessBasedOnArnMatching", "Effect": "Allow", "Action": [ "sns:CreateTopic", "sns:DeleteTopic"], "Resource": ["arn:aws:sns:*:*:${aws:PrincipalTag/access-project}-${aws:PrincipalTag/access-application}-${aws:PrincipalTag/access-environment}-*" ] } ] }

Elemento de condición

Puede utilizar una variable de política para valores de Condition en cualquier condición que involucre a los operadores de cadena o a los operadores ARN. Los operadores de cadena incluyen StringEquals, StringLike y StringNotLike. Los operadores ARN incluyen ArnEquals y ArnLike. No se puede utilizar una variable de política con otros operadores como operadores Numeric, Date, Boolean, Binary, IP Address o Null. Para obtener más información acerca de los operadores de condición, consulte Elementos de la política de JSON de IAM: operadores de condición.

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, solo si la etiqueta costCenter se ha asociado al usuario. 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": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:*user*" ], "Resource": "*", "Condition": { "StringLike": { "iam:ResourceTag/costCenter": [ "12345", "67890" ] } } } ] }

Variables de política sin valor

Cuando las variables de política hacen referencia a una clave de contexto de condición que no tiene ningún valor o no está presente en el contexto de autorización de una solicitud, el valor es efectivamente nulo. No hay un valor igual o similar. Es posible que las claves de contexto de condición no estén presentes en el contexto de autorización cuando:

  • Utiliza claves de contexto de condición específicas del servicio en las solicitudes a recursos que no admiten esa clave de condición.

  • Las etiquetas de las entidades principales, las sesiones, los recursos o las solicitudes de IAM no están presentes.

  • Se presentan otras circunstancias, tal como se enumeran para cada contexto de condición global en Claves de contexto de condición globales de AWS.

Cuando utiliza una variable sin valor en el elemento de condición de una política de IAM, Elementos de la política de JSON de IAM: operadores de condición como StringEquals o StringLike no coinciden y la instrucción de política no entra en vigor.

Los operadores de condición invertida como StringNotEquals o StringNotLike coinciden con un valor nulo, ya que el valor de la clave de condición con la que están realizando la prueba no es igual o similar al valor realmente nulo.

En el siguiente ejemplo, aws:principaltag/Team debe ser igual a s3:ExistingObjectTag/Team para permitir el acceso. El acceso se deniega explícitamente cuando aws:principaltag/Team no está configurado. Si se utiliza una variable que no tiene ningún valor en el contexto de autorización como parte del elemento Resource o NotResource de una política, el recurso que incluye una variable de política sin valor no coincidirá con ningún recurso.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition": { "StringNotEquals": { "s3:ExistingObjectTag/Team": "${aws:PrincipalTag/Team}" } } } ] }

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

Puede utilizar el elemento Condition de una política JSON para comparar las claves de la solicitud de contexto con los valores de claves 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 su política.

Valores clave principales

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 el Usuario raíz de la cuenta de AWS. La tabla siguiente muestra los valores de estas claves para diferentes tipos de entidades principales.

Entidad principal aws:username aws:userid aws:PrincipalType
Usuario raíz de la cuenta 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 OIDC

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 Claves disponibles para las federaciones de identidades AWS de OIDC.

(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 los usuarios en la federación basada en SAML.

(ausente)

role-id:caller-specified-role-name

donde el role-id 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)

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 de Amazon EC2 (ausente)

id-rol:id-instancia-ec2

donde role-id es el identificador exclusivo del rol y ec2-instance-id es el identificador exclusivo de la instancia EC2.

AssumedRole
Persona que llama de manera anónima (Amazon SQS, Amazon SNS y Amazon S3) (ausente) anonymous 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 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 Instancias de la consola de Amazon EC2. También puede mostrar el ID de instancia ejecutando el comando de 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 federaciones OIDC, donde la aplicación autentifica al usuario mediante un proveedor de identidades popular como Inicio de sesión con Amazon, Amazon Cognito, Facebook o Google. Entonces, la aplicación puede utilizar 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 las federaciones OIDC consiste en aprovechar Amazon Cognito y los SDK para móviles de AWS. Para obtener más información, consulte lo siguiente:

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 carácter ? (signo de interrogación).

  • ${$}: debe utilizarse cuando necesite un carácter $ (signo de dólar).

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

Especificación de valores predeterminados

Para agregar un valor predeterminado a una variable, rodee el valor predeterminado entre comillas simples (' '), y separe el texto de la variable y el valor predeterminado con una coma y un espacio (, ).

Por ejemplo, si una entidad principal está etiquetada con team=yellow, puede acceder al bucket de Amazon S3 de ExampleCorp's llamado amzn-s3-demo-bucket-yellow. Una política con este recurso permite a los miembros del equipo acceder al bucket su equipo, pero no al de otros equipos. Para los usuarios sin etiquetas de equipo, establece un valor predeterminado de company-wide para el nombre del bucket. Estos usuarios solo pueden acceder al bucket de amzn-s3-demo-bucket-company-wide en el que pueden ver información amplia, como instrucciones para unirse a un equipo.

"Resource":"arn:aws:s3:::amzn-s3-demo-bucket-${aws:PrincipalTag/team, 'company-wide'}"

Para obtener más información

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