Amazon GuardDutyをCloudFormationで全リージョンへ展開する


こんにちは、ひろかずです。
昨年のre:inventで発表されたGuardDutyを使ってみている人も多いかと思います。

とりあえず動かすにしても、全リージョンをポリポチして回るのはちょっと嫌ですよね。
今回は、CloudformationのStackSetsを使って一気に展開する手法について、一筆書きます。

# 参考ドキュメント

Amazon Web Services ブログ

- [CloudFormation スタックセットを利用した 複数のAWSアカウントやリージョンを横断したリソース展開](https://aws.amazon.com/jp/blogs/news/use-cloudformation-stacksets-to-provision-resources-across-multiple-aws-accounts-and-regions/)

AWS公式ドキュメント

- [AWS CloudFormation ユーザーガイド | AWS CloudFormation StackSets の操作 | 前提条件](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html)

- [AWS CloudFormation User Guide | Template Reference | AWS::GuardDuty::Detector](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-guardduty-detector.html)

# 工程
1. StackSetsで使用するIAMロールを作成
2. GuardDutyを有効化するCloudFormationテンプレートの作成
3. StackSetsを使ったGuardDutyの全リージョン展開

# 1. StackSetsで使用するIAMロールを作成
[AWS CloudFormation ユーザーガイド | AWS CloudFormation StackSets の操作 | 前提条件](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html)からIAMロールを作成するCloudFormationテンプレートをダウンロードします。

テンプレートは２種類あります。

- 管理用IAMロール作成用
- 実行用IAMロール作成用

yumlファイルの中を見ると分かりますが、管理用IAMロールは、実行用IAMロールをAssumeしています。
実行用IAMロールは、信頼するAWSアカウントIDの入力を求める記述とCloudFormationで実行する権限(デフォルトでAdministrator Accessポリシー)が設定されています。

CloudFormationでそれぞれのテンプレートを実行します。

[新しいスタック]を選択

![guardduty31.png](https://qiita-image-store.s3.amazonaws.com/0/46611/2442101c-8fe0-e224-860a-fc45f3049d17.png "guardduty31.png")

ダウンロードしたテンプレートを選択して[次へ]

![guardduty32.png](https://qiita-image-store.s3.amazonaws.com/0/46611/e29ad57f-421f-417e-1687-ef835b2d2f18.png "guardduty32.png")

スタック名を付けて[次へ]

- 実行用IAMロールの場合は、AWSアカウントIDも入力します。

![guardduty33.png](https://qiita-image-store.s3.amazonaws.com/0/46611/96e1e361-71c4-6f90-bb35-bcaf9af46bdb.png "guardduty33.png")

タグ名を付けて[次へ]

![guardduty34.png](https://qiita-image-store.s3.amazonaws.com/0/46611/9f9053bf-7d3f-f06a-b083-f53018cbf60d.png "guardduty34.png")

確認画面で注意書きを確認して[作成]

![guardduty36.png](https://qiita-image-store.s3.amazonaws.com/0/46611/16f2abd4-2941-66cf-fba1-0ce7c457fa22.png "guardduty36.png")

できたようです。

![guardduty37.png](https://qiita-image-store.s3.amazonaws.com/0/46611/3c4227c9-d6a5-54ca-7ea7-c7720e133875.png "guardduty37.png")


先に記載したとおり、実行用IAMロールは、CloudFormationで実行する権限(デフォルトでAdministrator Accessポリシー)が設定されています。
必要に応じて、権限を絞ってください。

なお、本稿の実行には、CloudFormationとSNS,GuardDutyに対するアクセス権限が必要になります。

# 2. GuardDutyを有効化するCloudFormationテンプレートの作成

テンプレートのデザイン画面でGuardDutyのDetectorを呼び出し、Propatiesに`"Enable": true`と追記して保存します。

![guardduty2.png](https://qiita-image-store.s3.amazonaws.com/0/46611/9d681c52-0e75-4250-053c-8aa43478d2b6.png "guardduty2.png")


# 3. StackSetsを使ったGuardDutyの全リージョン展開

[スタックセットの作成]を選択して、作成したCloudFormationテンプレートを選択して[次へ]

![guardduty13.png](https://qiita-image-store.s3.amazonaws.com/0/46611/d68ea5a2-5fc4-b0ee-c779-c1e708c1803a.png "guardduty13.png")

スタックセット名を作成して[次へ]

![guardduty14.png](https://qiita-image-store.s3.amazonaws.com/0/46611/a7e5ade6-0d3f-e408-dbb5-728e26b10fd2.png "guardduty14.png")

スタックをデプロイするAWSアカウントIDとリージョンを選択します。
今回は全リージョンを選択ですね。

- 2018/1/5現在、eu-west-3（パリリージョン）はエラーになります。

![guardduty15.png](https://qiita-image-store.s3.amazonaws.com/0/46611/d08304ff-bc48-1de6-e3df-2ee7e08958e9.png "guardduty15.png")

デプロイオプションはそのままで[次へ]

![guardduty16.png](https://qiita-image-store.s3.amazonaws.com/0/46611/27ec2035-bd48-4de8-d63e-db5feb0e8cd5.png "guardduty16.png")

スタックセットのタグを設定して[次へ]

![guardduty17.png](https://qiita-image-store.s3.amazonaws.com/0/46611/1e33d670-7e95-6ad8-e310-0ca0b4227630.png "guardduty17.png")

確認画面で内容を確認して[作成]

![guardduty18.png](https://qiita-image-store.s3.amazonaws.com/0/46611/2a8e3362-8a66-e1ee-51c2-c94f86bcd954.png "guardduty18.png")

スタックのステータスが全てCURRENTになりましたね。

![guardduty20.png](https://qiita-image-store.s3.amazonaws.com/0/46611/3ca23e17-3620-9daf-7d1c-2d17774c6093.png "guardduty20.png")

普段見ないサンパウロリージョンにも展開されていますね。

![guardduty99.png](https://qiita-image-store.s3.amazonaws.com/0/46611/6219156b-ba4b-ceb0-7a85-1290ebf2b457.png "guardduty99.png")

簡単に全リージョン展開ができました。
経過が楽しみですね。

今日はここまでです。
お疲れ様でした。