

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
<a name="role-based-access-control"></a>

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 [roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) que cree. 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 rol de IAM independiente con permisos limitados para los usuarios invitados que no estén autenticados.

## Creación de roles para la asignación de roles
<a name="creating-roles-for-role-mapping"></a>

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:

------
#### [ JSON ]

****  

```
{
  "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 notificación multivalor `amr` del token emitido por la acción de la API `GetOpenIdToken` de Amazon Cognito tiene el valor `authenticated`.

## Concesión del permiso para transmitir roles
<a name="granting-pass-role-permission"></a>

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

------
#### [ JSON ]

****  

```
{
    "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 (ARN) del rol. También debe adjuntar esta política a su usuario. Para obtener más información, consulte [Uso de políticas administradas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html).

**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](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#intro-permission-model-access-policy).

## Uso de tokens para asignar roles a usuarios
<a name="using-tokens-to-assign-roles-to-users"></a>

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:
+ La notificación `cognito:preferred_role` es el ARN del rol.
+ 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 [GetCredentialsForIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html)`CustomRoleArn`pará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 a`GetCredentialsForIdentity`, se utiliza la configuración de **resolución de roles** de la consola o del `AmbiguousRoleResolution` campo (en el `RoleMappings` parámetro de la [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)API) 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
<a name="using-rules-to-assign-roles-to-users"></a>

Con las reglas, se pueden mapear notificaciones de un token de proveedor de identidad a roles de IAM.

Cada regla especifica una notificación de token (como un atributo de usuario en el token de ID de un grupo de usuarios de Amazon Cognito), el tipo de coincidencia, un valor y un rol de IAM. El tipo de asociación puede ser `Equals`, `NotEqual`, `StartsWith`o `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 con la que se asigne un rol de IAM específico a usuarios que tengan un valor de atributo personalizado `custom:dept` 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 el rol de IAM para la primera regla de coincidencia, a menos que se haya especificado `CustomRoleArn` para anular el orden. Para obtener más información sobre los atributos de usuario en los grupos de usuarios de Amazon Cognito, consulte [Uso de atributos de usuario](user-pool-settings-attributes.md).

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 la API y la CLI, puede especificar el rol que se asignará cuando ninguna regla coincida en el `AmbiguousRoleResolution` campo del [RoleMapping](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_RoleMapping.html)tipo, que se especifica en el `RoleMappings` parámetro de la [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)API.

Para añadir una asignación basada en reglas a un proveedor de identidades en la consola de Amazon Cognito, añada o actualice un IdP y seleccione **Elegir un rol con reglas** en **Selección de rol**. Desde allí, puede añadir reglas que asignen las notificaciones del proveedor a los roles de IAM.

Puede configurar un mapeo basado en reglas para los proveedores de identidad en la API AWS CLI o en el `RulesConfiguration` campo del [RoleMapping](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_RoleMapping.html)tipo. Puede especificar este campo en el `RoleMappings` parámetro de la [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)API.

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 IdP de OIDC: `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](https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html).

## Notificaciones de token para usarlas en una asignación basada en reglas
<a name="token-claims-for-role-based-access-control"></a>

**Amazon Cognito**

Un token de ID de Amazon Cognito se representa como un JSON Web Token (JWT). El token contiene notificaciones sobre la identidad del usuario autenticado, como por ejemplo `name`, `family_name`y `phone_number`. Para obtener más información acerca de las notificaciones estándar, consulte la [especificación OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). 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](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Todas las notificaciones del token de OpenID están disponibles para el mapeo basado en reglas. Consulte el sitio de [OpenID Connect](https://developers.google.com/identity/protocols/OpenIDConnect) 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](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Consulte [Autenticación de usuarios con Sign in with Apple](https://developer.apple.com/documentation/signinwithapple/authenticating-users-with-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](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Consulte la documentación del proveedor de OpenID para obtener información adicional acerca de las notificaciones que están disponibles.

**SAML**

Las notificaciones se analizan en la aserción de SAML recibida. Todas las notificaciones que están disponibles en la aserción de SAML se pueden utilizar en el mapeo basado en reglas.

## Prácticas recomendadas para el control de acceso basado en roles
<a name="best-practices-for-role-based-access-control"></a>

**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.  
Puedes usar la configuración de **resolución de roles** de la consola y el `RoleMappings` parámetro de la [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)API para especificar cuál es el comportamiento predeterminado cuando no se puede determinar el rol correcto a partir del token.