SMSDéclencheur Lambda d'expéditeur personnalisé - 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.

SMSDéclencheur Lambda d'expéditeur personnalisé

Lorsque vous attribuez un déclencheur d'SMSexpéditeur personnalisé à votre groupe d'utilisateurs, Amazon Cognito invoque une fonction Lambda au lieu de son comportement par défaut lorsqu'un événement utilisateur nécessite l'envoi d'un message. SMS Grâce à un déclencheur d'expéditeur personnalisé, votre AWS Lambda fonction peut envoyer SMS des notifications à vos utilisateurs par le biais d'une méthode et d'un fournisseur de votre choix. Le code personnalisé de votre fonction doit traiter et transmettre tous les SMS messages de votre groupe d'utilisateurs.

Ce déclencheur répond aux scénarios dans lesquels vous souhaiterez peut-être avoir un meilleur contrôle sur la manière dont votre groupe d'utilisateurs envoie SMS des messages. Votre fonction Lambda peut personnaliser l'appel aux SNS API opérations Amazon, par exemple lorsque vous souhaitez gérer plusieurs origines ou croisements. IDs Régions AWS Votre fonction peut également rediriger les messages vers un autre support de diffusion ou un service tiers.

Note

Actuellement, vous ne pouvez pas attribuer de déclencheurs d'expéditeur personnalisé dans la console Amazon Cognito. Vous pouvez attribuer un déclencheur avec le LambdaConfig paramètre dans une UpdateUserPool API demande CreateUserPool ou.

Pour configurer ce déclencheur, effectuez les opérations suivantes :

  1. Créez une clé de chiffrement symétrique dans AWS Key Management Service (AWS KMS). Amazon Cognito génère des secrets (mots de passe temporaires, codes de vérification et codes de confirmation), puis utilise cette clé pour les chiffrer. KMS Vous pouvez ensuite utiliser l'APIopération Decrypt dans votre fonction Lambda pour déchiffrer les secrets et les envoyer à l'utilisateur en texte clair. AWS Encryption SDKC'est un outil utile pour les AWS KMS opérations de votre fonction.

  2. Créez une fonction Lambda à attribuer en tant que déclencheur d'expéditeur personnalisé. Accordez kms:Decrypt des autorisations pour votre KMS clé au rôle de fonction Lambda.

  3. Accordez l'accès au principal de service Amazon Cognito cognito-idp.amazonaws.com pour appeler la fonction Lambda.

  4. Écrivez un code de fonction Lambda qui dirige vos messages vers des méthodes de remise personnalisées ou des fournisseurs tiers. Pour fournir le code de vérification ou de confirmation de votre utilisateur, décodez et déchiffrez en Base64 la valeur du paramètre code dans la demande. Cette opération produit un code ou un mot de passe en texte brut que vous devez inclure dans votre message.

  5. Mettez à jour le groupe d'utilisateurs pour qu'il utilise un déclencheur Lambda Expéditeur personnalisé. Le IAM principal qui met à jour ou crée un groupe d'utilisateurs avec un déclencheur d'expéditeur personnalisé doit être autorisé à créer une autorisation pour votre KMS clé. L'LambdaConfigextrait de code suivant attribue des fonctions personnalisées SMS et des fonctions d'expéditeur d'e-mails.

    "LambdaConfig": { "KMSKeyID": "arn:aws:kms:us-east-1:123456789012:key/a6c4f8e2-0c45-47db-925f-87854bc9e357", "CustomEmailSender": { "LambdaArn": "arn:aws:lambda:us-east-1:123456789012:function:MyFunction", "LambdaVersion": "V1_0" }, "CustomSMSSender": { "LambdaArn": "arn:aws:lambda:us-east-1:123456789012:function:MyFunction", "LambdaVersion": "V1_0" }

Paramètres de déclenchement Lambda de SMS l'expéditeur personnalisés

La demande qu’Amazon Cognito transmet à cette fonction Lambda est une combinaison des paramètres ci-dessous et des paramètres courants qu’Amazon Cognito ajoute à toutes les demandes.

JSON
{ "request": { "type": "customSMSSenderRequestV1", "code": "string", "clientMetadata": { "string": "string", . . . }, "userAttributes": { "string": "string", . . . } }

Paramètres de demande d'SMSexpéditeur personnalisés

type

Version de la demande. Pour un événement d'SMSexpéditeur personnalisé, la valeur de cette chaîne est toujourscustomSMSSenderRequestV1.

code

Code chiffré que votre fonction peut déchiffrer et envoyer à votre utilisateur.

clientMetadata

Une ou plusieurs paires clé-valeur que vous pouvez fournir comme entrée personnalisée au déclencheur de la fonction SMS Lambda de l'expéditeur personnalisé. Pour transmettre ces données à votre fonction Lambda, vous pouvez utiliser le ClientMetadata paramètre dans les actions AdminRespondToAuthChallengeet RespondToAuthChallengeAPI. Amazon Cognito n'inclut pas les données du ClientMetadata paramètre ni AdminInitiateAuthles InitiateAuthAPIopérations de la demande transmise à la fonction de post-authentification.

userAttributes

Une ou plusieurs paires clé-valeur qui représentent les attributs utilisateur.

Paramètres de réponse personnalisés de SMS l'expéditeur

Amazon Cognito n'attend aucune information de retour supplémentaire dans la réponse. Votre fonction peut utiliser API des opérations pour interroger et modifier vos ressources, ou enregistrer les métadonnées des événements sur un système externe.

Activation du SMS déclencheur Lambda de l'expéditeur personnalisé

Vous pouvez configurer un déclencheur d'SMSexpéditeur personnalisé qui utilise une logique personnalisée pour envoyer SMS des messages à votre groupe d'utilisateurs. La procédure suivante affecte un SMS déclencheur personnalisé, un déclencheur d'e-mail personnalisé, ou les deux, à votre groupe d'utilisateurs. Une fois que vous avez ajouté votre déclencheur d'SMSexpéditeur personnalisé, Amazon Cognito envoie toujours les attributs utilisateur, y compris le numéro de téléphone, et le code à usage unique à votre fonction Lambda au lieu du comportement par défaut qui envoie un message SMS avec Amazon Simple Notification Service.

Important

Amazon Cognito évite HTML les caractères réservés tels que < (&lt;) et > (&gt;) dans le mot de passe temporaire de votre utilisateur. Ces caractères peuvent apparaître dans les mots de passe temporaires qu'Amazon Cognito envoie à votre fonction d'expéditeur d'e-mail personnalisé, mais ils n'apparaissent pas dans les codes de vérification temporaires. Pour envoyer des mots de passe temporaires, votre fonction Lambda doit annuler l'échappement de ces caractères après avoir déchiffré le mot de passe et avant d'envoyer le message à votre utilisateur.

  1. Créez une clé de chiffrement dans AWS KMS. Cette clé chiffre les mots de passe temporaires et les codes d'autorisation générés par Amazon Cognito. Vous pouvez ensuite déchiffrer ces secrets dans la fonction Lambda d'expéditeur personnalisé et les envoyer à l'utilisateur en texte brut.

  2. Accordez l'cognito-idp.amazonaws.com.rproxy.goskope.comaccès principal au service Amazon Cognito pour chiffrer les codes avec la clé. KMS

    Appliquez la politique basée sur les ressources suivante à votre KMS clé.

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "cognito-idp.amazonaws.com" }, "Action": "kms:CreateGrant", "Resource": "arn:aws:kms:us-west-2:111222333444:key/1example-2222-3333-4444-999example", "Condition": { "StringEquals": { "aws:SourceAccount": "111222333444" }, "ArnLike": { "aws:SourceArn": "arn:aws:cognito-idp:us-west-2:111222333444:userpool/us-east-1_EXAMPLE" } } }] }
  3. Créez une fonction Lambda pour le déclencheur d'expéditeur personnalisé. Amazon Cognito utilise le AWS chiffrement SDK pour chiffrer les secrets, les mots de passe temporaires et les codes qui autorisent les demandes de vos utilisateurs. API

    1. Attribuez à votre fonction Lambda un IAM rôle disposant au minimum d'kms:Decryptautorisations pour votre KMS clé.

  4. Accordez l'accès au principal de service Amazon Cognito cognito-idp.amazonaws.com pour appeler la fonction Lambda.

    La AWS CLI commande suivante autorise Amazon Cognito à appeler votre fonction Lambda :

    aws lambda add-permission --function-name lambda_arn --statement-id "CognitoLambdaInvokeAccess" --action lambda:InvokeFunction --principal cognito-idp.amazonaws.com
  5. Composez le code de votre fonction Lambda pour qu'elle envoie vos messages. Amazon Cognito crypte les secrets AWS Encryption SDK avant qu'Amazon Cognito ne les envoie à la fonction Lambda d'expéditeur personnalisée. Dans votre fonction, déchiffrez le secret et traitez les métadonnées pertinentes. Envoyez ensuite le code, votre message personnalisé et le numéro de téléphone de destination au service personnalisé API qui transmet votre message.

  6. Ajoutez le AWS Encryption SDK à votre fonction Lambda. Pour plus d'informations, consultez la section SDKLangages de programmation de AWS chiffrement. Pour mettre à jour le package Lambda, effectuez les étapes suivantes.

    1. Exportez votre fonction Lambda sous forme de fichier .zip dans la AWS Management Console.

    2. Ouvrez votre fonction et ajoutez le AWS Encryption SDK. Pour obtenir des informations supplémentaires et les liens de téléchargement, consultez Langages de programmation du AWS Encryption SDK dans le Guide du développeur AWS Encryption SDK .

    3. Compressez votre fonction avec vos SDK dépendances et téléchargez-la sur Lambda. Pour en savoir plus, consultez Déploiement de fonctions Lambda sous forme d'archives de fichiers .zip dans le Guide du développeur AWS Lambda .

  7. Mettez à jour votre groupe d'utilisateurs pour ajouter des déclencheurs Lambda d'expéditeur personnalisé. Incluez un CustomEmailSender paramètre CustomSMSSender ou dans une UpdateUserPool API demande. L'UpdateUserPoolAPIopération nécessite tous les paramètres de votre groupe d'utilisateurs et les paramètres que vous souhaitez modifier. Si vous ne fournissez pas tous les paramètres pertinents, Amazon Cognito définit les valeurs de tous les paramètres manquants sur leurs valeurs par défaut. Comme dans l'exemple suivant, incluez des entrées pour toutes les fonctions Lambda que vous souhaitez ajouter ou conserver dans votre groupe d'utilisateurs. Pour de plus amples informations, veuillez consulter Mise à jour de la configuration du pool d'utilisateurs et du client d'applications.

    #Send this parameter in an 'aws cognito-idp update-user-pool' CLI command, including any existing #user pool configurations. --lambda-config "PreSignUp=lambda-arn, \ CustomSMSSender={LambdaVersion=V1_0,LambdaArn=lambda-arn}, \ CustomEmailSender={LambdaVersion=V1_0,LambdaArn=lambda-arn}, \ KMSKeyID=key-id"

Pour supprimer un déclencheur Lambda d'expéditeur personnalisé avec un update-user-pool AWS CLI, omettez le CustomEmailSender paramètre CustomSMSSender or et incluez tous les autres déclencheurs que vous souhaitez utiliser avec votre groupe d'utilisateurs. --lambda-config

Pour supprimer un déclencheur Lambda d'expéditeur personnalisé avec une UpdateUserPool API demande, omettez le CustomEmailSender paramètre CustomSMSSender or dans le corps de la demande qui contient le reste de la configuration de votre groupe d'utilisateurs.

Exemple de code

L'exemple Node.js suivant traite un événement de SMS message dans votre fonction Lambda d'SMSexpéditeur personnalisée. Cet exemple suppose que votre fonction possède deux variables d'environnement définies.

KEY_ALIAS

Alias de la KMS clé que vous souhaitez utiliser pour chiffrer et déchiffrer les codes de vos utilisateurs.

KEY_ARN

Le nom de ressource Amazon (ARN) de la KMS clé que vous souhaitez utiliser pour chiffrer et déchiffrer les codes de vos utilisateurs.

const AWS = require('aws-sdk'); const b64 = require('base64-js'); const encryptionSdk = require('@aws-crypto/client-node'); //Configure the encryption SDK client with the KMS key from the environment variables. const { encrypt, decrypt } = encryptionSdk.buildClient(encryptionSdk.CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT); const generatorKeyId = process.env.KEY_ALIAS; const keyIds = [ process.env.KEY_ARN ]; const keyring = new encryptionSdk.KmsKeyringNode({ generatorKeyId, keyIds }) exports.handler = async (event) => { //Decrypt the secret code using encryption SDK. let plainTextCode; if(event.request.code){ const { plaintext, messageHeader } = await decrypt(keyring, b64.toByteArray(event.request.code)); plainTextCode = plaintext } //PlainTextCode now contains the decrypted secret. if(event.triggerSource == 'CustomSMSSender_SignUp'){ //Send an SMS message to your user via a custom provider. //Include the temporary password in the message. } else if(event.triggerSource == 'CustomSMSSender_ResendCode'){ } else if(event.triggerSource == 'CustomSMSSender_ForgotPassword'){ } else if(event.triggerSource == 'CustomSMSSender_UpdateUserAttribute'){ } else if(event.triggerSource == 'CustomSMSSender_VerifyUserAttribute'){ } else if(event.triggerSource == 'CustomSMSSender_AdminCreateUser'){ } else if(event.triggerSource == 'CustomSMSSender_AccountTakeOverNotification'){ } return; };

Évaluez les capacités des SMS messages à l'aide d'une fonction d'SMSexpéditeur personnalisée

Une fonction Lambda d'SMSexpéditeur personnalisée accepte les SMS messages que votre groupe d'utilisateurs enverrait, et la fonction fournit le contenu en fonction de votre logique personnalisée. Amazon Cognito envoie les Paramètres de déclenchement Lambda de SMS l'expéditeur personnalisés à votre fonction. Votre fonction peut traiter ces informations comme vous le souhaitez. Par exemple, vous pouvez envoyer le code à une rubrique Amazon Simple Notification Service (AmazonSNS). Un abonné à une SNS rubrique Amazon peut être un SMS message, un HTTPS point de terminaison ou une adresse e-mail.

Pour créer un environnement de test pour la SMS messagerie Amazon Cognito avec une fonction SMS Lambda d'expéditeur personnalisée, consultez amazon-cognito-user-pool- development-and-testing-with - sms-redirected-to-email dans la bibliothèque aws-samples sur. GitHub Le référentiel contient des AWS CloudFormation modèles qui peuvent créer un nouveau groupe d'utilisateurs ou fonctionner avec un groupe d'utilisateurs que vous possédez déjà. Ces modèles créent des fonctions Lambda et une rubrique AmazonSNS. La fonction Lambda que le modèle attribue comme déclencheur d'SMSexpéditeur personnalisé redirige vos SMS messages vers les abonnés de la rubrique Amazon. SNS

Lorsque vous déployez cette solution auprès d'un groupe d'utilisateurs, tous les messages qu'Amazon Cognito envoie habituellement par SMS messagerie sont envoyés par la fonction Lambda à une adresse e-mail centrale. Utilisez cette solution pour personnaliser et prévisualiser les SMS messages, ainsi que pour tester les événements du groupe d'utilisateurs à l'origine de l'envoi d'un SMS message par Amazon Cognito. Une fois les tests terminés, annulez la CloudFormation pile ou supprimez l'attribution personnalisée de la fonction d'SMSexpéditeur de votre groupe d'utilisateurs.

Important

N'utilisez pas les modèles contenus dans amazon-cognito-user-pool- development-and-testing-with - sms-redirected-to-email pour créer un environnement de production. La fonction Lambda d'SMSexpéditeur personnalisée de la solution simule les SMS messages, mais la fonction Lambda les envoie tous à une seule adresse e-mail centrale. Avant de pouvoir envoyer SMS des messages dans un groupe d'utilisateurs Amazon Cognito de production, vous devez satisfaire aux exigences indiquées sur. SMSparamètres des messages pour les groupes d'utilisateurs Amazon Cognito

Sources de déclenchement Lambda personnalisées pour les SMS expéditeurs

Le tableau suivant montre l'événement déclencheur pour les sources de SMS déclenchement personnalisées dans votre code Lambda.

TriggerSource value Événement
CustomSMSSender_SignUp Un utilisateur s'inscrit et Amazon Cognito envoie un message de bienvenue.
CustomSMSSender_ForgotPassword Un utilisateur demande un code pour réinitialiser son mot de passe.
CustomSMSSender_ResendCode Un utilisateur demande un nouveau code pour confirmer son inscription.
CustomSMSSender_VerifyUserAttribute Un utilisateur crée un nouvel attribut d'adresse e-mail ou de numéro de téléphone et Amazon Cognito envoie un code pour vérifier cet attribut.
CustomSMSSender_UpdateUserAttribute Un utilisateur met à jour un attribut d'adresse e-mail ou de numéro de téléphone et Amazon Cognito envoie un code pour vérifier cet attribut.
CustomSMSSender_Authentication Un utilisateur configuré avec l'authentification SMS multifactorielle (MFA) se connecte.
CustomSMSSender_AdminCreateUser Vous créez un nouvel utilisateur dans votre groupe d'utilisateurs et Amazon Cognito lui envoie un mot de passe temporaire.