사용자 지정 발신자 Lambda 트리거 - Amazon Cognito

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

사용자 지정 발신자 Lambda 트리거

Lambda는 사용자 풀에서 CustomEmailSenderCustomSMSSender 지원 타사 이메일 및 SMS 알림을 트리거합니다. SMS 및 이메일 공급자를 선택하여 Lambda 함수 코드 내에서 사용자에게 알림을 보낼 수 있습니다. Amazon Cognito가 사용자에게 초대, MFA 코드, 확인 코드, 인증 코드 및 임시 비밀번호를 전송하면 이벤트는 구성된 Lambda 함수를 활성화합니다. Amazon Cognito는 코드 및 임시 보안 암호를 활성화된 Lambda에 보냅니다. Amazon Cognito는 AWS KMS 고객 관리형 키와를 사용하여 이러한 보안 암호를 암호화합니다 AWS Encryption SDK. 는 일반 데이터를 암호화하고 해독하는 데 도움이 되는 클라이언트 측 암호화 라이브러리 AWS Encryption SDK 입니다.

CustomEmailSender

Amazon Cognito는 이 트리거를 호출하여 사용자에게 이메일 알림을 전송합니다.

CustomSMSSender

Amazon Cognito는 이 트리거를 호출하여 사용자에게 SMS 알림을 전송합니다.

암호화 개념

Amazon Cognito는 사용자 지정 발신자 트리거에 보내는 이벤트에서 일반 텍스트로 사용자 코드를 보내지 않습니다. Lambda 함수는 이벤트에서 코드를 해독해야 합니다. 다음 개념은 함수가 사용자에게 전달할 수 있는 코드를 가져오는 데 사용해야 하는 암호화 아키텍처입니다.

AWS KMS

AWS KMS 는 AWS KMS 키를 생성하고 제어하는 관리형 서비스입니다. 이러한 키는 데이터를 암호화합니다. 자세한 내용은 AWS Key Management Service란 무엇입니까?를 참조하세요.

KMS 키

KMS 키는 암호화 키를 논리적으로 표현한 것입니다. KMS 키에는 키 ID, 생성 날짜, 설명 및 키 상태와 같은 메타데이터가 포함됩니다. 또한 KMS 키에는 데이터를 암호화 및 복호화하는 데 사용되는 키 재료도 포함됩니다. 자세한 내용은 AWS KMS 키를 참조하세요.

대칭 KMS 키

대칭 KMS 키는 암호화되지 않은 상태로 AWS KMS 를 종료하지 않는 256비트 암호화 키입니다. 대칭 KMS 키를 사용하려면를 호출해야 합니다 AWS KMS. Amazon Cognito는 대칭 키를 사용합니다. 동일한 키가 암호화하고 해독합니다. 자세한 내용은 대칭 KMS 키를 참조하세요.

사용자 지정 발신자 Lambda 트리거에 대해 알아야 할 사항

  • 사용자 풀에서 이러한 Lambda 트리거를 사용하도록 구성하려면 AWS CLI 또는 SDK를 사용합니다. Amazon Cognito 콘솔에서는 이러한 구성을 사용할 수 없습니다.

    UpdateUserPool 작업은 Lambda 구성을 설정합니다. 이 작업에 대한 요청에는 사용자 풀의 모든 파라미터 변경하려는 파라미터가 필요합니다. 관련 파라미터를 모두 제공하지 않으면 Amazon Cognito에서 누락된 파라미터 값을 기본값으로 설정합니다. 다음 AWS CLI 예제에 설명된 대로 사용자 풀에 추가하거나 유지하려는 모든 Lambda 함수에 대한 항목을 포함합니다. 자세한 내용은 사용자 풀 및 앱 클라이언트 구성 업데이트 단원을 참조하십시오.

    #Send this parameter in an 'aws cognito-idp update-user-pool' CLI command, including any existing #user pool configurations. This snippet also includes a pre sign-up trigger for syntax reference. The pre sign-up trigger #doesn't have a role in custom sender triggers. --lambda-config "PreSignUp=lambda-arn, \ CustomSMSSender={LambdaVersion=V1_0,LambdaArn=lambda-arn}, \ CustomEmailSender={LambdaVersion=V1_0,LambdaArn=lambda-arn}, \ KMSKeyID=key-id"

    다음 LambdaConfig 코드 조각의 JSON 본문UpdateUserPool을 사용하는 요청의 경우 사용자 지정 SMS 및 이메일 발신자 함수를 할당합니다.

    "LambdaConfig": { "KMSKeyID": "arn:aws:kms:us-east-1:111122223333:key/a6c4f8e2-0c45-47db-925f-87854bc9e357", "CustomEmailSender": { "LambdaArn": "arn:aws:lambda:us-east-1:111122223333:function:MyFunction", "LambdaVersion": "V1_0" }, "CustomSMSSender": { "LambdaArn": "arn:aws:lambda:us-east-1:111122223333:function:MyFunction", "LambdaVersion": "V1_0" }
  • update-user-pool AWS CLI 명령으로 사용자 지정 발신자 Lambda 트리거를 제거하려면에서 CustomSMSSender 또는 CustomEmailSender 파라미터를 생략--lambda-config하고 사용자 풀에 사용할 다른 모든 트리거를 포함합니다.

    UpdateUserPool API 요청이 포함된 사용자 지정 발신자 Lambda 트리거를 제거하려면 나머지 사용자 풀 구성을 포함하는 요청 본문에서 CustomSMSSender 또는 CustomEmailSender 파라미터를 생략합니다.

  • Amazon Cognito HTML은 사용자의 임시 암호에 있는 <(&lt;) 및>(&gt;) 같은 예약 문자를 이스케이프 처리합니다. 이러한 문자는 Amazon Cognito가 사용자 지정 이메일 발신자 함수로 보내는 임시 암호에 표시될 수 있지만, 임시 확인 코드에는 표시되지 않습니다. 임시 암호를 전송하려면 Lambda 함수가 암호를 해독하고 이러한 문자를 이스케이프 해제한 다음 사용자에게 메시지를 전송해야 합니다.

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

사용자 지정 로직을 사용하여 사용자 풀에 대한 SMS 또는 이메일 메시지를 보내려면 사용자 지정 발신자 트리거를 설정합니다. 다음 절차에서는 사용자 풀에 사용자 지정 SMS 트리거, 사용자 지정 이메일 트리거 또는 둘 다를 할당합니다. 사용자 지정 발신자 트리거를 추가한 후 Amazon Cognito는 SMS 또는 이메일 메시지를 보내는 기본 동작 대신 항상 전화번호 및 일회용 코드를 포함한 사용자 속성을 Lambda 함수에 전송합니다.

  1. AWS Key Management Service ()에서 대칭 암호화 키를 생성합니다AWS KMS. Amazon Cognito는 임시 암호, 확인 코드, 인증 일회용 암호 및 확인 코드와 같은 보안 암호를 생성한 다음이 KMS 키를 사용하여 로 보안 암호를 암호화합니다AWS Encryption SDK. 그런 다음 Lambda 함수 AWS Encryption SDK 의를 사용하여 보안 암호를 해독하고 일반 텍스트로 사용자에게 보낼 수 있습니다.

  2. 사용자 풀을 생성하거나 업데이트하는 IAM 보안 주체는 Amazon Cognito가 코드를 암호화하는 데 사용하는 KMS 키에 대해 일회성 권한 부여를 생성합니다. KMS 키에 대한이 보안 주체 CreateGrant 권한을 부여합니다. 이 예제 KMS 키 정책을 적용하려면 사용자 풀을 업데이트하는 관리자가 IAM 역할에 대한 위임된 역할 세션으로 로그인해야 합니다arn:aws:iam::111222333444:role/my-example-administrator-role.

    환경에 맞게 수정된 다음 리소스 기반 정책을 KMS 키에 적용합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/my-example-administrator-role" }, "Action": "kms:CreateGrant", "Resource": "arn:aws:kms:us-west-2:111122223333:key/1example-2222-3333-4444-999example", "Condition": { "StringEquals": { "kms:EncryptionContext:userpool-id": "us-west-2_EXAMPLE" } } }, { "Sid": "Allow Lambda to decrypt", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/my-lambda-function-role" }, "Action": "kms:Decrypt", "Resource": "*" }] }
  3. 사용자 지정 SMS 발신자 트리거에 대한 Lambda 함수를 생성합니다. Amazon Cognito는 AWS 암호화 SDK를 사용하여 보안 암호, 임시 암호 및 사용자의 API 요청을 인증하는 코드를 암호화합니다.

    1. 최소한 KMS 키에 대한 kms:Decrypt 권한이 있는 Lambda 실행 역할을 할당합니다.

    2. Lambda 함수 코드를 작성하여 메시지를 전송합니다. 함수에 대한 입력 이벤트에는 보안 암호가 포함되어 있습니다. 함수에서를 사용하여 보안 암호를 해독 AWS Encryption SDK 하고 관련 메타데이터를 처리합니다. 그런 다음 코드, 사용자 지정 메시지 및 대상 전화번호를 메시지를 전달하는 사용자 지정 API에 전송합니다.

    3. Lambda 함수 AWS Encryption SDK 에를 추가합니다. 자세한 내용은 AWS 암호화 SDK 프로그래밍 언어를 참조하세요. Lambda 패키지를 업데이트하려면 다음 단계를 완료하세요.

      1. Lambda 함수를 AWS Management Console에 .zip 파일로 내보냅니다.

      2. 함수를 열고를 추가합니다 AWS Encryption SDK. 자세한 내용과 다운로드 링크는 AWS Encryption SDK 개발자 안내서AWS Encryption SDK 프로그래밍 언어를 참조하세요.

      3. SDK 종속성과 함께 함수를 압축하고 함수를 Lambda에 업로드합니다. 자세한 내용은 AWS Lambda 개발자 안내서Lambda 함수를 .zip 파일 아카이브로 배포를 참조하세요.

  4. 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
  5. 사용자 지정 발신자 Lambda 트리거를 추가하는 LambdaConfig 파라미터를 사용하여 UpdateUserPool API 요청을 생성합니다. Amazon Cognito 콘솔에서는이 유형의 트리거를 추가할 수 없습니다. 사용자 지정 발신자 트리거에는 KMSKeyIDCustomSMSSender 또는 CustomEmailSender (또는 둘 다)의 LambdaConfig 파라미터가 필요합니다.