今年から始める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)に所属するすべてのアカウントに、自動的かつ一貫性をもってデプロイできるようになります。
- 初期セットアップ自動化スクリプト(CloudFormation StackSet)の作成
今回は、最低限のセキュリティ基盤を構築するために、以下のリソースを新規アカウントにデプロイするテンプレートを作成します。
-
CloudTrailのログ保存先となるS3バケット
-
読み取り専用アクセス権を持つIAMグループ
-
月額予算を超過しそうな場合に通知する予算アラート (AWS Budgets)
💡 CloudFormation StackSetのテンプレート例 (initial-setup.yml)
以下のYAMLをS3にアップロードして使用します。
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 コンソール] を開きます。
「組織を作成する」をクリックします。
組織が作成されると、現在のアカウントが管理アカウントとして表示され、確認メールが送信されます。メール内のリンクをクリックして確認を完了させます。
これで、Organizations機能が使えるようになりました!
StackSetsのための前提設定
StackSetsをOrganizations全体にデプロイするには、Organizationsの管理アカウントで 信頼されたアクセス(Trusted Access) が有効になっている必要があります。
-
AWS Organizations コンソールの左メニューから「サービス」を選択します。
-
統合されたサービスのメニューから「リソース管理」を選択します。
-
サービス一覧から「CloudFormation StackSets」を探し、クリックします。
「信頼されたアクセスを有効にする」をクリックします。
これにより、StackSetsが組織内のアカウントに対して自動的にリソースを作成できるようになります。
StackSetの作成とデプロイ
-
テンプレートの準備
-
作成した initial-setup.yml をS3バケットにアップロードします。
StackSetの作成
-
CloudFormationコンソールを開き、「StackSets」を選択します。
-
「StackSetの作成」をクリックします。
-
テンプレートの指定「Amazon S3 URL の指定」に、2. でアップロードしたテンプレートのURLを入力します。
-
「次へ」をクリック
StackSetの詳細を指定
-
スタックセット名「 Initial-Account-Setup 」 など、任意の名前を設定します。
-
パラメーターのBudgetAlertEmail に、アラートを受け取りたいメールアドレスを入力します。
-
デプロイターゲット「組織へのデプロイ」を選択します。
OUをあらかじめ作成しておきデプロイターゲットを「組織単位 (OU) にデプロイ」にすることで出来ます。
その場合には、ターゲットOU ID(例: ou-xxxx-xxxxxxxx)を指定します。 -
デプロイリージョン: ターゲットアカウントにデプロイしたいAWSリージョン(例: ap-northeast-1)を指定します。
レビューと実行
設定内容を確認し、IAMリソース作成のチェックボックスをオンにして「送信」します。
新規アカウントの作成と確認
StackSetが正常に作成されたら、いよいよテストです。
AWS Organizationsコンソールで新しいアカウントを作成します。
「AWS アカウントを追加」→「AWS アカウントを作成」を選択し、新しいメールアドレスとアカウント名を入力します。
StackSetの実行確認
数分後、CloudFormation StackSetsのコンソールで Initial-Account-Setup のステータスを確認します。
デプロイステータスが「SUCCEEDED」になっていれば成功です。
ターゲットアカウントでの確認
新規アカウントにスイッチロールします。
S3バケットとIAMグループが作成されていることを確認します。
Billingコンソールの「Budgets」を開き、予算アラートが作成されていることを確認します。
まとめ
AWS OrganizationsとCloudFormation StackSetsを活用することで、新規アカウント作成時の初期セットアップを効率化できることが分かりました。
これにより、アカウントセットアップ時のセキュリティベースラインの適用漏れを防ぎ、アカウントの払い出し時間を大幅に短縮できたり活用できそうです。
今回は、AWS Organizationsを使ってみるというのと、CloudFormation Stacksetsを使ってみることをしてみました。
アカウント追加時にスタックが展開されることが確認できましたが initial-setup.yml の中身は取り急ぎの検証の内容となっています。
今後はこのベースラインをアップデートしていくことが必要です!このベースラインをアップデートすることで設置アップや統制の管理が効率化できることが体感できました。









