一時パスワードが使用されないまま有効期限が切れたCognitoユーザーをリセットして、新しい一時パスワードを発行する

2020.09.28

こんにちは、CX事業本部の若槻です。

Amazon Cognitoでは、管理者はユーザーアカウントの新規作成時に一時パスワードを発行し、ユーザーに初回ログインおよびパスワード変更をさせることができます。

今回は、一時パスワードが使用されないまま有効期限が切れたCognitoユーザーをリセットして、新しい一時パスワードを発行する方法を確認してみました。

初回ログインをせず放置していたCognitoユーザーの有効期限が切れてしまった

Cognitoでユーザーが作成され一時パスワードが発行されてから、初回ログインをせずに放置していたアカウントでログインをしてみると、Temporary password has expired and must be reset by an administrator.という表示が出てログインが出来なくなります。 image

これは、初回ログインがされないまま(ユーザーのステータスがFORCE_CHANGE_PASSWORDのまま)管理者のユーザー作成ポリシーで設定された有効期限を過ぎたことによりアカウントがログイン出来なくなったためです。

ポリシーでの既定の有効期限は作成から7日間です。有効期限の確認・変更はコンソールだとユーザープールの[全般設定] - [ポリシー]のページから行うことができます。 image

Cognitoユーザーをリセットして、新しい一時パスワードを発行する

有効期限が切れてしまったCognitoユーザーをリセットして、新しい一時パスワードを発行したい場合は、AWS CLIのcognito-idp admin-create-userコマンドを使用します。

このコマンドを既存のユーザーに対してmessage-actionオプションでRESENDを指定して実行することにより、そのユーザーアカウントの有効期限をリセットすることができます。

--message-action (string)

Set to "RESEND" to resend the invitation message to a user that already exists and reset the expiration limit on the user's account.

コマンドを実行してみます。

% aws cognito-idp admin-create-user \
  --user-pool-id ap-northeast-1_XXXXXXX \
  --username <有効期限をリセットしたいユーザー> \
  --message-action RESEND

実行したらユーザー宛にCognitoから新しい一時パスワードがメール(またはSMS)で送付されます。
image

新しい一時パスワードでログインをするとパスワード変更へ進むことができました。 image

ユーザーアカウントのステータスもCONFIRMEDに変わりました。

% aws cognito-idp admin-get-user \
  --user-pool-id ap-northeast-1_XXXXXXXXX \
  --username <有効期限をリセットしたいユーザー>
{
    //other feeld
    "UserStatus": "CONFIRMED"
}

また、コマンド実行で行われるのはアカウント再作成ではなく飽くまで有効期限リセットだけなので、アカウントの属性値などはリセット前のまま残っており、今回の操作によりアカウントが既存で持っていた情報への影響は特になさそうです。

おわりに

一時パスワードが使用されないまま有効期限が切れたCognitoユーザーをリセットして、新しい一時パスワードを送付する方法を確認してみました。

お客さんやメンバーから、有効期限が切れちゃったんだけどという相談があった時にも、この方法を知っていればさくっとリセットできますね。

参考

以上