Lambda トリガーを使用したユーザープールワークフローのカスタマイズ - Amazon Cognito

Lambda トリガーを使用したユーザープールワークフローのカスタマイズ

Lambda 関数を作成してから、ユーザーのサインアップ、確認、およびサインイン (認証) などのユーザープール操作中に Lambda トリガーを使用してこの関数を有効化できます。認証チャレンジの追加、ユーザーの移行、検証メッセージのカスタマイズを行うことができます。

次の表は、Lambda トリガーを使用してユーザープールオペレーションをカスタマイズする方法をまとめたものです。

ユーザープールフロー オペレーション 説明

カスタム認証フロー

認証チャレンジの定義 カスタム認証フローでの次のチャレンジを決定する
認証チャレンジの作成 カスタム認証フローでのチャレンジを作成する
認証チャレンジレスポンスの確認 カスタム認証フローでのレスポンスが正しいかどうかを判断する
認証イベント 認証前の Lambda トリガー サインインリクエストを承認または拒否するカスタム検証
認証後の Lambda トリガー カスタム分析用のイベントをログに記録する
トークン生成前の Lambda トリガー トークンの主張を強化または制限する
サインアップ サインアップ前の Lambda トリガー サインアップリクエストを承認または拒否するカスタム検証を実行する
確認後の Lambda トリガー カスタム分析用のカスタムウェルカムメッセージまたはイベントログ記録を作成する
ユーザー移行の Lambda トリガー 既存のユーザーディレクトリからユーザープールにユーザーを移行する
メッセージ カスタムメッセージの Lambda トリガー メッセージの高度なカスタマイズとローカライズを実行する
トークンの作成 トークン生成前の Lambda トリガー ID トークンの属性を追加または削除する
E メールと SMS のサードパーティープロバイダー カスタム送信者の Lambda トリガー サードパーティープロバイダーを使用して SMS メッセージと E メールメッセージを送信する

重要な考慮事項

Lambda 関数を使用する前に、以下の点を考慮します。

  • カスタム送信者の Lambda トリガーを除き、Amazon Cognito は Lambda 関数を同期的に呼び出します。Amazon Cognito が Lambda 関数を呼び出したら、5 秒以内に応答する必要があります。応答しない場合は、Amazon Cognito が呼び出しを再試行します。試行が 3 回失敗すると、関数はタイムアウトします。この 5 秒のタイムアウト値を変更することはできません。詳細については、「Lambda プログラミングモデル」を参照してください。

  • Lambda トリガーを削除する場合は、ユーザープール内の対応するトリガーを更新する必要があります。例えば、認証後トリガーを削除した場合は、ユーザープール内の対応する認証後トリガーを [なし] に設定する必要があります。

  • ユーザーが Amazon Cognito でホストされる UI を使用している場合、カスタム送信者の Lambda トリガーを除き、Amazon Cognito がコールバック URL に追加するクエリパラメータで Lambda トリガーが生成するエラーを確認できます。Lambda トリガーは、ユーザーに表示させるエラーのみを生成することをお勧めします。Lambda トリガー自体に機密情報またはデバッグ情報を記録します。

  • Lambda トリガーを Amazon Cognito コンソールの外部で作成する場合は、Lambda 関数にアクセス許可を追加する必要があります。アクセス権限を追加すると、Amazon Cognito はユーザープールの代わりに関数を呼び出すことができます。Lambda コンソールから権限を追加、または Lambda AddPermission 操作を使用することができます。

    Lambda リソースベースのポリシーの例

    次の Lambda リソースベースのポリシーの例では、Lambda 関数を呼び出す Amazon Cognito の限定的な機能が付与されます。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 関数を呼び出します。

フェデレーティッドユーザートリガーのソース
Trigger 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 トリガーを選択します。次に、Lambda 関数を [Lambda function] (Lambda 関数) ドロップダウンリストから選択します。

  6. [Save changes] (変更の保存) をクリックします。

  7. Lambda コンソールで Amazon CloudWatch を使用して、Lambda 関数をログすることができます。詳細については、「Accessing Amazon CloudWatch Logs for Lambda」を参照してください。

New console

コンソールを使用してユーザープールの Lambda トリガーを追加する

  1. Lambda コンソールを使用して Lambda 関数を作成します。Lambda 関数の詳細については、AWS Lambda デベロッパーガイドを参照してください。

  2. [Amazon Cognito console] (Amazon Cognito コンソール) に移動し、[User Pools] (ユーザープール) を選択します。

  3. リストから既存のユーザープールを選択するか、ユーザープールを作成します。

  4. [] (ユーザープールのプロパティ) タブを選択し、[Lambda triggers] (Lambda トリガー) を検索します。

  5. [Add a Lambda trigger] (Lambda トリガーの追加) を選択します。

  6. カスタマイズする認証のステージに基づいて、Lambdaトリガーカテゴリを選択します。

  7. [Assign Lambda function] (Lambda 関数の割り当て) を選択して、AWS リージョン ユーザープールと同じ関数を選択します。

    注記

    AWS Identity and Access Management (IAM) 認証情報に Lambda 関数を更新する権限がある場合、Amazon Cognito は Lambda リソースベースのポリシーを追加します。このポリシーを使用すると、Amazon Cognito は選択した関数を呼び出すことができます。サインインした認証情報に十分な IAM アクセス権限がない場合は、リソースベースのポリシーを個別に更新する必要があります。詳細については、「重要な考慮事項」を参照してください。

  8. [Save changes] (変更の保存) をクリックします。

  9. Lambda コンソールで CloudWatch を使用して、Lambda 関数をログすることができます。詳細については、「Accessing CloudWatch Logs for Lambda」を参照してください。

ユーザープールの 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。

userName

現在のユーザーのユーザー名。

callerContext

発信者コンテキスト。このコンテキストには以下の構成要素があります。

awsSdkVersion

AWS SDK のバージョン番号。

clientId

ユーザープールアプリのクライアント ID。

リクエスト

Amazon Cognito サービスからのリクエスト。このリクエストには以下のものが含まれます。

userAttributes

ユーザー属性を表す 1 つ以上の名前 - 値ペア。各ペアは "名前": "" という形式をとります。

レスポンス

Lambda トリガーからのレスポンス。レスポンスで返されるパラメータは、トリガーイベントによって異なります。

ユーザープールの Lambda トリガーのソース

このセクションでは、各 Amazon Cognito Lambda triggerSource パラメータと、そのトリガーイベントについて説明します。

サインアップ、確認、およびサインイン (認証) トリガー
トリガー triggerSource 値 トリガーイベント
サインアップ前 PreSignUp_SignUp サインアップ前。
サインアップ前 PreSignUp_AdminCreateUser 管理者が新しいユーザーを作成するときのサインアップ前
サインアップ前 PreSignUp_ExternalProvider 外部 ID プロバイダーのサインアップ前。
確認後 PostConfirmation_ConfirmSignUp サインアップの確認後。
確認後 PostConfirmation_ConfirmForgotPassword パスワードを忘れた場合の確認後。
認証前 PreAuthentication_Authentication 認証前.
認証後 PostAuthentication_Authentication 認証後.
カスタム認証チャレンジトリガー
Trigger triggerSource 値 トリガーイベント
認証チャレンジの定義 DefineAuthChallenge_Authentication 認証チャレンジの定義.
認証チャレンジの作成 CreateAuthChallenge_Authentication 認証チャレンジの作成.
認証チャレンジの検証。 VerifyAuthChallengeResponse_Authentication 認証チャレンジレスポンスの確認.
トークン生成前トリガー
Trigger triggerSource 値 トリガーイベント
トークン生成前 TokenGeneration_HostedAuth Amazon Cognito は、のホストされた UI のサインインページからユーザーを認証します。
トークン生成前 TokenGeneration_Authentication ユーザー認証フローが完了しました。
トークン生成前 TokenGeneration_NewPasswordChallenge 管理者がユーザーを作成します。ユーザーが一時パスワードを変更する必要があるときに、Amazon Cognito は、これを呼び出します。
トークン生成前 TokenGeneration_AuthenticateDevice ユーザーデバイスの認証の終了。
トークン生成前 TokenGeneration_RefreshTokens ユーザーは、ID およびアクセストークンを更新しようとします。
移行ユーザートリガー
Trigger triggerSource 値 トリガーイベント
ユーザー移行 UserMigration_Authentication サインイン時のユーザー移行。
ユーザー移行 UserMigration_ForgotPassword パスワードを忘れた場合のフロー実行時のユーザー移行
カスタムメッセージトリガー
Trigger triggerSource 値 トリガーイベント
カスタムメッセージ CustomMessage_SignUp ユーザーがユーザープールにサインアップしたときのカスタムメッセージ。
カスタムメッセージ CustomMessage_AdminCreateUser 管理者としてユーザーを作成し、Amazon Cognito から一時パスワードが送信されるときのカスタムメッセージ。
カスタムメッセージ CustomMessage_ResendCode 既存のユーザーが新しい確認コードをリクエストしたときのカスタムメッセージ。
カスタムメッセージ CustomMessage_ForgotPassword ユーザーがパスワードのリセットを要求したときのカスタムメッセージ。
カスタムメッセージ CustomMessage_UpdateUserAttribute ユーザーが E メールアドレスまたは電話番号を変更し、Amazon Cognito が検証コードを送信したときのカスタムメッセージ。
カスタムメッセージ CustomMessage_VerifyUserAttribute ユーザーが E メールアドレスまたは電話番号を追加し、Amazon Cognito が検証コードを送信したときのカスタムメッセージ。
カスタムメッセージ CustomMessage_Authentication SMS MFA を設定したユーザーがサインインしたときのカスタムメッセージ。