10
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

今年から始めるAWS Organizations:StackSetsでマルチアカウントの初期セットアップを自動化するハンズオン

はじめに

こんにちは!今年から本格的にAWS Organizationsを使い始めた、マルチアカウント管理者です。
アドカレにシーズンなので今年利用し始めたサービスについての振り返りということでAWS Organizationsの記事を投稿させて頂きます。

AWS OrganizationsはAWSの試験等ではよく出題されるのですが実際に利用する機会は少ないかなーと思っておりましたので何かの役に立てば幸いです。

本記事では、AWS Organizationsの環境で新規アカウントの初期セットアップを自動化・標準化するためのCloudFormation Stacksetsを利用したハンズオンを紹介します。

記事の目的

  • AWS Organizationsを利用したアカウント初期設定の自動化手法を理解する。

  • CloudFormation StackSetsを使用して、新規アカウントに共通設定を一括適用する手順を習得する。

ターゲット読者

  • AWS Organizationsを導入したばかりの方

  • マルチアカウント環境の初期設定を標準化・自動化したい方(これから触る方)

  • StackSetsを使った一括デプロイに興味がある方

  • AWS Organizationsを触ってみてみたい方

なぜ初期セットアップの自動化が必要か?

アカウントを増やすたびに、以下のような共通設定を手動で適用するのは非効率で人的ミスが起こるため危険です。

設定項目 手動での課題
セキュリティ IAMグループ、MFAの強制設定漏れ
ロギング CloudTrailやVPC Flow Logの保存先(S3バケット)作成の忘れ
コスト管理 コストレポートの設定、予算アラートの設定漏れ

StackSetsを利用すれば、これらの初期設定を一度テンプレートとして定義し、指定したOU(Organizational Unit)に所属するすべてのアカウントに、自動的かつ一貫性をもってデプロイできるようになります。

  1. 初期セットアップ自動化スクリプト(CloudFormation StackSet)の作成

今回は、最低限のセキュリティ基盤を構築するために、以下のリソースを新規アカウントにデプロイするテンプレートを作成します。

  1. CloudTrailのログ保存先となるS3バケット

  2. 読み取り専用アクセス権を持つIAMグループ

  3. 月額予算を超過しそうな場合に通知する予算アラート (AWS Budgets)

💡 CloudFormation StackSetのテンプレート例 (initial-setup.yml)

以下のYAMLをS3にアップロードして使用します。

initial-setup.yml
AWSTemplateFormatVersion: '2010-09-09'
Description: AWS Organizationsアカウント初期セットアップ (セキュリティ・コスト管理)

Parameters:
  BudgetAlertEmail:
    Type: String
    Description: 予算アラート通知先のメールアドレス
    Default: "admin@example.com"

Resources:
  # 1. 共通S3バケットの作成
  LogBucket:
    Type: AWS::S3::Bucket
    Properties:
      # S3バケット名はリージョン内で一意である必要があります
      BucketName: !Sub "account-log-bucket-${AWS::AccountId}-${AWS::Region}" 
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        IgnorePublicAcls: true
        BlockPublicPolicy: true
        RestrictPublicBuckets: true

  # 2. IAMグループの作成 (例: ReadOnlyアクセス権を持つグループ)
  ReadOnlyAccessGroup:
    Type: AWS::IAM::Group
    Properties:
      GroupName: ReadOnlyUsers
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/ReadOnlyAccess

  # 3. 予算アラートの作成 (月額$10の80%を超えたら通知)
  MonthlyCostBudget:
    Type: AWS::Budgets::Budget
    Properties:
      Budget:
        BudgetName: !Sub "Monthly-Budget-${AWS::AccountId}"
        BudgetType: COST
        TimeUnit: MONTHLY
        BudgetLimit:
          Amount: 10
          Unit: USD
      NotificationsWithSubscribers:
        - Notification:
            NotificationType: ACTUAL
            ComparisonOperator: GREATER_THAN
            Threshold: 80
            ThresholdType: PERCENTAGE
          Subscribers:
            - SubscriptionType: EMAIL
              Address: !Ref BudgetAlertEmail

Outputs:
  LogBucketName:
    Description: ログ保存用S3バケット名
    Value: !Ref LogBucket

ハンズオン

初期セットアップの自動適用

このセクションでは、管理アカウント(Rootアカウント)からStackSetを作成し、新規アカウントに自動適用する手順を実行します。

AWS Organizationsの有効化

まずは、現在のアカウントを管理アカウント(親アカウント)として、組織を作成します。

マネジメントコンソールにログインし、[AWS Organizations コンソール] を開きます。

「組織を作成する」をクリックします。

①.png

②.png

組織が作成されると、現在のアカウントが管理アカウントとして表示され、確認メールが送信されます。メール内のリンクをクリックして確認を完了させます。

スクリーンショット 2025-12-11 4.38.06.png

これで、Organizations機能が使えるようになりました!

StackSetsのための前提設定

StackSetsをOrganizations全体にデプロイするには、Organizationsの管理アカウントで 信頼されたアクセス(Trusted Access) が有効になっている必要があります。

  1. AWS Organizations コンソールの左メニューから「サービス」を選択します。

  2. 統合されたサービスのメニューから「リソース管理」を選択します。

  3. サービス一覧から「CloudFormation StackSets」を探し、クリックします。

⑥.png

「信頼されたアクセスを有効にする」をクリックします。

⑦.png

これにより、StackSetsが組織内のアカウントに対して自動的にリソースを作成できるようになります。

StackSetの作成とデプロイ

  1. テンプレートの準備

  2. 作成した initial-setup.yml をS3バケットにアップロードします。

StackSetの作成

  1. CloudFormationコンソールを開き、「StackSets」を選択します。

  2. 「StackSetの作成」をクリックします。

  3. テンプレートの指定「Amazon S3 URL の指定」に、2. でアップロードしたテンプレートのURLを入力します。

  4. 「次へ」をクリック

StackSetの詳細を指定

  1. スタックセット名「 Initial-Account-Setup 」 など、任意の名前を設定します。

  2. パラメーターのBudgetAlertEmail に、アラートを受け取りたいメールアドレスを入力します。

  3. デプロイターゲット「組織へのデプロイ」を選択します。

    OUをあらかじめ作成しておきデプロイターゲットを「組織単位 (OU) にデプロイ」にすることで出来ます。
    その場合には、ターゲットOU ID(例: ou-xxxx-xxxxxxxx)を指定します。

  4. デプロイリージョン: ターゲットアカウントにデプロイしたいAWSリージョン(例: ap-northeast-1)を指定します。

レビューと実行

設定内容を確認し、IAMリソース作成のチェックボックスをオンにして「送信」します。

新規アカウントの作成と確認

StackSetが正常に作成されたら、いよいよテストです。
AWS Organizationsコンソールで新しいアカウントを作成します。

「AWS アカウントを追加」→「AWS アカウントを作成」を選択し、新しいメールアドレスとアカウント名を入力します。

③.png

StackSetの実行確認

数分後、CloudFormation StackSetsのコンソールで Initial-Account-Setup のステータスを確認します。

デプロイステータスが「SUCCEEDED」になっていれば成功です。

④.png

ターゲットアカウントでの確認

新規アカウントにスイッチロールします。
S3バケットとIAMグループが作成されていることを確認します。

スクリーンショット 2025-12-11 5.34.42.png

⑤.png

Billingコンソールの「Budgets」を開き、予算アラートが作成されていることを確認します。

⑧.png

まとめ

AWS OrganizationsとCloudFormation StackSetsを活用することで、新規アカウント作成時の初期セットアップを効率化できることが分かりました。
これにより、アカウントセットアップ時のセキュリティベースラインの適用漏れを防ぎ、アカウントの払い出し時間を大幅に短縮できたり活用できそうです。

今回は、AWS Organizationsを使ってみるというのと、CloudFormation Stacksetsを使ってみることをしてみました。
アカウント追加時にスタックが展開されることが確認できましたが initial-setup.yml の中身は取り急ぎの検証の内容となっています。

今後はこのベースラインをアップデートしていくことが必要です!このベースラインをアップデートすることで設置アップや統制の管理が効率化できることが体感できました。

10
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?