Detectiveを一発で有効化するCFnテンプレートを作って全リージョンにStackSetsで展開してみた

セキュリティインシデントの調査がめっちゃ簡単にできるAmazon DetectiveをCloudFormationのStackSetsを利用して全リージョンに一発で展開する方法を紹介します。
2020.04.08

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

こんにちは、臼田です。

みなさん、AWS環境のセキュリティ対策やってますか?(挨拶

今回は、先日リリースされたAmazon DetectiveをCloudFormationで有効化する方法についてまとめました。

Detectiveの特徴や使い方は下記をご参照ください。全アカウント全リージョンでの有効化が必須です!

DetectiveのCloudFormation利用方法

DetectiveがCloudFormationに対応しているか確認したところ、下記ドキュメントを確認しました。

AWS::Detective::Graph - AWS CloudFormation

すでに対応しているようだったのでこれを活用していきます。

Detectiveの内部的な構成について説明すると、Detective自体を有効化する場合にはGraphというリソースを作成することになります。このリソースは各リージョン毎1つしか作成できません。この仕組はGuardDutyとよく似ていますね。

もう一つMemberというリソースがあり、こちらは複数のアカウントのDetectiveをマスターアカウントのDetectiveに集約するという機能を利用する時に、集約されるアカウントをMemberで管理します。今回はこちらは利用しないため細かいことは省略します。

なお、Detectiveを有効化するためには下記のようにGuardDutyが有効化されて時間が経っていないといけないという制約があるようなので注意してください。

Detectiveを有効にする前に、アカウントがAmazon GuardDutyに少なくとも48時間登録されていることを確認してください。この要件を満たさない場合、Detectiveを有効にすることはできません。

Detective — Boto 3 Docs 1.12.38 documentation

StackSetsによる展開

CloudFormationはマルチアカウント・マルチリージョンに展開するStackSetsの機能があります。

GuardDutyについても過去この方法で展開しています。

これと同じようにやっていきます。

StackSetsの準備

まずはStackSetsを利用するために必要なIAM Role2つを作成します。下記を参考に簡単に作成できます。

テンプレートの準備

CloudFormationのテンプレートを準備します。

今回はこちらにアップロードしています。中身を下記に貼っておきますのでお好みの方法でご利用ください。

AWSTemplateFormatVersion: 2010-09-09
Description:
  "enable Detective"
Resources:
  DetectiveGraph:
    Type: AWS::Detective::Graph

StackSetsで展開

それでは展開します。まずCloudFormationの画面にアクセスし、StackSetsからStackSetの作成を押します。

テンプレートは上がっていますのでリンクをURL欄に入力して進めます。

https://pub-codes-9nvushbw.s3-ap-northeast-1.amazonaws.com/templates/detective-basic-template.template

適当なStackSet名(今回はDetective-StackSet)を入れて次へ進めます。

IAM実行ロールに先ほど作成したRoleが選択されていることを確認して次へ進めます。

アカウント番号は展開するAWSアカウントIDを入力します。リージョンはいったんすべてのリージョンを選択すると楽です。現状ではCloudFormationのStackSets自体に対応しているリージョンと、Detectiveに対応しているリージョンがそれぞれあり、対応していないところではうまく有効化されません。しかしながらいちいち確認するのは面倒なのでここでは一律で全部選択したほうがいいです。このままだとリージョンによっては失敗しますがリカバリー方法は次の設定にあります。

下の方にデプロイオプションがあります。一つは同時実行数なので、選択しているリージョン数か、割合として100%を入れるといいです。もう一つは失敗したら展開を中止する数なので、これもリージョン数か100%にしておくと、どこかで失敗しても止まりません。結果、有効化できるところは全部有効化されます。

あとは確認画面が出るので送信して開始しましょう。

これで展開できました。

まとめ

Amazon DetectiveをCloudFormationのStackSetsで全リージョンに展開しました。

GuardDutyに引き続きすべてのリージョンで有効化したほうがいいサービスなので、一発展開できると楽ですね。