GuardDuty は単一のマスターアカウントから複数アカウントのGuardDuty をコントロールできる構成を取ることができます。
一元的にGuardDuty をコントロールすることで複数のアカウントに対する脅威に対して備えることができるようになります。
ですがGuardDuty の面倒なところは、リージョンごとに個別に有効化して、メンバーの構成をしなくてはいけません。さらにメンバーアカウント側でも承認などの処理が必要となり、複数のメンバーアカウントの術のリージョンで手動で構成するのは非常に大変です。
そこで、すべてのリージョンでマスターアカウントと複数のメンバーアカウントを一括で構成するスクリプトを作成してみました。このスクリプトは、Organizations のマスターアカウントをGuardDuty マスターアカウントとして利用することを想定としています。各メンバーアカウントにアクセスする場合は、Organizations でアカウントを作成したときに自動で生成されるIAM ロールを利用してアクセスします。もし、Organizations に招待したアカウントを対象とするのであれば、対象アカウント内に有効なIAM ロールを作成しておいてください。(デフォルト名は、OrganizationAccountAccessRole です。)
マスターアカウントの権限で実行してください。メンバーアカウントの情報はaccounts.csv に記載してください。
accounts.csv の設定は、以下のようなアカウントID とアカウントのe-mail アドレスを指定します。
account_id1,account-email@example.com
account_id2,account-email2@example.clm
逆に設定をすべて削除したい場合は、以下のスクリプトを利用できます。
なお、CloudFormation StackSets を利用した方法は、以下のブログ記事が参考になります。
複数アカウントのGuardDutyの通知を一つのアカウントにまとめる構成を実装してみた | Developers.IO
以上です。