[IAM]スクリプトでアクセスキー・ローテーションする

2014.07.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんばんは、武川です。先日弊社ブログに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のアクセスキーをローテーションするスクリプトを作成しました。