Cloudflare WAF のログを収集する
以下でサポートされています。
Google SecOps
SIEM
このパーサーは、Cloudflare Web Application Firewall(WAF)JSON ログからフィールドを抽出し、変換して統合データモデル(UDM)にマッピングします。さまざまな Cloudflare アクションを処理し、メタデータとネットワーク情報でデータを拡充してから出力を UDM 形式に構造化します。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス。
- Google Cloudへの特権アクセス。
- Cloudflare Enterprise プラン。
- Cloudflare への特権アクセス。
Google Cloud Storage バケットの作成
- Google Cloud コンソールにログインします。
[Cloud Storage バケット] のページに移動します。
[作成] をクリックします。
バケットを構成します。
- 名前: バケット名の要件を満たす一意の名前を入力します(例: cloudflare-waf)。
- データの保存場所の選択: ロケーションを選択します。
- データのストレージ クラスを選択する: バケットの [デフォルトのストレージ クラス] を選択するか、ストレージ クラスの自動管理に [Autoclass] を選択します。
- オブジェクトへのアクセスを制御する方法を選択する: [なし] を選択して公開アクセスの防止を適用し、バケットのオブジェクトの [アクセス制御モデル] を選択します。
- ストレージ クラス: 必要に応じて選択します(Standard など)。
[作成] をクリックします。
Cloudflare IAM ユーザーにバケット権限を付与する
- Google Cloudで、[ストレージ] > [ブラウザ] > [バケット] > [権限] に移動します。
- Storage オブジェクト管理者権限を持つアカウント logpush@cloudflare-data.iam.gserviceaccount.com を追加します。
Cloudflare UI を使用して WAF ログの Logpush ジョブを作成する
- Cloudflare にログインします。
- [Analytics & Logs] > [Logpush] に移動します。
- [Create a Logpush job] を選択します。
- [宛先を選択してください] で [Google Cloud ストレージ] を選択します。
- 次の宛先情報を入力します。
- バケット: Google Cloud ストレージ バケット名
- パス: ストレージ コンテナ内のバケットの場所
- [Organize logs into daily subfolders] を選択します。
- [続行] をクリックします。
- ストレージに push する [Security (WAF)] データセットを選択します。
- ログプッシュ ジョブを構成します。
- [ジョブ名] を入力します。
- [If logs match] で、ログに含めるイベントやログから削除するイベントを選択できます。詳しくは、フィルタをご覧ください。すべてのデータセットでこのオプションを使用できるわけではありません。
- [Send the following] フィールドで、すべてのログをストレージの宛先に push するか、push するログを選択するかを選択できます。
- [送信] をクリックします。
フィードを設定する
Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。
- [SIEM 設定] > [フィード]
- [Content Hub] > [Content Packs]
[SIEM 設定] > [フィード] でフィードを設定する
フィードを構成する手順は次のとおりです。
- [SIEM Settings] > [Feeds] に移動します。
- [Add New Feed] をクリックします。
- 次のページで [単一のフィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: Cloudflare WAF ログ)。
- [Source type] として [Google Cloud Storage] を選択します。
- [Log type] として [Cloudflare WAF] を選択します。
- [サービス アカウントを取得する] をクリックします。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
- GCS URI: Cloud Storage の URL。
- URI is a: [サブディレクトリを含むディレクトリ] を選択します。
- Source deletion options: 必要に応じて削除オプションを選択します。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
コンテンツ ハブからフィードを設定する
次のフィールドに値を指定します。
- GCS URI: Cloud Storage の URL。
- URI is a: [サブディレクトリを含むディレクトリ] を選択します。
- Source deletion options: 必要に応じて削除オプションを選択します。
詳細オプション
- フィード名: フィードを識別する事前入力された値。
- ソースタイプ: Google SecOps にログを収集するために使用される方法。
- アセットの名前空間: フィードに関連付けられた名前空間。
- Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。
UDM マッピング テーブル
ログフィールド | UDM マッピング | 論理 |
---|---|---|
Action |
security_result.action_details |
未加工ログの Action の値が、この UDM フィールドに直接割り当てられます。 |
Action |
security_result.action |
このフィールドの値は、未加工ログの Action フィールドから派生します。Action が「allow」の場合、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 は、「メタデータ タイプ」に静的に設定されています。このフィールドの値は、ClientIP 、ClientRequestHost 、app_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_timestamp 、events.timestamp |
未加工ログの timestamp の値が、これらの UDM フィールドに直接割り当てられます。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。