[IAM]スクリプトでアクセスキー・ローテーションする
はじめに
こんばんは、武川です。先日弊社ブログにAWSアクセスキー・ローテーションのススメという記事がありました。こちらは手動にてコンソールを操作する手順となっていますが、折角なのでスクリプトで実行できるようにしてみました。
スクリプトとそのの実行方法について簡単に説明します。
スクリプトについて
rubyで書いてみました。
#!/usr/bin/env ruby require 'rubygems' require 'aws-sdk' AWS.config({ :access_key_id => 'Please input Your Access Key', :secret_access_key => 'Please input Your secret Key', :region => 'ap-northeast-1', }) iam = AWS::IAM.new() if iam.access_keys.count > 1 then oldkey = iam.access_keys.min { |a,b| a.create_date <=> b.create_date } oldkey.delete end newkey = iam.access_keys.create p newkey.credentials
行なっていることはとてもシンプルです、
- アクセスキーの一覧を取得する
- アクセスキーが二つ以上あれば、一番古いキーを選択する
- 選択したアクセスキーを削除する
- 新しいアクセスキーを作成して、表示する
シェルスクリプトで書いたほうが実行できる場所が多いとおもいましたが、条件分岐の書き方がよくわからなかったのでrubyにしました。
AWS.config
の行は認証情報となりますのでアクセスキー、シークレットアクセスキーを設定してください、もしくはIAMRoleを設定したEC2上で実行してもよいと思います。
実行方法
AWS SDK for Rubyがインストールされていない場合、インストールします。Amazon Linuxであれば以下のコマンドにてインストール可能です。
sudo yum install -y gcc make libxml2 libxml2-devel libxslt libxslt-devel rubygems ruby-devel patch sudo gem install nokogiri -- --with-xml2-lib=/usr/local/lib --with-xml2-include=/usr/local/include/libxml2 --with-xslt-lib=/usr/local/lib --with-xslt-include=/usr/local/include sudo gem install aws-sdk --no-ri --no-rdoc
スクリプトを"key_rotation.rb"という名前で保存し、実行します。
[ec2-user@ip-XXX-XXX-XXX ~]$ ruby key_rotation.rb {:access_key_id=>"ここにAccess Key", :secret_access_key=>"ここにSecret Access Key"}
古いACCESS_KEYが削除され、新しいACCESS_KEYとSECRET_ACCESS_KEYが出力されますので、適切な場所に保管します。
以下注意が必要な点となります
- アクセスキーは最大2つまでしかもてません。何度も実行してはいけません。2回実行するとキーが完全に入れかわります。
- IAMの操作をする権限が必要です。PowerUser権限だとIAMは操作できませんので注意が必要です
まとめ
AWS SDK for Ruby スクリプトでIAMのアクセスキーをローテーションするスクリプトを作成しました。