#背景
業務で扱っているAWSアカウントが複数あり、こいつらをポチポチ設定せずに一括で全リージョンでGuardDutyを有効化すべく、下記ブログを参考に検証用の10アカウントくらいでCloudFormationのStackSetsで有効化してみました。本記事では追加で必要になった手順をメモ。
[新機能] CloudFormation StackSetsを試してみた
一発でGuardDutyを全リージョン有効化して通知設定するテンプレート作った
#手順
① 管理用ロール(AdministrationRole)作成
② 実行用ロール(StackSetsExecutionRole)作成
③ GuardDuty有効化テンプレート用意
④ StackSets作成
##① 管理用ロール(AdministrationRole)作成
管理用アカウントにAdministrationRoleを作成します。
[新機能] CloudFormation StackSetsを試してみた に記載の通り実行。
##② 実行用ロール(StackSetsExecutionRole)作成
複数のアカウントに実行用のロールを作成します。
[新機能] CloudFormation StackSetsを試してみた に記載の通り実行できますが、10アカウント分の管理コンソールでこれをやるのは辛い。
CLIを用いて、CloudFormationでAWSCloudFormationStackSetExecutionRoleを作成します。
$ aws cloudformation create-stack --profile XXXXX --stack-name Create-AWSCloudFormationStackSetExecutionRole --template-body file://AWSCloudFormationStackSetExecutionRole.yml --parameters ParameterKey=AdministratorAccountId,ParameterValue=XXXXXXXXXXXX --capabilities CAPABILITY_NAMED_IAM
ParameterKey=AdministratorAccountId,ParameterValue=XXXXXXXXXXXX
で管理用アカウントのIDを指定します。なお、実行ロールのテンプレートはAWSドキュメントの前提条件: スタックセットオペレーションのアクセス権限の付与からダウンロードしたものを使用したので、ParameterKey=AdministratorAccountId
となっています。参考ブログのテンプレートを使用する場合には ParameterKey=MasterAccountId
にする必要があります。
また、私のハマりポイントでしたが、IAMを作成する時には--capabilities CAPABILITY_NAMED_IAM
がないとエラーになります。作成成功すると下記結果が返ってきます。
##③ GuardDuty有効化テンプレート用意
snsの通知まで設定する必要がなかった、というかslack通知するlambdaを後で作成しようと思っていたので、シンプルにGuardDuty有効化のテンプレートだけ用意しました。デザイナーからボンとアイコンをおいて作成したので、メタデータとか入っていますが、いらなそうです。そのままにしていますが。。。
AWSTemplateFormatVersion: 2010-09-09
Metadata:
'AWS::CloudFormation::Designer':
ca7cdb3f-c4ca-4b22-b78a-ff95d239eb92:
size:
width: 60
height: 60
position:
x: 216
'y': 110
z: 0
Resources:
GDDZ0EQ:
Type: 'AWS::GuardDuty::Detector'
Properties:
Enable: true
Metadata:
'AWS::CloudFormation::Designer':
id: ca7cdb3f-c4ca-4b22-b78a-ff95d239eb92
##④ StackSets作成
[新機能] CloudFormation StackSetsを試してみた に記載の通り実行するのですが、複数アカウントなので、デプロイオプションの設定で「スタックがデプロイされている有効なアカウントのカンマ区切り値(CSV)のファイルをアップロード」を選択します。
スタックはまだデプロイされてないのですが、実行ロールさえ作成されてあれば問題なしでした。
CREATE_COMPLETEが出てくるまで時間がかかりますが、気長に待ちます。
以上。