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

概要

やりたいこと

GuardDuty 委任管理者(マスターアカウント)から、以下の条件で

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

GuardDuty 委任管理者がメンバーアカウントの GuardDuty を有効化する方法にコンソールと CLI が存在する。

CLI はディテクター ID、アカウント ID、E メールが必要なのでめんどくさいと以前書いたが、この条件では有効ぽい。

GuardDuty アカウント管理

GuardDuty の有効化・マルチアカウント連携

  • リージョンごとに Organizations 配下のメンバーアカウントの一括有効化
  • コンソールからアカウントを選択して有効化
  • CLI から API を

GuardDuty CLI

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

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

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

detectorId は、アカウントの GuardDuty を一意に識別できるID。

aws guardduty list-detectors

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

AWS CLI

コマンドで単一アカウント単一リージョン

対象リージョンの GuardDuty detectorId を確認する。

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

us-east-1 の GuardDuty でメンバーを追加する。

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

コンソールより us-east-1 リージョンにのみ追加されたことを確認できる。

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

追加したいアカウントを 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)によるマスターアカウントとメンバーアカウント