Amazon GuardDuty ハンズオン

脅威インテリジェンスによる自動検出と EventBridge + SNS によるリアルタイム通知を実装する

Amazon GuardDuty Amazon EventBridge Amazon SNS マネコン操作 入門〜中級 所要時間 45〜60 分 v1.0

📋 概要

このハンズオンでは、Amazon GuardDuty を有効化して AWS アカウントの脅威検出を体験します。サンプル検出結果を生成して各 Finding タイプの意味を理解し、重大な検出結果を Amazon EventBridge と Amazon SNS で自動通知する仕組みを構築します。

項目内容
所要時間45〜60 分
難易度入門〜中級
主要サービスAmazon GuardDuty、Amazon EventBridge、Amazon SNS
前提リソースなし(新規アカウントでも実施可能)
課金目安初回有効化から 30 日間は無料トライアル。以降は処理データ量に応じた従量課金
⚠️ 重要:必ずクリーンアップを実施してください

GuardDuty は有効化したまま放置すると 月額数千円〜数万円 の請求が発生します(処理するログ量に依存)。ハンズオン完了後は必ず無効化してください。無料トライアル中でも、30 日経過後に課金が開始されます。

ℹ️ Amazon GuardDuty とは

GuardDuty は VPC フローログ、DNS クエリログ、CloudTrail ログを機械学習と脅威インテリジェンスで分析し、不審なアクティビティを自動検出する脅威検出サービスです。エージェントのインストール不要で、有効化するだけで監視が開始されます。

🏗️ 構成図

📊 VPC フローログ / DNS クエリ / CloudTrail ログ(自動収集)
↓ 自動分析
🔍 Amazon GuardDuty
機械学習 + 脅威インテリジェンスで異常検出 → Finding 生成
↓ Finding イベント発行
Amazon EventBridge(ルール: GuardDuty Finding, severity ≥ 4)
↓ ターゲット
📣 Amazon SNS → メール通知

✅ 前提条件

ℹ️ 30 日間無料トライアルについて

GuardDuty を初めて有効化するアカウントでは 30 日間の無料トライアルが適用されます。トライアル期間中は GuardDuty の料金は発生しません。ただし、GuardDuty が収集する VPC フローログ等のログ自体は別途課金される場合があります(通常は微小)。

🔧 ステップ 1: Amazon GuardDuty の有効化

1-1. GuardDuty コンソールを開く

手順
  1. AWS マネジメントコンソールで「GuardDuty」を検索して開く
  2. リージョンが 「アジアパシフィック(東京)」 になっていることを確認
  3. 初回アクセスの場合、「Amazon GuardDuty へようこそ」画面が表示される
  4. 「GuardDuty を有効にする」 ボタンをクリック
✅ 確認

数秒後に GuardDuty のダッシュボードが表示されれば有効化成功です。画面上部に「Amazon GuardDuty が有効になっています。」と表示されます。

1-2. 保護プランの確認(オプション)

手順
  1. 左メニュー → 「保護プラン」 をクリック
  2. 以下の保護機能が表示される。このハンズオンではデフォルトのままで OK
保護機能説明デフォルト
S3 保護S3 バケットへの不審なアクセスを検出有効
EC2 マルウェア保護EC2 インスタンスのマルウェアスキャン有効
EKS 保護EKS クラスターの不審なアクティビティを検出有効
Lambda 保護Lambda 関数の不審な動作を検出無効(有料)
RDS 保護RDS への不審なログイン試行を検出有効

🔧 ステップ 2: サンプル検出結果の生成

実際に攻撃が発生するまで検出結果は生成されません。GuardDuty にはテスト用のサンプル検出結果生成機能があります。

2-1. サンプル検出結果を生成する

手順
  1. 左メニュー → 「設定」 をクリック
  2. 「サンプル検出結果」セクションまでスクロール
  3. 「サンプルの検出結果を生成する」 ボタンをクリック
  4. 確認ダイアログ → 「生成」 をクリック
ℹ️ サンプル検出結果について

サンプル生成を実行すると、GuardDuty が検出可能な全タイプの検出結果(約 40〜50 種類)が一度に生成されます。これらは実際の攻撃ではなく、テスト用のダミーデータです。検出結果の「サンプル」バッジが表示されます。生成には 1〜2 分かかることがあります。

✅ 確認

左メニュー → 「検出結果」をクリックし、多数の検出結果が表示されれば生成成功です。各検出結果に「SAMPLE」タグが付いています。

🔧 ステップ 3: 検出結果の確認と分析

3-1. 検出結果の一覧を確認する

手順
  1. 左メニュー → 「検出結果」 をクリック
  2. 検出結果一覧が表示される。「重大度」でフィルタリング可能
  3. 各検出結果をクリックして詳細パネルを開く

主要な検出結果タイプ

検出結果タイプ説明重大度
UnauthorizedAccess:EC2/SSHBruteForceEC2 インスタンスへの SSH ブルートフォース攻撃Medium
Recon:EC2/PortProbeUnprotectedPort開放ポートへのポートスキャンLow
CryptoCurrency:EC2/BitcoinTool.B!DNS暗号通貨マイニングツールの DNS クエリ検出High
Backdoor:EC2/C&CActivity.B!DNSC&C サーバーへの DNS クエリ(マルウェア感染の疑い)High
UnauthorizedAccess:IAMUser/MaliciousIPCaller悪意ある IP からの IAM API 呼び出しMedium
Policy:S3/BucketPublicAccessGrantedS3 バケットがパブリックに設定されたHigh
PrivilegeEscalation:IAMUser/AdministrativePermissionsIAM ユーザーが管理者権限を自己付与しようとしたHigh

3-2. 重大度によるフィルタリング

手順
  1. 検出結果一覧の上部にある 「フィルターの追加」 をクリック
  2. 「重大度」→ 「High(高)」 を選択してフィルタリング
  3. HIGH 重大度の検出結果だけが表示される
  4. 任意の検出結果をクリックして詳細(送信元 IP、影響を受けたリソース、推奨アクション)を確認する

3-3. 重大度スコアの意味

スコア重大度説明
7.0〜8.9High(高)即時対応が必要。深刻なセキュリティ侵害の可能性
4.0〜6.9Medium(中)調査推奨。悪用可能な可能性がある
0.1〜3.9Low(低)把握しておくべき情報。通常は即時対応不要

🔧 ステップ 4: EventBridge + SNS による通知設定

GuardDuty の検出結果を Amazon EventBridge で受け取り、SNS でメール通知する仕組みを構築します。

4-1. SNS トピックの作成

手順
  1. AWS コンソールで「SNS」を検索して Amazon SNS を開く
  2. 左メニュー → 「トピック」「トピックの作成」
  3. タイプ: スタンダード(標準)
  4. 名前: handson-guardduty-alerts
  5. その他はデフォルトのまま → 「トピックの作成」

4-2. メールサブスクリプションの追加

手順
  1. 作成したトピック handson-guardduty-alerts の詳細ページを開く
  2. 「サブスクリプション」 タブ → 「サブスクリプションの作成」
  3. プロトコル: Eメール
  4. エンドポイント: 通知を受け取るメールアドレスを入力
  5. 「サブスクリプションの作成」 をクリック
  6. 入力したメールアドレスに確認メールが届く → メール内の 「Confirm subscription」 リンクをクリック
⚠️ サブスクリプションの確認が必要

メールの確認が完了するまでサブスクリプションのステータスは「保留中の確認」になります。「Confirm subscription」をクリックするまで通知は届きません。確認メールが届かない場合は迷惑メールフォルダを確認してください。

4-3. EventBridge ルールの作成

手順
  1. AWS コンソールで「EventBridge」を検索して Amazon EventBridge を開く
  2. 左メニュー → 「ルール」「ルールを作成」
  3. 名前: handson-guardduty-rule
  4. イベントバス: default
  5. ルールタイプ: 「イベントパターンを持つルール」 を選択 → 「次へ」

4-4. イベントパターンの設定

手順
  1. イベントソース: 「AWS のサービス」
  2. AWS サービス: 「GuardDuty」
  3. イベントタイプ: 「GuardDuty Finding」
  4. イベントパターンが自動生成される。内容を確認:
{
  "source": ["aws.guardduty"],
  "detail-type": ["GuardDuty Finding"]
}

重大度 4.0 以上(Medium + High)のみ通知したい場合は、「カスタムパターン(JSON エディタ)」を選択し以下を入力:

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

4-5. ターゲット(SNS)の設定

手順
  1. 「ターゲットを選択」画面で 「ターゲットを追加」
  2. ターゲットタイプ: 「AWS サービス」
  3. ターゲットを選択: 「SNS トピック」
  4. トピック: handson-guardduty-alerts を選択
  5. 「次へ」 → タグは任意 → 「次へ」「ルールの作成」

🔧 ステップ 5: 通知テスト

サンプル検出結果を再度生成して、メール通知が届くことを確認します。

5-1. サンプル検出結果を再生成

手順
  1. GuardDuty コンソール → 「設定」
  2. 「サンプル検出結果を生成する」ボタンをクリック → 「生成」で確認
  3. 数分待つ

5-2. メール受信の確認

✅ 期待結果

登録したメールアドレスに GuardDuty の検出結果を含む通知メールが届きます。メールには JSON 形式で検出結果の詳細(Finding タイプ、重大度、影響リソース、検出時刻など)が含まれます。

ℹ️ メールが届かない場合
  • SNS サブスクリプションの確認(「Confirm subscription」の完了)を確認してください
  • EventBridge ルールの「モニタリング」タブで呼び出し数を確認してください
  • イベントパターンで severity ≥ 4 のフィルターを設定した場合、Low(重大度 0.1〜3.9)の検出結果は通知されません
  • 迷惑メールフォルダを確認してください

5-3. EventBridge のモニタリング確認

手順
  1. EventBridge コンソール → ルール → handson-guardduty-rule を開く
  2. 「モニタリング」 タブをクリック
  3. 「呼び出しの試行数」グラフにスパイクがあればルールが正常に動作している

🧹 クリーンアップ

⚠️ GuardDuty の無効化は最重要

GuardDuty は有効化したまま放置すると 月額数千円以上 の請求が発生します。ハンズオン完了後は必ず以下の手順で無効化してください。30 日間の無料トライアル終了後に課金が始まります。

削除手順(逆順で実施)

  1. EventBridge ルールの削除
    EventBridge コンソール → ルール → handson-guardduty-rule を選択 → 「削除」
  2. SNS サブスクリプションの削除
    SNS コンソール → サブスクリプション → 該当のサブスクリプションを選択 → 「削除」
  3. SNS トピックの削除
    SNS コンソール → トピック → handson-guardduty-alerts を選択 → 「削除」
  4. GuardDuty の無効化(最重要)
    GuardDuty コンソール → 左メニュー 「設定」 → 最下部「GuardDuty の無効化」セクション → 「GuardDuty を無効にする」 ボタン → テキストボックスに「disable」と入力 → 「確認」
⚠️ 無効化と一時停止の違い

「一時停止」はログ収集を停止するだけで GuardDuty のリソース(検出結果・設定など)は保持されます。課金も停止します。「無効化(Disable)」はすべてのデータを削除し完全に停止します。このハンズオンでは「無効化」を選択してください。

✅ 削除確認

GuardDuty コンソールに「Amazon GuardDuty へようこそ」の初期画面が表示されれば無効化完了です。課金が停止します。