GuardDuty 委任管理者から特定アカウント・全リージョンの GuardDuty を有効化・マルチアカウント連携

2021年2月2日

概要

やりたいこと

GuardDuty 委任管理者(マスターアカウント)から、以下を行う。

  • 指定したアカウントのみ
  • 全リージョン
  • GuardDuty 有効化
  • マルチアカウント連携

GuardDuty 委任管理者が、メンバーアカウントの GuardDuty を有効化する方法には、コンソールからの操作と CLI で API を呼び出す方法がある。

CLI はディテクター ID、アカウント ID、E メールが必要なのでめんどくさいと以前書いた。しかし、この方法が楽な場合もある。

GuardDuty CLI

Organizations 配下のアカウントの GuardDuty を有効化し、メンバーに追加する。

AWS CLI の create-members コマンドでメンバーを追加できる。

追加する場合のコマンド例。detectorId, AccountId, Email が必要。

aws guardduty create-members \
--detector-id 12abc34d567e8fa901bc2d34e56789f0 \
--account-details AccountId=123456789012,[email protected] \
--region us-east-1

detectorId は、アカウントの GuardDuty を一意に識別できるID。
下記のコマンドで取得できる。

aws guardduty list-detectors \
--region us-east-1

GuardDuty コンソール →「設定」→「探知機 ID」から確認できる。リージョンごとに値が違う。

AWS CLI

シェルで複数アカウント全リージョン

追加したいアカウントを CSV 形式で作成する。

vi targets.csv
111122223333,[email protected]
444455556666,[email protected]

全リージョンにコマンドを発行するシェル。detectorId は環境に合わせて修正。

#!/bin/bash

while read row; do
  column1=`echo ${row} | cut -d , -f 1`
  column2=`echo ${row} | cut -d , -f 2`
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id aaaaaaa --account-details AccountId=${column1},Email=${column2} --region us-east-1
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id bbbbbbb --account-details AccountId=${column1},Email=${column2} --region us-east-2
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id ccccccc --account-details AccountId=${column1},Email=${column2} --region us-west-1
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id ddddddd --account-details AccountId=${column1},Email=${column2} --region us-west-2
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id eeeeeee --account-details AccountId=${column1},Email=${column2} --region ap-south-1
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id fffffff --account-details AccountId=${column1},Email=${column2} --region ap-northeast-2
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id ggggggg --account-details AccountId=${column1},Email=${column2} --region ap-southeast-1
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id hhhhhhh --account-details AccountId=${column1},Email=${column2} --region ap-southeast-2
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id iiiiiii --account-details AccountId=${column1},Email=${column2} --region ap-northeast-1
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id jjjjjjj --account-details AccountId=${column1},Email=${column2} --region ca-central-1
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id kkkkkkk --account-details AccountId=${column1},Email=${column2} --region eu-central-1
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id lllllll --account-details AccountId=${column1},Email=${column2} --region eu-west-1
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id mmmmmmm --account-details AccountId=${column1},Email=${column2} --region eu-west-2
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id nnnnnnn --account-details AccountId=${column1},Email=${column2} --region eu-west-3
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id ooooooo --account-details AccountId=${column1},Email=${column2} --region eu-north-1
  aws guardduty create-members --profile SecurityMonitor-IaC --detector-id ppppppp --account-details AccountId=${column1},Email=${column2} --region sa-east-1
done < targets.csv

シェルを実行。アカウント数×リージョン数分のコマンドが実行される。

sh guradduty_enable.sh

全リージョンで指定したアカウントのステータスが有効になっていれば OK。

今後は CSV を更新し、再度シェルを実行すればいい。

参考

指定 GuardDuty 招待(API)によるマスターアカウントとメンバーアカウント