Amazon GuardDuty は、CloudTrail の管理イベント・VPC フローログ・DNS ログなどを AWS 側で分析し、不正アクセスや暗号資産のマイニング、認証情報の持ち出しといった脅威を「検出結果(finding)」として知らせるサービスです。 ログの収集やエージェントの設定なしに、有効にした時点から分析が始まります。

# いまのリージョンで有効にする(検出器を作る)
aws guardduty create-detector --enable --finding-publishing-frequency FIFTEEN_MINUTES

# 重要度 7 以上の検出結果を EventBridge でメールに送る
aws events put-rule --name guardduty-high \
  --event-pattern '{"source":["aws.guardduty"],"detail-type":["GuardDuty Finding"],"detail":{"severity":[{"numeric":[">=",7]}]}}'
やること 要点
有効化 リージョンごと。使っていないリージョンも有効にしておく
複数アカウント Organizations の委任管理者に集め、メンバーは自動で有効化
検出結果を読む タイプ名 目的:リソース/脅威の名前 と、重要度(Critical・High・Medium・Low)
通知 EventBridge のルール → SNS(メール)・Lambda(Slack)など
ノイズを減らす 抑制ルール(条件に合う新しい検出結果を自動でアーカイブ)
料金 分析したログの量・イベント数・vCPU などの従量。最初の 30 日は無料

確認環境:AWS CLI 1.46.1・boto3 1.43.112・Python 3.11(Linux)。moto 5.2.4 で、create-detector(保護プランの --features 付き)・get-detector・create-filter(抑制ルール)・get-filter・enable-organization-admin-account を動かしました。EventBridge のイベントパターンは、moto でルールと SQS のターゲットを作り、重要度・タイプの違う GuardDuty 形式のイベントを送って、どれが届くかを確かめています。Slack に送る Lambda のコードは、擬似の Webhook を立てて送信内容を確かめました。保護プラン・タイプ名の決まり・重要度・上限・料金は、GuardDuty のドキュメントと料金ページで確認しています(確認日 2026年10月13日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「GuardDutyの使い方|有効化と検出結果の読み方・通知の設定」

GuardDuty が見ているもの

データ(ドキュメント) 自分で設定するか 主な検出
CloudTrail の管理イベント 不要(証跡が無くても分析される) 不審な API 呼び出し、ルートの利用、CloudTrail の停止
VPC フローログ(EC2) 不要(フローログを作らなくてよい) C&C サーバーとの通信、ポートスキャン、総当たり
DNS ログ 不要(AWS の DNS リゾルバーを使っている場合) マイニング・マルウェアのドメインへの問い合わせ

この3つが「基本のデータソース」で、有効にすると自動で分析が始まります。追加の保護プランを有効にすると、S3・EKS・RDS・Lambda・実行時の挙動なども対象になります。

保護プランの一覧

保護プラン(ドキュメント) 何を見るか --features の名前
S3 Protection S3 のデータイベント(持ち出し・削除の試み) S3_DATA_EVENTS
EKS Protection EKS の監査ログ EKS_AUDIT_LOGS
Runtime Monitoring EKS・EC2・ECS(Fargate を含む)の OS レベルのイベント(エージェントを使う) RUNTIME_MONITORING
Malware Protection for EC2 EC2 の EBS ボリュームをスキャン(オンデマンドも可) EBS_MALWARE_PROTECTION
Malware Protection for S3 S3 に新しく置かれたオブジェクトをスキャン バケットごとに設定
Malware Protection for AWS Backup EBS スナップショット・AMI・Backup の復旧ポイント Backup 側で設定
RDS Protection Aurora・RDS へのログインの挙動 RDS_LOGIN_EVENTS
Lambda Protection Lambda のネットワークの記録(VPC フローログから) LAMBDA_NETWORK_LOGS
AI Protection Bedrock・Bedrock AgentCore・SageMaker AI への脅威 AI_PROTECTION
決まり(ドキュメント) 内容
初めて有効にしたとき Runtime Monitoring 以外の保護プランが有効になり、30 日の無料期間に入る
EKS_RUNTIME_MONITORING と RUNTIME_MONITORING 両方を指定するとエラー。Runtime Monitoring が EKS も含む
Extended Threat Detection 追加料金なしで自動で有効。複数の段階にまたがる攻撃を「攻撃シーケンス」として出す

有効にする

1つのアカウント(CLI)

aws guardduty create-detector --enable \
  --finding-publishing-frequency FIFTEEN_MINUTES \
  --features '[
    {"Name":"S3_DATA_EVENTS","Status":"ENABLED"},
    {"Name":"EKS_AUDIT_LOGS","Status":"ENABLED"},
    {"Name":"EBS_MALWARE_PROTECTION","Status":"ENABLED"},
    {"Name":"RDS_LOGIN_EVENTS","Status":"ENABLED"},
    {"Name":"LAMBDA_NETWORK_LOGS","Status":"ENABLED"},
    {"Name":"RUNTIME_MONITORING","Status":"ENABLED",
     "AdditionalConfiguration":[{"Name":"ECS_FARGATE_AGENT_MANAGEMENT","Status":"ENABLED"}]}
  ]'

aws guardduty list-detectors
aws guardduty get-detector --detector-id <検出器ID> \
  --query '{Status:Status,Freq:FindingPublishingFrequency,Features:Features[].[Name,Status]}'

moto に向けて動かした get-detector の結果です。

{
  "Status": "ENABLED",
  "Freq": "FIFTEEN_MINUTES",
  "Features": [["S3_DATA_EVENTS", "ENABLED"], ["RUNTIME_MONITORING", "ENABLED"]]
}
--finding-publishing-frequency 意味(ドキュメント)
FIFTEEN_MINUTES・ONE_HOUR・SIX_HOURS(既定) 同じ検出結果が続けて起きたとき、EventBridge に送る更新の間隔。新しい検出結果はほぼすぐ送られる

更新の通知が 6 時間おきだと、続いている攻撃に気づくのが遅れます。15 分にしておくと、同じ検出結果の count が増えたことを早く知れます。

全リージョンで有効にする

GuardDuty はリージョンごとのサービスです。 普段使っていないリージョンで不正にリソースを作られても気づけるよう、有効なすべてのリージョンで検出器を作ります。

for r in $(aws ec2 describe-regions --query 'Regions[].RegionName' --output text); do
  if [ -z "$(aws guardduty list-detectors --region "$r" --query 'DetectorIds[0]' --output text | grep -v None)" ]; then
    aws guardduty create-detector --enable --finding-publishing-frequency FIFTEEN_MINUTES --region "$r" \
      --query DetectorId --output text | sed "s/^/$r /"
  fi
done

検出器は 1 リージョンに 1 つです(上限 1、引き上げ不可)。 上のスクリプトは、すでにあるリージョンを飛ばします。moto 5.2.4 では同じリージョンに2つ目の検出器が作れたため、テストでこの上限は確かめられません。

Organizations で全アカウントに広げる

手順 どのアカウントで コマンド
1. 委任管理者を決める 管理アカウント(各リージョン) aws guardduty enable-organization-admin-account --admin-account-id 111122223333
2. メンバーを自動で有効に 委任管理者(各リージョン) aws guardduty update-organization-configuration --detector-id <ID> --auto-enable-organization-members ALL
3. 保護プランも自動で 委任管理者 同じコマンドの --features で AutoEnable を指定
注意(ドキュメント) 内容
リージョン 委任管理者もリージョンごと。使う全リージョンで指定する
同じアカウント 全リージョンで同じアカウントを委任管理者にする(リージョンごとに変えられない)
管理アカウント 委任管理者にすることはできるが、最小権限の考え方から勧められていない
ALL と NEW ALL は既存と新規のメンバー。NEW は新しく入るアカウントだけ
メンバーの上限 委任管理者 1 つで 50,000 アカウント

セキュリティ専用のアカウント(監査用アカウント)を委任管理者にし、検出結果をそこに集めるのが一般的な形です。Organizations の SCP で GuardDuty を止められないようにする書き方は、関連記事「AWS OrganizationsのSCPの書き方|例文とテンプレート」で扱っています。

検出結果のタイプ名の読み方

タイプ名は ThreatPurpose:ResourceTypeAffected/ThreatFamilyName.DetectionMechanism!Artifact の形です。

CryptoCurrency:EC2/BitcoinTool.B!DNS
└──目的──────┘ └─┘ └─脅威の名前┘└┘└─┘
               対象  (BitcoinTool) 変種 DNS で見つかった
部分 意味(ドキュメント) 例
ThreatPurpose 脅威の目的・攻撃の段階 Recon・UnauthorizedAccess・CryptoCurrency
ResourceTypeAffected 狙われたリソースの種類 EC2・IAMUser・S3・Kubernetes・Runtime・RDS・Lambda
ThreatFamilyName 何が起きたか PortProbeUnprotectedPort・SSHBruteForce
DetectionMechanism 見つけ方・変種 .Tcp/.Udp、.Custom(自分の脅威リスト)、.Reputation(ドメインの評判)
Artifact 悪用に使われた道具の資源(無いこともある) !DNS(ドメインへの問い合わせで見つかった)

ThreatPurpose の一覧

ThreatPurpose 意味(ドキュメントの要約)
Backdoor 乗っ取られ、C&C サーバーと通信できる状態に変えられた
Behavior いつもの基準と違う動き
CredentialAccess 認証情報を盗む動き
CryptoCurrency 暗号資産に関係するソフトが動いている
DefenseEvasion 検出を逃れようとする動き
Discovery システムや内部ネットワークを調べる動き
Execution 悪意のあるコードを動かそうとしている・動かした
Exfiltration データを持ち出そうとしている
Impact システムやデータを壊す・止める・書き換える
InitialAccess 最初の侵入の段階
Pentest 侵入テストのツールに似た動き
Persistence 侵入経路を断たれても残るための動き(例:新しい IAM ユーザーを作る)
Policy セキュリティのベストプラクティスに反する動き(例:ルートの利用)
PrivilegeEscalation より強い権限を得ようとする動き
Recon 偵察(ポートを探る、ユーザーを一覧する など)
Stealth 動きを隠そうとしている(例:匿名化プロキシ)
Trojan トロイの木馬のプログラム
UnauthorizedAccess 許されていない人の不審な動き

Extended Threat Detection の検出結果は、AttackSequence:IAM/CompromisedCredentials のように AttackSequence で始まります。

よく見る検出結果と、まずやること

タイプ(ドキュメントの重要度) 何が起きたか まずやること
Recon:EC2/PortProbeUnprotectedPort(Low・状況で変わる) 開いているポートを外から探られた 本当に公開が必要なポートか、セキュリティグループを見直す
UnauthorizedAccess:EC2/SSHBruteForce(Low・状況で変わる) SSH の総当たり SSH を閉じ、Session Manager に切り替える
Policy:IAMUser/RootCredentialUsage(Low) ルートユーザーで API を呼んだ 本人の操作か確かめ、ルートに MFA
Stealth:IAMUser/CloudTrailLoggingDisabled(Low) CloudTrail の記録が止められた 誰が止めたか確かめ、元に戻す
UnauthorizedAccess:IAMUser/ConsoleLoginSuccess.B(Medium) いつもと違う場所からのコンソールログイン 本人に確認、パスワード・MFA
Policy:S3/BucketBlockPublicAccessDisabled(Low) S3 のパブリックアクセスのブロックが外された 意図した変更か確かめる
CryptoCurrency:EC2/BitcoinTool.B!DNS(High) EC2 がマイニング関係のドメインに問い合わせた インスタンスを隔離し、作った人と経路を調べる
Backdoor:EC2/C&CActivity.B!DNS(High) C&C サーバーのドメインに問い合わせた 隔離、スナップショットを取って調査
UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS(High・状況で変わる) EC2 のロールの認証情報が AWS の外から使われた ロールのセッションを無効にし、インスタンスを調べる
Exfiltration:S3/AnomalousBehavior(High) S3 からのいつもと違う取り出し 使われた認証情報を止め、アクセスを調べる
Execution:Runtime/NewBinaryExecuted(Medium) コンテナ・インスタンスで新しい実行ファイルが動いた 想定したデプロイか確かめる
AttackSequence:IAM/CompromisedCredentials(Critical) 盗まれた認証情報を使った一連の攻撃 最優先で、関係するリソースと認証情報を止める

誰がどの操作をしたかは CloudTrail で追います。関連記事「CloudTrailで誰が操作したか調べる|lookup-eventsとAthena」で扱っています。

重要度

重要度(ドキュメント) 値の範囲 ドキュメントの推奨
Critical 9.0〜10.0 ランサムウェアの一部の可能性。最優先で調べて対処する
High 7.0〜8.9 すぐに対処する(インスタンスの隔離・終了、認証情報のローテーション)
Medium 4.0〜6.9 早めに調べる。許可された動きか確かめ、分からなければ侵害されたとみなす
Low 1.0〜3.9 すぐの対応は無いが、弱点を探されている可能性として記録する

検出結果は 90 日保存されます(上限、変更不可)。それより長く残すなら、S3 へのエクスポート(「検出結果のエクスポート」の設定)を使います。

CLI で検出結果を見る

D=$(aws guardduty list-detectors --query 'DetectorIds[0]' --output text)

# 重要度 7 以上、アーカイブしていないもの
IDS=$(aws guardduty list-findings --detector-id "$D" \
  --finding-criteria '{"Criterion":{"severity":{"Gte":7},"service.archived":{"Eq":["false"]}}}' \
  --query 'FindingIds' --output text)

aws guardduty get-findings --detector-id "$D" --finding-ids $IDS \
  --query 'Findings[].[Severity,Type,Resource.ResourceType,Service.Count,UpdatedAt]' --output table

# 重要度ごとの件数
aws guardduty get-findings-statistics --detector-id "$D" --finding-statistic-types COUNT_BY_SEVERITY

# 試しの検出結果を作る(通知のテストに使う)
aws guardduty create-sample-findings --detector-id "$D" \
  --finding-types Recon:EC2/PortProbeUnprotectedPort CryptoCurrency:EC2/BitcoinTool.B!DNS

moto 5.2.4 では、list-findings・get-findings-statistics・create-sample-findings は Not yet implemented でした。検出結果を扱うコードのテストには、Stubber などで応答を用意します。

通知:EventBridge でメール・Slack に送る

GuardDuty は検出結果を、そのリージョンの EventBridge(default イベントバス)にイベントとして送ります。source は aws.guardduty、detail-type は GuardDuty Finding です。

イベントパターン:重要度で絞る

{
  "source": ["aws.guardduty"],
  "detail-type": ["GuardDuty Finding"],
  "detail": { "severity": [{ "numeric": [">=", 7] }] }
}

moto でルールを3つ作り、重要度とタイプの違うイベントを6件送ったときに届いたものです。

パターン 届いたイベント(重要度:タイプの先頭)
"severity": [{"numeric": [">=", 7]}] 7.0:UnauthorizedAccess:IAMUser・8:CryptoCurrency:EC2・9.5:AttackSequence:IAM
"severity": [5, 8](ドキュメントの例) 5:Recon:EC2・5.0:Recon:EC2・8:CryptoCurrency:EC2
"type": [{"prefix": "CryptoCurrency:"}] 8:CryptoCurrency:EC2

値を並べる書き方は、その値と一致したものだけが届きます。 ドキュメントのコンソール用の例では、4 以上を拾うために 4, 4.0, 4.1, …, 10, 10.0 と値を全部並べています。numeric の範囲を使うと、1行で書けます。

よく使うパターン 書き方
Medium 以上 "severity": [{"numeric": [">=", 4]}]
High だけ "severity": [{"numeric": [">=", 7, "<", 9]}]
特定の目的 "type": [{"prefix": "UnauthorizedAccess:"}]
本番アカウントだけ "accountId": ["111122223333"](detail の中)
サンプルを除く "service": {"additionalInfo": {"sample": [{"exists": false}]}}

メールで受け取る(SNS)

REGION=ap-northeast-1
ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
TOPIC=$(aws sns create-topic --name guardduty-alerts --query TopicArn --output text)
aws sns subscribe --topic-arn "$TOPIC" --protocol email --notification-endpoint security@example.com

# EventBridge からの発行を許すトピックポリシー
aws sns set-topic-attributes --topic-arn "$TOPIC" --attribute-name Policy --attribute-value "{
  \"Version\":\"2012-10-17\",
  \"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},
    \"Action\":\"sns:Publish\",\"Resource\":\"$TOPIC\",
    \"Condition\":{\"ArnEquals\":{\"aws:SourceArn\":\"arn:aws:events:$REGION:$ACCOUNT:rule/guardduty-high\"}}}]}"

aws events put-rule --name guardduty-high \
  --event-pattern '{"source":["aws.guardduty"],"detail-type":["GuardDuty Finding"],"detail":{"severity":[{"numeric":[">=",7]}]}}'

cat > targets.json <<'EOF'
[{
  "Id": "sns",
  "Arn": "arn:aws:sns:ap-northeast-1:123456789012:guardduty-alerts",
  "InputTransformer": {
    "InputPathsMap": {
      "severity": "$.detail.severity", "Account_ID": "$.detail.accountId",
      "Finding_ID": "$.detail.id", "Finding_Type": "$.detail.type",
      "region": "$.region", "Finding_Description": "$.detail.description"
    },
    "InputTemplate": "{\"message\":\"You have a severity <severity> GuardDuty finding type <Finding_Type> in the <region> Region.\\n\\nFinding Description:\\n<Finding_Description>.\\n\\nFor more details open the GuardDuty console at https://console.aws.amazon.com/guardduty/home?region=<region>#/findings?search=id%3D<Finding_ID>\"}"
  }
}]
EOF
aws events put-targets --rule guardduty-high --targets file://targets.json

InputTemplate はドキュメントの例です。ドキュメントでは、テンプレートを1行の JSON にし、message のようなキーで包むよう注意されています。 description に改行などの制御文字が入ることがあり、そのまま埋め込むと JSON が壊れて、通知が届かなくなるためです。SNS の使い方は、関連記事「Amazon SNSの使い方 CLI・boto3とSQSファンアウト早見表」で扱っています。

Slack に送る(Lambda)

# slack_notify.py(EventBridge のルールのターゲットにする Lambda)
import json, os, urllib.request

WEBHOOK_URL = os.environ["SLACK_WEBHOOK_URL"]

def level(sev: float) -> str:
    if sev >= 9.0: return ":rotating_light: Critical"
    if sev >= 7.0: return ":red_circle: High"
    if sev >= 4.0: return ":large_orange_circle: Medium"
    return ":white_circle: Low"

def lambda_handler(event, context):
    d = event["detail"]
    region = event["region"]
    url = (f"https://console.aws.amazon.com/guardduty/home?region={region}"
           f"#/findings?search=id%3D{d['id']}")
    text = (f"*GuardDuty {level(float(d['severity']))} ({d['severity']})*\n"
            f"*{d['type']}*\n{d.get('title', '')}\n"
            f"Account: {d['accountId']} / Region: {region} / Count: {d.get('service', {}).get('count', 1)}\n"
            f"<{url}|コンソールで開く>")
    req = urllib.request.Request(WEBHOOK_URL, data=json.dumps({"text": text}).encode(),
                                 headers={"Content-Type": "application/json"})
    with urllib.request.urlopen(req, timeout=5) as res:
        return {"status": res.status}

擬似の Webhook で受けた本文です(title は試しに入れた値)。

*GuardDuty :red_circle: High (8)*
*UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS*
Credentials for instance role ec2-app-role used from external IP address.
Account: 123456789012 / Region: ap-northeast-1 / Count: 3
<https://console.aws.amazon.com/guardduty/home?region=ap-northeast-1#/findings?search=id%3D16afba5c5c43e07c9e3e5e2e544e95df|コンソールで開く>
aws lambda add-permission --function-name guardduty-slack \
  --statement-id events-guardduty-high --action lambda:InvokeFunction \
  --principal events.amazonaws.com \
  --source-arn arn:aws:events:ap-northeast-1:123456789012:rule/guardduty-high
aws events put-targets --rule guardduty-high \
  --targets Id=slack,Arn=arn:aws:lambda:ap-northeast-1:123456789012:function:guardduty-slack

Webhook の URL は秘密の値なので、環境変数より Secrets Manager や SSM パラメータストアに置く方が安全です。Webhook の基本は、関連記事「GASでSlack・Google Chatに通知|Webhookの書き方」でも扱っています。コードを書かずに送るなら、SNS トピックを Amazon Q Developer in chat applications(旧 AWS Chatbot)につなぐ方法もあります。

通知の設計 理由
全リージョンにルールを作るか、委任管理者のアカウントに集めてからルールを作る 検出結果も EventBridge のイベントもリージョンごと
Medium 以上をチャット、High 以上はメールや当番の呼び出しにも Low まで送ると通知が多すぎて見なくなる
試しの検出結果(create-sample-findings)で通知を確かめる 本物を待たずに経路を試せる

抑制ルール:ノイズを減らす

抑制ルールは、条件に合う新しい検出結果を自動でアーカイブするフィルターです。 CLI では create-filter --action ARCHIVE で作ります。

cat > criteria.json <<'EOF'
{"Criterion": {
  "type": {"Eq": ["Recon:EC2/PortProbeUnprotectedPort"]},
  "resource.instanceDetails.tags.key": {"Eq": ["public-web"]}
}}
EOF

aws guardduty create-filter --detector-id "$D" \
  --name suppress-portprobe-public-web --action ARCHIVE --rank 1 \
  --description "intentionally public web servers" \
  --finding-criteria file://criteria.json

aws guardduty get-filter --detector-id "$D" --filter-name suppress-portprobe-public-web

moto で作った抑制ルールを get-filter した結果です。

{
  "Name": "suppress-portprobe-public-web",
  "Description": "intentionally public web servers",
  "Action": "ARCHIVE",
  "Rank": 1,
  "FindingCriteria": {"Criterion": {
    "type": {"Eq": ["Recon:EC2/PortProbeUnprotectedPort"]},
    "resource.instanceDetails.tags.key": {"Eq": ["public-web"]}}}
}

名前を2文字にすると、送る前に Invalid length for parameter Name, value: 2, valid min length: 3 で止まりました(3文字以上)。

決まり(ドキュメント) 内容
抑えた検出結果 作られるが、すぐアーカイブされる。90 日は見られる
送られない先 Security Hub CSPM・S3・Detective・EventBridge に送られない(通知も来ない)
Malware Protection for EC2 抑えた検出結果ではスキャンが始まらない
作れる人 複数アカウントでは管理者アカウントだけ
上限 保存したフィルターは 1 リージョンに 100
作り方の方針 何度も誤検知と確かめたものだけ、後から作る。広すぎる条件は攻撃シーケンスの検出にも影響する

ドキュメントの例です。

場面 条件
わざと公開している Web サーバーへのポート探索 Finding type: Recon:EC2/PortProbeUnprotectedPort + Instance tag key
自社の脆弱性スキャナーによるポートスキャン Finding type: Recon:EC2/Portscan + スキャナーの Instance image ID

タイプだけで抑えると、本物の攻撃も見えなくなります。 タグ・AMI・IP など、誤検知の原因を表す条件と組み合わせます。

料金の考え方

GuardDuty の料金は、分析した量に比例します(料金ページ、米国東部の例)。

対象 課金の単位 料金ページの最初の段階の例
CloudTrail の管理イベント 100 万イベントあたり 4.00 USD
VPC フローログ・DNS ログ GB あたり(量で段階的に安くなる) 1.00 USD(最初の 500 GB)
S3 Protection S3 データイベント 100 万あたり 0.80 USD
EKS Protection 監査ログ 100 万あたり 1.60 USD
Runtime Monitoring 保護する vCPU あたり(月) 1.50 USD(最初の 500 vCPU)
Malware Protection for EC2 スキャンした GB 0.03 USD
Malware Protection for S3 スキャンした GB と、評価したオブジェクト数 0.09 USD/GB、1,000 オブジェクトで 0.215 USD
RDS Protection 保護するインスタンスの vCPU(Aurora Serverless v2 は ACU) ログイン 1.00 USD/vCPU
Lambda Protection Lambda のネットワークの記録の GB 1.00 USD(最初の 500 GB)
料金の決まり 内容
無料期間 新しいアカウントの各リージョンで 30 日。オンデマンドのマルウェアスキャンと AWS Backup のマルウェア保護は対象外
見積もり 無料期間中も、コンソールの「使用状況」に、期間後の見積もり額が出る
増えやすい場面 API を大量に呼ぶ自動処理(CloudTrail のイベント数)、通信量の多い EC2(フローログ)、S3 の読み書きが多いバケット(S3 Protection)

無料期間中に「使用状況」で見積もりを見て、保護プランごとに続けるか決める流れが取りやすい方法です。料金の確かめ方は、関連記事「AWSの料金を確認する方法|Cost Explorer・CLI・予算アラート」で扱っています。

よくある質問

Q. CloudTrail の証跡を作っていなくても動きますか。 A. 動きます。ドキュメントでは、GuardDuty を有効にすると、CloudTrail の管理イベント・VPC フローログ・DNS ログを自動で取り込み始めると説明されています。証跡やフローログを自分で作る作業はありません。

Q. Security Hub と何が違いますか。 A. GuardDuty は脅威(攻撃の兆候)を見つけるサービスです。Security Hub は GuardDuty を含む複数のサービスの結果を集め、設定がベストプラクティスに合っているかも調べます。両方を使うと、GuardDuty の検出結果が Security Hub にも集まります。

Q. 検出結果をアーカイブすると、どうなりますか。 A. 一覧の「現在」から消え、「アーカイブ済み」に移ります。対応が終わったものはアーカイブし、同じことが続くなら抑制ルールを考えます。

Q. GuardDuty を止めるとデータはどうなりますか。 A. 「一時停止(suspend)」は分析を止め、検出結果は残ります。「無効化(disable)」は検出器を消し、検出結果も消えます。止められないよう、SCP で guardduty:DeleteDetector などを拒否しておく方法があります。

まとめ

  • create-detector --enable で有効化。リージョンごとなので、使っていないリージョンも有効にする
  • 複数アカウントは Organizations の委任管理者(全リージョン同じアカウント)と --auto-enable-organization-members ALL
  • タイプ名は 目的:リソース/脅威の名前.見つけ方!資源。重要度は Critical 9.0〜、High 7.0〜、Medium 4.0〜、Low 1.0〜
  • 通知は EventBridge の aws.guardduty/GuardDuty Finding。重要度は numeric で範囲を書く
  • 抑制ルールは create-filter --action ARCHIVE。抑えた検出結果は EventBridge に送られないため、条件はタイプ+タグ・AMI などで狭く
  • 料金は分析した量の従量。30 日の無料期間に「使用状況」で見積もりを見る

参考・出典

確認日はいずれも 2026年10月13日です。

  • Amazon GuardDuty ユーザーガイド「What is Amazon GuardDuty?」:https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html
  • Amazon GuardDuty ユーザーガイド「GuardDuty finding format」:https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-format.html
  • Amazon GuardDuty ユーザーガイド「Severity levels of GuardDuty findings」:https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings-severity.html
  • Amazon GuardDuty ユーザーガイド「GuardDuty active finding types」:https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html
  • Amazon GuardDuty ユーザーガイド「Processing GuardDuty findings with Amazon EventBridge」:https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings_eventbridge.html
  • Amazon GuardDuty ユーザーガイド「Suppression rules」:https://docs.aws.amazon.com/guardduty/latest/ug/findings_suppression-rule.html
  • Amazon GuardDuty ユーザーガイド「Managing GuardDuty accounts with AWS Organizations」:https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_organizations.html
  • Amazon GuardDuty ユーザーガイド「GuardDuty quotas」:https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_limits.html
  • Amazon GuardDuty API リファレンス「DetectorFeatureConfiguration」:https://docs.aws.amazon.com/guardduty/latest/APIReference/API_DetectorFeatureConfiguration.html
  • Amazon GuardDuty の料金:https://aws.amazon.com/guardduty/pricing/

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「GuardDutyの使い方|有効化と検出結果の読み方・通知の設定」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?