Cognitoへユーザを移行する

移行などでCognitoにユーザを移したいケースがあるかと思います。AWSではその仕組みを作成できるので事例とともに紹介します。

目次

実現したいこと ユーザをCognitoに移行する

Cognitoへのユーザの移行です。移行元はCognito以外も使えますが、検証では移行元もCognitoで実行しました。Cognitoの場合、クロスアカウントでも問題ありません。

図1 Cognito間でユーザを移行したい


検証では旧アカウントのCognitoにユーザが登録されているので新アカウントのCognitoにユーザを移していきます。

実現方法 Cognitoのトリガでユーザ移行Lambdaを実行する

Cognitoへの移行はCSVでも可能ですが、CSVではパスワードの移行が不可能です。パスワードも移行対象としたい場合はCognitoのトリガとユーザ移行用のLambdaを実装する必要があります。
以下、AWS公式ドキュメントでCognitoのユーザ移行トリガが紹介されています。
ユーザー移行の Lambda トリガーを使用したユーザープールへのユーザーのインポート
ユーザ移行Lambdaを実装すると以下図のようなアーキテクチャになります。
一気にユーザを移行するということではなく、ユーザがログインするたびにそのユーザだけが新Cognitoに移行されていきます。

図2 ユーザ移行lambdaを使用したユーザの移行

AWSのドキュメントには下記の通り「既存のユーザーディレクトリまたはユーザーデータベース」とあるので移行元はCognitoでなくても使えます。移行元のユーザディレクトリによってユーザ移行Lambdaの実装を行えばOKです。
図2の流れを順に解説していきます。図中の番号と以下の番号はリンクさせています。

  1. ユーザがID/PWでログイン:旧Cognitoから新Cognitoに向き先を変更しておけば、ユーザは普段と同じようにID/PWでログインするのと変わりはありません。普段通りのログインと同じです。新Cognitoに対して認証をかけます。認証が成功した場合はここで終了。認証が失敗してかつ新CognitoにIDが存在しない場合は2に進みます。
  2. ユーザが存在しない場合Cognitoがユーザ移行Lambdaをトリガする:1でユーザが入力してきたIDが新Cognitoに存在しない場合、ユーザ移行Lambdaをトリガします。この時引数にユーザが入力してきたIDとPWを渡します。
  3. ユーザ移行LambdaがID/PWで旧Cognitoに認証:ユーザ移行Lambdaは受け取ったID/PWで旧Cognitoに認証に行きます。(admin_initiate_authを使用できます。)認証が成功した場合、4に進みます。クロスアカウントの場合はIAMRoleでスイッチロールさせましょう。その際に信頼関係の設定もお忘れなく。
  4. 旧CognitoからJWT返却:認証に成功するとJWTが返却されます。JWTからID/PW以外の情報を取り出せます。JWTはbase64になっているのでdecodeすればメールアドレスやユーザ名も取り出すことができます。
    参考:Amazon Cognito JSON ウェブトークンの署名を復号して検証するにはどうすればよいですか?
  5. 認証が成功した場合新Cognitoにユーザ作成:新CognitoにID/PWと4で取り出した情報を使いユーザを作成します。ユーザにTOKENを返します。

流れとしては旧Cognitoから新Cognitoにユーザを移動させるというより、旧Cognitoにあって新Cognitoに無いユーザを作っているという感じですね。

実装例

実装と設定については以下の記事で記載しています。

PR
当ブログはWordPressテーマSWELLを使用しています。非常に使いやすく、簡単にプロのようなデザインを使えるのでお勧めです!!

SWELL – シンプル美と機能性両立を両立させた、圧巻のWordPressテーマ

ランキング

ランキングに参加しています。クリックして応援いただけると嬉しいです。
にほんブログ村 IT技術ブログ クラウドコンピューティングへ
にほんブログ村
AWSランキング
AWSランキング

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次