翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
CSV ファイルからユーザープールへのユーザーのインポート
外部 ID ストアがあり、かつ、新しいローカルユーザーのためにユーザープールを準備する時間がある場合、カンマ区切り値 (CSV) ファイルからの一括ユーザーインポートは、Amazon Cognito ユーザープールへの移行のための手間とコストが少ないオプションになります。CSV ファイルインポートは、テンプレートファイルをダウンロードして入力し、インポートジョブのユーザープールにファイルを渡すプロセスです。CSV インポートを使用して、テストユーザーをすばやく作成できます。また、外部 ID ストアへの読み取り API リクエストをプログラムでファイルに入力したうえで、その詳細と属性を解析してファイルへの書き込みオペレーションにすることもできます。
デフォルトでは、インポートプロセスはパスワードを除くすべてのユーザー属性の値を設定します。つまり、ユーザーは最初にサインインした際にパスワードを変更する必要があります。このメソッドを使用してインポートすると、ユーザーは RESET_REQUIRED 状態になります。
または、既存のパスワードハッシュを使用してユーザーをインポートすることもできます。インポートジョブの作成時にパスワードハッシュアルゴリズムを指定し、CSV ファイルにパスワードハッシュを含めると、Amazon Cognito は既存のパスワードを使用してユーザーをインポートします。これらのユーザーは CONFIRMEDステータスで作成され、パスワードをリセットせずにすぐにサインインできます。詳細については、「パスワードハッシュを使用したユーザーのインポート」を参照してください。
CSV からユーザーをインポートする最も簡単な方法は、ユーザープールで [パスワードなしのサインイン] を有効にすることです。E メールアドレスと電話番号の属性、さらにユーザープールの適切な設定により、ユーザーはインポートジョブの完了直後に E メールまたは SMS ワンタイムパスワード (OTP) を使用してサインインできます。詳細については、「インポートされたユーザーにパスワードをリセットするように要求」を参照してください。
AdminSetUserPassword API リクエストで Permanent パラメータを true に設定することで、ユーザーのパスワードを設定することもできます。CSV インポートは、ユーザープール内で請求対象の月間アクティブユーザー (MAU) にはカウントされません。ただし、パスワードリセットオペレーションは MAU を発生させます。パスワードを使用する多数のユーザーをインポートしてもすぐにはアクティブにならない場合、コストを管理するには、ユーザーがサインインして RESET_REQUIRED チャレンジを受け取ったときに、新しいパスワードの入力を求めるようにアプリケーションを設定します。
注記
各ユーザーの作成日は、ユーザーがユーザープールにインポートされた時間です。作成日は、インポートされた属性の 1 つではありません。
ユーザーインポートジョブを作成する手順
-
AWS Identity and Access Management (IAM) コンソールで Amazon CloudWatch Logs ロールを作成します。
-
ユーザーインポート .csv ファイルを作成します。
-
ユーザーインポートジョブを作成し、実行します。必要に応じて、パスワードハッシュアルゴリズムを指定して、既存のパスワードハッシュを持つユーザーをインポートします。
-
ユーザーインポート .csv ファイルをアップロードします。
-
ユーザーインポートジョブを起動し、実行します。
-
CloudWatch を使用してイベントログを確認します。
-
パスワードハッシュをインポートしなかった場合は、インポートされたユーザーにパスワードのリセットを要求します。
その他のリソース
-
ユーザープール間でのユーザーアカウントのエクスポートに関する「Cognito User Profiles Export リファレンスアーキテクチャ
」
トピック
CloudWatch Logs IAM ロールの作成
Amazon Cognito の CLI または API を使用している場合は、CloudWatch IAM ロールを作成する必要があります。以下の手順では、Amazon Cognito がインポートジョブの結果を CloudWatch Logs に書き込むために使用できる IAM ロールを作成する方法について説明します。
注記
Amazon Cognito コンソールでインポート ジョブを作成すると、同時に IAM ロールを作成できます。新しい IAM ロールを作成することを選択すると、Amazon Cognito は適切な信頼ポリシーと IAM ポリシーをロールに自動的に適用します。
ユーザープールインポート用の CloudWatch Logs IAM ロールを作成するには (AWS CLI、API)
にサインイン AWS Management Console し、https://console.aws.amazon.com/iam/
で IAM コンソールを開きます。 -
の新しい IAM ロールを作成します AWS のサービス。詳しい手順については、「AWS Identity and Access Management ユーザーガイド」の「AWS のサービス用ロールの作成」を参照してください。
-
信頼されたエンティティタイプのユースケースを選択するときは、任意のサービスを選択してください。Amazon Cognito は現在、サービスのユースケースに記載されていません。
-
[Add permissions] (アクセス許可の追加) 画面で、[Create policy] (ポリシーの作成) を選択し、次のポリシーステートメントを挿入します。
REGIONを、 などのユーザープール AWS リージョン の に置き換えますus-east-1。ACCOUNTを AWS アカウント ID に置き換えます (111122223333など)。
-
-
ロールを作成したときに Amazon Cognito を信頼されたエンティティとして選択しなかったため、ロールの信頼関係を手動で編集する必要があります。IAM コンソールのナビゲーションペインから [Roles] (ロール) を選択し、作成した新しいロールを選択します。
-
[信頼関係] タブを選択します。
-
[Edit trust policy] (信頼ポリシーを編集) を選択します。
-
次のポリシーステートメントを [Edit trust policy] (信頼ポリシーを編集) に貼り付け、既存のテキストを置き換えます。
-
[ポリシーの更新] を選択してください。
-
ロールの ARN を書き留めておきます。インポートジョブを作成するときに、ARN を指定します。
ユーザーインポート CSV ファイルの作成
既存のユーザーをユーザープールにインポートする前に、インポートするユーザーとその属性を含むカンマ区切り値 (CSV) ファイルを作成する必要があります。ユーザープールから、ユーザープールの属性スキーマを反映するヘッダーを含むユーザーインポートファイルを取得できます。その後、CSV ファイルのフォーマット のフォーマット要件に一致するユーザー情報を挿入できます。
CSV ファイルヘッダーのダウンロード (コンソール)
CSV ヘッダーファイルをダウンロードするには、次の手順に従います。
CSV ファイルヘッダーをダウンロードするには
-
Amazon Cognito コンソール
に移動します。 AWS 認証情報の入力を求められる場合があります。 -
[User Pools] (ユーザープール) を選択します。
-
リストから存在するユーザープールを 1 つ選択します。
-
[ユーザー] メニューを選択します。
-
[Import users] (ユーザーのインポート) セクションで、[Create an import job] (インポートジョブの作成) を選択します。
-
[Upload CSV] (CSV のアップロード) で [template.csv] リンクを選択し、CSV ファイルをダウンロードします。
CSV ファイルヘッダーのダウンロード (AWS CLI)
正しいヘッダーのリストを取得するには、[ユーザー] メニューの [ユーザーをインポート] で、[インポートジョブを作成] を選択します。表示されるダイアログで template.csv リンクを選択し、ユーザープール属性を含むテンプレートファイルをダウンロードします。
次の CLI コマンドを実行することもできます。USER_POOL_ID は、ユーザーをインポートする先のユーザープールのユーザープール識別子です。
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 ファイルのフォーマット
ダウンロードしたユーザーインポート 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 ファイルを編集します。
注記
電話番号の適切な形式など属性値の詳細については、「ユーザー属性の操作」を参照してください。
-
ファイルの最初の行はユーザー属性の名前を含む、ダウンロードされたヘッダーの行です。
-
CSV ファイルの行の順序は重要ではありません。
-
最初の行の後の各行に、ユーザーの属性値が含まれます。
-
ヘッダーのすべての列が存在している必要がありますが、列の値を指定する必要はありません。
-
以下の属性は必須です:
-
cognito:username
-
[email_verified] または [phone_number_verified]
-
自動確認された属性の少なくとも一つは、各ユーザーに対して
trueである必要があります。自動検証属性は、新しいユーザーがユーザープールに参加したときに Amazon Cognito が自動的にコードを送信する E メールアドレスまたは電話番号です。 -
ユーザープールは [email_verified] または [phone_number_verified] の少なくとも一つの自動確認された属性が必要です。ユーザープールに自動確認された属性が存在しない場合は、インポートジョブは開始されません。
-
ユーザープールに一つの自動確認された属性がある場合のみ、その属性はユーザーごとに確認する必要があります。たとえば、ユーザープールに自動確認された属性として [phone_number] だけがある場合、[phone_number_verified] 値はそれぞれのユーザーに対して
trueである必要があります。
注記
ユーザーがパスワードをリセットするには、検証済みの E メールまたは電話番号が必要です。Amazon Cognito は、CSV ファイルで指定された E メールアドレスまたは電話番号にパスワードのリセットコードが含まれるメッセージを送信します。メッセージが電話番号に送信される場合は、SMS メッセージで送信されます。詳細については、「サインアップ時に連絡先情報を検証する」を参照してください。
-
-
[email] ([email_verified] が
trueの場合) -
[phone_number] ([phone_number] が
trueの場合) -
ユーザープールを作成する際に必須と指定した任意の属性
-
-
文字列である属性値には、引用符は使用できません。
-
属性値にカンマが含まれる場合、カンマの前にバックスラッシュ (\) を置く必要があります。これは、CSV ファイルのフィールドがカンマで区切られているためです。
-
CSV ファイルのコンテンツは、バイトオーダーマークのない UTF-8 形式にする必要があります。
-
[cognito:username] フィールドは必須であり、ユーザープール内で一意である必要があります。任意の Unicode 文字列を使えます。ただし、スペースまたはタブを含めることはできません。
-
[birthdate] (生年月日) の値がある場合、「
mm/dd/yyyy」の形式である必要があります。たとえば、生年月日が 1985 年 2 月 1 日だとすると、02/01/1985にエンコードされる必要があります。 -
cognito:mfa_enabled フィールドは、ユーザープールの MFA 要件に対応している必要があります。ユーザープールで多要素認証 (MFA) を必須に設定している場合、このフィールドはすべてのユーザーに対して
trueまたは空白にする必要があります。MFA をオフに設定している場合、このフィールドはすべてのユーザーに対してfalseにする必要があります。空白の値により、インポートしたユーザーの MFA 対応ステータスは、ユーザープールが要求する状態に設定されます。cognito:mfa_enabled値を設定したかどうかにかかわらず、有効な MFA 要素なしで、MFA を必須とするユーザープールにユーザーをインポートできます。この状態のユーザーは MFA がアクティブですが、E メール属性、電話番号属性、または TOTP を、ユーザープールの有効な MFA 要素として設定するまでサインインできません。 -
最大行数は 16,000 文字です。
-
CSV ファイルの最大サイズは 100 MB です。
-
ファイルの最大行数 (ユーザー) は 500,000 です。この最大値にはヘッダー行は含まれません。
-
[updated_at] フィールド値はエポック時間 (秒) であると想定します。たとえば
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 ユーザープールのインポートジョブの作成と実行
このセクションでは、Amazon Cognito コンソールと AWS Command Line Interface () を使用してユーザープールのインポートジョブを作成して実行する方法について説明しますAWS CLI。
CSV ファイルからのユーザーのインポート (コンソール)
次の手順は、CSV ファイルからユーザーをインポートする方法について説明します。
CSV ファイルからユーザーをインポートするには (コンソール)
-
Amazon Cognito コンソール
に移動します。 AWS 認証情報の入力を求められる場合があります。 -
[User Pools] (ユーザープール) を選択します。
-
リストから存在するユーザープールを 1 つ選択します。
-
[ユーザー] メニューを選択します。
-
[Import users] (ユーザーのインポート) セクションで、[Create an import job] (インポートジョブの作成) を選択します。
-
[Create import job] (インポートジョブの作成) ページで、ジョブ名を入力します。
-
[Create a new IAM role] (新しい IAM ロールの作成)、または[Use an existing IAM role] (既存のロールを使用する) を選択します。
-
[Create a new IAM role] (新しい IAM ロールの作成) を選択した場合は、新しいロールの名前を入力します。Amazon Cognito は、正しいアクセス許可と信頼関係を持つロールを自動的に作成します。インポートジョブを作成する IAM プリンシパルに、IAM ロールを作成するアクセス許可が必要です。
-
[Use an existing IAM role] (既存の IAM ロールを使用する) を選択した場合は、[IAM role selection] (IAM ロール選択) のリストからロールを選択します。このロールには、CloudWatch Logs IAM ロールの作成 で説明されているアクセス許可と信頼ポリシーが必要です。
-
-
[CSV をアップロード] で [ファイルを選択] を選択し、準備した CSV ファイルをアタッチします。
-
[Create job] (ジョブの作成) を選択してジョブを送信しますが、後で開始します。[Create and start job] (ジョブを作成して開始) を選択してジョブを送信し、すぐに開始します。
-
ジョブを作成したが開始しなかった場合は、後で開始できます。[ユーザー] メニューの [ユーザーをインポート] で、インポートジョブを選択し、[開始] を選択します。 AWS SDK から StartUserImportJob API リクエストを送信することもできます。
-
ユーザーインポートジョブの進行状況は、[ユーザー] メニューの [ユーザーをインポート] でモニタリングします。ジョブが成功しない場合は、[Status] (ステータス) 値を選択できます。詳細については、[View the CloudWatch logs for more details] (詳細については CloudWatch ログを表示する) を選択して、CloudWatch ログコンソールで問題がないか確認してください。
ユーザーのインポート (AWS CLI)
ユーザープールにユーザーをインポートするには、次の 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
ユーザーインポートジョブの作成
CSV ファイルを作成した後、次の CLI コマンドを使用してユーザーインポートジョブを作成します。[JOB_NAME] にはジョブに付ける名前を指定します。[USER_POOL_ID] には以前と同じユーザープール ID を指定します。[ROLE_ARN] には、CloudWatch Logs IAM ロールの作成 で次のとおり受け取ったロール 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_SIGNED_URL は 15 分間有効です。この時間以後は無効になり、新規のユーザーインポートジョブを作成して新しい URL を取得し直す必要があります。
例レスポンス:
{ "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 } }
ユーザーインポートジョブのステータス値
ユーザーインポートのコマンドに対する応答には、Status を示す次のような値が見つかります。
-
Created- ジョブが作成されましたが、開始前の状態です。 -
Pending- 遷移状態です。ジョブを開始しましたが、まだユーザーのインポートは開始していません。 -
InProgress- ジョブが開始され、ユーザーインポートが進行中です。 -
Stopping- ジョブを停止する処理中です。ユーザーインポートは停止していません。 -
Stopped- ジョブは停止中で、ユーザーインポートも停止しています。 -
Succeeded- ジョブは正常に完了しました。 -
Failed- エラーのためジョブは停止しました。 -
Expired- ジョブを作成しましたが、24 ~ 48 時間以内にジョブを起動しませんでした。ジョブに関連付けられたすべてのデータは削除され、ジョブを開始することはできません。
CSV ファイルのアップロード
以下の 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 ファイルを削除します。
ユーザーインポートジョブの説明
ユーザーインポートジョブの説明を取得するには、次のコマンドを使用します。USER_POOL_ID はユーザープール ID です。JOB_ID は、ユーザーインポートジョブの作成時に返されたジョブ ID です。
aws cognito-idp describe-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
例レスポンス例:
{ "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_SIGNED_URL は CSV のアップロード先の URL です。ROLE_ARN は、ロールの作成時に受け取った CloudWatch Logs ロール ARN です。
ユーザーインポートジョブを表示する
ユーザーインポートジョブを一覧表示するには、次のコマンドを使用します:
aws cognito-idp list-user-import-jobs --user-pool-id "USER_POOL_ID" --max-results 2
例レスポンス例:
{ "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_TOKEN 文字列は、このリストコマンドについて、まだ結果が残っていることを示します。残りの結果を表示するには、次のように --pagination-token オプションを使用します:
aws cognito-idp list-user-import-jobs --user-pool-id "USER_POOL_ID" --max-results 10 --pagination-token "PAGINATION_TOKEN"
ユーザーインポートジョブの開始
ユーザーインポートジョブを開始するには、次のコマンドを使用します:
aws cognito-idp start-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
インポートジョブは、アカウントごとに 1 つしかアクティブにできません。
例レスポンス例:
{ "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 } }
ユーザーインポートジョブの停止
ユーザーインポートジョブの進行中に停止するには、次のコマンドを使用します。ジョブを停止すると、再開することはできません。
aws cognito-idp stop-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
例レスポンス例:
{ "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 コンソールに表示
インポートジョブの結果は、Amazon CloudWatch コンソールで表示できます。
結果の表示
次のステップでは、ユーザープールのインポートの結果を表示する方法を説明します。
ユーザープールのインポート結果を見るには
にサインイン AWS Management Console し、https://console.aws.amazon.com/cloudwatch/
で CloudWatch コンソールを開きます。 -
[ログ] を選択します。
-
ユーザープールのインポートジョブに使用するロググループを選択します。ロググループ名は
/aws/cognito/userpools/の形式です。USER_POOL_ID/USER_POOL_NAME -
先ほど実行したユーザーインポートジョブのログを選択します。ログ名は
JOB_ID/JOB_NAMEの形式です。ログの結果は行番号でユーザーを示しています。ユーザーデータはログに書き込まれていません。各ユーザーに対して、次のような行が表示されます。-
[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).
-
結果の解釈
正常にインポートしたユーザーは、ステータスが「PasswordReset」に設定済みです。
次の場合、ユーザーはインポートされませんが、インポートジョブは継続します。
-
trueに設定された自動検証された属性はありません。 -
ユーザーデータはスキーマに一致しません。
-
内部エラーによりユーザーをインポートできませんでした。
以下の場合、インポートジョブは失敗します。
-
Amazon CloudWatch Logs ロールを想定することができず、正しいアクセスポリシーがない、または削除されている。
-
ユーザープールが削除されている。
-
Amazon Cognito が .csv ファイルを解析できない。
インポートされたユーザーにパスワードをリセットするように要求
ユーザープールがパスワードベースのサインインのみを提供している場合、ユーザーはインポート後にパスワードをリセットする必要があります。初めてサインインするときは、任意のパスワードを入力できます。Amazon Cognito は、アプリケーションからのサインインリクエストに対する API レスポンスで、新しいパスワードを入力するようユーザーに求めます。
ユーザープールにパスワードなしの認証要素がある場合、Amazon Cognito はインポートしたユーザーに対してデフォルトでその認証要素を使用します。ユーザーは、新しいパスワードの入力を求められず、パスワードなしの E メールまたは SMS OTP ですぐにサインインできます。また、ユーザー名パスワードやパスキーなど、他のサインイン方法を完了できるように、ユーザーにパスワードの設定を求めることもできます。ユーザーインポート後のパスワードなしのサインインには、以下の条件が適用されます。
-
使用可能なパスワードなしのサインイン要素に対応する属性を持つユーザーをインポートする必要があります。ユーザーが E メールアドレスでサインインできる場合は、
email属性をインポートする必要があります。電話番号の場合は、phone_number属性をインポートする必要があります。両方の場合は、いずれかの属性の値をインポートします。 -
通常、ユーザーはパスワードをリセットする必要がある
RESET_REQUIRED状態でインポートされます。パスワードなしの要素でサインインできる状態でインポートされた場合、Amazon Cognito はユーザーの状態をCONFIRMEDに設定します。
パスワードなしの認証の設定方法や、その認証フローをアプリケーションで構築する方法などの詳細については、「Amazon Cognito ユーザープールによる認証」を参照してください。
次の手順では、CSV ファイルのインポート後、カスタム構築されたログインメカニズムにおける、RESET_REQUIRED のローカルユーザーのユーザーエクスペリエンスについて説明します。ユーザーがマネージドログインでサインインする場合は、[パスワードを忘れた場合] オプションを選択し、E メールまたはテキストメッセージに記載されているコードを入力してパスワードを設定するよう指示します。
インポートされたユーザーにパスワードをリセットするように要求
-
アプリケーションで、ランダムなパスワードを使用した
InitiateAuthにより、現在のユーザーのサインインをサイレントに試行します。 -
PreventUserExistenceErrorsが有効な場合、Amazon Cognito はNotAuthorizedExceptionを返します。そうでない場合はPasswordResetRequiredExceptionを返します。 -
アプリケーションが
ForgotPasswordAPI リクエストを行い、ユーザーのパスワードをリセットします。-
アプリケーションは
ForgotPasswordAPI リクエストでユーザー名を送信します。 -
Amazon Cognito は、確認済みの E メールまたは電話番号にコードを送信します。宛先は、CSV ファイルで
email_verifiedとphone_number_verifiedに指定した値によって異なります。ForgotPasswordリクエストへのレスポンスは、コードの宛先を示します。注記
ユーザープールは、E メールまたは電話番号を確認するように設定する必要があります。詳細については、「ユーザーアカウントのサインアップと確認」を参照してください。
-
アプリケーションは、コードがコードの送信先を確認するメッセージをユーザーに表示し、ユーザーにコードと新しいパスワードを入力するように求めます。
-
ユーザーがアプリでコードと新しいパスワードを入力します。
-
アプリケーションは
ConfirmForgotPasswordAPI リクエストでコードと新しいパスワードを送信します。 -
アプリケーションはユーザーをサインインにリダイレクトします。
-
パスワードハッシュを使用したユーザーのインポート
既存の認証システムから Amazon Cognito にユーザーを移行すると、ユーザー属性とともにパスワードハッシュをインポートできます。その後、ユーザーはパスワードをリセットすることなく、既存のパスワードですぐにサインインできます。ユーザーが初めてサインインすると、Amazon Cognito は認証情報をネイティブの Amazon Cognito 認証システムに透過的に移行します。
重要
現時点では、パスワードハッシュのインポートはすべてのユーザープールで利用できるわけではありません。パスワードハッシュのインポートには、機能とスケーラビリティが強化された最新の Amazon Cognito インフラストラクチャが必要です。一部のユーザープールはまだ以前のインフラストラクチャにあり、それらを新しいインフラストラクチャにアップグレードして、この機能をロック解除 AWS します。Amazon Cognito コンソールでは、インポートジョブの作成時に対象のユーザープールにパスワードハッシュアルゴリズムオプションが表示され、対象外のプールにはこのオプションが表示されません。詳細については、 AWS セキュリティブログのAmazon Cognito が次世代インフラストラクチャで高度な機能をロック解除する
パスワードハッシュのインポートの仕組み
パスワードハッシュのインポートを使用すると、既存のパスワードでサインインする能力を維持しながらユーザーを移行できます。インポートプロセスは次のように機能します。
-
インポートジョブを作成し、ソースシステムがパスワードハッシュの作成に使用したパスワードハッシュアルゴリズムを指定します。
-
CSV ファイルに
password_hash列を各ユーザーのパスワードハッシュ値に含めます。 -
Amazon Cognito は、パスワードハッシュを使用してユーザーをインポートし、
CONFIRMEDステータスでユーザーを作成します。ユーザーはすぐにサインインできます。 -
ユーザーが初めてサインインすると、Amazon Cognito はインポートされたハッシュに対してパスワードを検証します。検証に成功すると、Amazon Cognito はユーザーの認証情報をネイティブ認証システムに移行します。
-
それ以降のすべてのサインインでは、ネイティブの Amazon Cognito 認証システムを使用します。
重要
1 つのインポートジョブのすべてのパスワードハッシュは、同じアルゴリズムを使用する必要があります。インポートジョブを作成するときに、ジョブレベルでアルゴリズムを指定します。
注記
ユーザーが最初のサインインを完了し、Amazon Cognito が認証情報を移行するまで、そのユーザーに対して Secure Remote Password (SRP) 認証を使用することはできません。インポートされたパスワードハッシュを持つユーザーがまだサインインしていない場合は、 USER_PASSWORD_AUTHまたは ADMIN_USER_PASSWORD_AUTHフローを使用します。
サポートされているパスワードハッシュアルゴリズム
Amazon Cognito は、インポート用に次のパスワードハッシュアルゴリズムをサポートしています。
BCRYPT-
bcrypt アダプティブハッシュ関数。Amazon Cognito は、ハッシュ文字列から必要なすべてのパラメータ (ソルト、コスト係数) を抽出します。
形式:
$2<a/b/x/y>$[cost]$[22-char salt][31-char hash]例:
$2b$10$CtA.Rcu/szzn9U00wpUjOuN3vrgJRZycv4aOzcP3GzqzO8UDPEFq6最大コスト係数: 10
SCRYPT-
パスワードベースの暗号化キー取得関数。Amazon Cognito は、ハッシュ文字列から必要なすべてのパラメータを抽出します。
形式:
N$r$p$hexSalt$hexHash例:
65536$8$1$304dbaef7c5e828dc19c98f0600d18fe$4f69c498c12cd102d057356facf8d77e8d42407090491ea32c5b038f5a18c099最大パラメータ: N (CPU/メモリコスト) = 65536、r (ブロックサイズ) = 8、p (並列処理) = 1
ARGON2ID-
Argon2id パスワードハッシュアルゴリズム。Amazon Cognito は、ハッシュ文字列から必要なすべてのパラメータを抽出します。
形式:
$argon2id$v=N$m=M,t=T,p=P$salt$hash例:
$argon2id$v=19$m=19456,t=2,p=1$ko/G5o1ms+ML08P95sQ8DA$AkVbvWSOqz7Hs3qthhWKxicOWnGLN+MBmpwc3emi5VA最大パラメータ: m (KiB のメモリ) = 19456、t (反復) = 2、p (並列処理) = 1
PBKDF2_SHA256-
SHA-256 を使用したパスワードベースのキー取得関数 2。Amazon Cognito は、ハッシュ文字列から必要なすべてのパラメータを抽出します。
形式:
$pbkdf2-sha256$iterations$salt$hash例:
$pbkdf2-sha256$600000$1XZlmwLQ2hhM3JYuCPiArQ$Pfheg9Zi/v5lXU4yyLA0WFUYEd/rlaVbzrM9oMD6IrA最大反復回数: 600,000
注記
サポートされているすべてのアルゴリズムは自己記述型です。つまり、Amazon Cognito はハッシュ文字列から直接すべての必須パラメータ (ソルト、コスト係数、反復など) を抽出できます。インポートジョブを作成するときにのみアルゴリズム名を指定する必要があります。
パスワードハッシュに上記の上限を超えるパラメータ値がある場合、そのユーザーのインポートは失敗します。インポートする前にソースシステムのパスワードハッシュ設定を確認して、互換性を確認してください。
CSV ファイルにパスワードハッシュを追加する
ユーザーインポート用の CSV テンプレートをダウンロードすると、テンプレートにpassword_hash列が含まれます。この列に、既存のパスワードでインポートするユーザーのパスワードハッシュ値を入力します。
パスワードハッシュインポートの CSV フォーマットルール
-
インポートジョブでパスワードハッシュアルゴリズムを指定する場合は、
password_hash列が必要です。特定のユーザーに対して値を空のままにすると、Amazon Cognito はパスワードなしでそのユーザーをインポートし、ユーザーをRESET_REQUIRED状態に設定します。 -
インポートジョブでパスワードハッシュアルゴリズムが指定されていても、CSV ファイルに
password_hash列が含まれていない場合、ジョブは失敗します。 -
パスワードハッシュ値が不正な形式であるか、指定されたアルゴリズムの想定形式と一致しない場合、そのユーザーのインポートは失敗します。Amazon Cognito はユーザーを作成しず、Amazon CloudWatch Logs ログに障害を記録します。
-
パスワードハッシュ値は大文字と小文字が区別されます。アルゴリズムが期待する正確な形式と一致することを確認してください。
例パスワードハッシュを含むサンプル CSV
次の例は、bcrypt パスワードハッシュを使用してユーザーをインポートする CSV ファイルを示しています。
cognito:username,email,email_verified,phone_number,phone_number_verified,password_hash alejandro_rosalez,alejandro_rosalez@example.com,TRUE,+12345550100,TRUE,$2b$10$CtA.Rcu/szzn9U00wpUjOuN3vrgJRZycv4aOzcP3GzqzO8UDPEFq6 mary_major,mary_major@example.com,TRUE,+12345550199,TRUE,$2b$10$CtA.Rcu/szzn9U00wpUjOuN3vrgJRZycv4aOzcP3GzqzO8UDPEFq6
パスワードハッシュを使用したインポートジョブの作成 (AWS CLI)
パスワードハッシュを使用してユーザーをインポートするには、インポートジョブを作成するときにパスワードハッシュアルゴリズムを指定する必要があります。インポートジョブのすべてのユーザーは、同じアルゴリズムを使用する必要があります。
次の AWS Command Line Interface コマンドを使用して、パスワードハッシュを使用してインポートジョブを作成します。--password-hashing-algorithm パラメータは、CSV ファイルにパスワードハッシュを作成するために使用されるアルゴリズムを指定します。
aws cognito-idp create-user-import-job \ --job-name "JOB_NAME" \ --user-pool-id "USER_POOL_ID" \ --cloud-watch-logs-role-arn "ROLE_ARN" \ --password-hashing-algorithmBCRYPT
BCRYPT を、サポートされているアルゴリズムの 1 つ、BCRYPT、ARGON2ID、または SCRYPTに置き換えますPBKDF2_SHA256。
例レスポンス例
{ "UserImportJob": { "Status": "Created", "SkippedUsers": 0, "UserPoolId": "USER_POOL_ID", "ImportedUsers": 0, "JobName": "JOB_NAME", "JobId": "JOB_ID", "PreSignedUrl": "PRE_SIGNED_URL", "CloudWatchLogsRoleArn": "ROLE_ARN", "PasswordHashingAlgorithm": "BCRYPT", "FailedUsers": 0, "CreationDate": 1470957431.965 } }
レスポンスには、指定したアルゴリズムを確認する PasswordHashingAlgorithm フィールドが含まれます。署名付き URL に CSV ファイルをアップロードし、「」の説明に従ってジョブを開始しますCSV ファイルのアップロード。
パスワードハッシュのインポート後のユーザーエクスペリエンス
パスワードハッシュを使用してインポートされたユーザーには、次のエクスペリエンスがあります。
-
即時サインイン: ユーザーはインポート直後に既存のパスワードでサインインできます。ユーザーはパスワードをリセットするプロンプトを受け取りません。
-
ユーザーステータス: Amazon Cognito は、 ではなく
CONFIRMEDステータスでこれらのユーザーを作成しますRESET_REQUIRED。 -
透過的な移行: ユーザーが初めてサインインすると、Amazon Cognito はインポートされたハッシュに対してパスワードを検証します。検証に成功すると、Amazon Cognito は認証情報をネイティブ認証システムに移行します。それ以降のすべてのサインインでは、ネイティブシステムが使用されます。
-
初期サインインレイテンシー: インポートされたパスワードハッシュを持つユーザーの最初のサインインには、以降のサインインよりも少し時間がかかる場合があります。Amazon Cognito は、インポートされたハッシュに対してパスワードを検証し、認証情報をネイティブ認証システムに移行する必要があります。
-
パスワードのリセット: ユーザーが最初のサインイン前にパスワードをリセットすると、インポートされたパスワードハッシュは、ネイティブの Amazon Cognito 認証システムを使用して新しいパスワードに置き換えられます。
パスワードハッシュのインポートエラーのトラブルシューティング
ユーザーのパスワードハッシュのインポートが失敗した場合、Amazon Cognito は失敗を Amazon CloudWatch Logs ログに記録します。一般的なエラーシナリオは次のとおりです。
- 不正な形式のハッシュ
-
パスワードハッシュが、指定されたアルゴリズムで想定される形式と一致しません。ハッシュ形式が正しく、 にリストされている形式のいずれかと一致することを確認しますサポートされているパスワードハッシュアルゴリズム。
- パラメータが範囲外です
-
パスワードハッシュには、許容される最大値を超えるパラメータ値 (コスト係数や反復など) が含まれています。互換性のないハッシュを持つユーザーの場合は、次のいずれかのオプションを選択します。
-
password_hashフィールドを空のままにして、パスワードハッシュなしでこれらのユーザーをインポートします。Amazon Cognito はそれらをRESET_REQUIRED状態に設定し、最初のサインイン時にパスワードをリセットする必要があります。 -
ユーザー移行 Lambda トリガーを使用して、CSV インポートではなくサインイン時にこれらのユーザーを移行します。
-
ソースシステムを廃止する前に、ユーザーが既存のシステムにサインインするときに、互換性のあるパラメータでパスワードを再ハッシュします。
-
- アルゴリズムの不一致
-
パスワードハッシュは、インポートジョブで指定されたアルゴリズムとは異なるアルゴリズムで作成されました。1 つのインポートジョブのすべてのハッシュは、同じアルゴリズムを使用する必要があります。異なるアルゴリズムを持つユーザーがいる場合は、アルゴリズムごとに個別のインポートジョブを作成します。
- password_hash 列がありません
-
ジョブの作成時にパスワードハッシュアルゴリズムを指定しましたが、CSV ファイルには
password_hash列が含まれていません。列を CSV ファイルに追加するか、アルゴリズムを指定せずに新しいジョブを作成します。
ユーザーのパスワードハッシュのインポートが失敗した場合、Amazon Cognito はユーザーを作成しません。インポートジョブの他のユーザーは引き続き処理されます。Amazon CloudWatch Logs ログを確認して、失敗したユーザーと各失敗の理由を特定します。
パスワードハッシュのインポートに関するセキュリティ上の考慮事項
Amazon Cognito は、インポートされたパスワードハッシュに追加のセキュリティ対策を適用します。
-
二重ハッシュ: Amazon Cognito は、元のアルゴリズムの強度に関係なく、インポートされたすべてのパスワードハッシュを、ストレージ前の暗号化保護の追加レイヤーで再ハッシュします。
-
自動移行: 最初の認証が成功すると、Amazon Cognito はユーザーの認証情報を Amazon Cognito で使用されるネイティブの Secure Remote Password (SRP) プロトコルに移行します。これにより、すべてのユーザーが最終的にネイティブの高セキュリティ認証メカニズムを使用できるようになります。
-
データクリーンアップ: インポートジョブが完了すると、Amazon Cognito はパスワードハッシュを含むアップロードされた CSV ファイルを一時ストレージから削除します。
重要
パスワードハッシュを含む CSV ファイルを機密データとして扱います。転送中に保護し、インポートの完了後に安全に削除します。