ある AWS アカウントから別な AWS アカウントに対して操作をするとき、AWS Console では Switch Role して操作できる。

これと同等の操作を AWS CLI で行う設定を紹介する。設定は $HOME/.aws/config$HOME/.aws/credentials に記述する。

$HOME/.aws/config

$HOME/.aws/config に次のような内容を追加する。

[profile another-project]
role_arn = arn:aws:iam::012345678901:role/MyRoleToAssume
source_profile = my-terraform

012345678901 は操作対象の AWS アカウントで、MyRoleToAssume は操作対象の AWS アカウントから引き受ける IAM ロールである。arn:aws:iam::012345678901:role/MyRoleToAssume は既に操作対象の AWS アカウント内のロールとして存在していると仮定している。

source_profile は AWS CLI のプロファイルである。ここでは my-terraform というプロファイルを使うと仮定する。なお my-terraform というプロファイル名から想像できるように、Terraform 専用の AWS アカウントから他の AWS アカウントの環境をプロビジョンするときなどに、この記事の内容が役に立つ。

$HOME/.aws/credentials

$HOME/.aws/credentials には次のような内容を追加する。

[my-terraform]
aws_access_key_id = AKIAXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

特に変わったことはない。単に my-terraform が使う ACCESS KEYSECRET ACCESS KEY を設定しているだけである。なお、前セクションで設定した $HOME/.aws/configsource_profile とプロファイル名を一致させる必要がある。前セクションでの設定は、このプロファイルが他の AWS アカウントの Role を Assume するという設定だからである。

動作確認

任意の aws コマンドに --profile ... としてロールをスイッチした状態でコマンドを発行できる。今回の設定では $HOME/.aws/configanother-project という名前のプロファイルを作ったので、次のような感じになる。

aws --profile another-project autoscaling describe-auto-scaling-groups --auto-scaling-group-names
{
    "AutoScalingGroups": [
        {
...