【セキュアアカウント切り戻し手順】Amazon GuardDuty停止・無効化手順のご案内

クラスメソッドメンバーズご利用のお客様に提供しているセキュアアカウントサービスの設定切り戻し手順をご案内いたします。
2023.06.06

当エントリではクラスメソッドメンバーズが提供しているセキュアアカウントサービスにてAmazon GuardDuty停止・無効化の手順についてご案内いたします。

セキュアアカウントとは

クラスメソッドでは、セキュリティに関するベストプラクティスをまるっと施した状態のAWSアカウントをお客様に提供しております。

クラスメソッドメンバーズご利用の全てのお客様がご利用可能ですので、この機会にご検討ください。

セキュアアカウントのアーキテクチャ

セキュアアカウントでは下記の設定が施されています。

各設定の詳細は下記記事や仕様書をご参照ください。

今回の切り戻し対象のサービス

今回はセキュアアカウントにて全リージョン有効化されているGuardDutyの切り戻し手順を紹介いたします。

Amazon GuardDutyとは

不正アクセスなど自社のAWS環境への攻撃・脅威をいち早く検知し、セキュリティを担保するために有効なサービスです。

例えばGuardDutyを有効化していないと、下記のようにログインパスワードが漏洩し自社のAWS環境へ不正アクセスされている場合にその事実に気づくことができません。

しかしGuardDutyを有効化していると不正アクセスの可能性をすぐに検知してくれるため、素早く対応に移り結果として被害を抑えられる可能性が高くなります。

GuardDutyさんすげぇ、、、

料金について

よくGuardDutyの設定を無効化したい理由として、料金が高い(費用対効果に見合っていない)という意見が挙げられます。

GuardDutyのコスパは非常に良いです!下記記事にて詳細に説明されているので是非一度ご参照ください。

GuardDutyはAWSを利用するにあたり、セキュリティ対策として必須レベルのサービスとなっています。 セキュリティ対策は保険の役割で中々効果を実感しづらいですが、非常に有益なサービスとなっているため有効化を推奨しております。

前提

オプトイン無効化作業

セキュアアカウント設定の切り戻し作業を行う際は、メンバーズポータルサイトのセキュア設定をご確認いただき、オプトインが有効化の場合は無効化にしていただく必要があります

オプトインが有効化状態では毎週土曜日にてメンテナンスが入り、セキュア設定の状態が維持(上書き)されるため、無効化にする必要がございます。
オプトインが無効化状態では毎週土曜日のメンテナンスが実施されなくなりますが、設定自体はそのままとなるため手動切り戻し作業を行う必要がございます。

メンバーズポータルサイトから対象のアカウントIDを選択します。

下記画面から、メンバーズサービス設定を選択します。

新しくタブが開かれるので、セキュリティ設定を選択します。

セキュア設定項目にて、「Amazon GuardDuty」の項目を無効化にて保存します。

切り戻し作業者に必要なIAM権限

今回の切り戻し作業を行うために、作業者に必要なポリシーは以下となります。

  • AWSCloudShellFullAccess
  • AmazonGuardDutyFullAccess
  • AmazonEC2ReadOnlyAccess

停止・無効化手順

停止と無効化のどちらがいいのか

特別な理由がない限り、GuardDutyは無効化ではなく停止させておきましょう!

  • 停止中でも料金はかからず、既存の検出結果をそのまま保持できます。
  • 無効にすると、既存の検出結果とGuardDutyの設定は失われ、復旧できなくなります。

現在のGuardDutyのステータスを確認する

CloudShellを開き以下コマンドを入力してください(CloudShellの使い方はこちら)。

GuardDutyのステータス確認コマンド

for REGION in $(aws ec2 describe-regions --query "sort(Regions[].RegionName)" --output text); do
    DETECTOR_ID=$(aws guardduty list-detectors --region "${REGION}" --query DetectorIds --output text 2>/dev/null)
    if [ -n "$DETECTOR_ID" ]; then
        DETECTOR_STATUS=$(aws guardduty get-detector --detector-id "${DETECTOR_ID}" --query 'Status' --region "${REGION}" --output text 2>/dev/null)
        if [ "$DETECTOR_STATUS" == "DISABLED" ]; then
            # 停止済みのステータスを表示
            echo "${REGION}: Stopped: ${DETECTOR_ID}"
        elif [ "$DETECTOR_STATUS" == "ENABLED" ]; then
            # 有効化中のステータスを表示
            echo "${REGION}: Enabled: ${DETECTOR_ID}"
        else
            # 上記以外場合のステータスを表示
            echo "${REGION}: Unknown Status: ${DETECTOR_ID}"
        fi
    else
        # 無効化中のステータスを表示
        echo "${REGION}: Disabled: -"
    fi
done

全てのリージョンてGuardDutyが有効化になっている場合は、下記のような表示結果になると思います。

ap-northeast-1: Enabled: {GuardDutyのディテクターID}
ap-northeast-2: Enabled: {GuardDutyのディテクターID}
ap-northeast-3: Enabled: {GuardDutyのディテクターID}
ap-south-1: Enabled: {GuardDutyのディテクターID}
ap-southeast-1: Enabled: {GuardDutyのディテクターID}
ap-southeast-2: Enabled: {GuardDutyのディテクターID}
ca-central-1: Enabled: {GuardDutyのディテクターID}
eu-central-1: Enabled: {GuardDutyのディテクターID}
eu-north-1: Enabled: {GuardDutyのディテクターID}
eu-west-1: Enabled: {GuardDutyのディテクターID}
eu-west-2: Enabled: {GuardDutyのディテクターID}
eu-west-3: Enabled: {GuardDutyのディテクターID}
sa-east-1: Enabled: {GuardDutyのディテクターID}
us-east-1: Enabled: {GuardDutyのディテクターID}
us-east-2: Enabled: {GuardDutyのディテクターID}
us-west-1: Enabled: {GuardDutyのディテクターID}
us-west-2: Enabled: {GuardDutyのディテクターID}
表示ステータス 説明
Enabled 有効化状態
Stopped 停止状態
Disabled 無効化状態(非推奨)

実際にCloudShellで実行した時の様子です。

CloudShellの場合

全リージョンを一括で操作したい場合はCloudShellを使用することをお勧めします。

停止手順

全リージョン一括停止コマンド

aws ec2 describe-regions --query Regions[*].RegionName \
  | jq -r '.[]' \
  | while read -r REGION 
    do
      # guardduty no-enable
      aws --region "${REGION}" guardduty list-detectors --query DetectorIds[*] | jq -r '.[]' \
      | while read -r DETECTORID 
      do
        aws --region "${REGION}" guardduty update-detector --detector-id "${DETECTORID}" --no-enable
        echo "${REGION} Stopped"
      done
    done

特定のリージョン以外を一括で停止したい場合(例:東京、バージニア北部以外のリージョンを一括停止)
※リージョンカスタマイズ可能です

aws ec2 describe-regions --query Regions[*].RegionName \
  | jq -r '.[]' \
  | grep -v -e 'ap-northeast-1' -e 'us-east-1' \
  | while read -r REGION
    do
      # guardduty no-enable
      aws --region "${REGION}" guardduty list-detectors --query DetectorIds[*] | jq -r '.[]' \
      | while read -r DETECTORID
      do
        aws --region "${REGION}" guardduty update-detector --detector-id "${DETECTORID}" --no-enable
        echo "${REGION} Stopped"
      done
    done

無効化手順

全リージョン一括無効化コマンド

特別な理由がない限り、GuardDutyは無効化ではなく停止をさせておきましょう!

aws ec2 describe-regions --query Regions[*].RegionName \
  | jq -r '.[]' \
  | while read -r REGION
    do
      # guardduty disable
      aws --region "${REGION}" guardduty list-detectors --query DetectorIds[*] | jq -r '.[]' \
      | while read -r DETECTORID
      do
        aws --region "${REGION}" guardduty delete-detector --detector-id "${DETECTORID}"
        echo "${REGION} Disabled"
      done
    done

特定のリージョン以外を一括で無効化したい場合(例:東京、バージニア北部以外のリージョンを一括無効化)
※リージョンカスタマイズ可能です

aws ec2 describe-regions --query Regions[*].RegionName \
  | jq -r '.[]' \
  | grep -v -e 'ap-northeast-1' -e 'us-east-1' \
  | while read -r REGION
    do
      # guardduty disable
      aws --region "${REGION}" guardduty list-detectors --query DetectorIds[*] | jq -r '.[]' \
      | while read -r DETECTORID
      do
        aws --region "${REGION}" guardduty delete-detector --detector-id "${DETECTORID}"
        echo "${REGION} Disabled"
      done
    done

コンソールの場合

コンソールにてGuardDutyを停止・無効化する場合、リージョン毎に操作する必要があるので手間がかかります。 操作リージョンが数ヶ所程度の場合にコンソールで操作することをお勧めします。

停止手順

まずはコンソール画面よりGuardDutyを開き、メニューより「設定」を選択してください。

設定画面より、下記の「GuardDutyを一時停止」より「停止」を押します。

ポップアップが出てくるので「停止」を押します。

設定画面に戻り、「GuardDutyを再度有効にする」となっていれば停止状態になっています。

一連の流れを対象リージョンにて実行します。

無効化手順

設定画面より、下記の「GuardDutyを無効にする」より「を無効にする」を押します。

ポップアップが出てくるので「を無効にする」を押します。

GuardDutyの初期画面に戻るので、下記のような表示になれば無効化完了です。

一連の流れを対象リージョンにて実行します。

ステータスを確認する

全リージョンのGuardDutyステータス確認コマンド

for REGION in $(aws ec2 describe-regions --query "sort(Regions[].RegionName)" --output text); do
    DETECTOR_ID=$(aws guardduty list-detectors --region "${REGION}" --query DetectorIds --output text 2>/dev/null)
    if [ -n "$DETECTOR_ID" ]; then
        DETECTOR_STATUS=$(aws guardduty get-detector --detector-id "${DETECTOR_ID}" --query 'Status' --region "${REGION}" --output text 2>/dev/null)
        if [ "$DETECTOR_STATUS" == "DISABLED" ]; then
            # 停止済みのステータスを表示
            echo "${REGION}: Stopped: ${DETECTOR_ID}"
        elif [ "$DETECTOR_STATUS" == "ENABLED" ]; then
            # 有効化中のステータスを表示
            echo "${REGION}: Enabled: ${DETECTOR_ID}"
        else
            # 上記以外場合のステータスを表示
            echo "${REGION}: Unknown Status: ${DETECTOR_ID}"
        fi
    else
        # 無効化中のステータスを表示
        echo "${REGION}: Disabled: -"
    fi
done

全て停止状態の時はこのように表示されます。

ap-northeast-1: Stopped: {GuardDutyのディテクターID}
ap-northeast-2: Stopped: {GuardDutyのディテクターID}
ap-northeast-3: Stopped: {GuardDutyのディテクターID}
ap-south-1: Stopped: {GuardDutyのディテクターID}
ap-southeast-1: Stopped: {GuardDutyのディテクターID}
ap-southeast-2: Stopped: {GuardDutyのディテクターID}
ca-central-1: Stopped: {GuardDutyのディテクターID}
eu-central-1: Stopped: {GuardDutyのディテクターID}
eu-north-1: Stopped: {GuardDutyのディテクターID}
eu-west-1: Stopped: {GuardDutyのディテクターID}
eu-west-2: Stopped: {GuardDutyのディテクターID}
eu-west-3: Stopped: {GuardDutyのディテクターID}
sa-east-1: Stopped: {GuardDutyのディテクターID}
us-east-1: Stopped: {GuardDutyのディテクターID}
us-east-2: Stopped: {GuardDutyのディテクターID}
us-west-1: Stopped: {GuardDutyのディテクターID}
us-west-2: Stopped: {GuardDutyのディテクターID}
表示ステータス 説明
Enabled 有効化状態
Stopped 停止状態
Disabled 無効化状態(非推奨)

【おまけ】再度有効化したい場合

切り戻したセキュア設定を元に戻したい場合、メンバーズポータルサイトから再有効化することが可能です。
設定反映は毎週土曜日午前2時ごろから順次開始されます。

メンバーズポータルサイトから対象のアカウントIDを選択します。

下記画面から、メンバーズサービス設定を選択します。

新しくタブが開かれるので、セキュリティ設定を選択します。

セキュア設定項目にて、「Amazon GuardDuty」の項目を有効化にて保存します。