はじめに
Cognito を利用している環境で、新規ユーザー登録時やパスワードリセット時に発行される一時パスワードの期限切れエラーに遭遇しました。
AWS マネジメントコンソールではリセットができず、CLI を使う必要がありました。
この経験をもとに、エラーの発生原因や解決方法をまとめます。
書こうと思ったきっかけ
受講しているITスクールのチーム開発(ハッカソン)で、一時パスワードの期限切れによりログインできない問題が発生しました。
特に、AWS マネジメントコンソールでは直接リセットできない点が意外でした。(※私の環境の場合)
CLI を使えば解決できることがわかったため、同じ問題で困る人の参考になればと思い、記録することにしました。
また、今後の対策を考える上でも、整理しておくことで役立つと感じました。
発生していたエラー
Invalid input: Temporary password has expired and must be reset by an administrator.
このエラーは、Cognitoで発行された一時パスワードの有効期限が切れている場合に発生します。
そのため、通常のログインでは認証が通らず、管理者によるパスワードのリセットが必要になります。
実際のマネコン画面
原因
Amazon Cognitoでは、新しいユーザーを作成した際や、パスワードをリセットした際に、一時パスワードが発行されます。
しかし、この一時パスワードには有効期限が設定されており、期限を過ぎると使用できなくなります。
そのため、ユーザーが一定期間ログインしない場合や、パスワードの変更をしないままでいると、期限切れとなりログイン不可の状態になります。
また、AWSマネジメントコンソールでは直接パスワードをリセットできない場合があるため、適切な対応方法を知っておくことが重要です。
実際にリセットしてみた
AWSマネジメントコンソールからパスワードをリセットしようと試みましたが、「リセット」ボタンがグレーアウトされており、操作できない状態でした。
このため、コンソール上では直接リセットできないことが確認できました。
実際のマネコン画面
AWS CLI でリセットしてみた
マネジメントコンソールでのリセットができなかったため、AWS CLI を使用してパスワードをリセットしました。
以下のコマンドを実行することで、対象ユーザーのパスワードを恒久的なものに変更できます(今回はあくまで検証のため)。
aws cognito-idp admin-set-user-password \
--user-pool-id <ユーザープールID> \
--username <対象ユーザー名> \
--password <新しいパスワード> \
--permanent
コマンドの説明
<ユーザープールID>
→ Cognito のユーザープール ID
<対象ユーザー名>
→ 対象のユーザー名
<新しいパスワード>
→ 任意の新しいパスワード
また、--permanent
オプションを付与することで、新しいパスワードを「一時パスワード」ではなく、恒久的なパスワードとして設定できます。
実際のマネコン画面(リセット後)
今後の対策
- 一時パスワードの期限を考慮して、早めにログインさせる
- ユーザー登録時に仮パスワードをすぐに変更させる
- 自動パスワードリセット機能(Forgot Password)を実装する
まとめ
Amazon Cognito の一時パスワードには有効期限があり、期限を過ぎると使用できなくなります。
その場合、AWS マネジメントコンソールではリセットできないことがあるため、CLI を使用してリセットする必要があります。
今後は、ユーザーに早めのログインを促し、仮パスワードの変更を義務付ける仕組みを整えることが重要だと感じました。
さらに、今後も積極的に遭遇したエラーを記録し、同じ問題に直面した際の解決策を素早く見つけられるようにアウトプットを続けていこうと思います!