Amazon GuardDutyで「重要度:高」のみメール通知する方法(2024版)

記事タイトルとURLをコピーする

垣見(かきみ)です。
タイトルの通り、Amazon GuardDutyで「重要度:高」のみメール通知する方法をお客様に聞かれて検証したので、ブログとしても書きました。
実は以前弊社社員が同様のブログを書いているのですが、4年前ということで最新版として改めてまとめました。

blog.serverworks.co.jp

基本的には大筋は以前のものと同じです。私は偉大な巨人の肩に乗っています。いつもありがとうございます。

概要

大きく分けて以下の二つの手順となっています。

1. Amazon SNSで、トピックとサブスクリプションを設定します。
2. Amazon EventBridgeでルールを作成し、ターゲットをAmazon SNSにします。

構成図

注意事項

※手順書内に記載がない部分はデフォルトの設定を意味します。
※本設定はリージョン毎に必要ですので、複数リージョンでGuardDutyを導入される場合は、 都度リージョンを切替して 設定をしてください。

手順

Amazon SNSの準備

トピックを作成する

  • Guarddutyと同じリージョンにいることを確認してください。
  • Amazon SNS コンソールを開きます。

  • 「トピックの作成」セクションで、タイプ: 「スタンダード」を選択します(fifo型ではemailを選べません)
  • 「トピック名」 に名前 (GuardDuty-alert など) を入力します。これがメールの送信者名になります。

  • 「トピックの作成」を選択すると、トピックが作成されます。

サブスクリプションを作成する

  • Amazon SNS コンソールから「サブスクリプション」へ移動します。

  • 「サブスクリプションの作成」セクションで、「トピックARN=前手順で作成したトピック」を指定します。
  • 「プロトコル」を「Eメール」とし、「エンドポイント」にメールアドレス/メーリングリストを指定します(複数アドレスは指定できません)。

  • 「サブスクリプションの作成」を選択します。
  • トピック名の送信元でサブスクリプションの承認メールが届きますので、「Confirm subscription」を選択します。

準備は以上です。

もはや見慣れたサブスクリプション画面。間違えてclick here to unsubscribeを押さないように注意です

Amazon EventBridgeルールの作成

  • Amazon EventBridge コンソールを開きます。
  • ナビゲーションペインで、「ルール」、「ルールの作成」 の順に選択します。

  • 「設定の詳細」 でルールの 「名前」 と 「説明」 を入力し、次に進みます。

  • 下部の「イベントパターン」を設定します。イベントソース: 「AWSサービス」を選び、AWSのサービス: 「GuardDuty」 を選択します。
  • 「イベントタイプ」 メニューから、「GuardDuty Finding」 を選択します。
  • 「パターンを編集」 をクリックします。

「サンプルイベント - オプション」と間違えないように注意です

  • 取得したいイベントパターンを定義します。以下のサンプルをコピーして「イベントパターンのプレビュー」 に貼り付け、保存して次へ進みます。

【サンプル】重要度高(7.0~8.9)の検索に限定

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

参考:Amazon GuardDuty 調査結果を理解するに記載の重要度(Severity)を基準に、Amazon EventBridge イベントパターンでのコンテンツフィルタリングに記載の書き方で書いています。 重要度中なら4.0~6.9、重要度低なら重要度低0.1~3.9です。

  • 「ターゲット1」 で、ターゲットタイプ: 「AWSのサービス」、ターゲットを選択: 「SNSトピック」、トピック: 「事前に作成したSNSトピック」 を選択します。
  • 「追加設定」 を展開し、ターゲット入力を設定: 「入力トランスフォーマー」 を選択します。
  • 入力トランスフォーマーを設定をクリックします。

「入力トランスフォーマーを設定」は個人的に見付けにくいです

  • 次のコードをコピーして「入力パス」に貼り付けます。
{ "severity": "$.detail.severity", "Finding_ID": "$.detail.id", "eventFirstSeen": "$.detail.service.eventFirstSeen", "eventLastSeen": "$.detail.service.eventLastSeen", "count": "$.detail.service.count", "Finding_Type": "$.detail.type", "region": "$.region", "Finding_description": "$.detail.description" }
  • 次のコードをコピーして 「テンプレート」 に貼り付けます。
  • このテンプレート内容でメールが届きます。
"重要度 <severity> のGuardDuty結果が発生しました。検索タイプ: <Finding_Type> リージョン: <region> タイプの説明: <Finding_description> 初回発生日時: <eventFirstSeen> 最新発生日時 <eventLastSeen> 発生数 <count> 詳細はGuardDuty コンソール( https://console.aws.amazon.com/guardduty/home?region=<region>#/findings?search=id%3D<Finding_ID> )を確認してください。"

  • 最後まで進み、間違いがないことを確認して「ルールの作成」 をクリックします。(タグなど必要であれば付与してください)

Amazon GuardDutyの通知テスト

  • GuardDutyコンソール左ペインから、「設定」を選択します。
  • 「検出結果のサンプル 」セクションで、「検出結果サンプルの生成」を選択します。
    • 一度に多数届くため、連打しないよう気を付けてください(200以上サンプルが生成、うち100以上が高リスク)。
    • 本番環境では事前チェックなしに押さないよう気をつけてください。

  • 参考までに、1つずつチェックしたい場合、GuardDuty検出結果タイプを確認しながらCLIで1件ずつ出力するという方法もございます。

    • 例:以下をAWS CloudShellで実行するとDiscovery:S3/MaliciousIPCallerのテストイベント1件が実行されます。
    • aws guardduty create-sample-findings --detector-id XXXXXX --finding-types Discovery:S3/MaliciousIPCaller (XXXXXXの detector-id は guardduty > 設定 > ディテクターID から確認できます)
  • 最短で5分(GuardDutyからCloudWatch Eventsへの連携上経過)後に、下記のサンプルのようなEメールが届けばOKです。

    • 送信者名はトピック名で届きます。

こんな感じで届きます。リンクを押すとコンソール画面に遷移します。

  • 重要度が7以上のアラートのみ届いていることが確認できれば完了です(試した時点では高重要度は数値が8で統一されているようでした)

垣見(かきみ)(執筆記事の一覧)

2023年新卒入社 エンタープライズクラウド部所属

図解するのが好き。「サバワク」のアイキャッチ作成も担当しています