AWS CLIを使ってCognitoユーザーステータスのFORCE_CHANGE_PASSWORDをCONFIRMEDにしてみる

マネージメントコンソールでユーザを追加すると必ず「FORCE_CHANGE_PASSWORD」というステータスでユーザが作成されます。このステータスをAWS CLIから「CONFIRMED」に変更する方法をご紹介します。
2018.07.07

どうも!大阪オフィスの西村祐二です。

今日はクラスメソッドの創立記念日で15年目に突入したそうです。ということで今日もブログを書いていきます。テーマはCognitoです。

Cognitoを使う際に検証やテストのために、ユーザを追加したいことがあるかと思います。

マネージメントコンソールでユーザを追加すると必ず「FORCE_CHANGE_PASSWORD」というステータスでユーザが作成されます。このステータスのユーザーはユーザ自身でパスワードを変更する必要があります。そのため、マネージメントコンソールからユーザーステータスを変更することはできません。

つまり、パスワード変更のためにSDKを使ったWEBページを別途用意したりする必要があります。

が、AWS CLIから「FORCE_CHANGE_PASSWORD」のステータスを「CONFIRMED」に変更する方法をみつけたので紹介したいと思います。

※通常、検証やテストのためにユーザを追加する際はマネージメントコンソールではなく、AWS CLIからユーザを追加することが多いです。最後に付録としてコマンドを記載しています。

さっそくやっていきましょう!

Cognitoユーザプールの作成

マネージメントコンソールから作成します。設定はデフォルトのまま作成しています。

アプリクライアントを追加

ユーザプールが作成できたら、次はアプリクライアントを追加します。

必ず、「サーバーベースの認証でサインイン API を有効にする (ADMIN_NO_SRP_AUTH)」にチェックをつけてください。

マネージメントコンソールからユーザ追加

マネージメントコンソールからユーザ追加します。

今回、testというユーザを追加します。仮パスワードをPassw0rd!としています。メールアドレスも適当に設定しています。

追加すると下記画像のようにステータスが「FORCE_CHANGE_PASSWORD」として追加されます。

AWC CLIからステータスを変更にする

下記コマンドでセッション情報を取得します。

$ aws cognito-idp admin-initiate-auth \
--user-pool-id ap-northeast-1_xxxxxxxxx \
--client-id xxxxxxxxxxxxxxxxxxxxx \
--auth-flow ADMIN_NO_SRP_AUTH \
--auth-parameters \
USERNAME=test,PASSWORD=Passw0rd!

成功とすると、下記のようなレスポンスが返ってきます。

{
    "ChallengeName": "NEW_PASSWORD_REQUIRED",
    "Session": "mVvjpL7DgH9EYlZ3AJVozh0b1O5av4-HFBwzIzb5oN7smiGwKxXrWdVJkrp_65cZ11ggQ4qt3lhhp9KiAiKFem61iJS4F_l64laOyHLF3VVzPaFg1UQaWIK1vR13gkxIkBGl4oE1abb5Jqi_kIzTnLahOPW59YRynnWr8WSV7k4IZ2yhMI7Hf8iDQZCPzQ4N5b13J5gPPJrk6wchGyypGJK5bSFppTV2ScOn4oNySQ0j-6OzN8vQF102YaEKemkz05-XU5vF8PdvuNjFYCwJL4Blkt2FjpfUpa6bKOBT0HcvE2dpVNeRnN6w3GnwNijdno1pfXjhBKltpn95RJE3eIMdOhUXqDDGsisN4Au66i7gDwPtZDMAWswGHnb-JTqQ32a9CKT5bvk16OS-3o3x_iuKe9t3tRNIrZ527k9KJQZujT-H7CByznXsfVVDVx5HawEtDgAD-O4OG4h5mmdAksaAypg9yDPf2FMa6STlnOdQkTufGpWuDLHsKvcpnK1w_VowhgNfkkMt1ch-toQ-iES11TGk-c1u1BKoKrBFLse9D2D9UIKHqsKP5F4YkB410u9Byj1XIZV3ENcNXms-foFDaoXIB5mSpVRo-oIc5qxgdnuuM38WpAWbvBm4ea730VMj9hA1Ifz4qKbcCcGzLHm-QuZv1LYuWFOcwZ1hy3MiwQQgWlYwcVZ78VYbc4uRbacmWMhJG8fR0tZQAuDBVLRVKFZViIUYlfZpe9iWf9Wr2q-2YMRCd2gLPCY8micRnGwoZy5LZbk3C4rB6LBKgWl2uMge5umQfhIgREQ_-QSrbDy0tgDwFGbL8avO5EfcjQwngg",
    "ChallengeParameters": {
        "USER_ID_FOR_SRP": "test",
        "requiredAttributes": "[]",
        "userAttributes": "{\"email_verified\":\"true\",\"email\":\"test@admin.com\"}"
    }
}

下記コマンドで新しいパスワードを設定します。今回はPassw0rd!!というパスワードにしています。 --sessionでは上記のレスポンスで取得したSessionの値を使用します。

注意点として、マネージメントコンソールでメールアドレスの設定しないでユーザ追加をした場合は--challenge-responsesのところで、--challenge-responses NEW_PASSWORD='Passw0rd!!',USERNAME=test,userAttributes.email=test@admin.comのようにuserAttributes.emailを追加する必要があります。

$ aws cognito-idp admin-respond-to-auth-challenge \
--user-pool-id ap-northeast-1_xxxxxxxxx \
--client-id xxxxxxxxxxxxxxxxxxxxx \
--challenge-name NEW_PASSWORD_REQUIRED \
--challenge-responses NEW_PASSWORD='Passw0rd!!',USERNAME=test \
--session "mVvjpL7DgH9EYlZ3AJVozh0b1O5av4-HFBwzIzb5oN7smiGwKxXrWdVJkrp_65cZ11ggQ4qt3lhhp9KiAiKFem61iJS4F_l64laOyHLF3VVzPaFg1UQaWIK1vR13gkxIkBGl4oE1abb5Jqi_kIzTnLahOPW59YRynnWr8WSV7k4IZ2yhMI7Hf8iDQZCPzQ4N5b13J5gPPJrk6wchGyypGJK5bSFppTV2ScOn4oNySQ0j-6OzN8vQF102YaEKemkz05-XU5vF8PdvuNjFYCwJL4Blkt2FjpfUpa6bKOBT0HcvE2dpVNeRnN6w3GnwNijdno1pfXjhBKltpn95RJE3eIMdOhUXqDDGsisN4Au66i7gDwPtZDMAWswGHnb-JTqQ32a9CKT5bvk16OS-3o3x_iuKe9t3tRNIrZ527k9KJQZujT-H7CByznXsfVVDVx5HawEtDgAD-O4OG4h5mmdAksaAypg9yDPf2FMa6STlnOdQkTufGpWuDLHsKvcpnK1w_VowhgNfkkMt1ch-toQ-iES11TGk-c1u1BKoKrBFLse9D2D9UIKHqsKP5F4YkB410u9Byj1XIZV3ENcNXms-foFDaoXIB5mSpVRo-oIc5qxgdnuuM38WpAWbvBm4ea730VMj9hA1Ifz4qKbcCcGzLHm-QuZv1LYuWFOcwZ1hy3MiwQQgWlYwcVZ78VYbc4uRbacmWMhJG8fR0tZQAuDBVLRVKFZViIUYlfZpe9iWf9Wr2q-2YMRCd2gLPCY8micRnGwoZy5LZbk3C4rB6LBKgWl2uMge5umQfhIgREQ_-QSrbDy0tgDwFGbL8avO5EfcjQwngg"

上記コマンドが成功すると、AccessTokenなどの情報がレスポンスとして返ってきます。

マネージメントコンソールからユーザを確認すると、ステータスが「FORCE_CHANGE_PASSWORD」から「CONFIRMED」に変わってますね。やりましたね。

さいごに

いかがだったでしょうか。

AWS CLIから「FORCE_CHANGE_PASSWORD」のステータスを「CONFIRMED」に変更する方法を紹介しました。

誰かの参考になれば幸いです。

付録:AWS CLIからユーザを追加する

AWS CLIからtest2ユーザを追加します。パスワードは仮でPassw0rd!としています。

$ aws cognito-idp sign-up \
--client-id xxxxxxxxxxxxxxxxxxx \
--username test2 \
--password Passw0rd! \
--user-attributes Name=email,Value=test@admin.com

$ aws cognito-idp admin-confirm-sign-up \
--user-pool-id ap-northeast-1_xxxxxxxx \
--username test2

$ aws cognito-idp admin-update-user-attributes \
--user-pool-id ap-northeast-1_xxxxxxxx \
--username test2 \
--user-attributes Name=email_verified,Value=true