ある 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 KEY
と SECRET ACCESS KEY
を設定しているだけである。なお、前セクションで設定した $HOME/.aws/config
の source_profile
とプロファイル名を一致させる必要がある。前セクションでの設定は、このプロファイルが他の AWS アカウントの Role を Assume するという設定だからである。
動作確認
任意の aws コマンドに --profile ...
としてロールをスイッチした状態でコマンドを発行できる。今回の設定では $HOME/.aws/config
に another-project
という名前のプロファイルを作ったので、次のような感じになる。
aws --profile another-project autoscaling describe-auto-scaling-groups --auto-scaling-group-names
{
"AutoScalingGroups": [
{
...