

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

# ユーザープールへのユーザーのインポート
<a name="cognito-user-pools-import-users"></a>

既存のユーザーディレクトリまたはユーザーデータベースから Amazon Cognito にユーザーをインポートまたは移行する方法は 2 つあります。1 つは、ユーザー移行の Lambda トリガーを使用して、ユーザーが Amazon Cognito を使用して初めてサインインするときにユーザーを移行する方法です。この方法では、ユーザーが既存のパスワードを引き続き使用でき、ユーザープールへの移行後にパスワードをリセットする必要はありません。もう 1 つは、すべてのユーザーのユーザープロファイル属性を含む CSV ファイルをアップロードして、ユーザーを一括で移行する方法です。以降のセクションでは、これらの両方のアプローチについて説明します。

**その他のリソース**
+ [Amazon Cognito ユーザープールへのユーザー移行方法](https://aws.amazon.com/blogs/security/approaches-for-migrating-users-to-amazon-cognito-user-pools/)
+ [AWS re:Inforce 2023 - Amazon Cognito への移行](https://www.youtube.com/watch?v=OkDj9uXWwCc)

**Topics**
+ [ユーザー移行の Lambda トリガーを使用したユーザーのインポート](cognito-user-pools-import-using-lambda.md)
+ [CSV ファイルからユーザープールへのユーザーのインポート](cognito-user-pools-using-import-tool.md)

# ユーザー移行の 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/)

# CSV ファイルからユーザープールへのユーザーのインポート
<a name="cognito-user-pools-using-import-tool"></a>

外部 ID ストアがあり、かつ、新しいローカルユーザーのためにユーザープールを準備する時間がある場合、カンマ区切り値 (CSV) ファイルからの一括ユーザーインポートは、Amazon Cognito ユーザープールへの移行のための手間とコストが少ないオプションになります。CSV ファイルインポートは、テンプレートファイルをダウンロードして入力し、インポートジョブのユーザープールにファイルを渡すプロセスです。CSV インポートを使用して、テストユーザーをすばやく作成できます。また、外部 ID ストアへの読み取り API リクエストをプログラムでファイルに入力したうえで、その詳細と属性を解析してファイルへの書き込みオペレーションにすることもできます。

インポートプロセスは、[**パスワード**] 以外のすべてのユーザー属性の値を設定します。セキュリティのベストプラクティスでは、パスワードはプレーンテキスト形式として使用できない必要があり、ハッシュのインポートはサポートされていないため、パスワードのインポートはサポートされません。つまり、ユーザーは最初にサインインした際にパスワードを変更する必要があります。このメソッドを使用してインポートすると、ユーザーは `RESET_REQUIRED` 状態になります。

CSV からユーザーをインポートする最も簡単な方法は、ユーザープールで [[パスワードなしのサインイン]](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless) を有効にすることです。E メールアドレスと電話番号の属性、さらにユーザープールの適切な設定により、ユーザーはインポートジョブの完了直後に E メールまたは SMS ワンタイムパスワード (OTP) を使用してサインインできます。詳細については、「[インポートされたユーザーにパスワードをリセットするように要求](#cognito-user-pools-using-import-tool-password-reset)」を参照してください。

[https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) API リクエストで `Permanent` パラメータを `true` に設定することで、ユーザーのパスワードを設定することもできます。CSV インポートは、ユーザープール内で請求対象の月間アクティブユーザー (MAU) にはカウントされません。ただし、パスワードリセットオペレーションは MAU を発生させます。パスワードを使用する多数のユーザーをインポートしてもすぐにはアクティブにならない場合、コストを管理するには、ユーザーがサインインして `RESET_REQUIRED` チャレンジを受け取ったときに、新しいパスワードの入力を求めるようにアプリケーションを設定します。

**注記**  
各ユーザーの作成日は、ユーザーがユーザープールにインポートされた時間です。作成日は、インポートされた属性の 1 つではありません。

**ユーザーインポートジョブを作成する手順**

1.  AWS Identity and Access Management (IAM) コンソールで Amazon CloudWatch Logs ロールを作成します。

1. ユーザーインポート .csv ファイルを作成します。

1. ユーザーインポートジョブを作成し、実行します。

1. ユーザーインポート .csv ファイルをアップロードします。

1. ユーザーインポートジョブを起動し、実行します。

1. CloudWatch を使用してイベントログを確認します。

1. インポートされたユーザーがパスワードをリセットするように要求します。

**その他のリソース**
+ ユーザープール間でのユーザーアカウントのエクスポートに関する「[Cognito User Profiles Export リファレンスアーキテクチャ](https://aws.amazon.com/solutions/implementations/cognito-user-profiles-export-reference-architecture/)」

**Topics**
+ [CloudWatch Logs IAM ロールの作成](#cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role)
+ [ユーザーインポート CSV ファイルの作成](#cognito-user-pools-using-import-tool-csv-header)
+ [Amazon Cognito ユーザープールのインポートジョブの作成と実行](#cognito-user-pools-creating-import-job)
+ [ユーザープールのインポート結果を CloudWatch コンソールに表示](#cognito-user-pools-using-import-tool-cloudwatch)
+ [インポートされたユーザーにパスワードをリセットするように要求](#cognito-user-pools-using-import-tool-password-reset)

## CloudWatch Logs IAM ロールの作成
<a name="cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role"></a>

Amazon Cognito の CLI または API を使用している場合は、CloudWatch IAM ロールを作成する必要があります。以下の手順では、Amazon Cognito がインポートジョブの結果を CloudWatch Logs に書き込むために使用できる IAM ロールを作成する方法について説明します。

**注記**  
Amazon Cognito コンソールでインポート ジョブを作成すると、同時に IAM ロールを作成できます。**新しい IAM ロールを作成する**ことを選択すると、Amazon Cognito は適切な信頼ポリシーと IAM ポリシーをロールに自動的に適用します。

**ユーザープールインポート用の CloudWatch Logs IAM ロールを作成するには (AWS CLI、API)**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. の新しい IAM ロールを作成します AWS のサービス。詳しい手順については、「*AWS Identity and Access Management ユーザーガイド*」の「[AWS のサービス用ロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)」を参照してください。

   1. **信頼されたエンティティタイプ**の**ユースケース**を選択するときは、任意のサービスを選択してください。Amazon Cognito は現在、サービスのユースケースに記載されていません。

   1. **[Add permissions]** (アクセス許可の追加) 画面で、**[Create policy]** (ポリシーの作成) を選択し、次のポリシーステートメントを挿入します。*REGION* を、 などのユーザープール AWS リージョン の に置き換えます`us-east-1`。*ACCOUNT* を AWS アカウント ID に置き換えます (`111122223333` など)。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "logs:CreateLogGroup",
                      "logs:CreateLogStream",
                      "logs:DescribeLogStreams",
                      "logs:PutLogEvents"
                  ],
                  "Resource": [
                      "arn:aws:logs:us-east-1:111122223333:log-group:/aws/cognito/*"
                  ]
              }
          ]
      }
      ```

------

1. ロールを作成したときに Amazon Cognito を信頼されたエンティティとして選択しなかったため、ロールの信頼関係を手動で編集する必要があります。IAM コンソールのナビゲーションペインから **[Roles]** (ロール) を選択し、作成した新しいロールを選択します。

1. **[信頼関係]** タブを選択します。

1. **[Edit trust policy]** (信頼ポリシーを編集) を選択します。

1. 次のポリシーステートメントを **[Edit trust policy]** (信頼ポリシーを編集) に貼り付け、既存のテキストを置き換えます。

------
#### [ JSON ]

****  

   ```
   {
           "Version":"2012-10-17",		 	 	 
           "Statement": [
               {
                   "Effect": "Allow",
                   "Principal": {
                       "Service": "cognito-idp.amazonaws.com"
                   },
                   "Action": "sts:AssumeRole"
               }
           ]
       }
   ```

------

1. [**ポリシーの更新**] を選択してください。

1. ロールの ARN を書き留めておきます。インポートジョブを作成するときに、ARN を指定します。

## ユーザーインポート CSV ファイルの作成
<a name="cognito-user-pools-using-import-tool-csv-header"></a>

既存のユーザーをユーザープールにインポートする前に、インポートするユーザーとその属性を含むカンマ区切り値 (CSV) ファイルを作成する必要があります。ユーザープールから、ユーザープールの属性スキーマを反映するヘッダーを含むユーザーインポートファイルを取得できます。その後、[CSV ファイルのフォーマット](#cognito-user-pools-using-import-tool-formatting-csv-file) のフォーマット要件に一致するユーザー情報を挿入できます。

### CSV ファイルヘッダーのダウンロード (コンソール)
<a name="cognito-user-pools-using-import-tool-downloading-csv-header-console"></a>

CSV ヘッダーファイルをダウンロードするには、次の手順に従います。

**CSV ファイルヘッダーをダウンロードするには**

1. [Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)に移動します。 AWS 認証情報の入力を求められる場合があります。

1. **[User Pools]** (ユーザープール) を選択します。

1. リストから存在するユーザープールを 1 つ選択します。

1. **[ユーザー]** メニューを選択します。

1. **[Import users]** (ユーザーのインポート) セクションで、**[Create an import job]** (インポートジョブの作成) を選択します。

1. **[Upload CSV]** (CSV のアップロード) で *[template.csv]* リンクを選択し、CSV ファイルをダウンロードします。

### CSV ファイルヘッダーのダウンロード (AWS CLI)
<a name="cognito-user-pools-using-import-tool-downloading-csv-header-using-cli"></a>

正しいヘッダーのリストを取得するには、**[ユーザー]** メニューの **[ユーザーをインポート]** で、**[インポートジョブを作成]** を選択します。表示されるダイアログで `template.csv` リンクを選択し、ユーザープール属性を含むテンプレートファイルをダウンロードします。

次の CLI コマンドを実行することもできます。*USER\$1POOL\$1ID* は、ユーザーをインポートする先のユーザープールのユーザープール識別子です。

```
aws cognito-idp get-csv-header --user-pool-id "USER_POOL_ID"
```

レスポンス例:

```
{
    "CSVHeader": [
        "name",
        "given_name",
        "family_name",
        "middle_name",
        "nickname",
        "preferred_username",
        "profile",
        "picture",
        "website",
        "email",
        "email_verified",
        "gender",
        "birthdate",
        "zoneinfo",
        "locale",
        "phone_number",
        "phone_number_verified",
        "address",
        "updated_at",
        "cognito:mfa_enabled",
        "cognito:username"
    ],
    "UserPoolId": "USER_POOL_ID"
}
```

### CSV ファイルのフォーマット
<a name="cognito-user-pools-using-import-tool-formatting-csv-file"></a>

 ダウンロードしたユーザーインポート CSV ヘッダーファイルは次の文字列のようになります。ユーザープールに追加したカスタム属性も含まれます。

```
cognito:username,name,given_name,family_name,middle_name,nickname,preferred_username,profile,picture,website,email,email_verified,gender,birthdate,zoneinfo,locale,phone_number,phone_number_verified,address,updated_at,cognito:mfa_enabled
```

ユーザーのためのこのヘッダーと属性値が含まれ、次のルールに従ってフォーマットされているように CSV ファイルを編集します。

**注記**  
電話番号の適切な形式など属性値の詳細については、「[ユーザー属性の操作](user-pool-settings-attributes.md)」を参照してください。
+ ファイルの最初の行はユーザー属性の名前を含む、ダウンロードされたヘッダーの行です。
+ CSV ファイルの行の順序は重要ではありません。
+ 最初の行の後の各行に、ユーザーの属性値が含まれます。
+ ヘッダーのすべての列が存在している必要がありますが、列の値を指定する必要はありません。
+ 以下の属性は必須です:
  + **cognito:username**
  + [**email\$1verified**] または [**phone\$1number\$1verified**]
    + 自動確認された属性の少なくとも一つは、各ユーザーに対して `true` である必要があります。自動検証属性は、新しいユーザーがユーザープールに参加したときに Amazon Cognito が自動的にコードを送信する E メールアドレスまたは電話番号です。
    + ユーザープールは [**email\$1verified**] または [**phone\$1number\$1verified**] の少なくとも一つの自動確認された属性が必要です。ユーザープールに自動確認された属性が存在しない場合は、インポートジョブは開始されません。
    + ユーザープールに一つの自動確認された属性がある場合のみ、その属性はユーザーごとに確認する必要があります。たとえば、ユーザープールに自動確認された属性として [**phone\$1number**] だけがある場合、[**phone\$1number\$1verified**] 値はそれぞれのユーザーに対して `true` である必要があります。
**注記**  
ユーザーがパスワードをリセットするには、検証済みの E メールまたは電話番号が必要です。Amazon Cognito は、CSV ファイルで指定された E メールアドレスまたは電話番号にパスワードのリセットコードが含まれるメッセージを送信します。メッセージが電話番号に送信される場合は、SMS メッセージで送信されます。詳細については、「[サインアップ時に連絡先情報を検証する](signing-up-users-in-your-app.md#allowing-users-to-sign-up-and-confirm-themselves)」を参照してください。
  + [**email**] ([**email\$1verified**] が`true` の場合)
  + [**phone\$1number**] ([**phone\$1number**] が `true` の場合)
  + ユーザープールを作成する際に必須と指定した任意の属性
+ 文字列である属性値には、引用符は使用*できません*。
+ 属性値にカンマが含まれる場合、カンマの前にバックスラッシュ (\$1) を置く必要があります。これは、CSV ファイルのフィールドがカンマで区切られているためです。
+ CSV ファイルのコンテンツは、バイトオーダーマークのない UTF-8 形式にする必要があります。
+ [**cognito:username**] フィールドは必須であり、ユーザープール内で一意である必要があります。任意の Unicode 文字列を使えます。ただし、スペースまたはタブを含めることはできません。
+ **[birthdate]** (生年月日) の値がある場合、「**mm/dd/yyyy**」の形式である必要があります。たとえば、生年月日が 1985 年 2 月 1 日だとすると、**02/01/1985** にエンコードされる必要があります。
+ **cognito:mfa\$1enabled** フィールドは、ユーザープールの MFA 要件に対応している必要があります。ユーザープールで多要素認証 (MFA) を必須に設定している場合、このフィールドはすべてのユーザーに対して `true` または空白にする必要があります。MFA をオフに設定している場合、このフィールドはすべてのユーザーに対して `false` にする必要があります。空白の値により、インポートしたユーザーの MFA 対応ステータスは、ユーザープールが要求する状態に設定されます。`cognito:mfa_enabled` 値を設定したかどうかにかかわらず、有効な MFA 要素なしで、MFA を必須とするユーザープールにユーザーをインポートできます。この状態のユーザーは MFA がアクティブですが、E メール属性、電話番号属性、または TOTP を、ユーザープールの有効な MFA 要素として設定するまでサインインできません。
+ 最大行数は 16,000 文字です。
+ CSV ファイルの最大サイズは 100 MB です。
+ ファイルの最大行数 (ユーザー) は 500,000 です。この最大値にはヘッダー行は含まれません。
+ **[updated\$1at]** フィールド値はエポック時間 (秒) であると想定します。たとえば **1471453471** などです。
+ 属性値の先頭または末尾の空白は切り捨てられます。

次のリストは、カスタム属性のないユーザープールの CSV インポートファイルの例です。ユーザープールスキーマは、この例とは異なる場合があります。その場合は、ユーザープールからダウンロードした CSV テンプレートにテスト値を入力する必要があります。

```
cognito:username,name,given_name,family_name,middle_name,nickname,preferred_username,profile,picture,website,email,email_verified,gender,birthdate,zoneinfo,locale,phone_number,phone_number_verified,address,updated_at,cognito:mfa_enabled
John,,John,Doe,,,,,,,johndoe@example.com,TRUE,,02/01/1985,,,+12345550100,TRUE,123 Any Street,,FALSE
Jane,,Jane,Roe,,,,,,,janeroe@example.com,TRUE,,01/01/1985,,,+12345550199,TRUE,100 Main Street,,FALSE
```

## Amazon Cognito ユーザープールのインポートジョブの作成と実行
<a name="cognito-user-pools-creating-import-job"></a>

このセクションでは、Amazon Cognito コンソールと AWS Command Line Interface () を使用してユーザープールのインポートジョブを作成して実行する方法について説明しますAWS CLI。

**Topics**
+ [CSV ファイルからのユーザーのインポート (コンソール)](#cognito-user-pools-using-import-tool-console)
+ [ユーザーのインポート (AWS CLI)](#cognito-user-pools-using-import-tool-cli)

### CSV ファイルからのユーザーのインポート (コンソール)
<a name="cognito-user-pools-using-import-tool-console"></a>

次の手順は、CSV ファイルからユーザーをインポートする方法について説明します。

**CSV ファイルからユーザーをインポートするには (コンソール)**

1. [Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)に移動します。 AWS 認証情報の入力を求められる場合があります。

1. **[User Pools]** (ユーザープール) を選択します。

1. リストから存在するユーザープールを 1 つ選択します。

1. **[ユーザー]** メニューを選択します。

1. **[Import users]** (ユーザーのインポート) セクションで、**[Create an import job]** (インポートジョブの作成) を選択します。

1. **[Create import job]** (インポートジョブの作成) ページで、**ジョブ名**を入力します。

1. **[Create a new IAM role]** (新しい IAM ロールの作成)、または**[Use an existing IAM role]** (既存のロールを使用する) を選択します。

   1. **[Create a new IAM role]** (新しい IAM ロールの作成) を選択した場合は、新しいロールの名前を入力します。Amazon Cognito は、正しいアクセス許可と信頼関係を持つロールを自動的に作成します。インポートジョブを作成する IAM プリンシパルに、IAM ロールを作成するアクセス許可が必要です。

   1. **[Use an existing IAM role]** (既存の IAM ロールを使用する) を選択した場合は、**[IAM role selection]** (IAM ロール選択) のリストからロールを選択します。このロールには、[CloudWatch Logs IAM ロールの作成](#cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role) で説明されているアクセス許可と信頼ポリシーが必要です。

1. **[CSV をアップロード]** で **[ファイルを選択]** を選択し、準備した CSV ファイルをアタッチします。

1. **[Create job]** (ジョブの作成) を選択してジョブを送信しますが、後で開始します。**[Create and start job]** (ジョブを作成して開始) を選択してジョブを送信し、すぐに開始します。

1. ジョブを作成したが開始しなかった場合は、後で開始できます。**[ユーザー]** メニューの **[ユーザーをインポート]** で、インポートジョブを選択し、**[開始]** を選択します。 AWS SDK から [StartUserImportJob](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StartUserImportJob.html) API リクエストを送信することもできます。

1. ユーザーインポートジョブの進行状況は、**[ユーザー]** メニューの **[ユーザーをインポート]** でモニタリングします。ジョブが成功しない場合は、**[Status]** (ステータス) 値を選択できます。詳細については、**[View the CloudWatch logs for more details]** (詳細については CloudWatch ログを表示する) を選択して、CloudWatch ログコンソールで問題がないか確認してください。

### ユーザーのインポート (AWS CLI)
<a name="cognito-user-pools-using-import-tool-cli"></a>

ユーザープールにユーザーをインポートするには、次の CLI コマンドが使用できます:
+ `create-user-import-job`
+ `get-csv-header`
+ `describe-user-import-job`
+ `list-user-import-jobs`
+ `start-user-import-job`
+ `stop-user-import-job`

これらのコマンドに関するコマンドラインオプションのリストを取得するには、`help` コマンドラインオプションを使用します。次に例を示します。

```
aws cognito-idp get-csv-header help
```

#### ユーザーインポートジョブの作成
<a name="cognito-user-pools-using-import-tool-cli-creating-user-import-job"></a>

CSV ファイルを作成した後、次の CLI コマンドを使用してユーザーインポートジョブを作成します。*[JOB\$1NAME]* にはジョブに付ける名前を指定します。*[USER\$1POOL\$1ID]* には以前と同じユーザープール ID を指定します。*[ROLE\$1ARN]* には、[CloudWatch Logs IAM ロールの作成](#cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role) で次のとおり受け取ったロール ARN を指定します。

```
aws cognito-idp create-user-import-job --job-name "JOB_NAME" --user-pool-id "USER_POOL_ID" --cloud-watch-logs-role-arn "ROLE_ARN"
```

レスポンスで返される *PRE\$1SIGNED\$1URL* は 15 分間有効です。この時間以後は無効になり、新規のユーザーインポートジョブを作成して新しい URL を取得し直す必要があります。

**Example レスポンス:**  

```
{
    "UserImportJob": {
        "Status": "Created",
        "SkippedUsers": 0,
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "JobName": "JOB_NAME",
        "JobId": "JOB_ID",
        "PreSignedUrl": "PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn": "ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957431.965
    }
}
```

#### ユーザーインポートジョブのステータス値
<a name="cognito-user-pools-using-import-tool-cli-status-values-for-user-import-job"></a>

ユーザーインポートのコマンドに対する応答には、`Status` を示す次のような値が見つかります。
+ `Created` - ジョブが作成されましたが、開始前の状態です。
+ `Pending` - 遷移状態です。ジョブを開始しましたが、まだユーザーのインポートは開始していません。
+ `InProgress` - ジョブが開始され、ユーザーインポートが進行中です。
+ `Stopping` - ジョブを停止する処理中です。ユーザーインポートは停止していません。
+ `Stopped` - ジョブは停止中で、ユーザーインポートも停止しています。
+ `Succeeded` - ジョブは正常に完了しました。
+ `Failed` - エラーのためジョブは停止しました。
+ `Expired` - ジョブを作成しましたが、24 ～ 48 時間以内にジョブを起動しませんでした。ジョブに関連付けられたすべてのデータは削除され、ジョブを開始することはできません。

#### CSV ファイルのアップロード
<a name="cognito-user-pools-using-import-tool-cli-uploading-csv-file"></a>

以下の `curl` コマンドを使用して、ユーザーデータが含まれる CSV ファイルを `create-user-import-job` コマンドのレスポンスから取得した事前署名済みの URL にアップロードします。

```
curl -v -T "PATH_TO_CSV_FILE" -H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"
```

このコマンドの出力から、次のようなメッセージを見つけます: `"We are completely uploaded and fine"` このメッセージは、ファイルが正常にアップロードされたことを示します。ユーザープールは、インポートジョブの実行後にインポートファイルに情報を保持しません。完了または期限切れになると、Amazon Cognito は、アップロードした CSV ファイルを削除します。

#### ユーザーインポートジョブの説明
<a name="cognito-user-pools-using-import-tool-cli-describing-user-import-job"></a>

ユーザーインポートジョブの説明を取得するには、次のコマンドを使用します。*USER\$1POOL\$1ID* はユーザープール ID です。*JOB\$1ID* は、ユーザーインポートジョブの作成時に返されたジョブ ID です。

```
aws cognito-idp describe-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
```

**Example レスポンス例:**  

```
{
    "UserImportJob": {
        "Status": "Created",
        "SkippedUsers": 0,
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "JobName": "JOB_NAME",
        "JobId": "JOB_ID",
        "PreSignedUrl": "PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn":"ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957431.965
    }
}
```

前述の例の出力では、*PRE\$1SIGNED\$1URL* は CSV のアップロード先の URL です。*ROLE\$1ARN* は、ロールの作成時に受け取った CloudWatch Logs ロール ARN です。

#### ユーザーインポートジョブを表示する
<a name="cognito-user-pools-using-import-tool-cli-listing-user-import-jobs"></a>

ユーザーインポートジョブを一覧表示するには、次のコマンドを使用します:

```
aws cognito-idp list-user-import-jobs --user-pool-id "USER_POOL_ID" --max-results 2
```

**Example レスポンス例:**  

```
{
    "UserImportJobs": [
        {
            "Status": "Created",
            "SkippedUsers": 0,
            "UserPoolId": "USER_POOL_ID",
            "ImportedUsers": 0,
            "JobName": "JOB_NAME",
            "JobId": "JOB_ID",
            "PreSignedUrl":"PRE_SIGNED_URL",
            "CloudWatchLogsRoleArn":"ROLE_ARN",
            "FailedUsers": 0,
            "CreationDate": 1470957431.965
        },
        {
            "CompletionDate": 1470954227.701,
            "StartDate": 1470954226.086,
            "Status": "Failed",
            "UserPoolId": "USER_POOL_ID",
            "ImportedUsers": 0,
            "SkippedUsers": 0,
            "JobName": "JOB_NAME",
            "CompletionMessage": "Too many users have failed or been skipped during the import.",
            "JobId": "JOB_ID",
            "PreSignedUrl":"PRE_SIGNED_URL",
            "CloudWatchLogsRoleArn":"ROLE_ARN",
            "FailedUsers": 5,
            "CreationDate": 1470953929.313
        }
    ],
    "PaginationToken": "PAGINATION_TOKEN"
}
```

ジョブは時系列で、作成が最後から最初の順で表示されます。2 番目のジョブのあとの *PAGINATION\$1TOKEN* 文字列は、このリストコマンドについて、まだ結果が残っていることを示します。残りの結果を表示するには、次のように `--pagination-token` オプションを使用します:

```
aws cognito-idp list-user-import-jobs --user-pool-id "USER_POOL_ID" --max-results 10 --pagination-token "PAGINATION_TOKEN"
```

#### ユーザーインポートジョブの開始
<a name="cognito-user-pools-using-import-tool-cli-starting-user-import-job"></a>

ユーザーインポートジョブを開始するには、次のコマンドを使用します:

```
aws cognito-idp start-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
```

インポートジョブは、アカウントごとに 1 つしかアクティブにできません。

**Example レスポンス例:**  

```
{
    "UserImportJob": {
        "Status": "Pending",
        "StartDate": 1470957851.483,
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "SkippedUsers": 0,
        "JobName": "JOB_NAME",
        "JobId": "JOB_ID",
        "PreSignedUrl":"PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn": "ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957431.965
    }
}
```

#### ユーザーインポートジョブの停止
<a name="cognito-user-pools-using-import-tool-cli-stopping-user-import-job"></a>

ユーザーインポートジョブの進行中に停止するには、次のコマンドを使用します。ジョブを停止すると、再開することはできません。

```
aws cognito-idp stop-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
```

**Example レスポンス例:**  

```
{
    "UserImportJob": {
        "CompletionDate": 1470958050.571,
        "StartDate": 1470958047.797,
        "Status": "Stopped",
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "SkippedUsers": 0,
        "JobName": "JOB_NAME",
        "CompletionMessage": "The Import Job was stopped by the developer.",
        "JobId": "JOB_ID",
        "PreSignedUrl":"PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn": "ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957972.387
    }
}
```

## ユーザープールのインポート結果を CloudWatch コンソールに表示
<a name="cognito-user-pools-using-import-tool-cloudwatch"></a>

インポートジョブの結果は、Amazon CloudWatch コンソールで表示できます。

**Topics**
+ [結果の表示](#cognito-user-pools-using-import-tool-viewing-the-results)
+ [結果の解釈](#cognito-user-pools-using-import-tool-interpreting-the-results)

### 結果の表示
<a name="cognito-user-pools-using-import-tool-viewing-the-results"></a>

次のステップでは、ユーザープールのインポートの結果を表示する方法を説明します。

**ユーザープールのインポート結果を見るには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) で CloudWatch コンソールを開きます。

1. [**ログ**] を選択します。

1. ユーザープールのインポートジョブに使用するロググループを選択します。ロググループ名は `/aws/cognito/userpools/USER_POOL_ID/USER_POOL_NAME` の形式です。

1. 先ほど実行したユーザーインポートジョブのログを選択します。ログ名は *JOB\$1ID*/*JOB\$1NAME* の形式です。ログの結果は行番号でユーザーを示しています。ユーザーデータはログに書き込まれていません。各ユーザーに対して、次のような行が表示されます。
   + `[SUCCEEDED] Line Number 5956 - The import succeeded.`
   + `[SKIPPED] Line Number 5956 - The user already exists.`
   + `[FAILED] Line Number 5956 - The User Record does not set any of the auto verified attributes to true. (Example: email_verified to true).`

### 結果の解釈
<a name="cognito-user-pools-using-import-tool-interpreting-the-results"></a>

正常にインポートしたユーザーは、ステータスが「PasswordReset」に設定済みです。

次の場合、ユーザーはインポートされませんが、インポートジョブは継続します。
+ `true` に設定された自動検証された属性はありません。
+ ユーザーデータはスキーマに一致しません。
+ 内部エラーによりユーザーをインポートできませんでした。

以下の場合、インポートジョブは失敗します。
+ Amazon CloudWatch Logs ロールを想定することができず、正しいアクセスポリシーがない、または削除されている。
+ ユーザープールが削除されている。
+ Amazon Cognito が .csv ファイルを解析できない。

## インポートされたユーザーにパスワードをリセットするように要求
<a name="cognito-user-pools-using-import-tool-password-reset"></a>

ユーザープールがパスワードベースのサインインのみを提供している場合、ユーザーはインポート後にパスワードをリセットする必要があります。初めてサインインするときは、*任意の*パスワードを入力できます。Amazon Cognito は、アプリケーションからのサインインリクエストに対する API レスポンスで、新しいパスワードを入力するようユーザーに求めます。

ユーザープールにパスワードなしの認証要素がある場合、Amazon Cognito はインポートしたユーザーに対してデフォルトでその認証要素を使用します。ユーザーは、新しいパスワードの入力を求められず、パスワードなしの E メールまたは SMS OTP ですぐにサインインできます。また、ユーザー名パスワードやパスキーなど、他のサインイン方法を完了できるように、ユーザーにパスワードの設定を求めることもできます。ユーザーインポート後のパスワードなしのサインインには、以下の条件が適用されます。

1. 使用可能なパスワードなしのサインイン要素に対応する属性を持つユーザーをインポートする必要があります。ユーザーが E メールアドレスでサインインできる場合は、`email` 属性をインポートする必要があります。電話番号の場合は、`phone_number` 属性をインポートする必要があります。両方の場合は、いずれかの属性の値をインポートします。

1. 通常、ユーザーはパスワードをリセットする必要がある `RESET_REQUIRED` 状態でインポートされます。パスワードなしの要素でサインインできる状態でインポートされた場合、Amazon Cognito はユーザーの状態を `CONFIRMED` に設定します。

パスワードなしの認証の設定方法や、その認証フローをアプリケーションで構築する方法などの詳細については、「[Amazon Cognito ユーザープールによる認証](authentication.md)」を参照してください。

次の手順では、CSV ファイルのインポート後、カスタム構築されたログインメカニズムにおける、`RESET_REQUIRED` のローカルユーザーのユーザーエクスペリエンスについて説明します。ユーザーがマネージドログインでサインインする場合は、**[パスワードを忘れた場合]** オプションを選択し、E メールまたはテキストメッセージに記載されているコードを入力してパスワードを設定するよう指示します。

**インポートされたユーザーにパスワードをリセットするように要求**

1. アプリケーションで、ランダムなパスワードを使用した `InitiateAuth` により、現在のユーザーのサインインをサイレントに試行します。

1. `PreventUserExistenceErrors` が有効な場合、Amazon Cognito は `NotAuthorizedException` を返します。そうでない場合は `PasswordResetRequiredException` を返します。

1. アプリケーションが `ForgotPassword` API リクエストを行い、ユーザーのパスワードをリセットします。

   1. アプリケーションは `ForgotPassword` API リクエストでユーザー名を送信します。

   1. Amazon Cognito は、確認済みの E メールまたは電話番号にコードを送信します。宛先は、CSV ファイルで `email_verified` と `phone_number_verified` に指定した値によって異なります。`ForgotPassword` リクエストへのレスポンスは、コードの宛先を示します。
**注記**  
ユーザープールは、E メールまたは電話番号を確認するように設定する必要があります。詳細については、「[ユーザーアカウントのサインアップと確認](signing-up-users-in-your-app.md)」を参照してください。

   1. アプリケーションは、コードがコードの送信先を確認するメッセージをユーザーに表示し、ユーザーにコードと新しいパスワードを入力するように求めます。

   1. ユーザーがアプリでコードと新しいパスワードを入力します。

   1. アプリケーションは `ConfirmForgotPassword` API リクエストでコードと新しいパスワードを送信します。

   1. アプリケーションはユーザーをサインインにリダイレクトします。