既存のログイン認証基盤からCognitoに移行するために調べてわかったこと


既存のID&パスワード認証のシステムに加え、新たにシステムを作り、SSO(シングルサインオン)を実装するために、Cognitoを使う。

その際に、既存のユーザー情報を移行しないといけないので、調べてみました。

マサカリ待ってます。

前提

AWS CLIは使わず、マネジメントコンソールから操作します。

既存の認証基盤仕様

ログインするためにユーザーが入力するもの

  • ユーザーID(またはメールアドレス)
  • パスワード

移行について

[懸念点]ユーザーにパスワードの変更をしてもらう必要がある

[モバイルアーキテクチャ ] Cognitoにどこまで任せるべきか?研究してみた - Qiita

既存のメール認証システムから移行する場合、name, email, phone numberなどはcsvでimportできるが、passwordだけはimportできないので、ユーザーにpasswordの再設定を依頼する必要がある。そのため、移行コストは高い

CSVでユーザーをインポートする

既存のユーザー情報を定められた形式のCSVファイルからインポートできる。

既存システムから、CSVを作る仕組みは別途用意しなければなりません。

ユーザーインポート .csv ファイルの作成 - Amazon Cognito

フォーマットはユーザープールで設定した属性に依るので、「CSVヘッダーのダウンロード」からヘッダーファイルをダウンロードします。

ダウンロードされるヘッダー例.csv
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

インポートするには上記ヘッダーに合わせて必要な情報を作っていく必要がある

インポートのソース.csv
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
tanaka,,,,,,,,,[email protected],TRUE,,,,,,FALSE,,,FALSE,tanaka
suzuki,,,,,,,,,[email protected],TRUE,,,,,,FALSE,,,FALSE,suzuki
yamamoto,,,,,,,,,[email protected],TRUE,,,,,,FALSE,,,FALSE,yamamoto

このCSVファイルを、「インポートジョブの作成」から選択してジョブを作成します。

(試行錯誤の跡がありますが)、ステータスがCreatedの状態で、開始を押します。
成功するとSuccessedの状態になります。

Too many users have failed or been skipped during the import.
というエラーは、CSVの内容を見直してください。具体的なエラー内容は、CloudWatchLogsに吐き出されています。

インポートが成功すると、下記の通りインポートされます。

あとはアプリクライアントからパスワードのリセットを促すように対応すれば移行できるかと思います。