Kanji
・クラウドエンジニア / フリーランス ・1993年生まれ ・愛媛県出身 / 東京都渋谷区在住 ・AWS歴5年 プロフィールの詳細
目次
僕が CCoE(Cloud Center of Excellence)として数十アカウント規模の AWS Organizations 環境でセキュリティ統制を標準化した際、最初にやってしまった失敗があります。それは、委任管理者アカウントから「念のためすべての保護プランを全アカウント一括で ON にしておこう」と設定し、翌月の請求書を見て青ざめたことです。
原因は、全アカウントの CloudTrail ログや ALB アクセスログを集約していた「ログアーカイブ専用アカウント(Log Archive)」や、高頻度でオブジェクトを読み書きするバッチ処理用 S3 バケットに対してまで S3 Protection(S3 データイベント監視)を無差別に有効化してしまったことでした。月間数億〜数十億件の PutObject / GetObject イベントがそのまま課金対象になり、本来守るべき機密バケット以外のノイズコストが大きく膨らんでしまったのです。
PutObject
GetObject
さらに運用を始めると、単発の偵察アラート( Recon:IAMUser/... や Discovery:S3/... )が毎日何十件も Slack に流れ込み、開発チームから「どれが本当に危険で、どれが無視していいスキャンなのか判断できない」と悲鳴が上がりました。
Recon:IAMUser/...
Discovery:S3/...
こうした手戻りを経てたどり着いた結論は、 「基本データソース+Extended Threat Detection(攻撃シーケンス相関分析)を全アカウントの土台にしつつ、オプション保護プランはワークロード特性と自動有効化(Auto-Enable)の仕様制約を見極めて選択適用する」 という設計アプローチです。
▲ AWS Organizations マルチアカウント環境における Amazon GuardDuty 委任管理・保護プラン・通知ルーティング構成図
Amazon GuardDuty は、AWS アカウント内のコントロールプレーンおよびデータプレーンの挙動を継続的に分析し、不正アクセスやマルウェア、認証情報の侵害を検出するマネージド型の脅威検知(IDS)サービスです。
現場の設計レビューで今でもよく誤解されるポイントですが、GuardDuty を動かすために各アカウントで CloudTrail 証跡や VPC Flow Logs を手動で有効化・S3 保存しておく必要はありません。GuardDuty は AWS 内部の独立したデータストリームから以下の 3 つの基礎データソースを直接引き込んで分析します。
従来の GuardDuty 運用で最大の課題だった「単発アラートの洪水(アラート疲れ)」を解決する中核機能が、AI/ML を用いた Extended Threat Detection です。
たとえば、「IAM ロールが不審な IP から呼び出された(Low)」「直後に S3 バケット一覧が列挙された(Low)」「機密バケットから大量のオブジェクトがダウンロードされた(High)」という複数の事象が別々に発生したとします。Extended Threat Detection はこれらの時系列シグナルを自動的に紐づけ、1 つの重大( Critical )な攻撃シーケンス( AttackSequence:* )として統合通知します。
Critical
AttackSequence:*
Extended Threat Detection は追加料金なしでデフォルト有効化されますが、S3 Protection や Runtime Monitoring を有効にしているほど相関分析の材料が増え、検出精度が高まります。
「すでに AWS Network Firewall やサードパーティ製 IPS、AWS WAF を入れている場合、GuardDuty は不要ではないか?」という質問もよく受けます。
結論から言うと、Network Firewall や WAF は「ネットワーク境界・HTTP レイヤーでの通信遮断(IPS)」を担うのに対し、GuardDuty は「IAM 認証情報の不正利用や AWS API 操作、DNS クエリ、OS カーネルレベルのランタイム挙動を含めたアカウント全体の脅威検知(IDS)」を担うため、守備範囲が異なります。
IPS は不正通信を即座に遮断できる反面、誤検知(False Positive)を起こすと本番トラフィックを止めてしまうリスクがあります。AWS 環境では、まず全アカウントに GuardDuty を敷いて API・ネットワーク・DNS の異常を網羅的に拾い、外部公開境界にだけ WAF や Network Firewall を組み合わせるのが現実的です。
GuardDuty のオプション保護プランは、何でも一括で有効化すると予算を圧迫します。東京リージョン( ap-northeast-1 )の料金水準と、AWS Organizations の委任管理者から一括自動有効化(Auto-Enable)できるかどうかを整理した上で、対象アカウント・リソースを絞り込みます。
ap-northeast-1
$1.04
$0.60
$0.24
$0.05
$1.33
$2.48
$1.18
$1.50
$2.00
表の通り、Malware Protection for S3 は Organizations の委任管理者設定から全アカウント一括で ON にすることはできません。なぜなら、検査対象の S3 バケット名と、スキャンを実行するための専用 IAM ロール( PassRole 権限を含む)をバケット単位で紐づける必要があるためです。
PassRole
また、GuardDuty がマルウェアを検出しても、デフォルトではオブジェクトに GuardDutyMalwareScanStatus: THREATS_FOUND というタグを付けるだけで、ファイルを自動削除したりダウンロードを止めたりはしてくれません。そのため、現場では以下のシーケンスで「スキャン完了かつ脅威なし( NO_THREATS_FOUND )と判定されるまで後続アプリからの読み取りを拒否する」検疫設計を組みます。
GuardDutyMalwareScanStatus: THREATS_FOUND
NO_THREATS_FOUND
guardduty-data
Runtime Monitoring で「AWS によるセキュリティエージェントの自動管理(Automated Agent Management)」を有効化すると、GuardDuty サービス側が対象アカウントの VPC 内に com.amazonaws.ap-northeast-1.guardduty-data というインターフェース VPC エンドポイントと専用セキュリティグループを自動プロビジョニングします。
com.amazonaws.ap-northeast-1.guardduty-data
僕が現場で実際に踏んだハマりどころは以下の 2 点です。
DependencyViolation
/28
EKS や ECS Fargate で Runtime Monitoring を導入する際は、事前にプライベートサブネットの空き IP 数を確認し、エンドポイント作成用の SCP 制限( ec2:CreateVpcEndpoint の拒否ルールなど)に GuardDuty サービスプリンシパルの除外条件が入っているかを確認してください。
ec2:CreateVpcEndpoint
管理アカウントではなく「セキュリティ監査アカウント(Audit / Security Tooling)」を委任管理者に指定し、既存メンバーおよび今後作成される新規アカウントに対して保護プランを自動有効化する AWS CLI の実装パターンです。
# 1. Organizations 管理アカウント側で、セキュリティ監査アカウントを委任管理者に登録 aws organizations enable-aws-service-access --service-principal guardduty.amazonaws.com aws organizations register-delegated-administrator --account-id 111122223333 --service-principal guardduty.amazonaws.com # 2. セキュリティ監査アカウント(委任管理者)側で、組織全体の自動有効化を構成 DETECTOR_ID=$(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) aws guardduty update-organization-configuration --detector-id "${DETECTOR_ID}" --auto-enable-organization-members ALL --features '[ {"Name": "S3_DATA_EVENTS", "AutoEnable": "ALL"}, {"Name": "EBS_MALWARE_PROTECTION", "AutoEnable": "ALL"}, {"Name": "RDS_LOGIN_EVENTS", "AutoEnable": "ALL"}, {"Name": "LAMBDA_NETWORK_LOGS", "AutoEnable": "ALL"}, {"Name": "EKS_AUDIT_LOGS", "AutoEnable": "ALL"}, {"Name": "RUNTIME_MONITORING", "AutoEnable": "NONE"} ]'
上記のように、コスト影響や VPC エンドポイント作成を伴う RUNTIME_MONITORING は組織一括では NONE (手動または特定本番アカウントのみ個別に有効化)とし、基本保護プランを ALL にするのが安全です。
RUNTIME_MONITORING
NONE
ALL
GuardDuty の検出結果(Finding)はそのまま全件をチャットに流すと、数週間で誰も見なくなります。運用設計では「誰が何を担当するか」と「どの重要度から人間を起こすか」を明確に定義します。
Medium 未満(Severity 1.0〜3.9 の Low)は Security Hub への記録のみにとどめ、リアルタイムの Slack / PagerDuty 通知は Severity 4.0 以上(Medium / High / Critical) に絞ります。特に AttackSequence:* は Severity 9.0+(Critical)で発火するため、最優先チャネルへルーティングします。
{ "source": ["aws.guardduty"], "detail-type": ["GuardDuty Finding"], "detail": { "severity": [{ "numeric": [">=", 4.0] }] } }
マルチアカウント環境への Amazon GuardDuty 導入において、押さえておくべき設計判断は以下の 3 点に集約されます。
とはいえ、Extended Threat Detection がどこまで巧妙な内部不正や未知の攻撃パターンを過不足なく束ねてくれるのか、また今後追加されるランタイム検知ルールでどの程度のノイズチューニング(抑制ルール追加)が必要になるかは、僕自身も実運用の中で引き続き見極めていきたいと考えています。まずは 30 日間の無料トライアルと Usage 画面のコスト見積もりを活用し、自組織のトラフィック量に合った保護プランの組み合わせを探ってみてください。
本番さながらのAI電話で初通話もデート誘いも余裕に。通話中の対話をリアルタイム解析し、最適な切り返しや好感度アップの助言を即座にサジェスト。24時間いつでも通話練習が可能です(無料体験あり・1レッスン 約150円〜)。
レシートを撮影するだけでGemini AIが品目・金額を高精度OCR解析。LINEログインで友人との面倒な立替・割り勘計算を美しく完結します。
占い師・執事・バーテンダーなどのAIキャラクターが進行役となり、お題やゲームを出題。集まる時間を最高にエキサイティングにするiOSアプリ。
日本株・グローバル企業の適時開示・決算速報をAIクオンツ解析。市場モメンタムや注目銘柄をリアルタイムに可視化するデータポータルです。
人工甘味料や添加物のNG成分除外フィルターと、有効成分あたりの実質単価を徹底比較・可視化するヘルスケア比較データベースです。
本記事で解説した 4大AIエージェント(Antigravity, Kiro, Claude Code, Codex)完全対応の AGENTS.md テンプレート、hooks.json、Gitガードスクリプト一式をGumroadにて配布準備中です。