AWS CloudFormation StackSetsで挑む「全アカウント一括統治」の深淵
こんにちは。クラウドインフラの世界へようこそ。
あなたがもし「アカウントが増えるたびに、手作業で同じ設定を繰り返している」としたら、それは今すぐやめましょう。インフラの管理において、手作業は「バグの温床」であり、スケールする組織の敵です。
今日は、AWS Organizations環境において、StackSets(スタックセット) を使い、一度のデプロイで全アカウント・全リージョンを意のままに操るための「実践アーキテクチャ」を伝授します。これをマスターすれば、あなたはインフラを「個別に作る」のではなく、「全体を定義する」エンジニアへと進化できます。
—
1. なぜ StackSets なのか?(本質を理解する)
CloudFormationは、1つのスタック(リソースの集合体)を1つのアカウント・1つのリージョンに適用するツールです。しかし、現代のAWS活用ではマルチアカウント運用が標準。
StackSetsの役割は「司令塔」です。
管理アカウントで定義したテンプレートを、指定したターゲットアカウント(OU単位でも可)へ一斉に展開し、同期を保ちます。これができるようになると、セキュリティ設定(GuardDutyの有効化など)や共通IAMロールの配布が、数クリックで完了するようになります。
—
2. 核心:アクセス権限(ExecutionRole)の罠を突破する
StackSetsを導入する際、初心者が100%つまずくのが「権限の不整合」です。ここを突破しないと、デプロイは失敗の連続になります。
必要な2つのロール
1. AWSCloudFormationStackSetAdministrationRole: 管理アカウント(親)に作成。StackSetsがターゲットへデプロイするのを許可する。
2. AWSCloudFormationStackSetExecutionRole: 各ターゲットアカウント(子)に作成。管理アカウントからのデプロイ命令を受け取り、リソースを作成する権限を持つ。
【重要】: ターゲット側の `ExecutionRole` は、信頼関係(Trust Policy)で管理アカウントの `AdministrationRole` を明示的に許可しておく必要があります。これが欠けると、永遠に「Access Denied」の沼にハマります。
—
3. 実践:HelloWorld的な「共通セキュリティグループ」の展開
まずは、全アカウントの指定リージョンに、共通の「管理用セキュリティグループ」を作るテンプレートで動作確認しましょう。
手順1:テンプレートの準備 (template.yaml)
AWSTemplateFormatVersion: ‘2010-09-09’
Description: 全アカウント共通の管理用セキュリティグループ
Resources:
CommonSg:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: “Management Access SG”
GroupName: “Common-Admin-SG”
# VPC IDは各アカウントで固定値にできないため、パラメータで受け取るのが定石
VpcId: !Ref TargetVpcId
Parameters:
TargetVpcId:
Type: AWS::EC2::VPC::Id
手順2:StackSetsのデプロイ(AWS CLI版)
コンソールも良いですが、IaCの真髄を知るならCLIです。冪等性を意識したコマンドを叩きます。
aws cloudformation create-stack-set \
–stack-set-name “Common-Security-Setup” \
–template-body file://template.yaml \
–administration-role-arn “arn:aws:iam::管理用ID:role/AWSCloudFormationStackSetAdministrationRole” \
–execution-role-name “AWSCloudFormationStackSetExecutionRole” \
–capabilities CAPABILITY_IAM # IAM作成を伴う場合に必須
—
4. 現場で震えるほど役立つ「自動展開」の極意
単にデプロイするだけなら自動化とは言えません。AWS Organizationsと連携した「自動展開」こそが、SREが追求すべき究極の姿です。
StackSetsの「サービスマネージド権限」を使うと、以下のことが可能になります。
- 自動デプロイ: 新しいアカウントがOUに追加された瞬間、自動的にStackSetsが発火し、必要なインフラが自動構築される。
- 自動削除: アカウントをOUから除外した際、そのアカウントのリソースを自動クリーンアップする。
設定のポイント:
コンソールでStackSetsを作成する際、「サービスマネージド権限」を選択してください。これを選択すると、管理アカウント側でIAMロールを個別に作成・管理する手間が不要になります。AWS側が裏側でいい感じにやってくれるため、運用負荷が劇的に下がります。
—
5. 最後に:インフラを「コード」で支配するということ
StackSetsを導入したあなたは、もう「各アカウントにログインして設定を確認する」という非生産的な作業から解放されます。
最後に、プロからのアドバイスを一つ。
StackSetsを運用する際は、必ず「ドリフト検出(Drift Detection)」を定期的に走らせてください。誰かが手動でリソースを変更してしまったとき、コードと実態の乖離を即座に検知できます。
「コード通りに環境が存在していること」。これこそが、信頼性の高いインフラの絶対条件です。
最初は難しく感じるかもしれませんが、一度このパイプラインを構築すれば、あなたのインフラ運用は驚くほど優雅なものに変わります。さあ、まずは小さく、一つのセキュリティグループから始めてみましょう。応援していますよ。