Closed4

【cognito】cliでAdmin Create Userしてみる【AWS】

JunpeiJunpei

まずローカルに auth.json というファイルを新規作成する。構成は以下。

{
  "ClientId": "{YOUR_CLIENT_ID}",
  "AuthFlow": "USER_PASSWORD_AUTH",
  "AuthParameters": {
    "USERNAME": "{your_username}",
    "PASSWORD": "{your_password}",
    "SECRET_HASH": "{calculated_secret_hash}"
  }
}

auth.json の諸注意は以下。

  • "USER_PASSWORD_AUTH" は固定値。変更する必要なし
  • ClientId は Cognito のコンソールか ssm parameterで確認する。(環境別に用意されている)
  • 以下のコマンドでSECRET_HASHを計算し、{calculated_secret_hash}にセットする。
# AWS_USER_NAME はメールアドレスでなく、cognitoが発行する乱数の値。
# cognitoユーザープール > ユーザーから確認可能
AWS_USER_NAME="xxxxx-yyyyy-zzz..."

# ID, SECRETはいずれもcognitoユーザープール > アプリケーションクライアントから確認可能
CLIENT_ID="xxx..."
CLIENT_SECRET="yyy..."

# 文字列を連結してハッシュを計算
# echo で出力された文字列をコピーし、SECRET_HASH としてjsonで指定する。
echo -n "${AWS_USER_NAME}${CLIENT_ID}" | \
  openssl dgst -binary -sha256 -hmac "${CLIENT_SECRET}" | \
  base64
JunpeiJunpei

初期パスワードの変更が必要な場合がある。以下を実行するとSessionが発行されるので、それを使ってパスワード変更する

curl -s -X POST \
  -H 'X-Amz-Target: AWSCognitoIdentityProviderService.InitiateAuth' \
  -H 'Content-Type: application/x-amz-json-1.1' \
  --data @auth.json \
  https://cognito-idp.us-east-1.amazonaws.com/ 
---
{"ChallengeName":"NEW_PASSWORD_REQUIRED","ChallengeParameters":{"USER_ID_FOR_SRP":"xxx...","requiredAttributes":"[]","userAttributes":"{\"email\":\"...\"}"},"Session":"YYY..."}
aws cognito-idp admin-respond-to-auth-challenge \
    --user-pool-id {user_pool_id} \
    --client-id {client_id} \
    --session "YYY..." \ # 上記reqで返ってきた`Session`の値を指定
    --challenge-name NEW_PASSWORD_REQUIRED \
    --challenge-responses "USERNAME={user_name},NEW_PASSWORD={new_password},SECRET_HASH={secret_hash}"
---
{
  "ChallengeParameters": {},
  "AuthenticationResult": {
    "AccessToken": 
    ...
}
このスクラップは2024/12/29にクローズされました