LoginSignup
3
6

More than 5 years have passed since last update.

AWS Cognito 対話型スクリプトでユーザー作成してみた

Posted at

はじめに

Cognitoを用いてユーザー認証基盤作成しています。

ユースケースではサインアップをサーバー側で行う仕様なので自前でユーザー作成する必要がありました。

はじめは

sh test.sh name email company-id

といった形で引数でユーザー名等の必要な情報を渡していたのですが、

  • 引数の順番を忘れる
  • 引数を間違って入力した時に作成やめたい

などを感じたのでシェルスクリプトを用いて対話側でユーザー作成するプログラムを書くことにしました。

参考にしたサイトはこちらのQiita記事

コード

function AdminCreateUser() {

  echo "----------------------------"
  echo "ユーザー名を入力してください"
  read username
  echo "メールアドレスを入力してください"
  read email
  echo "company_idを入力してください"
  read company_id


  echo "  下記構成でユーザーを作成します。実行する場合は yes、実行をキャンセルする場合は no と入力して下さい."
  echo "username:\t${username}"
  echo "email:\t${email}"
  echo "company_id:\t${company_id}"

  read input

  if [ -z $input ] ; then

    echo "  yes または no を入力して下さい."
    AdminCreateUser

  elif [ $input = 'yes' ] || [ $input = 'YES' ] || [ $input = 'y' ] ; then

    echo "  ユーザーを作成します"
    aws cognito-idp admin-create-user --user-pool-id ap-northeast-1_hogehoge --username $username --message-action SUPPRESS --user-attributes Name=email,Value=$email Name=email_verified,Value=True Name=custom:company_id,Value=$company_id --desired-delivery-mediums  EMAIL --temporary-password Easy1pass
    #セッションの取得
    session=$(aws cognito-idp admin-initiate-auth --user-pool-id ap-northeast-1_hogehoge --client-id 6hogehoge --auth-flow ADMIN_NO_SRP_AUTH --auth-parameters USERNAME=$username,PASSWORD=Easy1pass | jq -r ".Session")
    # パスワードの作成
    password=$(pwgen -c 8 1)
    aws cognito-idp admin-respond-to-auth-challenge   --user-pool-id ap-northeast-1_hogehoge   --client-id 6hogehoge --challenge-name NEW_PASSWORD_REQUIRED --challenge-responses NEW_PASSWORD=$password,USERNAME=$username --session $session

    echo "  ユーザーを作成しました"
    echo "  パスワードは ${password} です"

  elif [ $input = 'no' ] || [ $input = 'NO' ] || [ $input = 'n' ] ; then

    echo "  ユーザーの作成を中止します"
    exit 1

  else

    echo "  yes または no を入力して下さい."
    AdminCreateUser

  fi

}

# シェルスクリプトの実行を継続するか確認します。
AdminCreateUser

内容こちらになります。

このスクリプトでは
1. ユーザーの作成
2. セッション情報の取得
3. 仮パスワードの更新

を行なっています。
CognitoはCLI等でユーザーを作成した場合はパスワードを再設定する必要があります。
そこを認証済みにするためにパスワードを再設定させるところまで実行させています。

注意

Macで使用する場合

brew install jq
brew install pwgen

でライブラリインストールする必要ありです

実行結果

----------------------------
ユーザー名を入力してください
test
メールアドレスを入力してください
test@gmail.com
company_idを入力してください
t

  下記構成でユーザーを作成します。実行する場合は yes、実行をキャンセルする場合は no と入力して下さい.
username:   test
email:  test@gmail.com
company_id: t

~~~作成ログ省略~~~
ユーザーを作成しました
パスワードは dhXe3mer です

こんな感じに出力されます。
これなら必要事項順番に記入するだけだし、間違えてもno選択すれば取り消せるので便利ですね

終わりに

シェルスクリプトあまり書いたことなかったのですが、結構色々なことできるんですね

ただもっと複雑になると何らかの言語使った方がいいのかな、、と思いました

AWS CLIは入力楽になりますが記述方で詰まってしまうことが多いので勉強して使いこなせるようになりたいですね、それでは!!!

3
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6