Cloudflare-WAF-Protokolle erfassen
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
- In der Google Cloud -Konsole anmelden
Rufen Sie die Seite Cloud Storage-Buckets auf.
Klicken Sie auf Erstellen.
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.
Klicken Sie auf Erstellen.
Cloudflare IAM-Nutzer Bucket-Berechtigungen gewähren
- Klicken Sie auf Google Cloud > Storage > Browser > Bucket > Berechtigungen.
- 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
- Melden Sie sich in Cloudflare an.
- Gehen Sie zu Analysen und Protokolle > Logpush.
- Wählen Sie Logpush-Job erstellen aus.
- Wählen Sie unter Ziel auswählen die Option Google Cloud Speicher aus.
- 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.
- Klicken Sie auf Weiter.
- Wählen Sie das Dataset Sicherheit (WAF) aus, das an den Speicher gesendet werden soll.
- 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.
- Klicken Sie auf Senden.
Feed in Google SecOps für die Aufnahme von Cloudflare-WAF-Logs konfigurieren
- Gehen Sie zu SIEM-Einstellungen > Feeds.
- Klicken Sie auf Neu hinzufügen.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. Cloudflare-WAF-Protokolle.
- Wählen Sie Google Cloud Storage als Quelltyp aus.
- Wählen Sie Cloudflare WAF als Logtyp aus.
- Klicken Sie auf Dienstkonto abrufen.
- Klicken Sie auf Weiter.
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.
Klicken Sie auf Weiter.
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