

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ユーザー移行の Lambda トリガーを使用したユーザーのインポート
<a name="cognito-user-pools-import-using-lambda"></a>

このアプローチでは、ユーザーがアプリケーションで初めてサインインするとき、またはパスワードのリセットをリクエストするときに、既存のユーザーディレクトリからユーザープールにユーザーをシームレスに移行できます。[ユーザー移行の Lambda トリガー](user-pool-lambda-migrate-user.md) 関数をユーザープールに追加すると、サインインしようとするユーザーに関するメタデータを受け取り、外部 ID ソースからユーザープロファイル情報を返します。この Lambda トリガーの詳細 (リクエストとレスポンスのパラメータなど) とサンプルコードについては、「[ユーザー移行の Lambda トリガーのパラメータ](user-pool-lambda-migrate-user.md#cognito-user-pools-lambda-trigger-syntax-user-migration)」を参照してください。

ユーザーの移行を開始する前に、 AWS アカウントでユーザー移行の Lambda 関数を作成し、ユーザープールに Lambda 関数 をユーザー移行トリガーとして設定します。Lambda 関数の呼び出しと、独自のユーザープールのコンテキスト内でのみの実行を、Amazon Cognito サービスアカウントプリンシパルである `cognito-idp.amazonaws.com` のみに許可する認可ポリシーを Lambda 関数に追加します。詳細については、「[AWS Lambda のリソースベースのポリシーを使用する (Lambda 関数ポリシー)](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)」を参照してください。

**サインインプロセス**

1. ユーザーがアプリケーションを開き、Amazon Cognito ユーザープール API またはマネージドログインを使用してサインインします。Amazon Cognito API でサインインを容易にする方法の詳細については、「[Amazon Cognito の認証と認可を、ウェブアプリケーションとモバイルアプリケーションに統合する](cognito-integrate-apps.md)」を参照してください。

1. アプリケーションはユーザー名とパスワードを Amazon Cognito に送信します。アプリに AWS SDK で構築したカスタムサインイン UI がある場合、アプリは `USER_PASSWORD_AUTH`または `ADMIN_USER_PASSWORD_AUTH`フローで [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) または [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) を使用する必要があります。アプリがこれらのフローのいずれかを使用する場合、SDK はパスワードをサーバーに送信します。
**注記**  
ユーザー移行トリガーを追加する前に、アプリケーションクライアントの設定で `USER_PASSWORD_AUTH` または `ADMIN_USER_PASSWORD_AUTH` フローを有効化します。デフォルトの `USER_SRP_AUTH`フロー の代わりにこれらのフローを使用する必要があります。Amazon Cognito は、他のディレクトリでのユーザーの認証を検証できるように、Lambda 関数にパスワードを送信する必要があります。SRP は、Lambda 関数からユーザーのパスワードを隠します。

1. Amazon Cognito は、送信されたユーザー名がユーザープール内のユーザー名またはエイリアスと一致するかどうかをチェックします。ユーザーの電子メールアドレス、電話番号、または優先ユーザー名を、ユーザープールのエイリアスとして設定できます。ユーザーが存在しない場合、Amazon Cognito は、ユーザー名やパスワードなどのパラメータを [ユーザー移行の Lambda トリガー](user-pool-lambda-migrate-user.md) 関数に送信します。

1. [ユーザー移行の Lambda トリガー](user-pool-lambda-migrate-user.md) 関数は、既存のユーザーディレクトリまたはユーザーデータベースを使用してユーザーをチェックまたは認証します。この関数は、Amazon Cognito がユーザープールのユーザープロファイルに保存するユーザー属性を返します。送信されたユーザー名がエイリアス属性と一致する場合にのみ、`username` パラメータを返します。ユーザーが既存のパスワードを引き続き使用できるようにする場合は、Lambda レスポンスで属性 `finalUserStatus` を `CONFIRMED` に設定します。アプリケーションは、[ユーザー移行の Lambda トリガーのパラメータ](user-pool-lambda-migrate-user.md#cognito-user-pools-lambda-trigger-syntax-user-migration) に示されるすべての `"response"` パラメータを返す必要があります。
**重要**  
リクエストイベントオブジェクト全体をユーザー移行 Lambda コードに記録しないでください。このリクエストイベントオブジェクトには、ユーザーのパスワードが含まれます。ログをサニタイズしない場合、パスワードが CloudWatch Logs に表示されます。

1. Amazon Cognito はユーザープールにユーザープロファイルを作成し、トークンをアプリケーションクライアントに返します。

1. アプリケーションはトークンの取り込みを実行し、ユーザー認証を受け入れ、リクエストされたコンテンツに進みます。

ユーザーを移行したら、`USER_SRP_AUTH` を使用してサインインします。Secure Remote Password (SRP) プロトコルは、パスワードをネットワーク上に送信しないため、移行時に使用する `USER_PASSWORD_AUTH` フローよりもセキュリティ上の利点が大きくなります。

移行中にクライアントデバイスやネットワークの問題などのエラーが発生した場合、アプリケーションは Amazon Cognito ユーザープール API からエラーレスポンスを受け取ります。この場合 Amazon Cognito はユーザープールにユーザーアカウントを作成しない可能性があります。その後、ユーザーは再度サインインを試行する必要があります。サインインが繰り返し失敗した場合、アプリケーションでパスワードを忘れた場合のフローを使用してユーザーのパスワードをリセットする必要があります。

パスワードを忘れた場合のフローでは、`UserMigration_ForgotPassword` イベントソースを使用して [ユーザー移行の Lambda トリガー](user-pool-lambda-migrate-user.md) 関数も呼び出します。ユーザーはパスワードのリセットをリクエストしてもパスワードを送信しないため、Amazon Cognito は Lambda 関数に送信するイベントにパスワードを含めません。関数では、既存のユーザーディレクトリ内のユーザーのみを検索し、ユーザープールのユーザープロファイルに追加する属性を返すことができます。関数が呼び出しを完了して Amazon Cognito に応答を返すと、ユーザープールはパスワードリセットコードを E メールまたは SMS で送信します。アプリケーションで、ユーザーに確認コードと新しいパスワードの入力を促し、その情報を [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html) API リクエストで Amazon Cognito に送信します。。マネージドログインでは、[パスワードを忘れた場合] フロー用の組み込みページを使用することもできます。

**その他のリソース**
+ [Amazon Cognito ユーザープールへのユーザー移行方法](https://aws.amazon.com/blogs/security/approaches-for-migrating-users-to-amazon-cognito-user-pools/)