Cloudflare WAF ログを収集する

以下でサポートされています。

このパーサーは、Cloudflare ウェブ アプリケーション ファイアウォール(WAF)JSON ログからフィールドを抽出し、変換して統合データモデル(UDM)にマッピングします。さまざまな Cloudflare アクションを処理し、出力を UDM 形式に構造化するために、メタデータとネットワーク情報でデータを拡充します。

始める前に

  • Google SecOps インスタンスがあることを確認します。
  • Google Cloudに対する特権アクセス権があることを確認します。
  • Cloudflare Enterprise プランがあることを確認します。
  • Cloudflare への特権アクセス権があることを確認します。

Google Cloud Storage バケットを作成する

  1. Google Cloud コンソールにログインします。
  2. Cloud Storage バケットのページに移動します。

    [バケット] に移動

  3. [作成] をクリックします。

  4. バケットを構成します。

    • 名前: バケット名の要件を満たす一意の名前を入力します(cloudflare-waf など)。
    • データの保存場所を選択する: ロケーションを選択します。
    • データのストレージ クラスを選択する: バケットのデフォルトのストレージ クラスを選択するか、ストレージ クラスの自動管理に Autoclass を選択します。
    • オブジェクトへのアクセスを制御する方法を選択する: [なし] を選択して公開アクセスの防止を適用し、バケットのオブジェクトのアクセス制御モデルを選択します。
    • ストレージ クラス: ニーズに応じて選択します(Standard など)。
  5. [作成] をクリックします。

Cloudflare IAM ユーザーにバケット権限を付与する

  1. Google Cloudで、[ストレージ] > [ブラウザ] > [バケット] > [権限] に移動します。
  2. ストレージ オブジェクト管理者権限を持つアカウント logpush@cloudflare-data.iam.gserviceaccount.com を追加します。

Cloudflare UI を使用して WAF ログの Logpush ジョブを作成する

  1. Cloudflare にログインします。
  2. [分析とログ] > [Logpush] に移動します。
  3. [Logpush ジョブを作成] を選択します。
  4. [宛先を選択] で、[Google Cloud Storage] を選択します。
  5. 次の宛先の詳細情報を入力します。
    • バケット: Google Cloud ストレージ バケット名
    • パス: ストレージ コンテナ内のバケットの場所
    • [ログを日次サブフォルダに整理] を選択します。
  6. [続行] をクリックします。
  1. ストレージに push する [Security (WAF)] データセットを選択します。
  2. logpush ジョブを構成します。
    • ジョブ名を入力します。
    • [ログが一致する場合] で、ログに含めるイベントやログから削除するイベントを選択できます。詳細については、フィルタをご覧ください。すべてのデータセットでこのオプションを使用できるわけではありません。
    • [次のログを送信] フィールドで、すべてのログをストレージの宛先に push するか、push するログを選択的に選択するかを選択できます。
  3. [送信] をクリックします。

Cloudflare WAF ログを取り込むように Google SecOps でフィードを構成する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [新しく追加] をクリックします。
  3. [フィード名] フィールドに、フィードの名前を入力します(例: Cloudflare WAF ログ)。
  4. [Source type] として [Google Cloud Storage] を選択します。
  5. [ログタイプ] として [Cloudflare WAF] を選択します。
  6. [Get Service Account] をクリックします。
  7. [次へ] をクリックします。
  8. 次の入力パラメータの値を指定します。

    • GCS URI: Cloud Storage の URL。
    • URI is a: [サブディレクトリを含むディレクトリ] を選択します。
    • ソース削除オプション: 必要に応じて削除オプションを選択します。
    • アセットの名前空間: アセットの名前空間
    • 取り込みラベル: このフィードのイベントに適用されるラベル。
  9. [次へ] をクリックします。

  10. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
Action security_result.action_details 元のログの Action の値が、この UDM フィールドに直接割り当てられます。
Action security_result.action このフィールドの値は、元のログの Action フィールドから取得されます。Action が「許可」の場合、UDM フィールドは ALLOW に設定されます。Action が「challengeSolved」、「jschallengeSolved」、「managedchallengenoninteractivesolved」、「managedchallengeinteractivesolved」の場合、UDM フィールドは ALLOW_WITH_MODIFICATION に設定されます。Action が「drop」、「block」、「connectionclose」の場合、UDM フィールドは BLOCK に設定されます。Action が「challengefailed」または「jschallengefailed」の場合、UDM フィールドは FAIL に設定されます。それ以外の場合は UNKNOWN_ACTION に設定されます。
ClientASN network.asn 未加工ログの ClientASN の値は、文字列に変換された後、この UDM フィールドに直接割り当てられます。
ClientASNDescription additional.fields.key このキーは静的に「ClientASNDescription」に設定されています。
ClientASNDescription additional.fields.value.string_value 元のログの ClientASNDescription の値が、この UDM フィールドに直接割り当てられます。
ClientCountry principal.location.country_or_region 元のログの ClientCountry の値が、この UDM フィールドに直接割り当てられます。
ClientIP principal.ip 未加工ログの ClientIP の値が、この UDM フィールドに直接割り当てられます。
ClientRefererHost intermediary.hostname 元のログの ClientRefererHost の値が、この UDM フィールドに直接割り当てられます。
ClientRefererPath network.http.referral_url 元のログの ClientRefererPath の値が、この UDM フィールドに直接割り当てられます。
ClientRequestHost target.hostname 元のログの ClientRequestHost の値が、この UDM フィールドに直接割り当てられます。
ClientRequestMethod network.http.method 元のログの ClientRequestMethod の値が、この UDM フィールドに直接割り当てられます。
ClientRequestPath target.file.full_path 元のログの ClientRequestPath の値が、この UDM フィールドに直接割り当てられます。
ClientRequestProtocol network.application_protocol ClientRequestProtocol のプロトコル部分(例: 「HTTP/1.1」の「HTTP」)が grok を使用して抽出され、大文字に変換されてこの UDM フィールドに割り当てられます。
ClientRequestUserAgent network.http.user_agent 未加工ログの ClientRequestUserAgent の値が、この UDM フィールドに直接割り当てられます。
Datetime metadata.event_timestamp 元のログの Datetime の値は RFC 3339 タイムスタンプとして解析され、この UDM フィールドに割り当てられます。
EdgeColoCode additional.fields.key このキーは「EdgeColoCode」に静的に設定されています。
EdgeColoCode additional.fields.value.string_value 元のログの EdgeColoCode の値が、この UDM フィールドに直接割り当てられます。
EdgeResponseStatus network.http.response_code 元のログの EdgeResponseStatus の値は、この UDM フィールドに直接割り当てられ、整数に変換されます。
Kind metadata.product_event_type 未加工ログの Kind の値が、この UDM フィールドに直接割り当てられます。
Metadata.filter target.resource.attribute.labels.value 元のログの Metadata.filter の値は、target.resource.attribute.labels 内のラベルの value フィールドに割り当てられます。このラベルの key は、静的に「メタデータ フィルタ」に設定されています。
Metadata.type target.resource.attribute.labels.value 未加工ログの Metadata.type の値は、target.resource.attribute.labels 内のラベルの value フィールドに割り当てられます。このラベルの key は、静的に「メタデータ タイプ」に設定されています。このフィールドの値は、ClientIPClientRequestHostapp_protocol の存在と値に基づいて導出されます。具体的なロジックについては、パーサー コードをご覧ください。静的に「Cloudflare」に設定されます。静的に「Cloudflare log Aggregator」に設定されます。静的に「CLOUDFLARE_WAF」に設定。
RayID metadata.product_log_id 未加工ログの RayID の値が、この UDM フィールドに直接割り当てられます。
RuleID security_result.rule_id 元のログの RuleID の値が、この UDM フィールドに直接割り当てられます。
Source security_result.rule_name 未加工ログの Source の値が、この UDM フィールドに直接割り当てられます。
timestamp metadata.event_timestampevents.timestamp 未加工ログの timestamp の値は、これらの UDM フィールドに直接割り当てられます。

変更点

2024-08-08

  • 「ClientRequestHost」と「ClientRequestURI」からデータを抽出し、統合して結果を「target.url」にマッピングしました。

2023-08-30

  • フィールド「ClientRequestPath」を初期化しました。

2023-02-02

  • イベントに統合する前に「security_result」値を検証しました。

2022-09-16

  • フィールド「Action」を「security_result.action_details」にマッピングしました。
  • アクションに「challengeSolved」、「jschallengeSolved」、「managedchallengenoninteractivesolved」、「managedchallengeinteractivesolved」が含まれている場合、「security_result.action」を「ALLOW_WITH_MODIFICATION」にマッピングしました。
  • アクションに「drop」、「block」、「connectionclose」が含まれている場合に、「security_result.action」を「BLOCK」にマッピングしました。
  • アクションに「challengefailed」、「jschallengefailed」が含まれている場合、「security_result.action」を「FAIL」にマッピングしました。

2022-07-25

  • 新しく作成されたパーサー