Acionador SMS Lambda personalizado do remetente - Amazon Cognito

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Acionador SMS Lambda personalizado do remetente

Quando você atribui um gatilho de SMS remetente personalizado ao seu grupo de usuários, o Amazon Cognito invoca uma função Lambda em vez de seu comportamento padrão quando um evento do usuário exige que ele envie uma mensagem. SMS Com um gatilho de remetente personalizado, sua AWS Lambda função pode enviar SMS notificações aos seus usuários por meio de um método e provedor de sua escolha. O código personalizado da sua função deve processar e entregar todas as SMS mensagens do seu grupo de usuários.

Esse gatilho serve para cenários em que talvez você queira ter maior controle sobre como seu grupo de usuários envia SMS mensagens. Sua função Lambda pode personalizar a chamada para as SNS API operações da Amazon, por exemplo, quando você deseja gerenciar várias originações ou cruzamentos. IDs Regiões da AWS Sua função também pode redirecionar mensagens para outro meio de entrega ou serviço de terceiros.

nota

No momento, não é possível atribuir acionadores de remetente personalizados no console do Amazon Cognito. Você pode atribuir um gatilho com o LambdaConfig parâmetro em uma UpdateUserPool API solicitação CreateUserPool or.

Para configurar esse acionador, execute as seguintes etapas:

  1. Crie uma chave de criptografia simétrica em AWS Key Management Service (AWS KMS). O Amazon Cognito gera segredos — senhas temporárias, códigos de verificação e códigos de confirmação — e usa essa chave para criptografar os segredos. KMS Em seguida, você pode usar a API operação Decrypt em sua função Lambda para descriptografar os segredos e enviá-los ao usuário em texto simples. AWS Encryption SDKÉ uma ferramenta útil para AWS KMS operações em sua função.

  2. Crie uma função do Lambda que você deseja atribuir como acionador de remetente personalizado. Conceda kms:Decrypt permissões para sua KMS chave para a função Lambda.

  3. Conceda à entidade principal cognito-idp.amazonaws.com do serviço do Amazon Cognito acesso para invocar a função do Lambda.

  4. Escreva um código da função do Lambda que direcione suas mensagens para métodos de entrega personalizados ou provedores de terceiros. Para entregar o código de verificação ou confirmação do usuário, o Base64 decodifica e descriptografa o valor do parâmetro code na solicitação. Essa operação produz um código ou senha em texto simples que você deve incluir na mensagem.

  5. Atualize o grupo de usuários para que ele use um acionador do Lambda de remetente personalizado. O IAM diretor que atualiza ou cria um grupo de usuários com um gatilho de remetente personalizado deve ter permissão para criar uma concessão para sua KMS chave. O LambdaConfig trecho a seguir atribui funções personalizadas SMS e de remetente de e-mail.

    "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 gatilho Lambda personalizados do remetente

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos parâmetros comuns que o Amazon Cognito adiciona a todas as solicitações.

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

Parâmetros personalizados SMS de solicitação do remetente

tipo

A versão da solicitação. Para um evento de SMS remetente personalizado, o valor dessa string é semprecustomSMSSenderRequestV1.

Código

O código criptografado que sua função pode descriptografar e enviar ao usuário.

clientMetadata

Um ou mais pares de valores-chave que você pode fornecer como entrada personalizada para o gatilho da função Lambda do SMS remetente personalizado. Para passar esses dados para sua função Lambda, você pode usar o ClientMetadata parâmetro nas ações AdminRespondToAuthChallengee. RespondToAuthChallengeAPI O Amazon Cognito não inclui dados do ClientMetadata parâmetro AdminInitiateAuthe InitiateAuthAPIoperações na solicitação que ele passa para a função de pós-autenticação.

userAttributes

Um ou mais pares de chave-valor que representam atributos de usuário.

Parâmetros personalizados SMS de resposta do remetente

O Amazon Cognito não espera nenhuma outra informação de retorno na resposta. Sua função pode usar API operações para consultar e modificar seus recursos ou registrar metadados de eventos em um sistema externo.

Ativando o gatilho SMS Lambda personalizado do remetente

Você pode configurar um gatilho de SMS remetente personalizado que usa lógica personalizada para enviar SMS mensagens para seu grupo de usuários. O procedimento a seguir atribui um SMS gatilho personalizado, um gatilho de e-mail personalizado ou ambos ao seu grupo de usuários. Depois de adicionar seu gatilho de SMS remetente personalizado, o Amazon Cognito sempre envia atributos do usuário, incluindo o número de telefone e o código único para sua função Lambda, em vez do comportamento padrão que envia uma SMS mensagem com o Amazon Simple Notification Service.

Importante

Amazon Cognito HTML - escapa caracteres reservados como < (&lt;) e > (&gt;) na senha temporária do seu usuário. Esses caracteres podem aparecer em senhas temporárias que o Amazon Cognito envia para à função personalizada de remetente de e-mail, mas não aparecem nos códigos de verificação temporários. Para enviar senhas temporárias, a função do Lambda deve liberar esses caracteres depois de decifrar a senha e antes de enviar a mensagem ao usuário.

  1. Crie uma chave de criptografia no AWS KMS. Essa chave criptografa senhas temporárias e códigos de autorização gerados pelo Amazon Cognito. Depois, é possível descriptografar esses segredos na função do Lambda de remetente personalizado para enviá-los ao usuário em texto não criptografado.

  2. Conceda cognito-idp.amazonaws.com acesso principal ao serviço Amazon Cognito para criptografar códigos com a chave. KMS

    Aplique a seguinte política baseada em recursos à sua KMS chave.

    { "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. Crie uma função do Lambda para o acionador de remetente personalizado. O Amazon Cognito usa a AWS criptografia SDK para criptografar os segredos, as senhas temporárias e os códigos que autorizam as solicitações dos seus usuários. API

    1. Atribua uma IAM função à sua função Lambda que tenha, no mínimo, kms:Decrypt permissões para sua KMS chave.

  4. Conceda à entidade principal cognito-idp.amazonaws.com do serviço do Amazon Cognito acesso para invocar a função do Lambda.

    O AWS CLI comando a seguir concede ao Amazon Cognito permissão para invocar sua função Lambda:

    aws lambda add-permission --function-name lambda_arn --statement-id "CognitoLambdaInvokeAccess" --action lambda:InvokeFunction --principal cognito-idp.amazonaws.com
  5. Componha o código da função do Lambda para enviar as mensagens. O Amazon Cognito usa para AWS Encryption SDK criptografar segredos antes que o Amazon Cognito envie os segredos para a função Lambda personalizada do remetente. Em sua função, decifre o segredo e processe todos os metadados relevantes. Em seguida, envie o código, sua própria mensagem personalizada e o número de telefone de destino para a API pessoa que entrega sua mensagem.

  6. Adicione o AWS Encryption SDK à sua função Lambda. Para obter mais informações, consulte SDKLinguagens AWS de programação de criptografia. Para atualizar o pacote do Lambda, conclua as etapas a seguir.

    1. Exporte a função do Lambda como um arquivo .zip no AWS Management Console.

    2. Abra sua função e adicione AWS Encryption SDK o. Para ter mais informações e links de download, consulte Linguagens de programação do AWS Encryption SDK no Guia do desenvolvedor do AWS Encryption SDK .

    3. Compacte sua função com suas SDK dependências e faça o upload da função para o Lambda. Para obter mais informações, consulte Implantar funções do Lambda como arquivos .zip no Guia do desenvolvedor do AWS Lambda .

  7. Atualize o grupo de usuários para adicionar acionadores do Lambda de remetente personalizado. Inclua um CustomEmailSender parâmetro CustomSMSSender or em uma UpdateUserPool API solicitação. A UpdateUserPool API operação requer todos os parâmetros do seu grupo de usuários e os parâmetros que você deseja alterar. Se você não fornecer todos os parâmetros relevantes, o Amazon Cognito assumirá os valores padrão para todos os parâmetros ausentes. Conforme demonstrado no exemplo a seguir, inclua entradas para todas as funções do Lambda que você deseja adicionar ou manter no grupo de usuários. Para obter mais informações, consulte Atualização da configuração do pool de usuários e do cliente do aplicativo.

    #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 remover um gatilho Lambda personalizado do remetente com update-user-pool AWS CLI um, omita CustomSMSSender o parâmetro CustomEmailSender --lambda-config or e inclua todos os outros gatilhos que você deseja usar com seu grupo de usuários.

Para remover um gatilho Lambda personalizado do remetente com UpdateUserPool API uma solicitação, omita CustomSMSSender o parâmetro CustomEmailSender or do corpo da solicitação que contém o restante da configuração do seu grupo de usuários.

Exemplo de código

O exemplo de Node.js a seguir processa um evento de SMS mensagem na função Lambda personalizada do SMS remetente. Esse exemplo pressupõe que a função tenha duas variáveis de ambiente definidas.

KEY_ALIAS

O alias da KMS chave que você deseja usar para criptografar e descriptografar os códigos dos seus usuários.

KEY_ARN

O Amazon Resource Name (ARN) da KMS chave que você deseja usar para criptografar e descriptografar os códigos dos seus usuários.

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; };

Avalie os recursos de SMS mensagens com uma função de SMS remetente personalizada

Uma função Lambda de SMS remetente personalizada aceita SMS as mensagens que seu grupo de usuários enviaria, e a função entrega o conteúdo com base em sua lógica personalizada. O Amazon Cognito envia o Parâmetros de SMS gatilho Lambda personalizados do remetente para sua função. Sua função pode fazer o que você quiser com essas informações. Por exemplo, você pode enviar o código para um tópico do Amazon Simple Notification Service (AmazonSNS). Um assinante do Amazon SNS Topic pode ser uma SMS mensagem, um HTTPS endpoint ou um endereço de e-mail.

Para criar um ambiente de teste para SMS mensagens do Amazon Cognito com uma função Lambda personalizada do SMS remetente, amazon-cognito-user-poolconsulte development-and-testing-with - sms-redirected-to-email - na biblioteca aws-samples em. GitHub O repositório contém AWS CloudFormation modelos que podem criar um novo grupo de usuários ou trabalhar com um grupo de usuários que você já tem. Esses modelos criam funções Lambda e um tópico da AmazonSNS. A função Lambda, que o modelo atribui como um gatilho de SMS remetente personalizado, redireciona suas SMS mensagens para os assinantes do tópico da Amazon. SNS

Quando você implanta essa solução em um grupo de usuários, todas as mensagens que o Amazon Cognito geralmente envia por meio de SMS mensagens, a função Lambda envia para um endereço de e-mail central. Use essa solução para personalizar e visualizar SMS mensagens e testar os eventos do grupo de usuários que fazem com que o Amazon Cognito envie uma SMS mensagem. Depois de concluir seus testes, reverta a CloudFormation pilha ou remova a atribuição personalizada da função de SMS remetente do seu grupo de usuários.

Importante

Não use os modelos em amazon-cognito-user-pool- development-and-testing-with - sms-redirected-to-email para criar um ambiente de produção. A função Lambda personalizada do SMS remetente na solução SMS simula mensagens, mas a função Lambda envia todas elas para um único endereço de e-mail central. Antes de enviar SMS mensagens em um grupo de usuários de produção do Amazon Cognito, você deve preencher os requisitos mostrados em. SMSconfigurações de mensagem para grupos de usuários do Amazon Cognito

Fontes personalizadas de SMS gatilho Lambda do remetente

A tabela a seguir mostra o evento de acionamento para fontes de SMS gatilho personalizadas em seu código Lambda.

TriggerSource value Evento
CustomSMSSender_SignUp Um usuário se cadastra e o Amazon Cognito envia uma mensagem de boas-vindas.
CustomSMSSender_ForgotPassword Um usuário solicita um código para redefinir a senha.
CustomSMSSender_ResendCode Um usuário solicita um novo código para confirmar seu registro.
CustomSMSSender_VerifyUserAttribute Um usuário cria um endereço de e-mail ou um atributo de número de telefone e o Amazon Cognito envia um código para verificar o atributo.
CustomSMSSender_UpdateUserAttribute Um usuário atualiza um endereço de e-mail ou um atributo de número de telefone e o Amazon Cognito envia um código para verificar o atributo.
CustomSMSSender_Authentication Um usuário configurado com autenticação SMS multifator (MFA) faz login.
CustomSMSSender_AdminCreateUser Você cria um usuário em seu grupo de usuários e o Amazon Cognito envia uma senha temporária.