CloudFormationには複数のアカウントおよびリージョンのスタックを 1 度のオペレーションで、作成、更新、削除できるようにする、StackSetsという機能があります。
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html
AWS OrganizationsでOUをきちんと組んでいる場合は、
"AWS Organizations で信頼されたアクセス"を利用できますが、
OUでなくアカウント毎にIAMロールを設定することでStackSetsを利用できる
セルフマネージド型のアクセスを試してみました。
以下マネジメントコンソールで実行したときのメモです。(基本はドキュメント通りで動きます)
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/stacksets-getting-started.html
①管理者アカウント(CFnスタックセットの実行元)で
AWSCloudFormationStackSetAdministrationRole
という名前のIAMロールを公式ドキュメント記載のテンプレートで作成する。
②ターゲットアカウント(CFnスタックセットの実行先)側で
AWSCloudFormationStackSetExecutionRole
という名前のIAMロールを公式ドキュメント記載のテンプレートで作成する。
※テンプレート作成時に”AdministratorAccountId”というパラメータの入力が求められるので
管理者アカウントのIDを入力する
①と②で作られるロールはAdministratorAccess権限なので権限を絞りたい場合は、
IAMポリシーを作成して権限を編集する。
※管理者アカウント内のIAMユーザ毎に特定のターゲットアカウント群にアクセスさせたい場合は
上記の名前ではないロールで作成が必要
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html
の”ターゲットアカウントへのアクセスを制御するアクセス許可を設定する”以下を参照
③AWSマネジメントコンソールから、
”CloudFormation”を選択し、StackSetsを選択する。
ここでCloudforomationのテンプレート(Stack)を指定します。
④StackSetオプションの設定では、
アクセス許可でセルフサービスのアクセス許可を選択し、
①で作成した、AWSCloudFormationStackSetAdministrationRoleを
IAM管理ロールに指定します。
②で作成した、AWSCloudFormationStackSetExecutionRoleを
IAM実行ロール名に指定します。
⑤デプロイオプションの設定では
デプロイ先に
スタックをアカウントにデプロイ
を選択しアカウント番号にターゲットアカウントを指定します。
レビューで設定内容を確認後、送信を選択します。
上記でデプロイが完了します。