Organizationsメンバーに追加したGuardDutyとSecurity Hubの関連付けを解除するスクリプト

2023.03.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

GuardDutyとSecurity HubはOrganizationsと連携することで、組織内のメンバーアカウントを管理することができます。これらのアカウントを組織から独立させたい、もしくは別の組織に移行したい時にはそれぞれのサービスで関連付けを解除する必要が出てきます。もし複数リージョンで利用していると、1リージョンごとに解除する必要があるためコンソールで操作となると大変です。

そんなときにサクッとコピペで使えるシェルスクリプトを作ってみました。

作成したスクリプト

作成したスクリプトはGuardDuty、Security Hubの管理アカウント上で実行してください。またmember_account_idはダミーのアカウントIDのため、実行前に関連付けを解除したいメンバーアカウントIDに差し替えてください。

GuardDutyの関連付けを解除するスクリプト

member_account_id="123456789012"

for region in $(aws ec2 describe-regions --output text --query 'Regions[].{Name:RegionName}')
do
  detectors=$(aws guardduty list-detectors --region $region --query 'DetectorIds[*]' --output text )

  echo "Processing region ${region}..."
  
  for detector_id in $detectors
  do
    echo "  Disassociating member account ${member_account_id} from detector ${detector_id} in region ${region}."
    aws guardduty disassociate-members --detector-id $detector_id --account-ids $member_account_id --region $region 
  done
done

GuardDutyが有効化されていないリージョンはProcessing region ${region}...のみ出力されます。

Security Hubの関連付けを解除するスクリプト

member_account_id="123456789012"

for region in $(aws ec2 describe-regions --output text --query 'Regions[].{Name:RegionName}')
do
    echo "Processing region ${region}..."
    result=$(aws securityhub disassociate-members --account-ids $member_account_id --region $region 2>&1)
    if [[ $result != *"The request is rejected since no such resource found."* ]]; then
        echo "  Disassociating member account ${member_account_id} in region ${region}."
    fi
done

有効化されていないリージョンに実行すると、以下のBadRequestExceptionのエラーが発生してしまうのがノイズになるのでそこだけハンドリングしてます。

An error occurred (BadRequestException) when calling the DisassociateMembers operation: The request is rejected since no such resource found.

スクリプトの実行方法

特に明記するほどでもないですが、一応書いておきます。

GuardDuty、Security Hubの管理アカウントにログインしてCloudShellを開きます。(Auditアカウント等に委任している場合は委任先)

GuardDutyの関連付けを解除するスクリプトを貼り付けてみます。

Enterを押すと実行されます。以下は東京リージョンのみ有効化していたため、レスポンスがap-northeast-1でのみ返ってきています。

Security Hubのスクリプト実行方法も同様です。

おわりに

繰り返し発生する作業はスクリプトにしておきましょう。この記事が少しでも誰かの作業を楽にできれば幸いです。

参考