
垣見(かきみ)です。
タイトルの通り、Amazon GuardDutyで「重要度:高」以上をメール通知する方法をお客様に聞かれて検証したので、ブログとしても書きました。
実は以前弊社社員が同様のブログを書いているのですが、4年前ということで最新版として改めてまとめました。
基本的には大筋は以前のものと同じです。私は偉大な巨人の肩に乗っています。いつもありがとうございます。
概要
大きく分けて以下の二つの手順となっています。
1. Amazon SNSで、トピックとサブスクリプションを設定します。
2. Amazon EventBridgeでルールを作成し、ターゲットをAmazon SNSにします。

注意事項
※手順書内に記載がない部分はデフォルトの設定を意味します。
※本設定はリージョン毎に必要ですので、複数リージョンでGuardDutyを導入される場合は、 都度リージョンを切替して 設定をしてください。
手順
Amazon SNSの準備
トピックを作成する
- Guarddutyと同じリージョンにいることを確認してください。
- Amazon SNS コンソールを開きます。

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

- 「トピックの作成」を選択すると、トピックが作成されます。
サブスクリプションを作成する
- Amazon SNS コンソールから「サブスクリプション」へ移動します。

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

- 「サブスクリプションの作成」を選択します。
- トピック名の送信元でサブスクリプションの承認メールが届きますので、「Confirm subscription」 のリンクが張られたメールが送付されます。このURLリンクは左クリック(押下)しないでください。
(左クリックしてしまうと、通知メールが届くたびに間違えてUnsubscribeを押してしまうリスクがあるとのご指摘を受けました。ありがとうございます。)
Confirm subscription リンク先の URL を、右クリック⇒「リンクのアドレスをコピーする」を実行し取得します。

上画像の通り、SNSコンソールの Confirm subscription を押下して、先ほど取得したURLを貼り付けます。

- 貼り付けたら Confirm subscription を押下して完了です。

マネジメントコンソール上部に Subscription wad confirmed successfully. と出ていれば成功です。
このように、Eメールのリンクを押下するのではなく、マネジメントコンソールから直接登録を行うことで 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 イベントパターンでのコンテンツフィルタリングに記載の書き方で書いています。
重要度がCriticalなら9.0~10.0、重要度高なら7.0~8.9、中なら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 から確認できます)
- 例:以下をAWS CloudShellで実行すると
最短で5分(GuardDutyからCloudWatch Eventsへの連携上経過)後に、下記のサンプルのようなEメールが届けばOKです。
- 送信者名はトピック名で届きます。

- 重要度が7以上のアラートのみ届いていることが確認できれば完了です(試した時点では高重要度は数値が8で統一されているようでした)
垣見(かきみ)(執筆記事の一覧)
2023年新卒入社 エンタープライズクラウド部所属 2025 Japan AWS Jr.Champions
図解するのが好き。「サバワク」のアイキャッチ作成も担当しています