사용자 정의 이메일 발신자 Lambda 트리거 - Amazon Cognito

사용자 정의 이메일 발신자 Lambda 트리거

Amazon Cognito는 서드 파티 공급자가 사용자에게 이메일 알림을 보낼 수 있도록 AWS Lambda 함수 코드에서 사용자 지정 이메일 발신자 트리거를 호출합니다. Amazon Cognito는 이메일 메시지 이벤트를 Lambda 함수에 요청으로 보냅니다. 그러면 함수의 사용자 지정 코드가 메시지를 처리하고 전달해야 합니다.

참고

현재 Amazon Cognito 콘솔에서 사용자 지정 이메일 발신자 트리거를 할당할 수 없습니다. CreateUserPool 또는 UpdateUserPool API 요청에서 LambdaConfig 파라미터를 사용하여 트리거를 할당할 수 있습니다.

다음과 같이 사용자 지정 이메일 발신자 트리거를 설정합니다.

  1. 사용자 지정 이메일 발신자 트리거로 할당할 Lambda 함수를 생성합니다.

  2. AWS Key Management Service(AWS KMS)에서 암호화 키를 생성합니다. Amazon Cognito에서 암호(임시 암호 및 권한 부여 코드)를 생성한 다음 이 키를 사용하여 암호화합니다. 그런 다음 Lambda 함수에서 AWS Encryption SDK를 사용하여 코드를 해독하고 사용자에게 일반 텍스트로 보낼 수 있습니다.

  3. Amazon Cognito 서비스 보안 주체 cognito-idp.amazonaws.com에 Lambda 함수를 호출할 수 있는 권한을 부여합니다.

  4. 사용자 지정 전송 방법 또는 서드 파티 공급자에게 이메일 메시지를 전달하는 Lambda 함수 코드를 작성합니다.

  5. 사용자 지정 발신자 Lambda 트리거를 사용하도록 사용자 풀을 업데이트합니다.

중요

사용자 풀에 대해 사용자 지정 이메일 발신자 또는 사용자 지정 SMS 발신자 함수를 구성할 때 보안을 강화하도록 대칭 AWS KMS key를 구성합니다. Amazon Cognito는 구성된 KMS 키를 사용하여 코드 또는 임시 암호를 암호화합니다. Amazon Cognito는 base64로 인코딩된 암호화 텍스트를 Lambda 함수로 전송합니다. 자세한 내용은 대칭 KMS 키를 참조하세요.

사용자 지정 이메일 발신자 Lambda 트리거 파라미터

이러한 파라미터는 Amazon Cognito가 공통 파라미터의 이벤트 정보와 함께 이 Lambda 함수에 전달하는 파라미터입니다.

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

사용자 지정 이메일 발신자 요청 파라미터

유형

요청 버전입니다. 사용자 지정 이메일 발신자 이벤트의 경우 이 문자열의 값은 항상 customEmailSenderRequestV1입니다.

code

함수가 해독하여 사용자에게 보낼 수 있는 암호화된 코드입니다.

clientMetadata

사용자 지정 이메일 발신자 Lambda 함수 트리거에 대한 사용자 지정 입력으로 제공할 수 있는 하나 이상의 키-값 페어입니다. 이 데이터를 Lambda 함수에 전달하려면 AdminRespondToAuthChallengeRespondToAuthChallenge API 작업에서 ClientMetadata 파라미터를 사용합니다. Amazon Cognito는 사후 승인 함수에 전달하는 요청에 있는 AdminInitiateAuthInitiateAuth API 작업의 ClientMetadata 파라미터에서 전달된 데이터를 포함하지 않습니다.

userAttributes

사용자 속성을 나타내는 하나 이상의 키-값 페어입니다.

사용자 지정 이메일 발신자 응답 파라미터

Amazon Cognito는 사용자 지정 이메일 발신자 응답에서 추가 반환 정보를 기대하지 않습니다. 함수는 API 작업을 사용하여 리소스를 쿼리 및 수정하거나 이벤트 메타데이터를 외부 시스템에 기록할 수 있습니다.

사용자 지정 이메일 발신자 Lambda 트리거 활성화

사용자 지정 로직을 사용하여 사용자 풀에 대한 이메일 메시지를 보내는 사용자 지정 이메일 발신자 트리거를 설정하려면 다음과 같이 트리거를 활성화합니다.

1단계: Lambda 함수 생성

사용자 지정 이메일 발신자 트리거에 대한 Lambda 함수를 생성합니다. Amazon Cognito는 AWS 암호화 SDK를 사용하여 비밀(임시 암호 또는 인증 코드)을 암호화합니다.

2단계: AWS KMS에서 암호화 키 생성

AWS KMS에서 암호화 키를 생성합니다. Amazon Cognito에서 이 키를 사용하여 Amazon Cognito에서 생성하는 임시 암호 및 권한 부여 코드를 암호화합니다. 그런 다음 사용자 지정 발신자 Lambda 함수에서 이러한 보안 암호를 해독하여 일반 텍스트로 사용자에게 보낼 수 있습니다.

3단계: Amazon Cognito에 Lambda 함수를 호출할 수 있는 권한 부여

다음 명령을 사용합니다.

aws lambda add-permission --function-name lambda_arn --statement-id "CognitoLambdaInvokeAccess" --action lambda:InvokeFunction --principal cognito-idp.amazonaws.com

4단계: 사용자 지정 발신자를 사용하도록 코드 편집

Amazon Cognito는 AWS Encryption SDK를 사용하여 암호(임시 암호 및 권한 부여 코드)를 암호화한 다음 사용자 지정 발신자 Lambda 함수로 보냅니다. 이러한 보안 암호는 해독한 후 사용자에게 보냅니다. 이메일 메시지를 보낼 사용자 지정 공급자를 선택할 수 있습니다. AWS Encryption SDK를 Lambda 함수와 함께 사용하려면 SDK를 함수와 함께 패키징해야 합니다. 자세한 내용은 JavaScript용 AWS 암호화 SDK 설치를 참조하세요. 다음과 같이 Lambda 패키지를 업데이트할 수도 있습니다.

  1. 콘솔에서 Lambda 함수 패키지를 내보냅니다.

  2. 패키지의 압축을 풉니다.

  3. 패키지에 AWS Encryption SDK를 추가합니다. 예를 들어 Node.js를 사용하는 경우 node_modules 디렉터리를 추가하고 @aws-crypto/client-node의 라이브러리를 포함합니다.

  4. 패키지를 다시 생성합니다.

  5. 수정된 디렉터리에서 Lambda 함수 코드를 업데이트합니다.

5단계: 사용자 풀을 업데이트하여 사용자 지정 발신자 Lambda 트리거 추가

UpdateUserPool API 작업에서 CustomEmailSender 파라미터로 사용자 풀을 업데이트합니다. UpdateUserPool에는 사용자 풀의 모든 파라미터와 변경할 파라미터가 필요합니다. 관련 파라미터를 모두 제공하지 않으면 Amazon Cognito에서 누락된 파라미터 값을 기본값으로 설정합니다. 자세한 정보는 사용자 풀 구성 업데이트을 참조하십시오.

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

AWS CLI에서 사용자 지정 이메일 보낸 사람 Lambda 트리거를 제거하려면 --lambda-config에서 CustomEmailSender 파라미터를 생략하고 사용자 풀과 함께 사용할 다른 모든 트리거를 포함합니다. UpdateUserPool API 요청이 포함된 사용자 지정 이메일 보낸 사람 Lambda 트리거를 제거하려면 나머지 사용자 풀 구성이 포함된 요청 본문에서 CustomemailSender를 제거하면 됩니다. 자세한 정보는 Amazon Cognito API 또는 AWS CLI를 사용하여 사용자 풀 업데이트을 참조하십시오.

다음 Node.js 예에서는 사용자 지정 이메일 발신자 Lambda 함수에서 이메일 메시지 이벤트를 처리하는 방법을 보여줍니다. 이 예에서는 함수에 두 개의 환경 변수가 정의되어 있다고 가정합니다.

KEY_ALIAS

사용자 코드를 암호화하고 복호화하는 데 사용하려는 KMS 키의 별칭입니다.

KEY_ARN

사용자 코드를 암호화하고 복호화하는 데 사용하려는 KMS 키의 Amazon 리소스 이름(ARN)입니다.

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 has the decrypted secret. if(event.triggerSource == 'CustomEmailSender_SignUp'){ #Send email to end-user using custom or 3rd party provider. #Include temporary password in the email. }else if(event.triggerSource == 'CustomEmailSender_ResendCode'){ }else if(event.triggerSource == 'CustomEmailSender_ForgotPassword'){ }else if(event.triggerSource == 'CustomEmailSender_UpdateUserAttribute'){ }else if(event.triggerSource == 'CustomEmailSender_VerifyUserAttribute'){ }else if(event.triggerSource == 'CustomEmailSender_AdminCreateUser'){ }else if(event.triggerSource == 'CustomEmailSender_AccountTakeOverNotification'){ } return; };

사용자 정의 이메일 발신자 Lambda 트리거 소스

다음 표에는 Lambda 코드의 사용자 지정 이메일 트리거 소스에 대한 트리거 이벤트가 나와 있습니다.

TriggerSource value 트리거하는 이벤트
CustomEmailSender_SignUp 사용자가 가입하면 Amazon Cognito에서 시작 메시지를 보냅니다.
CustomEmailSender_ForgotPassword 사용자가 암호를 재설정하는 코드를 요청합니다.
CustomEmailSender_ResendCode 사용자가 암호를 재설정하는 대체 코드를 요청합니다.
CustomEmailSender_UpdateUserAttribute 사용자가 이메일 주소 또는 전화 번호 속성을 업데이트하면 Amazon Cognito에서 속성을 확인하는 코드를 보냅니다.
CustomEmailSender_VerifyUserAttribute 사용자가 새 이메일 주소 또는 전화 번호 속성을 생성하면 Amazon Cognito에서 속성을 확인하는 코드를 보냅니다.
CustomEmailSender_AdminCreateUser 사용자 풀에 새 사용자를 생성하면 Amazon Cognito에서 해당 사용자에게 임시 암호를 보냅니다.
CustomEmailSender_AccountTakeOverNotification Amazon Cognito는 사용자 계정을 획득하려는 시도를 감지하고 사용자에게 알림을 보냅니다.