[AWS]一撃で複数アカウント、全リージョンに設定を展開する!

CloudFormatin StackSetsを利用して、複数アカウント・複数リージョンに対して設定を展開する方法
2018.05.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ、千葉です。

複数アカウント、全リージョンに同じ設定を展開したい!!という時に役立つCloudFormation StackSetsをご紹介します。

[新機能] CloudFormation StackSetsを試してみた

こちらのエントリーでは東京リージョンのみ選択だったので、今回は複数アカウント&全リージョンにスタックを展開してみました。 で、StackSetsにはいくつかサンプルテンプレートとして以下が用意されています。

  • AWS CloudTrail の有効化
  • AWS Config の有効化
  • 設定ルール root-account-mfa-enabled の追加
    • ルートユーザーのMFAが有効になっているかチェックするConfigルール
  • 設定ルール cloudtrail-enabled の追加
    • CloudTrailが有効になっているかチェックするConfigルール
  • 設定ルール eip-attached の追加
    • EIPが利用されているかチェックするConfigルール
  • 設定ルール encrypted-volumes の追加
    • EBSが暗号化されているかチェックするConfigルール

今回は、複数アカウントの全リージョンに対して AWS Config の有効化 を実施して見たいと思います。

イメージ

アカウントAに作成したStackSetsから、アカウントAとアカウントBにCFnスタックをデプロイします。これは、各リージョンにもデプロイされます。

また、事前に2つのIAMロールが必要です。各アカウントに作成します

  • AdministrationRole:StackSetsを実行するアカウントに必要なロール(アカウントA)
  • StackSetsExecutionRole:設定される側(Target)に必要なロール(アカウントA、アカウントB)

事前準備

事前にIAMロールを作成します。

AdministrationRole

StacSetsを作成するアカウントに必要なIAMロールです。 アカウントAに作成します。CloudFormationテンプレートがあるので、そちらを利用しましょう。こちら

参考:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html

StackSetsExecutionRole

Targetに必要なIAMロールです。 アカウントA、アカウントBに作成します。CloudFormationテンプレートがあるので、そちらを利用しましょう。こちら

スタック作成時にアカウントIDを求められますが、アカウントAのIDを入力します。

参考:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html

StackSetsの作成とデプロイ

準備ができたところで、StackSetsを作成して、2つのAWSアカウントの全リージョンに対してAWS Configの設定を有効にしてみたいと思います。アカウントAにてスタックセットを作成します。

今回はConfigを有効化したいので、「AWS Config の有効化」を選択します。

適宜パラメータを入力します。

デプロイ対象のAWSアカウントIDを カンマ区切り で入力し、全リージョンを選択します。

あとは、チェックを入れて作成をクリックします。

ステータスが ** SUCCEEDED** になりました。

各アカウントとリージョンを見てみましたが、ちゃんとスタックが作成されていました。

注意:Confg有効時にスタックがエラーになる場合は、こちらをご確認ください。

AWSマネジメントコンソールから消せないAWS Configの設定をAWSCLIで綺麗にする方法

最後に

CloudFormation StackSetsを利用することで、アカウント数が多くても、リージョンが多くても一括で任意の設定を展開できました。 過去のオンプレの経験だと、数には人力で対応していたのが懐かしいです。数の暴力に打ち勝てる世界、最高です。