📝

AWS CloudFormation の StackSets とは

に公開
2026/01/19

AWS CloudFormation StackSets と AWS Organizations - AWS Organizations

CloudFormation StackSets を使用すると、1 回のオペレーションで複数の AWS アカウント と AWS リージョン を対象に、スタックを作成、更新、削除できます。

CloudFormation スタックをマルチリージョン、マルチアカウントに展開できる機能です。

機能概要

  • 複数のアカウントとリージョンでスタックの作成、更新、削除が可能
  • AWS Organizations と統合されている
  • AWS Organizations に追加されたアカウントへの自動デプロイが可能
  • 委任管理者の指定が可能
  • セルフマネージド型のアクセス許可とサービスマネージド型のアクセス許可が存在する

ユースケース

AWS CloudFormation よくあるユースケースと質問

  • マルチアカウント、リージョンに基本設定を展開したい場合
  • 全リージョンで特定のサービスを有効化したい場合
  • AWS Organizations のメンバーアカウントに一括でデプロイしたい場合

アクセス許可

StackSets の概念 - AWS CloudFormation

StackSets は、セルフマネージド型のアクセス許可、またはサービスマネージド型のアクセス許可のいずれかを使用して作成できます。

  • セルフマネージド型のアクセス許可
    • ユーザー自身でデプロイに必要な IAM ロールを各アカウントに作成
    • 管理アカウントへのデプロイが可能
  • サービスマネージド型のアクセス許可
    • AWS Organizations 管理下のアカウントにデプロイ
    • デプロイに必要な IAM ロールが自動的に作成される
    • 管理アカウントにはデプロイされない

セルフマネージド型のアクセス許可を試してみた

セルフマネージド型のアクセス許可を持つ CloudFormation StackSets の作成 - AWS CloudFormation
セルフマネージド型のアクセス許可で管理者アカウントからターゲットアカウントに VPC を作成するテンプレートをデプロイしてみました。

01. 管理者アカウントに IAM ロールを作成

セルフマネージド型のアクセス許可を付与する - AWS CloudFormation
まずは以下の内容で IAM ポリシーを作成します。

{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": [
        "arn:aws:iam::*:role/AWSCloudFormationStackSetExecutionRole"
      ],
      "Effect": "Allow"
    }
  ]
}

続いて、以下の内容で管理者アカウントに IAM ロールを作成しました。

  • ロール名: AWSCloudFormationStackSetAdministrationRole
  • ポリシー: 上記で作成したポリシー
  • 信頼関係: 以下の通り
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudformation.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}


02. ターゲットアカウントに IAM ロールを作成

以下の内容でターゲットアカウントに IAM ロールを作成しました。

  • ロール名: AWSCloudFormationStackSetExecutionRole
  • ポリシー: AdministratorAccess
  • 信頼関係: 管理者アカウントからの AssumeRole を許可
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}


03. 管理者アカウントからデプロイ

以下の CloudFormation テンプレートをデプロイします。

AWSTemplateFormatVersion: "2010-09-09"

Resources:
  MyVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      Tags:
        - Key: Name
          Value: my-vpc

管理者アカウントの CloudFormation コンソールから StackSets を選択してスタックセットを作成します。

以下の設定でデプロイします。

  • アクセス許可モデル: セルフサービスのアクセス許可
  • IAM 管理ロール ARN: AWSCloudFormationStackSetAdministrationRole
  • IAM 実行ロール名: AWSCloudFormationStackSetExecutionRole
  • テンプレート: 上記で作成したテンプレート
  • スタックセット名: vpc
  • 新しいスタックのデプロイ
  • デプロイ先: スタックをアカウントにデプロイ
  • アカウント番号: ターゲットアカウントの ID
  • リージョン: 東京

上記以外はデフォルト設定です。






04. デプロイ結果の確認

デプロイ後にオペレーションが SUCCEEDED になっていることを確認します。

ターゲットアカウントに my-vpc という VPC が作成されていることを確認します。

また、ターゲットアカウントに CloudFormation スタックが作成されていることも確認できます。

セルフマネージド型のアクセス許可でターゲットアカウントにスタックをデプロイできました。

サービスマネージド型のアクセス許可を試してみた

サービスマネージド型のアクセス許可を持つ CloudFormation StackSets の作成 - AWS CloudFormation
サービスマネージド型のアクセス許可で管理者アカウントからメンバーアカウントに VPC を作成するテンプレートをデプロイしてみました。

前提

サービスマネージド型のアクセス許可を持つ CloudFormation StackSets の作成 - AWS CloudFormation

サービスマネージド型のアクセス許可を持つ StackSet を作成または更新するには、信頼されたアクセスが必要です。

AWS Organizations で CloudFormation StackSets の信頼されたアクセスを有効化してあります。

01. 管理者アカウントからデプロイ

デプロイするテンプレートはセルフマネージド型のアクセス許可のテンプレートと同様です。

以下の設定でデプロイします。

  • アクセス許可モデル: サービスマネージドアクセス許可
  • テンプレート: 上記で作成したテンプレート
  • スタックセット名: vpc
  • 新しいスタックのデプロイ
  • デプロイターゲット: 組織単位 (OU) へのデプロイ
  • AWS OU ID: メンバーアカウントが所属する OU ID
  • リージョン: 東京

上記以外はデフォルト設定です。






02. デプロイ結果の確認

デプロイ後にオペレーションが SUCCEEDED になっていることを確認します。

メンバーアカウントに my-vpc という VPC が作成されていることを確認します。

また、メンバーアカウントに CloudFormation スタックが作成されていることも確認できます。

サービスマネージド型のアクセス許可でメンバーアカウントにスタックをデプロイできました。

まとめ

今回は AWS CloudFormation の StackSets について紹介しました。
どなたかの参考になれば幸いです。

参考資料

Discussion