Rôles IAM - Amazon Cognito

Rôles IAM

Lors de la création d'un groupe d'identités, vous êtes invité à mettre à jour les rôles IAM qu'assument vos utilisateurs. Les rôles IAM fonctionnent de la manière suivante : quand un utilisateur se connecte à votre application, Amazon Cognito génère des informations d'identification AWS temporaires pour celui-ci. Ces informations d'identification temporaires sont associées à un rôle IAM spécifique. Ce rôle IAM vous permet de définir un ensemble d'autorisations pour accéder à vos ressources AWS.

Vous pouvez spécifier des rôles IAM par défaut pour les utilisateurs authentifiés et ceux qui ne le sont pas. Vous pouvez également définir des règles pour choisir le rôle pour chaque utilisateur en fonction de demandes dans le jeton d'identification de l'utilisateur. Pour plus d'informations, consultez Contrôle d'accès basé sur les rôles.

Par défaut, la console Amazon Cognito crée des rôles IAM donnant accès à Amazon Mobile Analytics et à Amazon Cognito Sync. Vous pouvez également choisir d'utiliser des rôles IAM existants.

Modifiez les rôles IAM pour autoriser ou restreindre l'accès à d'autres services. Pour cela, connectez-vous à la console IAM. Sélectionnez ensuite Roles (Rôles), puis sélectionnez un rôle. Les politiques associées au rôle sélectionné sont répertoriées dans l'onglet Permissions. Vous pouvez personnaliser une stratégie d'accès en sélectionnant le lien correspondant Manage Policy (Gérer la politique). Pour plus d'informations sur l'utilisation et la définition des politiques, consultez la section Présentation des politiques IAM.

Note

La bonne pratique consiste à définir des politiques qui suivent le principe du moindre privilège. En d'autres termes, les politiques incluent uniquement les autorisations dont les utilisateurs ont besoin pour effectuer leurs tâches. Pour plus d'informations, consultez Accorder le privilège le plus faible dans le Guide de l'utilisateur IAM.

N'oubliez pas que les identités non authentifiées sont assumées par des utilisateurs qui ne se connectent pas à votre application. En général, les autorisations que vous attribuez pour les identités non authentifiées doivent être plus restrictives que celles créées pour les identités authentifiées.

Configurer une politique d'approbation

Amazon Cognito utilise des rôles IAM pour générer des informations d'identification temporaires pour les utilisateurs de votre application. L'accès aux autorisations est contrôlé par les relations d'approbation d'un rôle. En savoir plus sur Autorisations et approbation de rôle.

Réutilisation des rôles entre les groupes d'identités

Pour réutiliser un rôle dans plusieurs groupes d'identités qui partagent un jeu d'autorisations commun, procédez comme suit afin d'inclure les groupes d'identités requis :

"StringEquals": { "cognito-identity.amazonaws.com:aud": [ "us-east-1:12345678-abcd-abcd-abcd-123456790ab", "us-east-1:98765432-dcba-dcba-dcba-123456790ab" ] }

Restriction de l'accès à des identités spécifiques

Pour créer une politique limitée à un ensemble spécifique d'utilisateurs de l'application, vérifiez la valeur   :cognito-identity.amazonaws.com:sub

"StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-abcd-abcd-abcd-123456790ab", "cognito-identity.amazonaws.com:sub": [ "us-east-1:12345678-1234-1234-1234-123456790ab", "us-east-1:98765432-1234-1234-1243-123456790ab" ] }

Restriction de l'accès à des fournisseurs spécifiques

Pour créer une politique limitée aux utilisateurs qui se sont connectés avec un fournisseur spécifique (votre propre fournisseur de connexion, par exemple), vérifiez la valeur   :cognito-identity.amazonaws.com:amr

"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "login.myprovider.myapp" }

Par exemple, une application qui n'autorise que Facebook présente la clause AMR suivante :

"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "graph.facebook.com" }

politiques d'accès

Les autorisations associées à un rôle s'appliquent à tous les utilisateurs qui assument ce rôle. Pour partitionner l'accès des utilisateurs, vous pouvez utiliser des variables de stratégie. Soyez prudent lorsque vous ajoutez les ID d'identité de vos utilisateurs dans vos stratégies d'accès, notamment pour les identités non authentifiées, car ces informations peuvent changer si l'utilisateur se connecte.

Pour une protection de sécurité supplémentaire, Amazon Cognito applique une politique de réduction des utilisateurs aux informations d'identification fournies par GetCredentialForIdentity afin d'empêcher l'accès à des services autres que ceux répertoriés ci-dessous pour vos utilisateurs non authentifiés. Vous pouvez créer une identité à l'aide de ces informations d'identification avec un accès uniquement aux services suivants :

  • Amazon API Gateway

  • AWS AppSync

  • Amazon CloudWatch

  • Amazon CloudWatch Logs

  • Amazon Cognito Identity

  • Amazon Cognito Sync

  • Groupes d'utilisateurs Amazon Cognito

  • Amazon Comprehend

  • Amazon DynamoDB

  • Amazon GameLift

  • AWS IoT

  • AWS Key Management Service (AWS KMS)

  • Amazon Kinesis Data Firehose

  • Amazon Kinesis Data Streams

  • AWS Lambda

  • Amazon Lex

  • Amazon Location Service

  • Amazon Machine Learning

  • Amazon Mobile Analytics

  • Amazon Personalize

  • Amazon Pinpoint

  • Amazon Polly

  • Amazon Rekognition

  • Amazon SageMaker

  • Amazon SimpleDB

  • Amazon Simple Email Service (Amazon SES)

  • Amazon Simple Notification Service (Amazon SNS)

  • Amazon Simple Queue Service (Amazon SQS)

  • Amazon Simple Storage Service (Amazon S3)

  • Amazon Sumerian

  • Amazon Textract

  • Amazon Transcribe

  • Amazon Translate

En outre, il existe des services qui accordent l'accès à des utilisateurs non authentifiés, mais n'autorisent pas ceux-ci à effectuer toutes les actions. Le tableau suivant présente les services dont les actions sont limitées.

Service Autorisation accordée aux utilisateurs non authentifiés
AWS Key Management Service Encrypt, Decrypt, ReEncrypt , GenerateDataKey
Amazon SageMaker InvokeEndpoint
Amazon Textract DetectDocumentText, AnalyzeDocument
Amazon Sumerian View*

Si vous avez besoin d'accéder à autre chose que ces services pour vos utilisateurs non authentifiés, vous devez utiliser le flux d'authentification de base. Si vous recevez une exception NotAuthorizedException et que vous autorisé l'accès au service dans votre politique de rôle non authentifiée, c'est la raison probable.

Exemples de politiques d'accès

Dans cette section, vous trouverez des exemples de stratégies d'accès Amazon Cognito qui accordent uniquement les autorisations dont vos identités ont besoin pour effectuer une opération spécifique. Vous pouvez limiter davantage les autorisations pour un ID d'identité donné en utilisant des variables de politique dans la mesure du possible. Par exemple, avec ${cognito-identity.amazonaws.com:sub}. Pour plus d'informations, consultez Présentation de l'authentification Amazon Cognito 3e partie : Rôles et politiques sur le blog AWS Mobile.

Note

La bonne pratique en matière de sécurité consiste à inclure uniquement les autorisations dont les utilisateurs ont besoin pour exécuter leurs tâches. Cela signifie que vous devez toujours essayer de définir l'accès à une identité individuelle pour les objets dans la mesure du possible.

Exemple 1 : Accorder à une identité l'accès en lecture à un seul objet dans Amazon S3

La stratégie d'accès suivante accorde des autorisations de lecture à une identité pour récupérer un seul objet à partir d'un compartiment S3 donné.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/assets/my_picture.jpg"] } ] }

Exemple 2 : Accorder à une identité l'accès en lecture et en écriture à des chemins spécifiques à l'identité dans Amazon S3

La stratégie d'accès suivante accorde des autorisations de lecture et d'écriture pour accéder à un préfixe spécifique « folder » d'un compartiment S3 en mappant le préfixe à la variable ${cognito-identity.amazonaws.com:sub}.

Avec cette stratégie, une identité telle que us-east-1:12345678-1234-1234-1234-123456790ab insérée via ${cognito-identity.amazonaws.com:sub} est en mesure d'obtenir, de placer et de répertorier des objets dans arn:aws:s3:::mybucket/us-east-1:12345678-1234-1234-1234-123456790ab. Toutefois, l'identité ne se verra pas accorder l'accès à d'autres objets dans arn:aws:s3:::mybucket.

{ "Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket"], "Condition": {"StringLike": {"s3:prefix": ["${cognito-identity.amazonaws.com:sub}/*"]}} }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/${cognito-identity.amazonaws.com:sub}/*"] } ] }

Exemple 3 : Attribuer un accès précis aux identités à Amazon DynamoDB

La stratégie d'accès suivante fournit un contrôle précis des accès aux ressources DynamoDB à l'aide de variables d'environnement Amazon Cognito. Ces variables accordent l'accès aux éléments dans DynamoDB par ID d'identité. Pour de plus amples informations, veuillez consulter Utilisation des conditions de politique IAM pour un contrôle précis des accès dans le Manuel du développeur Amazon DynamoDB.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable" ], "Condition": { "ForAllValues:StringEquals": { "dynamodb:LeadingKeys": ["${cognito-identity.amazonaws.com:sub}"] } } } ] }

Exemple 4 : Accorder à une identité l'autorisation d'appeler une fonction Lambda

La stratégie d'accès suivante accorde à une identité les autorisations nécessaires pour appeler une fonction Lambda.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-west-2:123456789012:function:MyFunction" ] } ] }

Exemple 5 : Accorder à une identité l'autorisation de publier des enregistrements dans Kinesis Data Streams

La stratégie d'accès suivante permet à une identité d'utiliser l'opération PutRecord avec n'importe lequel des Kinesis Data Streams. Elle peut être appliquée aux utilisateurs qui ont besoin d'ajouter des enregistrements de données à tous les flux d'un compte. Pour de plus amples informations, veuillez consulter Contrôle de l'accès aux ressources Amazon Kinesis Data Streams à l'aide d'IAM dans le Manuel du développeur Amazon Kinesis Data Streams.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/stream1" ] } ] }

Exemple 6 : Accorder à une identité l'autorisation d'accéder à ses données dans le magasin Amazon Cognito Sync

La stratégie d'accès suivante accorde à une identité les autorisations d'accéder uniquement à ses propres données dans le magasin Amazon Cognito Sync.

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action":"cognito-sync:*", "Resource":["arn:aws:cognito-sync:us-east-1:123456789012:identitypool/${cognito-identity.amazonaws.com:aud}/identity/${cognito-identity.amazonaws.com:sub}/*"] }] }