Cloudflare-WAF-Protokolle erfassen

Unterstützt in:

Dieser Parser extrahiert Felder aus JSON-Logs der Cloudflare Web Application Firewall (WAF), transformiert sie und ordnet sie dem Unified Data Model (UDM) zu. Er verarbeitet verschiedene Cloudflare-Aktionen, ergänzt die Daten um Metadaten und Netzwerkinformationen und strukturiert die Ausgabe im UDM-Format.

Hinweise

  • Sie benötigen eine Google SecOps-Instanz.
  • Sie benötigen Berechtigungen für Google Cloud.
  • Sie benötigen einen Cloudflare Enterprise-Tarif.
  • Sie benötigen erhöhte Zugriffsrechte für Cloudflare.

Google Cloud Storage-Bucket erstellen

  1. In der Google Cloud -Konsole anmelden
  2. Rufen Sie die Seite Cloud Storage-Buckets auf.

    Buckets aufrufen

  3. Klicken Sie auf Erstellen.

  4. Konfigurieren Sie den Bucket:

    • Name: Geben Sie einen eindeutigen Namen ein, der den Anforderungen für Bucket-Namen entspricht (z. B. cloudflare-waf).
    • Speicherort für Daten auswählen: Wählen Sie einen Speicherort aus.
    • Wählen Sie eine Speicherklasse für Ihre Daten aus: Wählen Sie entweder eine Standardspeicherklasse für den Bucket oder Autoclass für die automatische Speicherklassenverwaltung aus.
    • Zugriff auf Objekte steuern: Wählen Sie nicht aus, um die Verhinderung des öffentlichen Zugriffs zu erzwingen, und wählen Sie ein Zugriffssteuerungsmodell für die Objekte Ihres Buckets aus.
    • Speicherklasse: Wählen Sie je nach Bedarf eine Option aus, z. B. Standard.
  5. Klicken Sie auf Erstellen.

Cloudflare IAM-Nutzer Bucket-Berechtigungen gewähren

  1. Klicken Sie auf Google Cloud > Storage > Browser > Bucket > Berechtigungen.
  2. Fügen Sie dem Konto „logpush@cloudflare-data.iam.gserviceaccount.com “ die Berechtigung „Storage-Objekt-Administrator“ hinzu.

Logpush-Job für WAF-Logs über die Cloudflare-Benutzeroberfläche erstellen

  1. Melden Sie sich in Cloudflare an.
  2. Gehen Sie zu Analysen und Protokolle > Logpush.
  3. Wählen Sie Logpush-Job erstellen aus.
  4. Wählen Sie unter Ziel auswählen die Option Google Cloud Speicher aus.
  5. Geben Sie die folgenden Zieldetails ein:
    • Bucket: Google Cloud Name des Storage-Buckets
    • Pfad: Speicherort des Buckets im Speichercontainer
    • Wählen Sie Logs in tägliche Unterordner organisieren aus.
  6. Klicken Sie auf Weiter.
  1. Wählen Sie das Dataset Sicherheit (WAF) aus, das an den Speicher gesendet werden soll.
  2. Konfigurieren Sie den Logpush-Job:
    • Geben Sie den Jobnamen ein.
    • Unter „Wenn Protokolle übereinstimmen“ können Sie die Ereignisse auswählen, die in die Protokolle aufgenommen und/oder daraus entfernt werden sollen. Weitere Informationen finden Sie unter Filter. Diese Option ist nicht für alle Datensätze verfügbar.
    • In den Feldern Senden Sie Folgendes können Sie entweder alle Protokolle an Ihr Speicherziel senden oder auswählen, welche Protokolle gesendet werden sollen.
  3. Klicken Sie auf Senden.

Feed in Google SecOps für die Aufnahme von Cloudflare-WAF-Logs konfigurieren

  1. Gehen Sie zu SIEM-Einstellungen > Feeds.
  2. Klicken Sie auf Neu hinzufügen.
  3. Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. Cloudflare-WAF-Protokolle.
  4. Wählen Sie Google Cloud Storage als Quelltyp aus.
  5. Wählen Sie Cloudflare WAF als Logtyp aus.
  6. Klicken Sie auf Dienstkonto abrufen.
  7. Klicken Sie auf Weiter.
  8. Geben Sie Werte für die folgenden Eingabeparameter an:

    • GCS-URI: die Cloud Storage-URL.
    • URI ist ein: Wählen Sie Verzeichnis mit Unterverzeichnissen aus.
    • Optionen zum Löschen der Quelle: Wählen Sie die gewünschte Löschoption aus.
    • Asset-Namespace: der Asset-Namespace.
    • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll.
  9. Klicken Sie auf Weiter.

  10. Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
Action security_result.action_details Der Wert von Action aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
Action security_result.action Der Wert dieses Felds wird aus dem Feld Action im Rohprotokoll abgeleitet. Wenn Action „allow“ (Zulassen) ist, wird das UDM-Feld auf ALLOW gesetzt. Wenn Action „challengeSolved“, „jschallengeSolved“, „managedchallengenoninteractivesolved“ oder „managedchallengeinteractivesolved“ ist, wird das UDM-Feld auf ALLOW_WITH_MODIFICATION gesetzt. Wenn Action „drop“, „block“ oder „connectionclose“ ist, wird das UDM-Feld auf BLOCK gesetzt. Wenn Action „challengefailed“ oder „jschallengefailed“ ist, wird das UDM-Feld auf FAIL gesetzt. Andernfalls wird er auf UNKNOWN_ACTION gesetzt.
ClientASN network.asn Der Wert von ClientASN aus dem Rohprotokoll wird diesem UDM-Feld direkt zugewiesen, nachdem es in einen String umgewandelt wurde.
ClientASNDescription additional.fields.key Der Schlüssel ist statisch auf „ClientASNDescription“ festgelegt.
ClientASNDescription additional.fields.value.string_value Der Wert von ClientASNDescription aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
ClientCountry principal.location.country_or_region Der Wert von ClientCountry aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
ClientIP principal.ip Der Wert von ClientIP aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
ClientRefererHost intermediary.hostname Der Wert von ClientRefererHost aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
ClientRefererPath network.http.referral_url Der Wert von ClientRefererPath aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
ClientRequestHost target.hostname Der Wert von ClientRequestHost aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
ClientRequestMethod network.http.method Der Wert von ClientRequestMethod aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
ClientRequestPath target.file.full_path Der Wert von ClientRequestPath aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
ClientRequestProtocol network.application_protocol Der Protokollteil von ClientRequestProtocol (z.B. „HTTP“ aus „HTTP/1.1“ wird mit Grok extrahiert, in Großbuchstaben umgewandelt und diesem UDM-Feld zugewiesen.
ClientRequestUserAgent network.http.user_agent Der Wert von ClientRequestUserAgent aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
Datetime metadata.event_timestamp Der Wert von Datetime aus dem Rohprotokoll wird als RFC 3339-Zeitstempel geparst und diesem UDM-Feld zugewiesen.
EdgeColoCode additional.fields.key Der Schlüssel ist statisch auf „EdgeColoCode“ festgelegt.
EdgeColoCode additional.fields.value.string_value Der Wert von EdgeColoCode aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
EdgeResponseStatus network.http.response_code Der Wert von EdgeResponseStatus aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen und in eine Ganzzahl umgewandelt.
Kind metadata.product_event_type Der Wert von Kind aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
Metadata.filter target.resource.attribute.labels.value Der Wert von Metadata.filter aus dem Rohprotokoll wird dem Feld value eines Labels in target.resource.attribute.labels zugewiesen. Der key für dieses Label ist statisch auf „Metadatenfilter“ festgelegt.
Metadata.type target.resource.attribute.labels.value Der Wert von Metadata.type aus dem Rohprotokoll wird dem Feld value eines Labels in target.resource.attribute.labels zugewiesen. Der key für dieses Label ist statisch auf „Metadata type“ (Metadatentyp) festgelegt. Der Wert dieses Felds wird anhand der Anwesenheit und der Werte von ClientIP, ClientRequestHost und app_protocol abgeleitet. Die spezifische Logik finden Sie im Parsercode. Statisch auf „Cloudflare“ festgelegt. Statisch auf „Cloudflare Log Aggregator“ festgelegt. Statisch auf „CLOUDFLARE_WAF“ festgelegt
RayID metadata.product_log_id Der Wert von RayID aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
RuleID security_result.rule_id Der Wert von RuleID aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
Source security_result.rule_name Der Wert von Source aus dem Rohprotokoll wird direkt diesem UDM-Feld zugewiesen.
timestamp metadata.event_timestamp, events.timestamp Der Wert timestamp aus dem Rohprotokoll wird diesen UDM-Feldern direkt zugewiesen.

Änderungen

2024-08-08

  • Daten aus „ClientRequestHost“ und „ClientRequestURI“ wurden extrahiert, zusammengeführt und dem Ergebnis „target.url“ zugeordnet.

2023-08-30

  • Feld „ClientRequestPath“ wurde initialisiert.

2023-02-02

  • Der Wert „security_result“ wurde vor dem Zusammenführen mit dem Ereignis validiert.

2022-09-16

  • Das Feld „Aktion“ wurde in „security_result.action_details“ umgewandelt.
  • „security_result.action“ wurde in „ALLOW_WITH_MODIFICATION“ umgewandelt, wenn die Aktion „challengeSolved“, „jschallengeSolved“, „managedchallengenoninteractivesolved“ oder „managedchallengeinteractivesolved“ enthält.
  • „security_result.action“ wurde in „BLOCK“ geändert, wenn die Aktion „drop“, „block“ oder „connectionclose“ enthält.
  • „security_result.action“ wurde in „FAIL“ umgewandelt, wenn „challengefailed“ oder „jschallengefailed“ in der Aktion enthalten ist.

2022-07-25

  • Neu erstellter Parser

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten