🔖

AWS Cognitoで、AWS CLI でユーザを作りパスワードを設定してCONFIRMEDにする

2021/05/27に公開

Coginitoのユーザプールは、AWSのコンソール画面からユーザを作成できるものの、仮パスワードを設定してユーザにパスワードを強制変更してもらわないといけないのでだるいです。

開発者や管理画面のユーザなどのためにWebUIを用意したり、対象者に「メール送りました〜」「仮パスワードはxxxxなので変えてください〜」ってやるのもだるいので、AWS CLIを使って設定してみます。

参考はこちら:
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cognito-idp/index.html

まず、対象のCognito UserPoolのIDを調べます

$ aws cognito-idp list-user-pools --max-results 20 | jq ".UserPools[] | {Id, Name}"

{
  "Id": "ap-northeast-1_XXXXX",
  "Name": "peoject_hoge_userpool_XXXXX"
}

対象PoolのIDがわかったら、admin-create-user でIDを指定してユーザを作成します。
ユーザ属性はEメールだけにしていますが、環境によって変えてください。
ここではメールは認証済み、--message-action SUPPRESSのオプションによって対象ユーザへの通知を止めます。

$ aws cognito-idp admin-create-user \
--user-pool-id "ap-northeast-1_XXXXX" \
--username "hogefuga@example.com" \
--user-attributes Name=email,Value="hogefuga@example.com" Name=email_verified,Value=true \
--message-action SUPPRESS

すると、こんな感じでユーザが作成されます。

{
    "User": {
        "Username": "XXXXXXXXXXXX-XXXX-XXX-XXX-XXXXXXXXXXXX",
        "Attributes": [
            {
                "Name": "sub",
                "Value": "XXXXXXXXXXXX-XXXX-XXX-XXX-XXXXXXXXXXXX"
            },
            {
                "Name": "email_verified",
                "Value": "true"
            },
            {
                "Name": "email",
                "Value": "hogefuga@example.com"
            }
        ],
        "UserCreateDate": "2021-05-27T11:08:27.685000+09:00",
        "UserLastModifiedDate": "2021-05-27T11:08:27.685000+09:00",
        "Enabled": true,
        "UserStatus": "FORCE_CHANGE_PASSWORD"
    }
}

このとき、ステータスが FORCE_CHANGE_PASSWORD となっているため、このままではログインできません。admin-set-user-passwordを使ってパスワードを設定します。ユーザプールID、ユーザネーム、パスワードをそれぞれ指定しましょう。ポイントは --permanent オプションで、これによって恒久化しています。なお --no-permanentにすると仮パスワードになります。

$ aws cognito-idp admin-set-user-password \
--user-pool-id "ap-northeast-1_XXXXX" \
--username "XXXXXXXXXXXX-XXXX-XXX-XXX-XXXXXXXXXXXX" \
--password 'p@ssw0rd' \
--permanent

もう一度ユーザを確認してみましょう。 admin-get-user で確認できます。

$ aws cognito-idp admin-get-user \
--user-pool-id "ap-northeast-1_XXXXX" \
--username "XXXXXXXXXXXX-XXXX-XXX-XXX-XXXXXXXXXXXX"
{
    "User": {
        "Username": "XXXXXXXXXXXX-XXXX-XXX-XXX-XXXXXXXXXXXX",
        "Attributes": [
            {
                "Name": "sub",
                "Value": "XXXXXXXXXXXX-XXXX-XXX-XXX-XXXXXXXXXXXX"
            },
            {
                "Name": "email_verified",
                "Value": "true"
            },
            {
                "Name": "email",
                "Value": "hogefuga@example.com"
            }
        ],
        "UserCreateDate": "2021-05-27T11:08:27.685000+09:00",
        "UserLastModifiedDate": "2021-05-27T11:08:27.685000+09:00",
        "Enabled": true,
        "UserStatus": "CONFIRMED"
    }
}

ステータス CONFIRMED になっています。これで ユーザ名hogefuga@example.com、パスワード p@ssw0rd でログインできるようになります。

Discussion