Lambda 트리거를 사용하여 사용자 풀 워크플로 사용자 정의 - Amazon Cognito

Lambda 트리거를 사용하여 사용자 풀 워크플로 사용자 정의

Lambda 함수를 생성한 다음 Lambda 트리거를 사용하여 사용자 가입, 확인 및 로그인(인증)과 같은 사용자 풀 작업 시 해당 함수를 활성화할 수 있습니다. 인증 문제 추가, 사용자 마이그레이션 및 확인 메시지 사용자 지정을 수행할 수 있습니다.

다음 표에는 Lambda 트리거를 사용하여 사용자 풀 작업을 사용자 지정할 수 있는 방법 중 일부가 요약되어 있습니다.

사용자 풀 흐름 작업 설명

사용자 지정 인증 흐름

인증 문제 정의 사용자 지정 인증 흐름에서 다음 문제를 결정합니다.
인증 문제 생성 사용자 지정 인증 흐름에서 다음 문제를 생성합니다.
인증 문제 응답 확인 사용자 지정 인증 흐름에서 응답이 올바른지 결정합니다.
인증 이벤트 사전 인증 Lambda 트리거 로그인 요청 승인 및 거절에 대한 사용자 지정 검증입니다.
사후 인증 Lambda 트리거 사용자 지정 분석을 위한 이벤트 기록
사전 토큰 생성 Lambda 트리거 토큰 신청 증강 또는 억제
가입 사전 가입 Lambda 트리거 가입 요청을 수락 또는 거부하는 사용자 지정 검증 수행
사후 확인 Lambda 트리거 사용자 지정 분석을 위한 사용자 지정 시작 메시지 또는 이벤트 로깅 추가
사용자 마이그레이션 Lambda 트리거 기존 사용자 디렉터리에 있는 사용자를 사용자 풀로 마이그레이션
메시지 사용자 정의 메시지 Lambda 트리거 고급 사용자 지정 및 메시지 현지화 수행
토큰 생성 사전 토큰 생성 Lambda 트리거 ID 토큰 속성 추가 또는 제거
이메일 및 SMS 서드 파티 공급자 사용자 지정 발신자 Lambda 트리거 서드 파티 공급자를 사용하여 SMS 및 이메일 메시지 보내기

중요 고려 사항

Lambda 함수를 사용하여 작업하기 전에 다음을 고려하세요.

  • 사용자 지정 발신자 Lambda 트리거를 제외하고, Amazon Cognit 는 Lambda 함수를 동기적으로 호출합니다. Amazon Cognito에서 Lambda 함수를 호출하면 5초 내에 응답해야 합니다. 그렇지 않으면 Amazon Cognito가 호출을 다시 시도합니다. 3번 연속해서 실패하면 함수 제한 시간을 초과하게 됩니다. 이 5초 제한 시간 값은 변경할 수 없습니다. 자세한 내용은 Lambda 프로그래밍 모델을 참조하세요.

  • Lambda 트리거를 삭제하는 경우 사용자 풀의 해당 트리거를 업데이트해야 합니다. 예를 들어 사후 인증 트리거를 삭제하면 해당 사용자 풀의 사후 인증 트리거를 없음으로 설정해야 합니다.

  • 사용자가 Amazon Cognito 호스팅 UI를 사용하는 경우 사용자 지정 발신자 Lambda 트리거를 제외하고 Amazon Cognito가 콜백 URL에 추가하는 쿼리 파라미터에서 Lambda 트리거가 생성하는 오류를 확인할 수 있습니다. Lambda 트리거는 사용자에게 표시하려는 오류만 생성하는 것이 좋습니다. Lambda 트리거 자체에 민감한 정보 또는 디버깅 정보를 기록합니다.

  • Amazon Cognito 콘솔 외부에서 Lambda 트리거를 생성하는 경우 Lambda 함수에 권한을 추가해야 합니다. 권한을 추가할 때 Amazon Cognito는 사용자 풀을 대신하여 함수를 호출할 수 있습니다. Lambda 콘솔에서 권한을 추가하거나 Lambda AddPermission 작업을 사용할 수 있습니다.

    Lambda 리소스 기반 정책 예제

    다음 Lambda 리소스 기반 정책 예제는 Amazon Cognito에 Lambda 함수를 호출할 수 있는 제한적인 권한을 부여합니다. Amazon Cognito는 aws:SourceArn 조건의 사용자 풀과 aws:SourceAccount 조건의 계정을 둘 다 대신하는 경우에만 함수를 호출할 수 있습니다.

    { "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "lambda-allow-cognito", "Effect": "Allow", "Principal": { "Service": "cognito-idp.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "<your Lambda function ARN>", "Condition": { "StringEquals": { "AWS:SourceAccount": "<your account number>" }, "ArnLike": { "AWS:SourceArn": "<your user pool ARN>" } } } ] }

페더레이션 사용자를 위한 Lambda 트리거

다음 Lambda 트리거를 사용하여 페더레이션 공급자로 로그인하는 사용자에 대한 사용자 풀 워크플로를 사용자 지정할 수 있습니다.

참고
  • 페더레이션 사용자는 로그인할 때 Amazon Cognito 호스팅 UI를 사용해야 합니다.

  • 일부 작업의 경우 페더레이션 사용자가 둘 이상의 Lambda 함수를 호출합니다.

페더레이션 사용자 트리거 소스
트리거 triggerSource 값 트리거하는 이벤트
사전 가입 PreSignUp_ExternalProvider 페더레이션 사용자는 Amazon Cognito 호스팅 UI 로그인 페이지에서 처음으로 로그인합니다.
게시 확인 PostConfirmation_ConfirmSignUp 페더레이션 사용자는 Amazon Cognito 호스팅 UI 로그인 페이지에서 처음으로 로그인합니다.
사전 인증 PreAuthentication_Authentication 페더레이션 사용자는 첫 로그인할 때를 제외하고 Amazon Cognito 호스팅 UI 로그인 페이지에서 로그인합니다.
사후 인증 PostAuthentication_Authentication 페더레이션 사용자는 첫 로그인할 때를 제외하고 Amazon Cognito 호스팅 UI 로그인 페이지에서 성공적으로 승인합니다.
사전 토큰 생성 TokenGeneration_HostedAuth 페더레이션 사용자는 첫 로그인할 때를 제외하고 Amazon Cognito 호스팅 UI 로그인 페이지에서 성공적으로 승인하고 토큰을 발행받을 예정입니다.

페더레이션 로그인은 사용자 풀에서 사용자 정의 인증 챌린지 Lambda 트리거, 사용자 마이그레이션 Lambda 트리거, 사용자 정의 메시지 Lambda 트리거 또는 사용자 지정 발신자 Lambda 트리거를 호출하지 않습니다.

사용자 풀 Lambda 트리거 추가

Original console

콘솔을 사용하여 사용자 풀 Lambda 트리거를 추가하려면

  1. Lambda 콘솔을 사용하여 Lambda 함수를 생성합니다. Lambda 함수에 대한 자세한 내용은 AWS Lambda 개발자 가이드를 참조하세요.

  2. Amazon Cognito 콘솔로 이동합니다. 그리고 나서 사용자 풀 관리(Manage User Pools)를 선택합니다.

  3. 목록에서 기존 사용자 풀을 선택하거나 사용자 풀을 생성합니다.

  4. 사용자 풀의 탐색 모음에서 트리거 탭을 선택합니다.

  5. Lambda트리거(예: 사전 가입(Pre sign-up) 또는 사전 인증(Pre authentication))를 선택합니다. 그런 다음 Lambda 함수(Lambda function) 드롭다운 목록에서 Lambda 함수를 선택합니다.

  6. 변경 사항 저장(Save changes)을 선택합니다.

  7. Lambda 콘솔에서 Amazon CloudWatch를 사용하여 사용자의 Lambda 함수를 로그할 수 있습니다. 자세한 내용은 Lambda에 대한 Amazon CloudWatch Logs 액세스를 참조하세요.

New console

콘솔을 사용하여 사용자 풀 Lambda 트리거를 추가하려면

  1. Lambda 콘솔을 사용하여 Lambda 함수를 생성합니다. Lambda 함수에 대한 자세한 내용은 AWS Lambda 개발자 가이드를 참조하세요.

  2. Amazon Cognito 콘솔로 이동한 다음 사용자 풀(User Pools)을 선택합니다.

  3. 목록에서 기존 사용자 풀을 선택하거나 사용자 풀을 생성합니다.

  4. [사용자 풀 속성(User pool properties)] 탭을 선택하고 [Lambda 트리거(Lambda triggers)]를 찾습니다.

  5. Lambda 트리거 추가(Add a Lambda trigger)를 선택합니다.

  6. 사용자 지정할 인증 스테이지에 따라 Lambda 트리거 범주(Category)를 선택합니다.

  7. Lambda 함수 할당(Assign Lambda function)을 선택한 다음 사용자 풀과 동일한 AWS 리전의 함수를 선택합니다.

    참고

    AWS Identity and Access Management(IAM) 자격 증명에 Lambda 함수를 업데이트할 수 있는 권한이 있는 경우 Amazon Cognito는 Lambda 리소스 기반 정책을 추가합니다. 이 정책을 사용하면 선택한 함수를 Amazon Cognito에서 호출할 수 있습니다. 로그인한 자격 증명에 충분한 IAM 권한이 없는 경우 리소스 기반 정책을 별도로 업데이트해야 합니다. 자세한 내용은 중요 고려 사항 섹션을 참조하세요.

  8. 변경 사항 저장(Save changes)을 선택합니다.

  9. Lambda 콘솔에서 CloudWatch를 사용하여 Lambda 함수를 로그할 수 있습니다. 자세한 내용은 Lambda에 대한 CloudWatch Logs 액세스를 참조하세요.

사용자 풀 Lambda 트리거 이벤트

Amazon Cognito는 이벤트 정보를 Lambda 함수에 전달합니다. Lambda 함수는 응답이 변경되면 동일한 이벤트 객체를 Amazon Cognito에 반환합니다. 이 이벤트에는 다음과 같은 Lambda 트리거 공통 파라미터가 표시됩니다.

JSON
{ "version": "string", "triggerSource": "string", "region": AWSRegion, "userPoolId": "string", "userName": "string", "callerContext": { "awsSdkVersion": "string", "clientId": "string" }, "request": { "userAttributes": { "string": "string", .... } }, "response": {} }

사용자 풀 Lambda 트리거 공통 파라미터

버전

Lambda 함수의 버전 번호입니다.

triggerSource

Lambda 함수를 트리거한 이벤트의 이름입니다. 각 triggerSource의 설명은 사용자 풀 Lambda 트리거 소스 섹션을 참조하세요.

리전

AWSRegion 인스턴스로서의 AWS 리전입니다.

userPoolId

사용자 풀의 사용자 풀 ID입니다.

사용자 이름

현재 사용자의 사용자 이름입니다.

callerContext

호출자 컨텍스트입니다. 이 컨텍스트는 다음으로 구성됩니다.

awsSdkVersion

AWS SDK 버전 번호입니다.

clientId

사용자 풀 앱 클라이언트 ID입니다.

요청

Amazon Cognito 서비스에서 보내는 요청입니다. 이 요청에는 다음이 포함되어야 합니다.

userAttributes

하나 이상의 사용자 속성 이름 및 값 페어입니다. 각 페어는 "이름": "" 형식입니다.

응답

Lambda 트리거에서 보내는 응답입니다. 응답의 반환 파라미터는 트리거하는 이벤트에 따라 다릅니다.

사용자 풀 Lambda 트리거 소스

이 섹션에서는 각 Amazon Cognito Lambda triggerSource 파라미터와 해당 트리거 이벤트를 설명합니다.

가입, 확인 및 로그인(인증) 트리거
트리거 triggerSource 값 트리거하는 이벤트
사전 가입 PreSignUp_SignUp 사전 가입.
사전 가입 PreSignUp_AdminCreateUser 관리자가 새 사용자를 만들면 사전 가입.
사전 가입 PreSignUp_ExternalProvider 외부 자격 증명 공급자에 대한 사전 가입.
게시 확인 PostConfirmation_ConfirmSignUp 사후 가입 확인.
게시 확인 PostConfirmation_ConfirmForgotPassword 사후 암호 분실 확인.
사전 인증 PreAuthentication_Authentication 사전 인증.
사후 인증 PostAuthentication_Authentication 사후 인증.
사용자 지정 인증 문제 트리거
트리거 triggerSource 값 트리거하는 이벤트
인증 문제 정의 DefineAuthChallenge_Authentication 인증 문제 정의.
인증 문제 생성 CreateAuthChallenge_Authentication 인증 문제 생성.
인증 문제 확인 VerifyAuthChallengeResponse_Authentication 인증 문제 응답 확인.
사전 토큰 생성 트리거
트리거 triggerSource 값 트리거하는 이벤트
사전 토큰 생성 TokenGeneration_HostedAuth Amazon Cognito는 호스팅 UI 로그인 페이지에서 사용자를 인증합니다.
사전 토큰 생성 TokenGeneration_Authentication 사용자 인증 흐름이 완료되었습니다.
사전 토큰 생성 TokenGeneration_NewPasswordChallenge 관리자가 사용자를 생성합니다. Amazon Cognito는 사용자가 임시 암호를 변경해야 할 때 이를 호출합니다.
사전 토큰 생성 TokenGeneration_AuthenticateDevice 사용자 디바이스 인증의 끝입니다.
사전 토큰 생성 TokenGeneration_RefreshTokens 사용자가 자격 증명 및 액세스 토큰을 새로 고치려고 합니다.
사용자 트리거 마이그레이션
트리거 triggerSource 값 트리거하는 이벤트
사용자 마이그레이션 UserMigration_Authentication 로그인 시 사용자 마이그레이션입니다.
사용자 마이그레이션 UserMigration_ForgotPassword 암호 찾기 흐름 도중 사용자 마이그레이션.
사용자 지정 메시지 트리거
트리거 triggerSource 값 트리거하는 이벤트
사용자 지정 메시지 CustomMessage_SignUp 사용자가 사용자 풀에 가입할 때 사용자 지정 메시지입니다.
사용자 지정 메시지 CustomMessage_AdminCreateUser 관리자로서의 사용자가 생성되고 Amazon Cognito에서 이 사용자에게 임시 암호를 보낼 때 사용자 지정 메시지입니다.
사용자 지정 메시지 CustomMessage_ResendCode 기존 사용자가 새 확인 코드를 요청할 때 사용자 지정 메시지입니다.
사용자 지정 메시지 CustomMessage_ForgotPassword 사용자가 암호 재설정을 요청할 때 사용자 지정 메시지입니다.
사용자 지정 메시지 CustomMessage_UpdateUserAttribute 사용자가 이메일 주소 또는 전화 번호를 변경하고 Amazon Cognito에서 확인 코드를 보낼 때 사용자 지정 메시지입니다.
사용자 지정 메시지 CustomMessage_VerifyUserAttribute 사용자가 이메일 주소 또는 전화 번호를 추가하고 Amazon Cognito에서 확인 코드를 보낼 때 사용자 지정 메시지입니다.
사용자 지정 메시지 CustomMessage_Authentication SMS MFA를 구성한 사용자가 로그인할 때 사용자 지정 메시지입니다.