はじめに

こんにちは、MSPチームの村上です。

今回は、GuardDutyで検知したイベントをNew Relicで検知するように設定してみたのでその内容をまとめてみました。

設定概要

今回の設定の概要は以下のような形です。

GuarDutyのイベントをEventBridgeで取得し、Kinesis Firehose ストリームに送り、そこからNew Relic Logsへと転送します。

※今回は1リージョンのみでの設定内容となります。

AWS側設定手順

① Amazon Data Firehoseでストリームを作成

以下のように項目を設定します。

  • ソース・・・Direct Put
  • 送信先・・・New Relic
  • ストリーム名・・・任意
  • HTTP エンドポイント URL・・・New Relic ログ 米国(米国か欧州かはお使いのNew Relicに準じます)
  • APIキー・・・New Relicにて取得したAPIキー

②EventBridge Rule作成

次にEventBridgeのルールを作成します。

  • ルール名・・・任意
  • イベントバス・・・default
  • ルールタイプ・・・イベントパターンを持つルール

  • イベントソース・・・AWSイベント
  • AWSのサービス・・・GuardDuty
  • イベントタイプ・・・GuardDuty Finding

※EventBridgeの段階で送信するログを限定する場合はイベントソースを「その他」にし、以下のJSONをイベントパターンに入力します。

{
  "source": ["aws.guardduty"],
  "detail-type": ["GuardDuty Finding"],
  "detail": {
    "severity": [7, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9, 8, 8.0, 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7, 8.8, 8.9]
  }
}
  • ターゲットタイプ・・・AWS のサービス
  • AWS のサービス・・・Firehoseストリーム(対象ストリームに①で作ったストリームを指定)

New Relic側設定手順

New Relic側の設定は特になく、ログが正常に転送されているか確認します。
まずは、GuardDutyからテスト発砲させます。

GuardDutyの発砲テスト方法

cloudshellを起動し以下のコマンドを実行します。

aws guardduty create-sample-findings \
–detector-id $(aws guardduty list-detectors –query ‘DetectorIds[0]’ –output text) \
–finding-types “出したい検出結果”

「出したい検出結果」には以下のドキュメントの結果タイプを参考にし入力します。

  • GuardDuty 検出結果タイプ

https://docs.aws.amazon.com/ja_jp/guardduty/latest/ug/guardduty_finding-types-active.html


aws guardduty create-sample-findings \
–detector-id $(aws guardduty list-detectors –query ‘DetectorIds[0]’ –output text) \
–finding-types “UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS”

挙動確認

上記画像のようにログが確認できれば設定完了です。

監視設定

New Relicへ正常にログが転送できることを確認したらNew Relicで任意のアラートを設定することができます。

NRQL例
SELECT count(*) FROM Log FACET detail.accountId, detail.region, detail.type WHERE detail.severity >= 7.0 AND detail.service.serviceName =’guardduty’

上記NRQLは重要度「高」以上の検出結果を絞ったものになります。

こちらの記事がどなたかの助けになれば幸いです。