Activador SMS Lambda de remitente personalizado - Amazon Cognito

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.

Activador SMS Lambda de remitente personalizado

Al asignar un activador de SMS remitente personalizado a su grupo de usuarios, Amazon Cognito invoca una función Lambda en lugar de su comportamiento predeterminado cuando un evento de usuario requiere que envíe un mensaje. SMS Con un activador de remitente personalizado, su AWS Lambda función puede enviar SMS notificaciones a sus usuarios a través del método y el proveedor que elija. El código personalizado de tu función debe procesar y entregar todos los SMS mensajes de tu 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 SMS los mensajes. Su función Lambda puede personalizar la llamada a SNS API las operaciones de Amazon, por ejemplo, cuando quiere gestionar múltiples orígenes o cruces. IDs 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:

  1. 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.

  2. 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.

  3. Conceda el acceso cognito-idp.amazonaws.com a la entidad principal del servicio de Amazon Cognito para llamar a la función de Lambda.

  4. 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.

  5. 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 SMS activación Lambda de remitente personalizados

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.

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

Parámetros de solicitud de SMS remitente personalizados

type

La versión de la solicitud. En el caso de un evento de SMS remitente personalizado, el valor de esta cadena es siemprecustomSMSSenderRequestV1.

code

El código cifrado que su función puede descifrar y enviar al usuario.

clientMetadata

Uno o más pares clave-valor que puede proporcionar como entrada personalizada al activador de la función SMS Lambda del remitente 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.

userAttributes

Uno o varios pares clave-valor que representan atributos de usuario.

Parámetros de respuesta SMS del remitente personalizados

Amazon Cognito no espera ninguna información de devolución adicional en la respuesta. La función puede utilizar API operaciones para consultar y modificar los recursos o registrar los metadatos de los eventos en un sistema externo.

Activación del disparador SMS Lambda del remitente personalizado

Puede configurar un activador de SMS envío personalizado que utilice una lógica personalizada para enviar SMS mensajes a su grupo de usuarios. El siguiente procedimiento asigna un SMS activador personalizado, un activador de correo electrónico personalizado o ambos a su grupo de usuarios. Tras añadir el activador de SMS remitente personalizado, Amazon Cognito siempre envía los atributos del usuario, incluidos el número de teléfono y el código de un solo uso, a la función Lambda, en lugar del comportamiento predeterminado que envía un mensaje SMS con Amazon Simple Notification Service.

importante

Amazon CognitoHTML: escapa a los caracteres reservados como < (&lt;) y > (&gt;) 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.

  1. 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.

  2. Conceda cognito-idp.amazonaws.com acceso principal al servicio Amazon Cognito para cifrar los códigos con la clave. KMS

    Aplique 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" } } }] }
  3. 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

    1. Asigne un IAM rol a la función Lambda que tenga, como mínimo, kms:Decrypt permisos para su KMS clave.

  4. 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
  5. 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.

  6. 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.

    1. Exporte su función de Lambda como un archivo .zip en la AWS Management Console.

    2. 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 .

    3. 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 .

  7. Actualice el grupo de usuarios para agregar desencadenadores de Lambda de remitente personalizado. Incluya un CustomEmailSender parámetro CustomSMSSender o en una UpdateUserPool API solicitud. La UpdateUserPool 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

El siguiente ejemplo de Node.js procesa un evento de SMS mensaje en la función Lambda de SMS remitente personalizada. 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 == '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; };

Evalúe las capacidades de los SMS mensajes con una función de remitente personalizada SMS

Una función Lambda de SMS remitente personalizado acepta los SMS mensajes que el grupo de usuarios enviaría y entrega el contenido en función de la lógica personalizada. Amazon Cognito envía el Parámetros de SMS activación Lambda de remitente personalizados a su función. Su función puede hacer lo que desee con esta información. Por ejemplo, puedes enviar el código a un tema de Amazon Simple Notification Service (AmazonSNS). Un suscriptor a un SNS tema de Amazon puede ser un SMS mensaje, un HTTPS punto final o una dirección de correo electrónico.

Para crear un entorno de prueba para la SMS mensajería de Amazon Cognito con una función SMS Lambda de remitente personalizada, consulte amazon-cognito-user-pool- development-and-testing-with - sms-redirected-to-email en la biblioteca aws-samples en. GitHub El repositorio contiene AWS CloudFormation plantillas que pueden crear un nuevo grupo de usuarios o funcionar con un grupo de usuarios del que ya disponga. Estas plantillas crean funciones de Lambda y un tema de AmazonSNS. La función Lambda que la plantilla asigna como activador de SMS remitente personalizado redirige tus SMS mensajes a los suscriptores del tema de Amazon. SNS

Al implementar esta solución en un grupo de usuarios, la función Lambda envía todos los mensajes que Amazon Cognito suele SMS enviar a través de mensajería a una dirección de correo electrónico central. Utilice esta solución para personalizar y previsualizar SMS los mensajes y para probar los eventos del grupo de usuarios que hacen que Amazon Cognito envíe un SMS mensaje. Tras completar las pruebas, revierta la CloudFormation pila o elimine la asignación de funciones de SMS remitente personalizadas de su grupo de usuarios.

importante

No utilice las plantillas en amazon-cognito-user-pool- development-and-testing-with - sms-redirected-to-email para crear un entorno de producción. La función Lambda de SMS remitente personalizada de la solución simula los SMS mensajes, pero la función Lambda los envía todos a una única dirección de correo electrónico central. Antes de poder enviar SMS mensajes a un grupo de usuarios de Amazon Cognito de producción, debe cumplir los requisitos que se muestran en. SMSconfiguración de mensajes para grupos de usuarios de Amazon Cognito

Fuentes de SMS activación Lambda de remitentes personalizados

En la siguiente tabla, se muestra el evento de activación de las fuentes de SMS activación personalizadas en el código Lambda.

TriggerSource value Evento
CustomSMSSender_SignUp Un usuario se registra y Amazon Cognito envía un mensaje de bienvenida.
CustomSMSSender_ForgotPassword Un usuario solicita un código para restablecer su contraseña.
CustomSMSSender_ResendCode Un usuario solicita un código nuevo para confirmar su registro.
CustomSMSSender_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.
CustomSMSSender_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.
CustomSMSSender_Authentication Un usuario configurado con autenticación SMS multifactor (MFA) inicia sesión.
CustomSMSSender_AdminCreateUser Crea un nuevo usuario en su grupo de usuarios y Amazon Cognito le envía una contraseña temporal.