AWSのマネージメントコンソールでは、IAMの新規ユーザの追加は一度に5ユーザずつしか登録することができず、40名(1クラスの学生数)やそれ以上のユーザを追加していくのは非常にめんどくさく退屈な作業となります。
AWS SDK for Rubyを使って新規ユーザ登録を自動化し、楽ができると素敵です。
初めてのAWS SDK for Ruby
AWS SDK for Rubyを初めて使う人(私も含む)は、下記の公式のドキュメントを参照して、AWS SDK for Rubyのインストール(下記のbundle installでインストールされますね)、アクセスキーの設定(~/.aws/credentials)を行いましょう。
では、はじめましょう
とりあえず、適当なディレクトリを作成しそのディレクトリ下にこれから示す3つのファイル user_password_group.csv, Gemfile, addusers.rbを作成しましょう。
user_password_group.csv
新規に追加したいIAMユーザのユーザ名とパスワード、ユーザを追加するIAMグループを記述した、CSVファイル user_password_group.csv
を準備します。
test_user_01,kG3MnDlx,testGroup
test_user_02,pGw4B40Z,testGroup
test_user_03,QQa57hFd,testGroup
各ユーザを追加するIAMグループ(ここではtestGroup)はあらかじめ作成しておきましょう。
Gemfile
Gemfileは https://github.com/awslabs/aws-ruby-sample/blob/master/Gemfile を参考にしました。
source 'https://rubygems.org'
gem 'aws-sdk', '~> 2.0.22'
bundle install して必要なGemをインストールしておきましょう。ここでAWS SDK for Rubyもインストールされるはずです。
$ bundle install
...
Bundle Complete! ...
addusers.rb
本体の addusers.rb はAPIドキュメントAws::IAM::User を矯めつ眇めついろいろと試行錯誤して次のようになりました。
require 'rubygems'
require 'bundler/setup'
require 'aws-sdk'
require 'csv'
users = []
CSV.foreach("user_password_group.csv") do |row|
users.push({user_name: row[0], password: row[1], group_name: row[2]})
end
users.each do |user|
iam_user = Aws::IAM::User.new(user[:user_name])
iam_user.create
iam_user.create_login_profile({password: user[:password]})
iam_user.add_group({group_name: user[:group_name]})
end
では、実行へ
早速実行しましょう。
$ ruby addusers.rb
/home/...../aws-sdk-core/plugins/regional_endpoint.rb:30:in `after_initialize': missing region; use :region option or export region name to ENV['AWS_REGION'](Aws::Errors::MissingRegionError)
...
むぅ、怒られてしまいました。region optionの設定が必要だったみたいです。ここは、環境変数 AWS_REGIONを設定することで乗り切りましょう。
$ export AWS_REGION='ap-northeast-1'
もう一回実行。
$ ruby addusers.rb
$
今度は無事実行できたようです。
実行結果
AWSマネージメントコンソールのIAM > GroupsのページでtestGroupsを選択すると、確かにuser_password_group.csvで記述した、3ユーザが登録されているのがわかります。
最後に
なにぶん初めて AWS SDK (for Ruby)を触ったので、ここでやった方法が適切なのかはよくわかりません。もっと簡単な方法があるよ、ここはちょっとまずいのでは、などありましたらコメントでご教授いただけると幸いです。
ソースコードはこちら。