Utilisation du contrôle d'accès basé sur les rôles - Amazon Cognito

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation du contrôle d'accès basé sur les rôles

Les groupes d'identités Amazon Cognito attribuent à vos utilisateurs authentifiés un ensemble d'informations d'identification temporaires à privilèges limités pour accéder à vos ressources. AWS Les autorisations de chaque utilisateur sont contrôlées par le biais IAMdes rôles que vous créez. Vous pouvez définir des règles pour choisir le rôle pour chaque utilisateur en fonction de demandes dans le jeton d'ID de l'utilisateur. Vous pouvez définir un rôle par défaut pour les utilisateurs authentifiés. Vous pouvez également définir un IAM rôle distinct avec des autorisations limitées pour les utilisateurs invités qui ne sont pas authentifiés.

Création de rôles pour le mappage de rôles

Il est important d'ajouter la politique d'approbation appropriée pour chaque rôle afin que celui-ci puisse uniquement être assumé par Amazon Cognito pour les utilisateurs authentifiés dans votre groupe d'identités. Voici un exemple d'une telle politique d'approbation :

{ "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" } } } ] }

Cette politique autorise les utilisateurs fédérés à partir de cognito-identity.amazonaws.com (diffuseur du jeton OpenID Connect) à assumer ce rôle. En outre, la politique restreint le paramètre aud du jeton (dans ce cas, l'ID du groupe d'identités) pour qu'il corresponde au groupe d'identités. Enfin, la politique précise que l'un des membres du tableau de la amr réclamation à valeurs multiples du jeton émis par l'action Amazon GetOpenIdToken API Cognito possède la valeur. authenticated

Octroi d'une autorisation de transmission de rôle

Pour permettre à un utilisateur de définir des rôles avec des autorisations supérieures aux autorisations existantes de l'utilisateur sur un pool d'identités, accordez-lui l'iam:PassRoleautorisation de transmettre le rôle au set-identity-pool-rolesAPI. Par exemple, si l'utilisateur ne peut pas écrire sur Amazon S3, mais que le IAM rôle qu'il définit dans le pool d'identités accorde une autorisation d'écriture à Amazon S3, l'utilisateur ne peut définir ce rôle que si iam:PassRole l'autorisation est accordée pour le rôle. L'exemple de politique suivant montre comment accorder l'autorisation iam:PassRole.

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

Dans cet exemple de politique, l'autorisation iam:PassRole est accordée pour le rôle myS3WriteAccessRole. Le rôle est spécifié à l'aide du nom de ressource Amazon du rôle (ARN). Vous devez également attacher cette politique à votre utilisateur. Pour plus d'informations, consultez Utilisation des politiques gérées.

Note

Les fonctions Lambda utilisent des politiques basées sur des ressources, où la politique est attachée directement à la fonction Lambda. Lorsque vous créez une règle qui appelle une fonction Lambda, vous ne transmettez pas de rôle, et l'utilisateur qui crée la règle n'a donc pas besoin de l'autorisation iam:PassRole. Pour plus d'informations sur l'autorisation de fonctions Lambda, consultez Gestion des autorisations : utilisation d'une politique de fonction Lambda.

Utilisation de jetons pour attribuer des rôles aux utilisateurs

Pour les utilisateurs qui se connectent via les groupes d'utilisateurs Amazon Cognito, des rôles peuvent être transmis dans le jeton d'identification qui a été affecté par le groupe d'utilisateurs. Les rôles apparaissent dans les demandes suivantes dans le jeton d'ID :

  • La cognito:preferred_role revendication, c'est le rôleARN.

  • La cognito:roles réclamation est une chaîne séparée par des virgules contenant un ensemble de rôles autorisés. ARNs

Les demandes sont définies comme suit :

  • La demande cognito:preferred_role est définie sur le rôle du groupe avec la meilleure valeur pour Precedence (la valeur la plus faible). S'il n'existe qu'un seul rôle autorisé, cognito:preferred_role est défini sur ce rôle. S'il existe plusieurs rôles et qu'aucun rôle ne dispose de la meilleure priorité, cette demande n'est pas définie.

  • La demande cognito:roles est définie, s'il existe a au moins un rôle.

Lorsque des jetons sont utilisés pour attribuer des rôles, s'il existe plusieurs rôles pouvant être affectés à l'utilisateur, la fonctionnalité de Groupes d'identités Amazon Cognito (identités fédérées) choisit le rôle comme suit :

  • Utilisez le GetCredentialsForIdentityCustomRoleArnparamètre s'il est défini et qu'il correspond à un rôle dans la cognito:roles réclamation. Si ce paramètre ne correspond pas à un rôle dans cognito:roles, l'accès est refusé.

  • Si la demande cognito:preferred_role est définie, elle est utilisée.

  • Si la cognito:preferred_role réclamation n'est pas définie, la cognito:roles réclamation est définie et n'CustomRoleArnest pas spécifiée dans l'appel àGetCredentialsForIdentity, puis le paramètre de résolution des rôles dans la console ou dans le AmbiguousRoleResolution champ (dans le RoleMappings paramètre du SetIdentityPoolRolesAPI) est utilisé pour déterminer le rôle à attribuer.

Utilisation du mappage basé sur des règles pour attribuer des rôles aux utilisateurs

Les règles vous permettent de mapper les demandes provenant d'un jeton de fournisseur d'identité à IAM des rôles.

Chaque règle spécifie une demande de jeton (comme un attribut utilisateur dans le jeton d'identification d'un groupe d'utilisateurs Amazon Cognito), un type de correspondance, une valeur et un IAM rôle. Le type de correspondance peut être Equals, NotEqual, StartsWith ou Contains. Si un utilisateur a une valeur correspondante pour la demande, il peut assumer ce rôle lorsqu'il obtient les informations d'identification. Par exemple, vous pouvez créer une règle qui attribue un IAM rôle spécifique aux utilisateurs avec une valeur d'attribut custom:dept personnalisée deSales.

Note

Dans les paramètres de la règle, les attributs personnalisés ont besoin du préfixe custom: pour se distinguer des attributs standard.

Les règles sont évaluées dans l'ordre et le IAM rôle de la première règle correspondante est utilisé, sauf si CustomRoleArn cela est spécifié pour remplacer l'ordre. Pour plus d'informations sur les attributs utilisateur dans les groupes d'utilisateurs Amazon Cognito, consultez Utilisation des attributs utilisateur.

Vous pouvez définir plusieurs règles pour un fournisseur d'authentification dans la console de groupe d'identités (Identités fédérées). Les règles sont appliquées dans l'ordre. Vous pouvez faire glisser les règles pour changer leur ordre. La première règle correspondante a la priorité. Si le type de correspondance est NotEqual et que la demande n'existe pas, la règle n'est pas évaluée. Si aucune règle ne correspond, le paramètre Résolution de rôle est appliqué à Utiliser le rôle authentifié par défaut ou Refuser la demande.

Dans le API etCLI, vous pouvez spécifier le rôle à attribuer lorsqu'aucune règle ne correspond dans le AmbiguousRoleResolution champ du RoleMappingtype, qui est spécifié dans le RoleMappings paramètre du SetIdentityPoolRolesAPI.

Pour ajouter un mappage basé sur des règles à un fournisseur d'identité dans la console Amazon Cognito, ajoutez ou mettez à jour un IdP et sélectionnez Choisir un rôle avec des règles sous Sélection du rôle. À partir de là, vous pouvez ajouter des règles que le fournisseur de cartes prétend appliquer aux IAM rôles.

Vous pouvez configurer un mappage basé sur des règles pour les fournisseurs d'identité dans AWS CLI ou API avec le RulesConfiguration champ du RoleMappingtype. Vous pouvez spécifier ce champ dans le RoleMappings paramètre du SetIdentityPoolRolesAPI.

Par exemple, la AWS CLI commande suivante ajoute une règle qui attribue le rôle arn:aws:iam::123456789012:role/Sacramento_team_S3_admin aux utilisateurs de votre site de Sacramento qui ont été authentifiés par l'OIDCIdP : 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

Contenu 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" } ] } } } }

Pour chaque groupe d'utilisateurs ou autre fournisseur d'authentification que vous configurez pour un groupe d'identités, vous pouvez créer jusqu'à 25 règles. Cette limite n'est pas réglable. Pour plus d'informations, consultez Quotas dans Amazon Cognito.

Demandes de jetons à utiliser dans le mappage basé sur des règles

Amazon Cognito

Un jeton d'identification Amazon Cognito est représenté sous la forme d'un jeton JSON Web ()JWT. Il contient les demandes sur l'identité de l'utilisateur authentifié, par exemple name, family_name et phone_number. Pour plus d'informations sur les demandes standard, consultez la spécification OpenID Connect. Hormis les revendications standard, les revendications suivantes sont spécifiques d'Amazon Cognito: :

  • cognito:groups

  • cognito:roles

  • cognito:preferred_role

Amazon

Les demandes suivantes, ainsi que les valeurs possibles pour ces demandes, peuvent être utilisées avec Login with Amazon :

  • iss : www.amazon.com

  • aud : ID d'application

  • sub : sub du jeton Login with Amazon

Facebook

Les demandes suivantes, ainsi que les valeurs possibles pour ces demandes, peuvent être utilisées avec Facebook :

  • iss : graph.facebook.com

  • aud : ID d'application

  • sub : sub du jeton Facebook

Google

Jeton Google contenant les demandes standard émanant de la spécification OpenID Connect. Toutes les demandes contenues dans le jeton OpenID sont disponibles pour le mappage basé sur des règles. Consultez le site OpenID Connect de Google pour connaître les demandes disponibles grâce au jeton Google.

Apple

Jeton Apple contenant les demandes standards émanant de la spécification OpenID Connect. Veuillez consulter Authenticating Users with Sign in with Apple dans la documentation Apple pour en savoir plus sur la demande disponible avec le jeton Apple. Le jeton Apple ne contient pas toujours email.

OpenID

Toutes les demandes contenues dans le jeton Open Id sont disponibles pour le mappage basé sur des règles. Pour plus d'informations sur les demandes standard, consultez la spécification OpenID Connect. Consultez la documentation de votre fournisseur OpenID pour connaître les demandes supplémentaires disponibles.

SAML

Les demandes sont analysées à partir de l'SAMLassertion reçue. Toutes les revendications disponibles dans l'SAMLassertion peuvent être utilisées dans le mappage basé sur des règles.

Bonnes pratiques pour le contrôle d'accès basé sur les rôles

Important

Si la demande qui vous mappez à un rôle peut être modifiée par l'utilisateur final, tout utilisateur final peut assumer votre rôle et définir la politique en conséquence. Mappez uniquement les demandes qui ne peuvent pas être définies directement par l'utilisateur final à des rôles avec des autorisations de niveau élevé. Dans un groupe d'utilisateurs Amazon Cognito, vous pouvez définir des autorisations de lecture et d'écriture par application pour chaque attribut utilisateur.

Important

Si vous définissez des rôles pour des groupes dans un groupe d'utilisateurs Amazon Cognito, ces rôles sont transmis via le jeton d'identification de l'utilisateur. Pour utiliser ces rôles, vous devez également définir Choose role from token (Choisir un rôle à partir d'un jeton) pour la sélection de rôle authentifié pour le groupe d'identités.

Vous pouvez utiliser le paramètre de résolution des rôles de la console et le RoleMappings paramètre du SetIdentityPoolRolesAPIpour spécifier le comportement par défaut lorsque le rôle correct ne peut pas être déterminé à partir du jeton.