Amazon GuardDutyのメンバーアカウントの関連付けをAWS CLIで解除してみる
AWS Organizations で Amazon GuardDuty の統合されたサービスを有効化している環境において、メンバーアカウントの自動有効化をした後に、すぐに関連付けを解除したい状況がありました(メンバーアカウントでアーカイブや抑制ルールを作成したい)。その際に、AWS CLI で全リージョンのメンバーアカウントとの関連付けを解除したく試してみました。
本ブログを書いた後に 3 月に同じ内容のブログが公開されていることに気づきました。。AWS Security Hub の関連付けの解除まであります。こちらも合わせて確認していただくことで理解が深まると思います。メンバーアカウントの関連付け状況を確認するコマンドまで掲載していることが本ブログの + α になります。
試してみた
メンバーアカウントとの関連付けを解除するコマンドはdisassociate-members
コマンドです。account-ids
オプションに関連付けを解除したいアカウント ID を指定します。
全リージョンで特定のメンバーアカウントの関連付けを解除するコマンド例は下記です。
account-ids
を 1 個のみ指定する例ですが、"111122223333" "444455556666" "777788889999"
のように複数指定することもできます。
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do echo "### Disassociate members in ${region}" detector=$(aws guardduty list-detectors --region ${region} --query "DetectorIds[0]" --output text) aws guardduty disassociate-members \ --region ${region} \ --detector-id ${detector} \ --account-ids "111122223333" done
実行結果例です(長いので折りたたんでいます)。
実行結果
$ aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ > | while read region; do > echo "### Disassociate members in ${region}" > detector=$(aws guardduty list-detectors --region ${region} --query "DetectorIds[0]" --output text) > aws guardduty disassociate-members \ > --region ${region} \ > --detector-id ${detector} \ > --account-ids "111122223333" > done ### Disassociate members in ap-south-1 { "UnprocessedAccounts": [] } ### Disassociate members in eu-north-1 { "UnprocessedAccounts": [] } ### Disassociate members in eu-west-3 { "UnprocessedAccounts": [] } ### Disassociate members in eu-west-2 { "UnprocessedAccounts": [] } ### Disassociate members in eu-west-1 { "UnprocessedAccounts": [] } ### Disassociate members in ap-northeast-3 { "UnprocessedAccounts": [] } ### Disassociate members in ap-northeast-2 { "UnprocessedAccounts": [] } ### Disassociate members in ap-northeast-1 { "UnprocessedAccounts": [] } ### Disassociate members in ca-central-1 { "UnprocessedAccounts": [] } ### Disassociate members in sa-east-1 { "UnprocessedAccounts": [] } ### Disassociate members in ap-southeast-1 { "UnprocessedAccounts": [] } ### Disassociate members in ap-southeast-2 { "UnprocessedAccounts": [] } ### Disassociate members in eu-central-1 { "UnprocessedAccounts": [] } ### Disassociate members in us-east-1 { "UnprocessedAccounts": [] } ### Disassociate members in us-east-2 { "UnprocessedAccounts": [] } ### Disassociate members in us-west-1 { "UnprocessedAccounts": [] } ### Disassociate members in us-west-2 { "UnprocessedAccounts": [] }
次に、メンバーアカウントの関連付けを解除されたのかステータスを確認してみます。
メンバーアカウントとの関連付け状況を確認するコマンドはget-members
です。account-ids
オプションに関連付けを確認したいアカウント ID を指定します。
全リージョンで特定のメンバーアカウントの関連付けを確認するコマンド例は下記です。
disassociate-members
同様にaccount-ids
オプションで複数のアカウント ID を指定することもできます。
aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ | while read region; do echo "### Get members relationship status in ${region}" detector=$(aws guardduty list-detectors --region ${region} --query "DetectorIds[0]" --output text) aws guardduty get-members \ --region ${region} \ --detector-id ${detector} \ --account-ids "111122223333" \ --query "Members[*].[{AccountId:AccountId},{RelationshipStatus:RelationshipStatus}]|[]" done
実行結果例です(長いので折りたたんでいます)。指定したメンバーアカウントの Status がRemoved
になっていることを確認できます。
実行結果
$ aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \ > | while read region; do > echo "### Get members relationship status in ${region}" > detector=$(aws guardduty list-detectors --region ${region} --query "DetectorIds[0]" --output text) > aws guardduty get-members \ > --region ${region} \ > --detector-id ${detector} \ > --account-ids "111122223333" \ > --query "Members[*].[{AccountId:AccountId},{RelationshipStatus:RelationshipStatus}]|[]" > done ### Get members relationship status in ap-south-1 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in eu-north-1 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in eu-west-3 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in eu-west-2 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in eu-west-1 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in ap-northeast-3 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in ap-northeast-2 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in ap-northeast-1 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in ca-central-1 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in sa-east-1 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in ap-southeast-1 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in ap-southeast-2 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in eu-central-1 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in us-east-1 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in us-east-2 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in us-west-1 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ] ### Get members relationship status in us-west-2 [ { "AccountId": "111122223333" }, { "RelationshipStatus": "Removed" } ]
マネジメントコンソールにおいてもメンバーアカウントの関連付けを確認すると、ステータスがメンバーではありません
となっていることが確認できます。
さいごに
メンバーアカウントの関連付けを解除する作業を AWS CLI で試してみました。
このブログがどなたかのご参考になれば幸いです。