AWSのUsing Temporary Security Credentialsがうまくいかないメモ。
AWS Security Credentialsとは
AWSに関する様々な操作を行う時に必要な認証情報。Security Credentials(以下、SC)があれば、EC2インスタンス内からコマンド経由でインスタンスを作ったりすることが出来る。
一番セキュアにSCを取得する方法は、IAM Roleを付与したインスタンスからSCを取得する方法。のはずが、何故かうまくいかない…。いつか解決するかもなので、とりあえず途中経過だけメモしておく。
IAM Roleを作成する
IAM Roleを作成することで、インスタンスメタデータからSCを取得することができるようになる。さらにこのSCは自動的に循環させられるので、永久に使えるSCよりは安全なものになる。
IAMのRoleから、
Create New Role
Role Type
AWS Service Roles > Amazon EC2
Set Permissions
Select Policy Template > Power User Access
という項目を順次選ぶだけでIAM Roleを作成できる。Policy Documentはいじる必要がない。
IAM Roleを作ったら、そのRoleを適用したEC2インスタンスを作成しておいてください。EC2インスタンス作成ウイザードにRoleの選択画面があるので、そこで今回作成したRoleを選んでおいてください。
Security Credentialsをインスタンスメタデータから取得する
新規に作成したRoleを正しくEC2インスタンスに割り当てていれば、後はGETコマンドで特定のIPアドレスにアクセスするだけで、SCが取得できる。
GET http://169.254.169.254/latest/meta-data/iam/security-credentials/[ROLE_NAME] # 結果 { "Code" : "Success", "LastUpdated" : "2013-12-30T12:22:37Z", "Type" : "AWS-HMAC", "AccessKeyId" : "ACCESS_KEY_ID", "SecretAccessKey" : "SECRET_ACCESS_KEY", "Token" : "TOKEN", "Expiration" : "2013-12-30T18:46:17Z" }
jqコマンド(sudo yum install -y jqでインストール)があれば、返ってきたJSONから特定の部分のみを簡単に抜き出すことができる。
GET http://169.254.169.254/latest/meta-data/iam/security-credentials/[ROLE_NAME] | jq . GET http://169.254.169.254/latest/meta-data/iam/security-credentials/[ROLE_NAME] | jq '.SecretAccessKey,.AccessKeyId'
コマンドでEC2インスタンスを操作する
EC2インスタンスをコマンドから操作するためには、下記の2つの環境変数をセットしておく必要がある。IAM Roleを正しく設定できていれば、下記のコマンドを実行するだけで大丈夫。
# Security Credentialsのセット export AWS_ACCESS_KEY="`GET http://169.254.169.254/latest/meta-data/iam/security-credentials/[ROLE_NAME] | jq -r '.AccessKeyId'`" export AWS_SECRET_KEY="`GET http://169.254.169.254/latest/meta-data/iam/security-credentials/[ROLE_NAME] | jq -r '.SecretAccessKey'`" # Security Credentialsの確認 echo $AWS_ACCESS_KEY && echo $AWS_SECRET_KEY # インスタンス一覧の表示(東京リージョン) ec2-describe-instances --region ap-northeast-1
本当はこれでインスタンスの情報が表示されるはずなんだけど、下記のようなエラーが表示されて失敗する…。
Client.AuthFailure: AWS was not able to validate the provided access credentials
参考リンク
Setting Up the Amazon EC2 Command Line Interface Tools on Linux/UNIX