GuardDutyのランタイムモニタリングを全リージョンで有効にする(Pythonスクリプト)

GuardDutyのランタイムモニタリングを全リージョンで有効にする(Pythonスクリプト)

Security Hubから通知が来たので対応しました。
Clock Icon2025.03.04

少し前にAWS Security Hubで「GuardDuty.11 GuardDuty Runtime Monitoring should be enabled」の通知が発生しました。GuardDutyのランタイムモニタリングを有効にしなさいとのことです。

というわけで、全リージョンで有効にするスクリプトを作って実行してみました。なお、この通知に従うか否かは、各自の状況を踏まえて判断してください。

  • Amazon ECS、Amaonz EKS、Amazon EC2が未使用なので、無効のままとする
  • Amazon ECS、Amaonz EKS、Amazon EC2が未使用だが、将来利用する可能性を踏まえて有効にする
  • Amazon ECS、Amaonz EKS、Amazon EC2を利用中なので、有効にする
  • など

おすすめの方

  • AWS Security Hubで「GuardDuty.11 GuardDuty Runtime Monitoring should be enabled」の通知が発生した方
  • Amazon GuardDutyでランタイムモニタリングを有効にしたい方
  • 上記について、全リージョンをスクリプトで実行したい方

Amazon GuardDuty ランタイムモニタリングの料金

下記の記載があります。

GuardDuty ランタイムモニタリングの料金は、仮想 CPU (vCPU) 単位で測定される、保護されているワークロードの数とサイズに基づいています。

https://aws.amazon.com/jp/guardduty/pricing/

Amazon GuardDuty ランタイムモニタリングを有効にする前

AWS Security Hubの様子

東京リージョンに集約しているため、17リージョンすべてが失敗になっています。

01_security_hub

Amazon GuardDuty ランタイムモニタリングの様子

02_guardduty

なお、本記事で利用したAWSアカウントのAmazon ECS、Amaonz EKS、Amazon EC2は、すべて未使用です。

Amazon GuardDuty ランタイムモニタリングを全リージョンで有効にするスクリプト

app.py
import boto3
from botocore.exceptions import ClientError

ec2 = boto3.client("ec2")

def main() -> None:
    regions = ec2.describe_regions()["Regions"]
    for region in regions:
        region_name = region["RegionName"]
        print(region_name)

        update_guardduty_runtime_monitoring(region_name)

def update_guardduty_runtime_monitoring(region_name: str) -> None:
    guardduty = boto3.client("guardduty", region_name=region_name)

    try:
        detector_id = guardduty.list_detectors()["DetectorIds"][0]
        guardduty.update_detector(
            DetectorId=detector_id,
            Features=[
                {
                    "Name": "RUNTIME_MONITORING",
                    "Status": "ENABLED",
                    # 下記は、必要に応じて有効にする
                    # "AdditionalConfiguration": [
                    #     {"Name": "EKS_ADDON_MANAGEMENT", "Status": "ENABLED"},
                    #     {"Name": "ECS_FARGATE_AGENT_MANAGEMENT", "Status": "ENABLED"},
                    #     {"Name": "EC2_AGENT_MANAGEMENT", "Status": "ENABLED"},
                    # ],
                },
            ],
        )
    except ClientError as e:
        if e.response["Error"]["Code"] == "AccessDeniedException":
            print(f"  skip because AccessDeniedException")
        else:
            raise

if __name__ == "__main__":
    main()

実行する

python app.py

Amazon GuardDuty ランタイムモニタリングを有効にしたあと

AWS Security Hubのステータスが更新されるまで、しばらく待ちます。

AWS Security Hubの様子

11_security_hub

Amazon GuardDuty ランタイムモニタリングの様子

有効になりました。

12_guardduty

さいごに

AWS Security Hubから通知が来たので、GuardDutyのランタイムモニタリングを全リージョンで有効にしてみました。参考になれば幸いです。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.