AWS CLIでCross-Account Accessを使う
これまでCross-Account Accessを使いたい場合にはSDKを使ったりしていたが、ちょっとしたコマンドを実行したいだけなのにSDKを使うのは面倒だなーという事で、AWS CLIだけでCross-Account Accessを使う方法を考えてみた。
用意するもの
- AWS CLI
- AssumeするアカウントのIAM User (ポリシーはSTSのAssumeRole権限のみ必要です)
- AssumeされるアカウントのIAM Role arn:aws:iam::222222222222:role/cross (上記アカウントをTrustしている必要があります)
詳しくはこちらを参照の事。
AssumeRoleのテストをしてみる
AssumeするアカウントのIAM UserのCredentialを設定した状態で、下記のようなコマンドを実行してみます。
$ aws sts assume-role --role-arn arn:aws:iam::222222222222:role/cross --role-session-name cross --output json { "AssumedRoleUser": { "AssumedRoleId": "AROAxxxxxxxxxxxxxxxx:cross", "Arn": "arn:aws:sts::222222222222:assumed-role/cross/cross" }, "Credentials": { "SecretAccessKey": "****************************************", "SessionToken": "****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************", "Expiration": "2013-10-03T19:16:14Z", "AccessKeyId": "********************" } }
上記のように、AccessKeyId、SecretAccessKey、SessionTokenが得られたらOKです。エラーが出る場合には、Policy設定などを見直しましょう。
実際にAPIコマンドを発行してみる
$ export AWS_ACCESS_KEY_ID=******************** $ export AWS_SECRET_ACCESS_KEY=**************************************** $ export AWS_SECURITY_TOKEN=**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** $ export AWS_DEFAULT_REGION=ap-northeast-1 $ aws ec2 describe-instances { "Reservations": [ { :
APIコールがちゃんと出来ました。
全リージョンのインスタンスタイプ別台数を調べる
こちらのようなスクリプトで実行します https://gist.github.com/j3tm0t0/6814653 (要jq)
$ ./cross-count-instances.sh 222222222222 accountid: 222222222222 -- eu-west-1 -- sa-east-1 -- us-east-1 -- ap-northeast-1 1 "t1.micro" -- us-west-2 -- us-west-1 -- ap-southeast-1 -- ap-southeast-2||<
まとめ
jsonにでも吐いてweb上で見やすく整形してみたら素敵かもしれない。