GuardDuty 委任管理者から特定アカウント・全リージョンの GuardDuty を有効化・マルチアカウント連携
概要
やりたいこと
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 を更新し、再度シェルを実行すればいい。
ディスカッション
コメント一覧
まだ、コメントがありません