2

Comment puis-je obtenir l'ID cognito de l'utilisateur initiant l'action dans une fonction Lambda?Comment obtenir ID cognito dans une fonction lambda?

La fonction lambda est déclenchée en cas de téléchargement par un utilisateur authentifié cognit3.

si je regarde dans: event.Records [0] .userIdentity.principalId, tout ce que je reçois est une chaîne disant « CognitoIdentityCredentials »

+0

Le format et le contenu des données transmises à la fonction lambda sont contrôlés par S3. Il est possible que des modifications soient nécessaires pour que l'ID Cognito apparaisse dans l'événement. Avez-vous essayé d'utiliser la synchronisation Cognito pour stocker vos données? Les événements déclenchés par les mises à jour de Cognito ont déjà un identifiant d'identité. –

Répondre

3

Comme Vinay l'a déclaré, nous ne pouvons pas obtenir l'identifiant cognito directement. Voici une solution de contournement que j'ai mise en place, si quelqu'un est intéressé. Il garantit l'authentification de votre utilisateur Cognito, mais exige que vous stockez des fichiers dans un autre répertoire par utilisateur:

  • obtenir l'utilisateur de télécharger le fichier là pour 'yourBucket/Cognito-id/*

  • définir le Cognito authentifié la politique de l'utilisateur afin qu'ils ne puissent télécharger nulle part ailleurs:

"ressources": « arn: aws: s3 ::: yourBucket/$ {cognito-identity.amazonaws.com : sub}/"

  • Dans votre fonction lambda, lisez l'id Cognito de la clé de fichier, par exemple:

id = event.Records [0] .s3.object.key.split ('/') [0]

+0

Excellente solution! Vous trouverez plus de détails sur les concepts qui sous-tendent ce fonctionnement (Règles d'accès IAM) dans le Guide des développeurs Amazon Cognito: http://docs.aws.amazon.com/cognito/devguide/identity/concepts/iam-roles/#access-policies –

1

Actuellement Cognito Identité Id est pas disponible dans les événements déclenchés par S3. Nous allons considérer cette fonctionnalité dans notre backlog pour ajouter ce champ dans tous les événements déclenchés par les services de différence qui ont été authentifiés en utilisant les informations d'identification de Cognito.

+1

Il est également intéressant de noter que cela dépend de la façon dont la fonction Lambda a été déclenchée. Si la fonction est déclenchée via AWS Mobile SDK ou la passerelle Amazon API et que l'appelant a été authentifié avec Cognito, context.identity doit contenir des informations sur l'identité Cognito (voir http://docs.aws.amazon.com). /lambda/latest/dg/programming-model.html#programming-model-context-object-properties). Toutefois, si elle est déclenchée par un autre service tel que S3, au moins à ce moment, cette propriété n'est pas remplie. –