기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
사용자 정의 이메일 발신자 Lambda 트리거
사용자 지정 이메일 발신자 트리거를 사용자 풀에 할당하면 Amazon Cognito가 사용자 이벤트로 인해 이메일 메시지를 전송해야 하는 경우 기본 동작 대신 Lambda 함수를 호출합니다. 사용자 지정 발신자 트리거를 사용하면 AWS Lambda 함수가 선택한 메서드와 공급자를 통해 사용자에게 이메일 알림을 보낼 수 있습니다. 함수의 사용자 지정 코드는 사용자 풀의 모든 이메일 메시지를 처리하고 전달해야 합니다.
이 트리거는 사용자 풀이 이메일 메시지를 보내는 방법을 더 잘 제어하려는 시나리오를 제공합니다. Lambda 함수는 여러 확인된 자격 증명을 관리하거나 를 교차하려는 경우 Amazon SES API 작업에 대한 호출을 사용자 지정할 수 있습니다 AWS 리전. 함수는 메시지를 다른 전송 미디어 또는 타사 서비스로 리디렉션할 수도 있습니다.
참고
현재 Amazon Cognito 콘솔에서 사용자 지정 발신자 트리거를 할당할 수 없습니다. CreateUserPool
또는 UpdateUserPool
API 요청에서 LambdaConfig
파라미터가 있는 트리거를 할당할 수 있습니다.
이 트리거를 설정하려면 다음 단계를 수행합니다.
-
( AWS Key Management Service )에서 대칭 암호화 키를 생성합니다AWS KMS. Amazon Cognito는 임시 암호, 확인 코드 및 확인 코드와 같은 보안 암호를 생성한 다음 이 KMS 키를 사용하여 보안 암호를 암호화합니다. 그런 다음 Lambda 함수의 복호화 API 작업을 사용하여 암호를 복호화하고 일반 텍스트로 사용자에게 보낼 수 있습니다. AWS Encryption SDK 는 함수의 AWS KMS 작업에 유용한 도구입니다.
-
사용자 지정 발신자 트리거로 할당할 Lambda 함수를 생성합니다. Lambda 함수 역할에 KMS 키에 대한
kms:Decrypt
권한을 부여합니다. -
Amazon Cognito 서비스 보안 주체
cognito-idp.amazonaws.com
에 Lambda 함수를 호출할 수 있는 권한을 부여합니다. -
사용자 지정 전송 방법 또는 서드 파티 공급자에게 메시지를 전달하는 Lambda 함수 코드를 작성합니다. 사용자의 검증 또는 확인 코드를 전달하기 위해 Base64는 요청의
code
파라미터 값을 디코딩하고 해독합니다. 이 작업을 수행하면 메시지에 포함해야 하는 일반 텍스트 코드 또는 암호가 생성됩니다. -
사용자 지정 발신자 Lambda 트리거를 사용하도록 사용자 풀을 업데이트합니다. 사용자 지정 발신자 트리거로 사용자 풀을 업데이트하거나 생성하는 IAM 보안 주체는 KMS 키에 대한 권한을 생성할 권한이 있어야 합니다. 다음
LambdaConfig
코드 조각은 사용자 지정 SMS 및 이메일 발신자 함수를 할당합니다."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" }
사용자 지정 이메일 발신자 Lambda 트리거 파라미터
Amazon Cognito가 이 Lambda 함수에 전달하는 요청은 아래 파라미터와 Amazon Cognito가 모든 요청에 추가하는 공통 파라미터의 조합입니다.
사용자 지정 이메일 발신자 요청 파라미터
- type
-
요청 버전입니다. 사용자 지정 이메일 발신자 이벤트의 경우 이 문자열의 값은 항상
customEmailSenderRequestV1
입니다. - code
-
함수가 해독하여 사용자에게 보낼 수 있는 암호화된 코드입니다.
- clientMetadata
-
사용자 지정 이메일 발신자 Lambda 함수 트리거에 대한 사용자 지정 입력으로 제공할 수 있는 하나 이상의 키-값 페어입니다. 이 데이터를 Lambda 함수에 전달하려면 AdminRespondToAuthChallenge 및 RespondToAuthChallenge API 작업에서 ClientMetadata 파라미터를 사용할 수 있습니다. Amazon Cognito는 사후 인증 함수로 전달되는 요청에 AdminInitiateAuth 및 InitiateAuth API 작업의 ClientMetadata 파라미터 데이터를 포함하지 않습니다.
참고
Amazon Cognito
ClientMetadata
는 다음 트리거 소스가 있는 이벤트에서 사용자 지정 이메일 트리거 함수로 를 보냅니다.-
CustomEmailSender_ForgotPassword
-
CustomEmailSender_SignUp
-
CustomEmailSender_Authentication
Amazon Cognito는 소스
ClientMetadata
를 사용하여 트리거 이벤트를 보내지 않습니다CustomEmailSender_AccountTakeOverNotification
. -
- userAttributes
-
사용자 속성을 나타내는 하나 이상의 키-값 페어입니다.
사용자 지정 이메일 발신자 응답 파라미터
Amazon Cognito는 사용자 지정 이메일 발신자 응답에서 추가 반환 정보를 기대하지 않습니다. Lambda 함수는 이벤트를 해석하고 코드를 복호화한 다음 메시지 내용을 전달해야 합니다. 일반적인 함수는 이메일 메시지를 조립하여 타사 SMTP 릴레이로 전달합니다.
사용자 지정 이메일 발신자 Lambda 트리거 활성화
사용자 지정 로직을 사용하여 사용자 풀에 대한 이메일 메시지를 보내는 사용자 지정 이메일 발신자 트리거를 설정하려면 다음과 같이 트리거를 활성화합니다. 다음 절차에서는 사용자 지정 이메일 트리거, 사용자 지정 SMS 트리거 또는 둘 다를 사용자 풀에 할당합니다. 사용자 지정 이메일 발신자 트리거를 추가하면 Amazon Cognito는 Amazon Simple Email Service를 통해 이메일 메시지를 전송했을 때처럼 항상 사용자 속성(예: 이메일 주소) 및 일회성 코드를 Lambda 함수로 전송합니다.
중요
Amazon Cognito HTML- 사용자의 임시 암호에서 <
(<
) 및 >
(>
)와 같은 예약 문자를 이스케이프합니다. 이러한 문자는 Amazon Cognito가 사용자 지정 이메일 발신자 함수로 보내는 임시 암호에 표시될 수 있지만, 임시 확인 코드에는 표시되지 않습니다. 임시 암호를 전송하려면 Lambda 함수가 암호를 해독하고 이러한 문자를 이스케이프 해제한 다음 사용자에게 메시지를 전송해야 합니다.
-
AWS KMS에서 암호화 키를 생성합니다. 이 키는 Amazon Cognito가 생성하는 임시 암호 및 권한 부여 코드를 암호화합니다. 그런 다음 사용자 지정 발신자 Lambda 함수에서 이러한 보안 암호를 해독하여 사용자에게 일반 텍스트로 보낼 수 있습니다.
-
Amazon Cognito 서비스 보안 주체에게 KMS 키로 코드를 암호화할 수 있는
cognito-idp.amazonaws.com
액세스 권한을 부여합니다.다음 리소스 기반 정책을 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
" } } }] } -
사용자 지정 SMS 발신자 트리거에 대한 Lambda 함수를 생성합니다. Amazon Cognito는 AWS 암호화SDK를 사용하여 사용자의 API 요청을 승인하는 보안 암호, 임시 암호 및 코드를 암호화합니다.
-
최소한 KMS 키에 대한
kms:Decrypt
권한이 있는 IAM 역할을 Lambda 함수에 할당합니다.
-
-
Amazon Cognito 서비스 보안 주체
cognito-idp.amazonaws.com
에 Lambda 함수를 호출할 수 있는 권한을 부여합니다.다음 AWS CLI 명령은 Amazon Cognito에 Lambda 함수를 호출할 수 있는 권한을 부여합니다.
aws lambda add-permission --function-name
lambda_arn
--statement-id "CognitoLambdaInvokeAccess
" --action lambda:InvokeFunction --principal cognito-idp.amazonaws.com -
Lambda 함수 코드를 작성하여 메시지를 전송합니다. Amazon Cognito가 사용자 지정 발신자 Lambda 함수 AWS Encryption SDK 로 암호를 전송하기 전에 Amazon Cognito는 를 사용하여 암호를 암호화합니다. 함수에서 암호를 해독하고 관련 메타데이터를 처리합니다. 그런 다음 메시지를 API 전달하는 사용자 지정으로 코드, 사용자 지정 메시지 및 대상 전화번호를 전송합니다.
-
Lambda 함수 AWS Encryption SDK 에 를 추가합니다. 자세한 내용은 AWS 암호화 SDK 프로그래밍 언어 단원을 참조하세요. Lambda 패키지를 업데이트하려면 다음 단계를 완료하세요.
-
Lambda 함수를 AWS Management Console에 .zip 파일로 내보냅니다.
-
함수를 열고 를 추가합니다 AWS Encryption SDK. 자세한 내용과 다운로드 링크는 AWS Encryption SDK 개발자 안내서의 AWS Encryption SDK 프로그래밍 언어를 참조하세요.
-
SDK 종속성을 사용하여 함수를 압축하고 함수를 Lambda에 업로드합니다. 자세한 내용은 AWS Lambda 개발자 안내서의 Lambda 함수를 .zip 파일 아카이브로 배포를 참조하세요.
-
-
사용자 풀을 업데이트하여 사용자 지정 발신자 Lambda 트리거를 추가합니다.
UpdateUserPool
API 요청에CustomSMSSender
또는CustomEmailSender
파라미터를 포함합니다.UpdateUserPool
API 작업을 수행하려면 사용자 풀의 모든 파라미터와 변경하려는 파라미터가 필요합니다. 관련 파라미터를 모두 제공하지 않으면 Amazon Cognito에서 누락된 파라미터 값을 기본값으로 설정합니다. 다음 예시처럼 사용자 풀에 추가하거나 사용자 풀에서 유지할 모든 Lambda 함수의 항목을 포함합니다. 자세한 내용은 사용자 풀 및 앱 클라이언트 구성 업데이트 단원을 참조하십시오.#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
"
를 사용하여 사용자 지정 발신자 Lambda 트리거를 제거하려면 에서 CustomSMSSender
또는 CustomEmailSender
파라미터를 update-user-pool
AWS CLI생략--lambda-config
하고 사용자 풀에 사용하려는 다른 모든 트리거를 포함합니다.
UpdateUserPool
API 요청과 함께 사용자 지정 발신자 Lambda 트리거를 제거하려면 나머지 사용자 풀 구성이 포함된 요청 본문에서 CustomSMSSender
또는 CustomEmailSender
파라미터를 생략합니다.
코드 예제
다음 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 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; };
사용자 정의 이메일 발신자 Lambda 트리거 소스
다음 표에는 Lambda 코드의 사용자 지정 이메일 트리거 소스에 대한 트리거 이벤트가 나와 있습니다.
TriggerSource value |
Event |
---|---|
CustomEmailSender_SignUp |
사용자가 가입하면 Amazon Cognito에서 시작 메시지를 보냅니다. |
CustomEmailSender_Authentication |
사용자가 로그인하면 Amazon Cognito가 다중 인증(MFA) 코드를 전송합니다. |
CustomEmailSender_ForgotPassword |
사용자가 암호를 재설정하는 코드를 요청합니다. |
CustomEmailSender_ResendCode |
사용자가 대체 계정 확인 코드를 요청합니다. |
CustomEmailSender_UpdateUserAttribute |
사용자가 이메일 주소 또는 전화 번호 속성을 업데이트하면 Amazon Cognito에서 속성을 확인하는 코드를 보냅니다. |
CustomEmailSender_VerifyUserAttribute |
사용자가 새 이메일 주소 또는 전화 번호 속성을 생성하면 Amazon Cognito에서 속성을 확인하는 코드를 보냅니다. |
CustomEmailSender_AdminCreateUser |
사용자 풀에 새 사용자를 생성하면 Amazon Cognito에서 해당 사용자에게 임시 암호를 보냅니다. |
CustomEmailSender_AccountTakeOverNotification |
Amazon Cognito는 사용자 계정을 획득하려는 시도를 감지하고 사용자에게 알림을 보냅니다. |