AWS CLIを使ったIAMユーザ一括登録
AWS CLIを利用したbashスクリプトでIAMユーザを一括登録する方法をご紹介します。
概要
AWSの操作をするためにはAWSへとアクセスする権限が必要です。AWSへとアクセスする人に対して権限を付与するためにはIAM Userを利用するのが一般的な方法です。
IAM Userを作成するにはManagement Consoleから操作することもできますが、その数が5人とか10人とかになってくるとなかなか面倒大変な作業になります。
そこでbashスクリプトを書いて登録を出来る限り登録を自動化してみました。動作確認は私の手元のMac OS X 10.11で行っています。
処理概要
- ユーザ名を列挙したテキストファイルを保存しておく
- 作成したIAM Userは、ひとつのIAM Groupに所属させる
- コマンドラインオプションで、アクセスキーとManagement Consoleへのパスワードを発行するかどうかを切り替える
- 作成したクレデンシャルはCSVとして保存する
実装
users.txt
という名前で、IAMユーザ名を書いたファイルを保存しておきましょう。以下のような形式になります。
~ $ cat users.txt foo@example.com bar@example.com
以下が本体のシェルスクリプトです。
#!/bin/bash set -e usage_exit() { echo "Usage: $0 [-a] [-p]" 1>&2 echo "-a: create API key for each user." 1>&2 echo "-p: create Login password for each user." 1>&2 exit 1 } #ユーザ名を記載したファイル名 file=users.txt # 所属させるグループを指定する group=admin-group #パスワード生成に使用するコマンド password_command="pwgen -N 1 -c -n -s -y 8" while getopts aph OPT do case $OPT in a) CREATE_ACCESSKEY=true ;; p) CREATE_PASSWORD=true ;; h) usage_exit ;; \?) usage_exit ;; esac done cat $file | while read username; do aws iam create-user --user-name ${username} aws iam wait user-exists --user-name ${username} aws iam add-user-to-group --group-name ${group} --user-name ${username} if [ "${CREATE_ACCESSKEY}" = "true" ]; then result=$(aws iam create-access-key --user-name ${username}) accesskey=$(echo ${result} | jq -r '.AccessKey.AccessKeyId') secretkey=$(echo ${result} | jq -r '.AccessKey.SecretAccessKey') echo "${username},${accesskey},${secretkey}" > ${username}_accesskey.csv fi if [ "${CREATE_PASSWORD}" = "true" ]; then account_id=$(aws sts get-caller-identity | jq -r '.Account') signin_url="https://${account_id}.signin.aws.amazon.com/console" password=$(eval ${password_command}) aws iam create-login-profile --user-name $username --password ${password} --password-reset-required echo "${username},${password},${signin_url}" > ${username}_password.csv fi done
処理のポイントはいくつかあるのですが、まずaws iam wait user-exists
を利用している点です。AWSのAPIを利用していると、前の処理で作成したはずのリソースが存在しておらずエラーになることがまれにあります。EC2インスタンスを作成した直後にタグ付けしようとした時などに発生します。AWS CLIに存在するwait
を利用することによって、作業対象のリソース、今回はIAMユーザが確実に作成されたことを確認してから後続処理に移るようにしています。
次に、パスワード生成部分ではパスワードコマンドを指定するようにしています。これは、このスクリプトを動作させるOSによってコマンドが変わってくるからです。筆者はMac OS Xで検証しましたのでpwgen
を利用しましたが、一部のLinuxディストリビューションではpwgen
ではなくmkpasswd
が利用できるので、動作させる環境に応じて書き換えてご利用下さい。また、AWSアカウントのパスワードポリシーに応じてオプションは自由に設定して下さい。
動作確認
最後に、このスクリプトの動作確認をしておきましょう。
$ ./register.sh -a -p { "User": { "UserName": "foo@example.com", "Path": "/", "CreateDate": "2016-07-07T00:36:15.405Z", "UserId": "AIDAJBK57ZSKGLXLWSNFW", "Arn": "arn:aws:iam::0123456789012:user/foo@example.com" } } { "User": { "UserName": "bar@example.com", "Path": "/", "CreateDate": "2016-07-07T00:36:23.968Z", "UserId": "AIDAIP24IMZEWXG22T7XC", "Arn": "arn:aws:iam::0123456789012:user/bar@example.com" } } $ /bin/ls *.csv bar@example.com_accesskey.csv bar@example.com_password.csv foo@example.com_accesskey.csv foo@example.com_password.csv
アクセスキーとパスワードが発行されていました。
まとめ
AWS CLIをつかって一括でIAMユーザ登録する方法をご紹介しました。実際のプロジェクトでは、様々な制約によりこのスクリプトをそのまま利用することはできないかもしれませんが、ご紹介した要素の中に活用できる部分があると思いますので、ぜひご活用下さい。