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.
Desencadenador de Lambda para remitentes de correos electrónicos personalizados
Al asignar un desencadenador de envío de correo electrónico personalizado al grupo de usuarios, Amazon Cognito invoca una función de Lambda en lugar de su comportamiento predeterminado cuando un evento de usuario requiere que envíe un mensaje de correo electrónico. Con un activador de remitente personalizado, tu AWS Lambda función puede enviar notificaciones por correo electrónico a tus usuarios a través del método y el proveedor que elijas. El código personalizado de la función debe procesar y entregar todos los mensajes de correo electrónico del grupo de usuarios.
Este activador sirve para situaciones en las que es posible que desee tener un mayor control sobre la forma en que su grupo de usuarios envía los mensajes de correo electrónico. Su función Lambda puede personalizar la llamada a SES API las operaciones de Amazon, por ejemplo, cuando quiere gestionar varias identidades verificadas o cruzadas. Regiones de AWS Tu función también podría redirigir los mensajes a otro medio de entrega o a un servicio de terceros.
nota
Actualmente, no puede asignar desencadenadores de remitente personalizados en la consola de Amazon Cognito. Puede asignar un disparador con el LambdaConfig
parámetro de una UpdateUserPool
API solicitud CreateUserPool
o.
Para usar este desencadenador, siga estos pasos:
-
Cree una clave de cifrado simétrica en AWS Key Management Service (AWS KMS). Amazon Cognito genera secretos (contraseñas temporales, códigos de verificación y códigos de confirmación) y, a continuación, utiliza esta clave para cifrarlos. KMS A continuación, puede utilizar la API operación de descifrado de la función Lambda para descifrar los secretos y enviarlos al usuario en texto plano. AWS Encryption SDKEs una herramienta útil para las AWS KMS operaciones de su función.
-
Cree una función de Lambda que desee asignar como desencadenador de remitente personalizado. Otorgue
kms:Decrypt
permisos para su KMS clave para el rol de la función Lambda. -
Conceda el acceso
cognito-idp.amazonaws.com
a la entidad principal del servicio de Amazon Cognito para llamar a la función de Lambda. -
Escriba el código de función de Lambda que dirige sus mensajes a métodos de entrega personalizados o proveedores externos. Para entregar el código de verificación o confirmación del usuario, Base64 descodifica y descifra el valor del parámetro
code
de la solicitud. Esta operación genera un código o contraseña en texto plano que debe incluir en el mensaje. -
Actualice el grupo de usuarios para que utilice un desencadenador Lambda de remitente personalizado. El IAM director que actualice o cree un grupo de usuarios con un activador de remitente personalizado debe tener permiso para crear una concesión para su KMS clave. El siguiente
LambdaConfig
fragmento asigna funciones personalizadas SMS y de envío de correo electrónico."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" }
Parámetros de desencadenador de Lambda para remitente de correo electrónico personalizado
La solicitud que Amazon Cognito envía a esta función de Lambda es una combinación de los parámetros que se indican a continuación y los parámetros comunes que Amazon Cognito agrega a todas las solicitudes.
Parámetros de solicitudes de remitente de correo electrónico personalizado
- type
-
La versión de la solicitud. Para un evento de remitente de correo electrónico personalizado, el valor de esta cadena es siempre
customEmailSenderRequestV1
. - code
-
El código cifrado que su función puede descifrar y enviar al usuario.
- clientMetadata
-
Uno o varios pares clave-valor que puede proporcionar como datos de entrada personalizados al desencadenador de la función de Lambda de remitente de correo electrónico personalizado. Para pasar estos datos a la función Lambda, puede usar el ClientMetadata parámetro en las acciones AdminRespondToAuthChallengey RespondToAuthChallengeAPI. Amazon Cognito no incluye datos del ClientMetadata parámetro ni de las InitiateAuthAPIoperaciones en AdminInitiateAuthla solicitud que transfiere a la función de autenticación posterior.
nota
Amazon Cognito envía
ClientMetadata
a correos electrónicos personalizados funciones de activación en eventos con las siguientes fuentes de activación:-
CustomEmailSender_ForgotPassword
-
CustomEmailSender_SignUp
-
CustomEmailSender_Authentication
Amazon Cognito no envía
ClientMetadata
eventos desencadenantes con la fuente.CustomEmailSender_AccountTakeOverNotification
-
- userAttributes
-
Uno o varios pares clave-valor que representan atributos de usuario.
Parámetros de respuesta de remitente de correo electrónico personalizado
Amazon Cognito no espera ninguna información de devolución adicional en la respuesta de remitente de correo electrónico personalizado. La función Lambda debe interpretar el evento, descifrar el código y, a continuación, entregar el contenido del mensaje. Una función típica agrupa un mensaje de correo electrónico y lo dirige a un repetidor externo. SMTP
Activación del desencadenador de Lambda para remitente de correo electrónico personalizado
Para configurar un desencadenador de remitente de correo electrónico personalizado que utilice lógica personalizada para enviar mensajes de correo electrónico a su grupo de usuarios, active el desencadenador de la siguiente manera. El siguiente procedimiento asigna un activador de correo electrónico personalizado, un SMS activador personalizado o ambos a su grupo de usuarios. Después de agregar su desencadenador de remitente de correo electrónico personalizado, Amazon Cognito siempre envía los atributos de usuario, como la dirección de correo electrónico, y el código de un solo uso a su función de Lambda en lugar de enviar de forma predeterminada un mensaje de correo electrónico con Amazon Simple Email Service.
importante
Amazon CognitoHTML: escapa a los caracteres reservados como <
(<
) y >
(>
) de la contraseña temporal de su usuario. Estos caracteres pueden aparecer en las contraseñas temporales que Amazon Cognito envía a su función de remitente de correo electrónico personalizado, pero no en los códigos de verificación temporales. Para enviar contraseñas temporales, su función de Lambda debe anular los códigos de escape de estos caracteres después de descifrar la contraseña y antes de enviar el mensaje a su usuario.
-
Cree una clave de cifrado en AWS KMS. Esta clave se utiliza para cifrar contraseñas temporales y códigos de autorización que genera Amazon Cognito. A continuación, puede descifrar estos secretos con la función de Lambda de remitente personalizado para enviarlos a su usuario como texto sin formato.
-
Conceda
cognito-idp.amazonaws.com
acceso principal al servicio Amazon Cognito para cifrar los códigos con la clave. KMSAplique la siguiente política basada en recursos a su clave. KMS
{ "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
" } } }] } -
Cree una función de Lambda para el desencadenador de remitente personalizado. Amazon Cognito utiliza el AWS cifrado SDK para cifrar los secretos, las contraseñas temporales y los códigos que autorizan las solicitudes de los usuarios. API
-
Asigne un IAM rol a la función Lambda que tenga, como mínimo,
kms:Decrypt
permisos para su KMS clave.
-
-
Conceda el acceso
cognito-idp.amazonaws.com
a la entidad principal del servicio de Amazon Cognito para llamar a la función de Lambda.El siguiente AWS CLI comando otorga permiso a Amazon Cognito para invocar la función Lambda:
aws lambda add-permission --function-name
lambda_arn
--statement-id "CognitoLambdaInvokeAccess
" --action lambda:InvokeFunction --principal cognito-idp.amazonaws.com -
Elabore el código de su función de Lambda para enviar sus mensajes. Amazon Cognito se utiliza AWS Encryption SDK para cifrar los secretos antes de que Amazon Cognito los envíe al remitente personalizado, función Lambda. En su función, descifre el secreto y procese los metadatos pertinentes. A continuación, envíe el código, su mensaje personalizado y su número de teléfono de destino a la dirección personalizada API que entrega el mensaje.
-
Añada el AWS Encryption SDK a su función Lambda. Para obtener más información, consulte Lenguajes AWS de SDK programación de cifrado. Complete los siguientes pasos para actualizar el paquete de Lambda.
-
Exporte su función de Lambda como un archivo .zip en la AWS Management Console.
-
Abra la función y añada la AWS Encryption SDK. Para obtener más información y enlaces de descarga, consulte Lenguajes de programación de AWS Encryption SDK en la Guía para desarrolladores de AWS Encryption SDK .
-
Comprima su función con sus SDK dependencias y cárguela en Lambda. Para obtener más información, consulte Implementación de funciones de Lambda como archivos .zip en la Guía para desarrolladores de AWS Lambda .
-
-
Actualice el grupo de usuarios para agregar desencadenadores de Lambda de remitente personalizado. Incluya un
CustomEmailSender
parámetroCustomSMSSender
o en unaUpdateUserPool
API solicitud. LaUpdateUserPool
API operación requiere todos los parámetros del grupo de usuarios y los parámetros que desee cambiar. Si no proporciona todos los parámetros relevantes, Amazon Cognito establece los valores de los parámetros que faltan en sus valores predeterminados. Como se demuestra en el ejemplo siguiente, incluya entradas para todas las funciones de Lambda que desee agregar o mantener en su grupo de usuarios. Para obtener más información, consulte Actualización de la configuración del grupo de usuarios y del cliente de aplicaciones.#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
"
Para eliminar un disparador Lambda de remitente personalizado con un update-user-pool
AWS CLI, omita el CustomEmailSender
parámetro CustomSMSSender
o e incluya todos los demás activadores que desee usar con su grupo de usuarios. --lambda-config
Para eliminar un activador Lambda de remitente personalizado con una UpdateUserPool
API solicitud, omita el CustomEmailSender
parámetro CustomSMSSender
o del cuerpo de la solicitud que contiene el resto de la configuración del grupo de usuarios.
Ejemplo de código
En el siguiente ejemplo de Node.js se procesa un evento de mensaje de correo electrónico en la función de Lambda de remitentes de correo electrónico personalizado. En este ejemplo se supone que la función tiene dos variables de entorno definidas.
KEY_ALIAS
-
El alias de la KMS clave que desea usar para cifrar y descifrar los códigos de sus usuarios.
KEY_ARN
-
El nombre del recurso de Amazon (ARN) de la KMS clave que quieres usar para cifrar y descifrar los códigos de tus usuarios.
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 == 'CustomEmailSender_SignUp'){ //Send an email message to your user via a custom provider. //Include the temporary password in the message. } else if(event.triggerSource == 'CustomEmailSender_Authentication'){ //Send an MFA message. } else if(event.triggerSource == 'CustomEmailSender_ResendCode'){ //Send a message with next steps for password reset. } else if(event.triggerSource == 'CustomEmailSender_ForgotPassword'){ //Send a message with next steps for password reset. } else if(event.triggerSource == 'CustomEmailSender_UpdateUserAttribute'){ //Send a message with next steps for confirming the new attribute. } else if(event.triggerSource == 'CustomEmailSender_VerifyUserAttribute'){ //Send a message with next steps for confirming the new attribute. } else if(event.triggerSource == 'CustomEmailSender_AdminCreateUser'){ //Send a message with next steps for signing in with a new user profile. } else if(event.triggerSource == 'CustomEmailSender_AccountTakeOverNotification'){ //Send a message describing the threat protection event and next steps. } return; };
Fuentes del desencadenador de Lambda para remitentes de correos electrónicos personalizados
En la siguiente tabla se muestra el evento desencadenante de las fuentes del desencadenador para correos electrónicos personalizados en el código de Lambda.
TriggerSource value |
Evento |
---|---|
CustomEmailSender_SignUp |
Un usuario se registra y Amazon Cognito envía un mensaje de bienvenida. |
CustomEmailSender_Authentication |
Un usuario inicia sesión y Amazon Cognito envía un código de autenticación multifactorial ()MFA. |
CustomEmailSender_ForgotPassword |
Un usuario solicita un código para restablecer su contraseña. |
CustomEmailSender_ResendCode |
Un usuario solicita un código de confirmación de cuenta de reemplazo. |
CustomEmailSender_UpdateUserAttribute |
Un usuario actualiza una dirección de correo electrónico o un atributo de número de teléfono y Amazon Cognito envía un código para verificar el atributo. |
CustomEmailSender_VerifyUserAttribute |
Un usuario crea una dirección de correo electrónico nueva o un atributo de número de teléfono y Amazon Cognito envía un código para verificar el atributo. |
CustomEmailSender_AdminCreateUser |
Crea un nuevo usuario en su grupo de usuarios y Amazon Cognito le envía una contraseña temporal. |
CustomEmailSender_AccountTakeOverNotification |
Amazon Cognito detecta un intento de asumir una cuenta de usuario y envía una notificación al usuario. |