tail my trail

作るのも使うのも、結局は、人なのだ

AWS CLI のprofileを簡単に切り替える (SwitchRole編)

これまた意外と知らない人がちらほらいたので、書き留めておく。

tl;dr

$HOME/.aws/config で Switch Role な 設定をいれるだけ。

背景

Switch Role という機能を使うと、IAM User から特定のRole に切り替えることができる。

f:id:uorat:20170207160055p:plain

Management Console使ってると別アカウントの切り替えのためにログインし直すのは面倒だし、 アプリケーションのために AccessToken を発行しまくるのも管理上不便でリスクも増える(Token 漏洩すると悲惨)ので、自分はもっぱら IAM User は極力作成せず IAM Role に寄せるようにしている。

また、ログイン用の IAM User は ReadOnly にしておいて、操作が必要なときだけ パワフルな権限を有する Role に切り替えるなどしておくなどしておくと保険にもなる。

見た目もわかりやすいし。

f:id:uorat:20170207160253p:plain

で、今回のお題は、このSwitch Role を AWS CLI でどう扱うか。

やりかた

結構前に、AWS CLI の profile 切替方法を書いたが、

uorat.hatenablog.com

この応用でいける。

$HOME/.aws/config に、以下のように Switch 元の Profile と Switch 先のIAM Role の ARN を書いてあげれば良い。

[profile uorat-account-parent]
region = ap-northeast-1

[profile uorat-account-child-a]
role_arn = arn:aws:iam::123456789012:role/switchRoleReadOnly
source_profile = uorat-account-parent
region = ap-northeast-1

あとは、いつもどおり、aws コマンドを実行する時に –profile を指定すれば良いだけ。 source_profile で指定した IAM User で Switch Role され、Switch 先の Role での作業が可能となる。シンプル。

$ aws ec2 describe-vpcs --profile=uorat-account-parent
{
    "Vpcs": [
        {
            "VpcId": "vpc-xxxxxxxx",
            "InstanceTenancy": "default",
            "State": "available",
            "DhcpOptionsId": "dopt-xxxxxxxx",
            "CidrBlock": "172.31.0.0/16",
            "IsDefault": true
        }
    ]
}

$ aws ec2 describe-vpcs --profile=uorat-account-child-a
{
    "Vpcs": [
        {
            "VpcId": "vpc-yyyyyyyy",
            "InstanceTenancy": "default",
            "Tags": [
                {
                    "Value": "uorat-child-a",
                    "Key": "Name"
                }
            ],
            "State": "available",
            "DhcpOptionsId": "dopt-yyyyyyyy",
            "CidrBlock": "172.17.0.0/16",
            "IsDefault": false
        },
        {
            "VpcId": "vpc-zzzzzzzz",
            "InstanceTenancy": "default",
            "State": "available",
            "DhcpOptionsId": "dopt-yyyyyyyy",
            "CidrBlock": "172.31.0.0/16",
            "IsDefault": true
        }
    ]
}

この方法は公式ドキュメントにも書いてあるが、意外と知らない人が多かったので書き留めておきました。

参考: IAM ロールの切り替え(AWS Command Line Interface) - AWS Identity and Access Management