Organizationsのメンバーアカウントに、独自ベースラインのCloudFormationテンプレートをStackSetsで自動デプロイする

2021.11.12

このブログでは、Organizations環境のメンバーアカウントに対して、ベースラインとして作成・設定したいリソースをCloudFormationStackSetsを使用して行う手順をご紹介します。

前提

  • Organizationsのサービス統合にて、CloudFormationStackSets が有効になっている
  • ベースラインとして作成・設定したいCloudFormationテンプレートがある

Control Tower環境の場合

本内容は、Control Tower管理下でも使用できます。

ただし、ベースラインの設定は多くのソリューションがあり、本内容で紹介する方法は簡易的な方法となります。その他充実した機能が含まれるソリューションの例としては、以下ブログをご覧ください。

Control Towerカスタマイズソリューション(CfCT)を使ってガードレールとCloudFormationを自動展開してみた | DevelopersIO

CDK で AWS のセキュリティベストプラクティスに沿ったベースラインを展開できる Baseline Environment on AWS(BLEA)を触ってみた | DevelopersIO

類似したブログ

本内容は、以下参考ブログと類似しております。差分としては主に以下となります。

  • デプロイオプション: 自動デプロイが有効 かつ スタックを保持

より詳細な説明は以下をぜひご覧ください。

[アップデート]CloudFormationでOrganizationsアカウントへの自動デプロイができるようになりました | DevelopersIO

【Organizations】組織単位で CloudFormation StackSetsを簡単にデプロイしてみる | DevelopersIO

1.CloudFormationStackSetsを作成する

それでは実際にやっていきます。

今回はいくつかのIAMロールとS3バケットを作成するCloudFormationテンプレートを使用します。

まずは、マスターアカウントのCloudFormationコンソールより、StackSetsを開き、StackSetの作成を選択します。

下図の通りテンプレートをアップロードし、次に進みます。今回はテンプレートの名前を members-account-ct-setup.yml とします。

StackSet名もファイル名と同様にします。

今回の場合パラメータでデフォルト値を設定していますが、特に変更せずに進みます。

アクセス許可では、サービスマネージドアクセス許可を選択します。これによって必要なIAMロール周りをよしなに自動作成してくれます。

設定の肝となるのがこのデプロイオプションですが、今回は以下の通り設定します。

  • デプロイターゲット: 組織単位(OU)へのデプロイを選択します。
  • AWS OU ID: ベースラインを対象とする全てのAWSアカウントが属するOUを指定します。今回は例として1つのOUのみ指定しています。(注意:Control Towerの場合、OUはネスト構造がサポートされていないため、いわゆる親OU1つだけ指定すれば良いということができないので、対象のAWSアカウントが属する全てのOUを指定することになります)
  • 自動デプロイ: 今後AWSアカウントが追加された際に、自動的に適用したい場合は有効を選択します。
  • アカウント削除の動作: AWSアカウントがOUやOrganizations配下から抜ける場合、スタック及びリソースを保持したい場合はスタックを保持を選択します。

ちなみに、OU ID は別タブでOrganizationsコンソールのAWSアカウント画面を開くと、一覧で確認することができます。

対象のリージョンを指定します。ベースラインで作成するリソースがリージョナルサービスであ利、かつ全てのリージョンに対して配置する必要がある場合は、対象のリージョンを全て指定します。今回はグローバルサービスであるIAMロールと、メインリージョンにのみS3バケットを作成したいので、東京リージョンのみを指定します。

最後に、IAMリソースを作成するときは、お決まりの承認にチェックを入れて、実行します。

2.正しく作成されたかどうか確認する

上記実行後、オペレーションが進行していることが確認できます。

しばらく待つと、オペレーションが成功したことがわかりました。

スタックインスタンスタブを開くと、対象のAWSアカウントに適用されたことがわかります。AWSアカウントが複数ある場合、こちらに対象分だけ並ぶことになります。

あとは実際にメンバーアカウント側のコンソールに切り替えて、対象リソースが作成されていることが確認できればOKとなります。

確認は以上です。

参考URL

AWS CloudFormation StackSets と AWS Organizations - AWS Organizations

AWS CloudFormation StackSets の操作 - AWS CloudFormation