🔀
AWS CLIでクロスアカウントのスイッチロールを行う
モチベーション
私の使っているAWS環境では諸事情によりOrganizationsが使用できないので、AWSアカウント管理は以下のように行っています。
-
アイデンティティアカウントにのみIAM Userを作成する
- アイデンティティアカウントには原則IAM関係のリソースしか作成しない
- アイデンティティアカウント以外のAWSアカウント(子アカウントと呼んでいます)にはIAM Userは作成しない
- 子アカウントにはIAM Roleを作成し、アイデンティティアカウントからスイッチロールして開発を行う
子アカウントで作業を行うためには毎回スイッチロールが必要になるのです。これがけっこう手間で面倒だったので対応を調べました。
スイッチロールをシームレスに行う
AWS CLIでは --profile
オプションを使用することで、プロファイルを指定してコマンドを実行することができます。
これは .aws/credential
に複数のアクセスキーを記載しているときに、どのアクセスキーを使用するかを選ぶためだけにあると思っていました。
以下のように、 .aws/config
でうまく設定することで、 --profile
オプションを指定するだけで、スイッチロールを意識することなく子アカウントでの作業ができることがわかりました。
.aws/credentials
にアイデンティティアカウントの認証情報を記述する
①~/.aws/credential
[identity-account]
aws_access_key_id = <your access key id>
aws_secret_access_key = <your secret access key>
.aws/config
にスイッチロールする際の設定を記述する
②アイデンティティアカウントにMFA設定がある場合は、mfa_serial
にMFAデバイスのARNを記載してください。
~/.aws/config
[profile identity-account] # アイデンティティアカウントの設定
region = ap-northeast-1
output = json
[profile dev-account] # プロファイル名は任意
mfa_serial = arn:aws:iam::123456789:mfa/your-mfa-device # 自分のMFAデバイスのARN
role_arn = arn:aws:iam::987654321:role/dev-account-role # スイッチしたい子アカウントのRole
source_profile = identity-account # ①で設定したアイデンティティアカウントのプロファイル名
region = ap-northeast-1
output = json
これで設定は完了です。
③プロファイルを指定してCLIを実行する
もうスイッチロールを意識せずとも、プロファイルを指定するだけで子アカウントのRoleでCLIを実行できます。
bash
$ aws sts get-caller-identity --profile dev-account
Enter MFA code for arn:aws:iam::123456789:mfa/your-mfa-device: 123456
{
"UserId": "ARXXXXXXXXXXXXXXXX:botocore-session-1111111111",
"Account": "987654321",
"Arn": "arn:aws:sts::987654321:assumed-role/dev-account-role/botocore-session-1111111111"
}
初回はMFAコードを求められますが、2回目以降はstsの有効期限が切れるまでMFAコードは聞かれなくなります。
Discussion