AWS CLI による Cognito 操作用のコマンドには、cognito-idp
と cognito-identity
があります。
aws cognito-idp
… Cognito User Pools の操作(ユーザープール/ID プロバイダー)- ユーザープール自体の作成や、ユーザーの追加・削除などを行えます。ユーザープールでの認証に成功すると、ユーザー情報を参照するためのトークンが発行されます。一般的にいうところの ID プロバイダー (IdP) です。
aws cognito-identity
… Cognito Federated Identities の操作(フェデレーテッドアイデンティティー/ID プール)- 何らかの ID プロバイダー (IdP) で認証されたユーザーに対して、AWS サービスにアクセスするための一時的なアクセストークンを発行します。ID プロバイダーは上記の Cognito ユーザープールでもよいし、Google や Facebook などのサードパーティ ID プロバイダーでもかまいません。
ユーザープールの操作 (cognito-idp)
aws cognito-idp
のサブコマンドには、admin-
プレフィックスが付くものと付かないバージョンがあったりしますが、プレフィックスがない方は、ユーザー認証後に取得できるトークンの指定 (--access-token
) が必要です。
ユーザープールを作成する (cognito-idp create-user-pool)
$ aws cognito-idp create-user-pool --pool-name "Test user pool"
ユーザープールの作成に成功すると、初期設定の内容(パスワードのルールなど)が出力されます。
ユーザープールを削除する (cognito-idp delete-user-pool)
$ aws cognito-idp delete-user-pool --user-pool-id ap-northeast-1_5O6lfqrqN
--user-pool-id
オプションには、ユーザープール名ではなく、ユーザープール ID を指定することに注意してください。
ユーザープール ID は、cognito-idp list-user-pools
コマンドで確認できます。
ユーザープールの一覧を取得する (cognito-idp list-user-pools)
$ aws cognito-idp list-user-pools --max-results 10
ユーザープールの情報を取得する (cognito-idp describe-user-pool)
$ aws cognito-idp describe-user-pool --user-pool-id ap-northeast-1_5O6lfqrqN
ユーザーを作成する (cognito-idp admin-create-user)
$ aws cognito-idp admin-create-user \
--user-pool-id ユーザープールID \
--username ユーザー名 \
--temporary-password 初期パスワード(省略可) \
--message-action SUPPRESS(確認メールを送信しない場合)
ユーザーを削除する (cognito-idp admin-delete-user)
$ aws cognito-idp admin-delete-user \
--user-pool-id ユーザープールID \
--username ユーザー名
ユーザーの一覧を取得する (cognito-idp list-users)
$ aws cognito-idp list-users --user-pool-id ユーザープールID
指定したユーザーの情報を取得する (cognito-idp admin-get-user)
$ aws cognito-idp admin-get-user \
--user-pool-id ユーザープールID \
--username ユーザー名
ユーザープールにクライアントを追加する (create-user-pool-client)
$ aws cognito-idp create-user-pool-client \
--user-pool-id ユーザープールID
--client-name クライアント名
クライアントアプリや AWS CLI で認証を行うには、ユーザープールに「クライアント」を追加しておく必要があります。
ユーザープールのクライアントの一覧を取得する (list-user-pool-clients)
$ aws cognito-idp list-user-pool-clients --user-pool-id ユーザープールID
ユーザープールのクライアントの情報を取得する (describe-user-pool-client)
$ aws cognito-idp describe-user-pool-client \
--user-pool-id ユーザープールID \
--client-id クライアントID
クライアント名ではなく、クライアント ID を指定する必要があることに注意してください。
クライアント ID は、list-user-pool-clients
コマンドで確認できます。
ユーザープールのクライアントの設定を変更する (update-user-pool-client)
$ aws cognito-idp update-user-pool-client \
--user-pool-id ユーザープールID \
--client-id クライアントID \
...(設定変更のオプション)...
ユーザーのパスワードを設定する (admin-set-user-password)
$ aws cognito-idp admin-set-user-password \
--user-pool-id ユーザープールID \
--username 既存のユーザー名 \
--password 新しいパスワード
ユーザー認証する (admin-initiate-auth)
$ aws cognito-idp admin-initiate-auth \
--user-pool-id ユーザープールID \
--client-id クライアントID \
--auth-flow ADMIN_USER_PASSWORD_AUTH
--auth-parameters USERNAME=ユーザー名,PASSWORD=パスワード
ユーザープールに登録されたユーザーの名前とパスワードで認証し、トークンを取得します。
この管理 API でユーザー認証を行うには、Cognito ユーザープールの設定で対象のクライアントを選択し、ALLOW_ADMIN_USER_PASSWORD_AUTH
にチェックを入れておく必要があります。
これを有効にしておかないと、管理者用の Cognito API(admin-initiate-auth
コマンドなど)で認証できません。
レスポンスとして、ChallengeName: NEW_PASSWORD_REQUIRED
が返ってきた場合は、新しいパスワード設定する必要があります。
新しいパスワードの設定も CLI から行えます(admin-initiate-auth
のレスポンスに含まれているセッショントークン Session
の値が必要です)。
$ aws cognito-idp admin-respond-to-auth-challenge \
--user-pool-id ap-northeast-1_sf1nSZ2Oj \
--client-id 5sf3ad654tid5qt4r1768stto \
--challenge-name NEW_PASSWORD_REQUIRED \
--challenge-responses USERNAME=user1,NEW_PASSWORD="passWORD#123",userAttributes.email="user1@example.com" \
--session "AYABeBBlOnhrpnx82...(省略)...L7uMc6Q_FXfCoWCsI-w"
関連記事
- Amazon Cognito: Amplify SDK による認証まわりの UI 表示あれこれ
- Amazon Cognito (2) サインイン後に AWS リソースへのアクセス権限を与える (Cognito Identity Pool)
- Amazon Cognito (1) サインイン可能な Web サイトを作る (Cognito User Pool)
- DynamoDB を Python で操作する (boto3)
- AWS KMS をコマンドライン (CLI) で操作する
- AWS SSM をコマンドライン (CLI) で操作する
- AWS CDK で外部パラメーターを扱う(コンテキスト・バリューと環境変数)