AWSControlTowerExecution ロールへのスイッチ方法
コーヒーが好きな emi です。最近はカフェインを控えています。
2 年ほど前から、Control Tower 環境で IAM Identity Center(以降、IdC と省略)をオプトアウトできるようになっています。
IdC のオプトアウトはユースケースにマッチしていれば便利である一方、Control Tower 有効化後のログイン手段を別途考えなければなりません。
今回は別のログイン手段を運用し始める前の一時的な代替手段として、メンバーアカウント側の AWSControlTowerExecution ロールにスイッチする方法を記載します。
AWSControlTowerExecution ロールとは?
- 役割
- Control Tower が登録されたアカウント(メンバーアカウント)を管理・操作するために使用するロール
- Control Tower 有効化後、各メンバーアカウントに自動で作成されているもの
- 管理アカウントからメンバーアカウントへのクロスアカウントアクセスを提供
- Control Tower が登録されたアカウント(メンバーアカウント)を管理・操作するために使用するロール
- 主な用途
- ガードレール(統制ルール)の適用
- アカウントのベースライン設定
- コンプライアンスチェックの実行
- AWS Config、CloudTrail などのサービス設定
- 重要な注意点
- このロールは削除や変更をしてはいけない
- 削除するとControl Towerの機能が正常に動作しなくなる
- アカウントの登録時に自動的に作成される
- 管理者権限(AdministratorAccess)相当の強力な権限を持つ
- このロールは削除や変更をしてはいけない
- セキュリティ
- 信頼関係により、管理アカウントからのみアクセス可能
- Control Tower サービスによってのみ使用されることが想定されている
ドキュメントを見ると、AWSControlTowerExecution は AWS Control Tower による自動管理のためのロールで、人間のユーザーによる日常的なアクセスを想定した設計ではないことが読み取れます。
今回は Control Tower で IAM Identity Center をオプトアウトした環境で一時的にメンバーアカウントの操作を行いたかったので、一時的に AWSControlTowerExecution を使いたい意図です。
0. 検証構成イメージ
まず、IAM Ientity Center がオプトアウトされた Control Tower 環境を用意します。
今回は Audit アカウントの AWSControlTowerExecution ロールに、Control Tower 管理アカウントの IAM ユーザーでスイッチしてみます。
下図の左が Control Tower 管理アカウントです。Control Tower 管理アカウントに IAM ユーザーを作成しておきます。

IAM ユーザー「SwitchRoleTestUser」に、AWSControlTowerExecutionSwitchPolicy という名前の、AWSControlTowerExecution ロールを引き受けるための IAM ポリシーを作成して付与します。詳細は後述します。
あらかじめ Control Tower 管理アカウントに「CTTestUser」という Admin 権限の IAM ユーザーを作成しておきました。このユーザーで、スイッチロール検証用の IAM ユーザー「SwitchRoleTestUser」を作成します。

1. スイッチロール検証用の IAM ユーザー作成
Control Tower 管理アカウントで、CTTestUser にログインしている状態から始めます。赤枠で囲んでいるのは Control Tower 管理アカウントを表しています。
スイッチロール検証用の IAM ユーザー「SwitchRoleTestUser」を権限未付与で作成します。マネジメントコンソールへのログインのみ許可しました。


作成した IAM ユーザー「SwitchRoleTestUser」を確認すると、「IAMUserChangePassword」がついてますね。これは「自分のパスワードを変更できる」「パスワード要件を確認できる」という権限のポリシーなのですが、これはユーザーが明示的につけなくても自動で付与されるようです。

試しに IAM ユーザー「SwitchRoleTestUser」で Control Tower 管理アカウントにログインしてみました。他の権限は付与していないので、マネジメントコンソール上ではリソースなどは確認できない状態です。

この状態で IAM ユーザー「SwitchRoleTestUser」で Audit アカウントにスイッチしようとすると、まだ権限不足で失敗します。

2. AWSControlTowerExecution ロールを引き受けるための IAM ポリシーを作成して付与
IAM ユーザー「SwitchRoleTestUser」に、AWSControlTowerExecution ロールを引き受けるための IAM ポリシーを作成して付与します。
今回は以下のように、AWSControlTowerExecutionSwitchPolicy という名前で AWS カスタマー管理ポリシーを作成しました。

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AWSControlTowerExecutionSwitch",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": [
"arn:aws:iam::<Audit アカウントの ID>:role/AWSControlTowerExecution",
"arn:aws:iam::<LogArchive アカウントの ID>:role/AWSControlTowerExecution"
]
}
]
}
"Resource" に Audit アカウントと LogArchive アカウントの AWSControlTowerExecution ロールの ARN を含んでいます。こうすることで Audit アカウントと LogArchive アカウント両方にスイッチできます。
作成した AWSControlTowerExecutionSwitchPolicy を、IAM ユーザー「SwitchRoleTestUser」に付与します。

これで準備完了です。
3. Audit アカウントのAWSControlTowerExecution ロールにスイッチする
CTTestUser をサインアウトして、SwitchRoleTestUser でサインインし、画面右上のアカウント名をクリックして「ロールの切り替え」から Audit アカウントの AWSControlTowerExecution ロールにスイッチします。

Audit アカウントの AWSControlTowerExecution ロールにスイッチできました!

同様に、LogArchive アカウントの AWSControlTowerExecution ロールにもスイッチできるはずです。
余談:CTTestUser でも AWSControlTowerExecution ロールにスイッチできる
今回の検証では AWSControlTowerExecutionSwitchPolicy を作成して付与しましたが、最初から Admin 権限を持っている(= AWSControlTowerExecution ロールを引き受けるための IAM 権限を有している)CTTestUser でもスイッチできます。
おわりに
本記事への質問やご要望については画面下部のお問い合わせ「DevelopersIOへのご意見」からご連絡ください。記事に関してお問い合わせいただけます。
参考






