Amazon GuardDutyを全リージョンで無効化してみた

Amazon GuardDutyを全リージョンで無効化してみた

Clock Icon2023.06.09

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

こんにちは!丸屋 正志(Maruya Masashi) です。

今日もブロックを掘ったり積み上げたり匠に壊されたりしていますか?

困っていたこと

既存AWSアカウントを AWS Control Tower 管理下に移動するにあたり、既に設定している Amazon GuardDutyを全リージョンから無効化したいです。

ついでに、全リージョンから検出結果を取得(エクスポート)したいです。

このブログで実現できること

  • Amazon GuardDuty の検出結果を全リージョンから取得
  • Amazon GuardDuty を全リージョンから無効化

1, 検出結果をエクスポート

CLI : 全リージョン 一括取得の場合

以下のシェルスクリプトを AWS CloudShell 上にアップロードし、ファイルを実行すると全リージョンのAmazon GuardDuty の検出結果を取得することができます。

  • ファイル一覧
    • 実行ファイル名 : GuardDuty-Export.sh
    • 取得ファイル名 : Guardduty_Findings.json
#!/bin/bash

outfile="Guardduty_Findings.json"

# ファイルの内容をクリア
echo "" > $outfile

aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
  echo "##### Fetching GuardDuty findings in ${region}"
  detector_id=$(aws --region ${region} guardduty list-detectors --query "DetectorIds[0]" --output text)
  if [ "$detector_id" != "None" ]; then
    # 検出結果IDのリストを取得します
    finding_ids=$(aws --region ${region} guardduty list-findings --detector-id $detector_id --query 'FindingIds[]' --output json)
    if [ "$finding_ids" != "[]" ]; then
      # 検出結果の詳細をJSON形式で取得し、結果をファイルに追記します
      echo "##### Findings for ${region}" >> $outfile
      aws --region ${region} guardduty get-findings --detector-id $detector_id --finding-ids "$finding_ids" >> $outfile
    else
      echo -e "No findings detected in ${region} \n"
    fi
  else
    echo -e "No GuardDuty detector found in ${region} \n"
  fi
done


コンソール : 単一リージョンの個別取得の場合

Amazon GuardDuty コンソールでエクスポートする場合には、検出結果を選択し右上の【検出結果 ID】をクリックしてダウンロードします。


2, Amazon GuardDutyの無効化

CloudShellもしくは、お手元のローカルPCから接続できる環境にて、下記のスクリプトを貼り付けて全リージョンのAmazon GuardDutyを一括で無効化を実施します。

aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
  echo "##### Disabling GuardDuty in ${region}"
  detector_id=$(aws --region ${region} guardduty list-detectors --query "DetectorIds[0]" --output text)
  if [ "$detector_id" != "None" ]; then
    aws --region ${region} guardduty delete-detector --detector-id $detector_id
    echo "GuardDuty has been disabled in ${region}"
  else
    echo -e "No GuardDuty detector found in ${region} \n"
  fi
done


さいごに

今回は、Amazon GuardDuty を全リージョンから検出結果を取得と無効化する方法でした。

このブログが誰かの解決になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.