Uso del control de acceso basado en roles - Amazon Cognito

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso del control de acceso basado en roles

Los grupos de identidades de Amazon Cognito asignan a los usuarios autenticados un conjunto de credenciales temporales con privilegios limitados para acceder a sus recursos. AWS Los permisos de cada usuario se controlan mediante los IAMroles que usted crea. Puede definir reglas para elegir el rol de cada usuario en función de las notificaciones contenidas en el token de ID. Puede definir un rol predeterminado para los usuarios autenticados. También puede definir un IAM rol independiente con permisos limitados para los usuarios invitados que no estén autenticados.

Creación de roles para la asignación de roles

Es importante agregar la política de confianza adecuada para cada rol de forma que Amazon Cognito solo lo pueda asumir para los usuarios autenticados del grupo de identidades. A continuación se muestra un ejemplo de política de confianza:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-corner-cafe-123456790ab" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } } ] }

Con esta política, los usuarios federados de cognito-identity.amazonaws.com (el emisor del token de OpenID Connect) pueden asumir este rol. Además, la política restringe el aud del token, en este caso, el ID del grupo de identidades para adaptarse al grupo de identidades. Por último, la política especifica que uno de los miembros de la matriz de la amr reclamación de valores múltiples del token emitida por la acción de Amazon GetOpenIdToken API Cognito tiene el valor. authenticated

Concesión del permiso para transmitir roles

Para permitir que un usuario establezca roles con permisos superiores a los permisos existentes del usuario en un grupo de identidades, concédale iam:PassRole permiso para transferir el rol a. set-identity-pool-roles API Por ejemplo, si el usuario no puede escribir en Amazon S3, pero el IAM rol que el usuario establece en el grupo de identidades concede permiso de escritura a Amazon S3, el usuario solo podrá establecer este rol si se le concede iam:PassRole permiso para el rol. En el ejemplo de política siguiente se muestra cómo conceder el permiso iam:PassRole.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::123456789012:role/myS3WriteAccessRole" ] } ] }

En este ejemplo de política, se concede el permiso iam:PassRole para el rol myS3WriteAccessRole. El rol se especifica mediante el nombre de recurso de Amazon del rol (ARN). También debe adjuntar esta política a su usuario. Para obtener más información, consulte Uso de políticas administradas.

nota

Las funciones de Lambda utilizan una política basada en recursos. Esta política está directamente asociada a la función de Lambda en sí. Cuando crea una regla que invoca una función de Lambda, no transmite un rol, por lo que el usuario que crea la regla no necesita el permiso iam:PassRole. Para obtener más información sobre las autorizaciones de funciones de Lambda, consulte Administración de permisos: uso de una política de funciones de Lambda.

Uso de tokens para asignar roles a usuarios

En el caso de los usuarios que inicien sesión mediante los grupos de usuarios de Amazon Cognito, los roles se pueden pasar en el token de ID que asignó el grupo de usuarios. Los roles aparecen en las siguientes notificaciones del token de ID:

  • El cognito:preferred_role reclamo es el rolARN.

  • La cognito:roles afirmación es una cadena separada por comas que contiene un conjunto de funciones permitidas. ARNs

Las notificaciones se establecen como sigue:

  • La notificación cognito:preferred_role se establece en el rol del grupo con el mejor valor Precedence (menor). Si solo se permite un rol, cognito:preferred_role se establece en dicho rol. Si hay varios roles y ninguno tiene la mejor prioridad, esta notificación no se establece.

  • La notificación cognito:roles se establece si hay al menos un rol.

Cuando se utilizan tokens para asignar roles, si hay varios roles que se pueden asignar al usuario, el grupo de identidades de Amazon Cognito (identidades federadas) elige el rol de la siguiente manera:

  • Utilice el GetCredentialsForIdentityCustomRoleArnparámetro si está establecido y coincide con un rol de la cognito:roles notificación. Si este parámetro no coincide con un rol de cognito:roles, deniegue el acceso.

  • Si la notificación cognito:preferred_role está establecida, utilícela.

  • Si la cognito:preferred_role afirmación no está establecida, se establece y no CustomRoleArn se especifica en la llamada aGetCredentialsForIdentity, se utiliza la configuración de resolución de roles de la consola o del AmbiguousRoleResolution campo (en el RoleMappings parámetro de SetIdentityPoolRolesAPI) para determinar la función que se va a asignar. cognito:roles

Uso de la asignación basada en reglas para la asignación de roles a los usuarios

Las reglas te permiten asignar las reclamaciones de un token de proveedor de identidad a IAM los roles.

Cada regla especifica una afirmación de token (como un atributo de usuario en el token de ID de un grupo de usuarios de Amazon Cognito), un tipo de coincidencia, un valor y un IAM rol. El tipo de asociación puede ser Equals, NotEqual, StartsWitho Contains. Si un usuario tiene un valor coincidente con la notificación, dicho usuario puede asumir ese rol cuando obtenga las credenciales. Por ejemplo, puede crear una regla que asigne un IAM rol específico a los usuarios con un valor de atributo custom:dept personalizado de. Sales

nota

En la configuración de una regla, los atributos personalizados deben tener el prefijo custom: para diferenciarse de los atributos estándar.

Las reglas se evalúan en orden y se usa la IAM función de la primera regla coincidente, a menos que CustomRoleArn se especifique que anule el orden. Para obtener más información sobre los atributos de usuario en los grupos de usuarios de Amazon Cognito, consulte Trabajar con atributos de usuario.

Puede configurar varias reglas para un proveedor de autenticación en la consola del grupo de identidades (identidades federadas). Las reglas se aplican en orden. Si quiere cambiar el orden, puede arrastrar las reglas. La primera regla coincidente tiene prioridad. Si el tipo de asociación es NotEqual y la notificación no existe, no se evaluará la regla. Si no hay reglas que coincidan, el ajuste de Resolución de rol se aplica a Usar rol autenticado predeterminado o Denegar solicitud.

En API yCLI, puede especificar la función que se va a asignar cuando ninguna regla coincida en el AmbiguousRoleResolution campo del RoleMappingtipo, que se especifica en el RoleMappings parámetro de. SetIdentityPoolRolesAPI

Para añadir un mapeo basado en reglas a un proveedor de identidad en la consola de Amazon Cognito, añada o actualice un IdP y seleccione Elegir rol con reglas en Selección de roles. Desde allí, puede añadir reglas que asignen las pretensiones del proveedor a los roles. IAM

Puede configurar un mapeo basado en reglas para los proveedores de identidad en el campo AWS CLI o API con el RulesConfiguration campo del RoleMappingtipo. Puede especificar este campo en el RoleMappings parámetro del. SetIdentityPoolRolesAPI

Por ejemplo, el siguiente AWS CLI comando agrega una regla que asigna la función arn:aws:iam::123456789012:role/Sacramento_team_S3_admin a los usuarios de su ubicación de Sacramento que fueron autenticados por el OIDC IdP: arn:aws:iam::123456789012:oidc-provider/myOIDCIdP

aws cognito-identity set-identity-pool-roles --region us-east-1 --cli-input-json file://role-mapping.json

Contenido de role-mapping.json:

{ "IdentityPoolId": "us-east-1:12345678-corner-cafe-123456790ab", "Roles": { "authenticated": "arn:aws:iam::123456789012:role/myS3WriteAccessRole", "unauthenticated": "arn:aws:iam::123456789012:role/myS3ReadAccessRole" }, "RoleMappings": { "arn:aws:iam::123456789012:oidc-provider/myOIDCIdP": { "Type": "Rules", "AmbiguousRoleResolution": "AuthenticatedRole", "RulesConfiguration": { "Rules": [ { "Claim": "locale", "MatchType": "Equals", "Value": "Sacramento", "RoleARN": "arn:aws:iam::123456789012:role/Sacramento_team_S3_admin" } ] } } } }

Por cada grupo de usuarios u otro proveedor de autenticación que configure para un grupo de identidades, se pueden crear hasta 25 reglas. Este límite no se puede ajustar. Para obtener más información, consulte el tema sobre cuotas de Amazon Cognito.

Notificaciones de token para usarlas en una asignación basada en reglas

Amazon Cognito

Un token de Amazon Cognito ID se representa como un token JSON web ()JWT. El token contiene notificaciones sobre la identidad del usuario autenticado, como por ejemplo name, family_namey phone_number. Para obtener más información acerca de las notificaciones estándar, consulte la especificación OpenID Connect. Aparte de las notificaciones estándar, a continuación indicamos otras notificaciones específicas de Amazon Cognito:

  • cognito:groups

  • cognito:roles

  • cognito:preferred_role

Amazon

Las notificaciones siguientes, junto con los valores posibles de dichas notificaciones, se pueden utilizar con Login with Amazon:

  • iss: www.amazon.com

  • aud: ID de aplicación

  • sub: sub desde el token de Login with Amazon

Facebook

Las notificaciones siguientes, junto con los valores posibles de dichas notificaciones, se pueden utilizar con Facebook:

  • iss: graph.facebook.com

  • aud: ID de aplicación

  • sub: sub del token de Facebook

Google

Un token de Google contiene notificaciones estándar de la especificación OpenID Connect. Todas las notificaciones del token de OpenID están disponibles para el mapeo basado en reglas. Consulte el sitio de OpenID Connect de Google para obtener información sobre las notificaciones disponibles en el token de Google.

Apple

Un token de Apple contiene notificaciones estándar de la Especificación OpenID Connect. Consulte Autenticación de usuarios con Sign in with Apple en la documentación de Apple para obtener más información sobre la notificación disponible del token de Apple. El token de Apple no contiene siempre email.

OpenID

Todas las notificaciones del token de Open ID están disponibles para el mapeo basado en reglas. Para obtener más información acerca de las notificaciones estándar, consulte la especificación OpenID Connect. Consulte la documentación del proveedor de OpenID para obtener información adicional acerca de las notificaciones que están disponibles.

SAML

Las reclamaciones se analizan a partir de la afirmación recibidaSAML. Todas las afirmaciones que están disponibles en la SAML afirmación se pueden utilizar en un mapeo basado en reglas.

Prácticas recomendadas para el control de acceso basado en roles

importante

Si la notificación que está mapeando a un rol la puede modificar el usuario final, cualquier usuario final puede asumir su rol y definir la política en consecuencia. Asigne únicamente las notificaciones que el usuario final no puede establecer directamente a los roles con permisos elevados. En un grupo de usuarios de Amazon Cognito, puede establecer permisos de lectura y escritura por aplicación para cada atributo de usuario.

importante

Si establece roles para grupos en un grupo de usuarios de Amazon Cognito, estos roles se transfieren por medio del token de ID del usuario. Para utilizar estos roles, también debe establecer Choose role from token (Elegir rol a partir de un token) para la selección de roles autenticados para el grupo de identidades.

Puede utilizar la configuración de resolución de roles de la consola y el RoleMappings parámetro del SetIdentityPoolRolesAPIpara especificar cuál es el comportamiento predeterminado cuando no se puede determinar el rol correcto a partir del token.