F5 Distributed Cloud Services-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie F5 Distributed Cloud Services-Logs mit Google Cloud Storage V2 in Google Security Operations aufnehmen.
F5 Distributed Cloud Services ist eine SaaS-basierte Plattform für Sicherheit, Netzwerk und Anwendungsverwaltung, die verteilte Cloud-Infrastruktur, Anwendungsbereitstellung, API-Sicherheit und Web Application Firewall-Funktionen in Multi-Cloud- und Edge-Standorten bietet.
Hinweise
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Eine Google SecOps-Instanz
- Ein Google Cloud-Projekt mit aktivierter Cloud Storage API
- Berechtigungen zum Erstellen und Verwalten von GCS-Buckets
- Berechtigungen zum Verwalten von IAM-Richtlinien für GCS-Buckets
- Berechtigter Zugriff auf die F5 Distributed Cloud Console
- Berechtigungen zum Erstellen von globalen Log-Empfängerobjekten in F5 Distributed Cloud
Google Cloud Storage-Bucket erstellen
- Öffnen Sie die Google Cloud Console.
- Wählen Sie Ihr Projekt aus oder erstellen Sie ein neues.
- Rufen Sie im Navigationsmenü Cloud Storage > Buckets auf.
- Klicken Sie auf Bucket erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Bucket benennen Geben Sie einen global eindeutigen Namen ein, z. B. f5-dcs-logs.Standorttyp Wählen Sie je nach Bedarf aus (Region, Dual-Region, Multi-Region). Standort Wählen Sie den Ort aus, z. B. us-central1.Speicherklasse Standard (empfohlen für Logs, auf die häufig zugegriffen wird) Zugriffskontrolle Einheitlich (empfohlen) Schutzmaßnahmen Optional: Objektversionsverwaltung oder Aufbewahrungsrichtlinie aktivieren Klicken Sie auf Erstellen.
F5 Distributed Cloud für den Export nach GCS konfigurieren
GCS-Bucket zur Firewall-Zulassungsliste hinzufügen
Für den globalen Log-Empfänger von F5 Distributed Cloud müssen die folgenden IP-Adressbereiche zur Liste der zulässigen IP-Adressen Ihrer Firewall hinzugefügt werden:
193.16.236.64/29185.160.8.152/29
Wenn für Ihren GCS-Bucket VPC Service Controls oder Firewallregeln verwendet werden, fügen Sie diese IP-Bereiche der Zulassungsliste hinzu.
Google Cloud-Dienstkonto für F5 Distributed Cloud erstellen
- Wechseln Sie in der Google Cloud Console zu IAM & Verwaltung > Dienstkonten.
- Klicken Sie auf Dienstkonto erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
- Name des Dienstkontos: Geben Sie
f5-dcs-log-writer(oder einen beschreibenden Namen) ein. - Beschreibung des Dienstkontos: Geben Sie
Service account for F5 Distributed Cloud to write logs to GCSein.
- Name des Dienstkontos: Geben Sie
Klicken Sie auf Erstellen und fortfahren.
Im Abschnitt Diesem Dienstkonto Zugriff auf das Projekt erteilen:
- Klicken Sie auf Rolle auswählen.
- Suchen Sie nach Storage-Objekt-Administrator und wählen Sie die Rolle aus.
Klicken Sie auf Weiter.
Klicken Sie auf Fertig.
Dienstkontoschlüssel erstellen
- Klicken Sie in der Liste Dienstkonten auf das von Ihnen erstellte Dienstkonto (z. B.
f5-dcs-log-writer). - Rufen Sie den Tab Schlüssel auf.
- Klicken Sie auf Schlüssel hinzufügen > Neuen Schlüssel erstellen.
- Wählen Sie JSON als Schlüsseltyp aus.
- Klicken Sie auf Erstellen.
- Die JSON-Schlüsseldatei wird auf Ihren Computer heruntergeladen.
- Speichern Sie diese Datei sicher. Sie benötigen sie in den nächsten Schritten.
IAM-Berechtigungen für den GCS-Bucket erteilen
- Rufen Sie Cloud Storage > Buckets auf.
- Klicken Sie auf den Namen Ihres Buckets, z. B.
f5-dcs-logs. - Wechseln Sie zum Tab Berechtigungen.
- Klicken Sie auf Zugriff erlauben.
- Geben Sie die folgenden Konfigurationsdetails an:
- Hauptkonten hinzufügen: Geben Sie die E-Mail-Adresse des Dienstkontos ein (z. B.
f5-dcs-log-writer@PROJECT_ID.iam.gserviceaccount.com). - Rollen zuweisen: Wählen Sie Storage-Objekt-Administrator aus.
- Hauptkonten hinzufügen: Geben Sie die E-Mail-Adresse des Dienstkontos ein (z. B.
- Klicken Sie auf Speichern.
Google Cloud-Anmeldedaten in der F5 Distributed Cloud Console erstellen
- Melden Sie sich in der F5 Distributed Cloud Console unter
https://<tenant>.console.ves.volterra.ioan. - Wählen Sie auf der Startseite den Dienst Multi-Cloud Network Connect aus.
- Gehen Sie zu Verwalten> Websiteverwaltung> Cloud-Anmeldedaten.
- Klicken Sie auf Cloud-Anmeldedaten hinzufügen.
- Im Abschnitt Metadaten:
- Name: Geben Sie einen aussagekräftigen Namen ein, z. B.
gcp-chronicle-logs. - Beschreibung (optional): Geben Sie
Cloud Storage credentials for Google SecOps log exportein.
- Name: Geben Sie einen aussagekräftigen Namen ein, z. B.
- Wählen Sie im Abschnitt Cloud Credentials Type (Typ der Cloud-Anmeldedaten) die Option GCP Credentials (GCP-Anmeldedaten) aus.
- Klicken Sie im Feld GCP-Anmeldedaten auf Konfigurieren.
- Wählen Sie im Drop-down-Menü Credential Type (Anmeldedatentyp) die Option Service Account Credentials File (Datei mit Dienstkonto-Anmeldedaten) aus.
- Klicken Sie auf Datei hochladen und wählen Sie die JSON-Schlüsseldatei aus, die Sie in den vorherigen Schritten heruntergeladen haben.
- Klicken Sie auf Übernehmen.
- Klicken Sie auf Speichern und beenden.
Globalen Log-Empfänger erstellen
- Achten Sie in der F5 Distributed Cloud Console darauf, dass Sie sich im Dienst Multi-Cloud Network Connect befinden.
- Klicken Sie auf Verwalten > Log-Verwaltung > Globaler Log-Empfänger.
- Klicken Sie auf Globalen Log-Empfänger hinzufügen.
Im Abschnitt Metadaten:
- Name: Geben Sie einen aussagekräftigen Namen ein, z. B.
chronicle-gcs-receiver. - Beschreibung (optional): Geben Sie
Global log receiver for Google SecOps SIEMein.
- Name: Geben Sie einen aussagekräftigen Namen ein, z. B.
Wählen Sie im Drop-down-Menü Log-Typ die Log-Typen aus, die Sie exportieren möchten:
- Anfragelogs: HTTP-Anfrage-/Antwortlogs mit Nutzer, Pfad, Methode und Antwortcodes
- Sicherheitsereignisse: WAF-Ereignisse, DDoS-, API-Schutz- und Bot-Defense-Ereignisse
- Audit-Logs: Konfigurationsänderungen über öffentliche APIs
- DNS-Anfragelogs: Logs von DNS-Abfragen
Wählen Sie im Drop-down-Menü Log Message Selection (Auswahl von Logmeldungen) eine der folgenden Optionen aus:
- Logs aus dem aktuellen Namespace auswählen: Es werden nur Logs aus dem aktuellen Namespace gesendet.
- Logs aus allen Namespaces auswählen: Sendet Logs aus allen Namespaces (empfohlen für umfassende Sichtbarkeit)
- Logs in bestimmten Namespaces auswählen: Sendet Logs aus angegebenen Namespaces. Klicken Sie auf Element hinzufügen, um Namespace-Namen hinzuzufügen.
Wählen Sie im Drop-down-Menü Receiver Configuration (Empfängerkonfiguration) die Option GCP Bucket Receiver (GCP-Bucket-Empfänger) aus.
Geben Sie im Feld GCP Bucket Name (GCP-Bucket-Name) den Namen Ihres GCS-Buckets ein, z. B.
f5-dcs-logs.Wählen Sie im Drop-down-Menü GCP Cloud Credentials (GCP-Cloud-Anmeldedaten) die zuvor erstellten Cloud-Anmeldedaten aus (z. B.
gcp-chronicle-logs).Optional: Maximieren Sie Erweiterte Felder einblenden, um Batch-Optionen zu konfigurieren:
- Batch Timeout Options (Optionen für Zeitüberschreitung bei Batch): Wählen Sie Timeout Seconds (Zeitüberschreitung in Sekunden) aus und geben Sie einen Wert ein (Standard:
300Sekunden). - Batch Max Events (Maximale Anzahl von Ereignissen pro Batch): Wählen Sie Max Events (Maximale Anzahl von Ereignissen) aus und geben Sie einen Wert zwischen 32 und 2.000 ein. Wenn Sie kein Limit festlegen möchten, lassen Sie das Feld leer.
- Batch Bytes (Batch-Byte): Wählen Sie Max Bytes (Maximale Byte) aus und geben Sie einen Wert zwischen 4.096 und 1.048.576 ein (Standard:
10485760Byte / 10 MB).
- Batch Timeout Options (Optionen für Zeitüberschreitung bei Batch): Wählen Sie Timeout Seconds (Zeitüberschreitung in Sekunden) aus und geben Sie einen Wert ein (Standard:
Klicken Sie auf Speichern und beenden.
Verbindung testen
- Suchen Sie in der Liste Global Log Receiver (Globaler Log-Empfänger) nach dem von Ihnen erstellten Empfänger, z. B.
chronicle-gcs-receiver. - Klicken Sie in der Spalte Aktionen auf das Dreipunkt-Menü (...).
- Wählen Sie Verbindung testen aus.
- Warten Sie, bis der Test abgeschlossen ist.
Es sollte eine Meldung angezeigt werden, die auf eine erfolgreiche Verbindung hinweist.
Logs im GCS-Bucket prüfen
- Rufen Sie in der GCP Console Cloud Storage > Buckets auf.
- Klicken Sie auf den Namen Ihres Buckets, z. B.
f5-dcs-logs. - Prüfen Sie, ob Logdateien im Bucket erstellt werden.
F5 Distributed Cloud organisiert Logs in der folgenden Ordnerstruktur:
YYYY/MM/DD/HH/- Für jeden Tag wird ein Ordner erstellt (JJJJ/MM/TT).
- In jedem Tagesordner wird für jede Stunde (HH) ein Unterordner erstellt.
- Alle 5 Minuten werden neue komprimierte GZIP-Dateien in den stündlichen Unterordner geschrieben.
- Dateien haben das NDJSON-Format (durch Zeilenumbruch getrenntes JSON)
Klicken Sie auf eine GZIP-Datei, um das Logformat herunterzuladen und zu prüfen.
Google SecOps-Dienstkonto abrufen
Google SecOps verwendet ein eindeutiges Dienstkonto, um Daten aus Ihrem GCS-Bucket zu lesen. Sie müssen diesem Dienstkonto Zugriff auf Ihren Bucket gewähren.
E-Mail-Adresse des Dienstkontos abrufen
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf Einzelnen Feed konfigurieren.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B.
F5 DCS Logs. - Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
- Wählen Sie F5 Distributed Cloud Services als Logtyp aus.
Klicken Sie auf Dienstkonto abrufen. Es wird eine eindeutige E-Mail-Adresse für das Dienstkonto angezeigt, z. B.:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comKopieren Sie diese E‑Mail-Adresse für den nächsten Schritt.
Klicken Sie auf Weiter.
Geben Sie Werte für die folgenden Eingabeparameter an:
Storage-Bucket-URL: Geben Sie den GCS-Bucket-URI ein:
gs://f5-dcs-logs/Ersetzen Sie
f5-dcs-logsdurch den Namen Ihres GCS-Buckets.Option zum Löschen der Quelle: Wählen Sie die gewünschte Löschoption aus:
- Nie: Es werden niemals Dateien nach Übertragungen gelöscht (empfohlen für Tests).
- Übertragene Dateien löschen: Dateien werden nach der erfolgreichen Übertragung gelöscht.
Übertragene Dateien und leere Verzeichnisse löschen: Löscht Dateien und leere Verzeichnisse nach der erfolgreichen Übertragung.
Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden (Standard ist 180 Tage)
Asset-Namespace: Der Asset-Namespace
Labels für Datenaufnahme: 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.
Dem Google SecOps-Dienstkonto IAM-Berechtigungen gewähren
Das Google SecOps-Dienstkonto benötigt die Rolle Storage-Objekt-Betrachter für Ihren GCS-Bucket.
- Rufen Sie Cloud Storage > Buckets auf.
- Klicken Sie auf den Namen Ihres Buckets, z. B.
f5-dcs-logs. - Wechseln Sie zum Tab Berechtigungen.
- Klicken Sie auf Zugriff erlauben.
Geben Sie die folgenden Konfigurationsdetails an:
- Hauptkonten hinzufügen: Fügen Sie die E‑Mail-Adresse des Google SecOps-Dienstkontos ein.
- Rollen zuweisen: Wählen Sie Storage-Objekt-Betrachter aus.
Klicken Sie auf Speichern.
UDM-Zuordnungstabelle
| Logfeld | UDM-Zuordnung | Logik |
|---|---|---|
| _id | metadata.product_log_id | Wert direkt kopiert |
| src | principal.namespace | Wert direkt kopiert |
| kubernetes_labels_app | target.resource.attribute.labels | Zusammengeführt aus app_label (abgeleitet von kubernetes_labels_app) |
| kubernetes_host | target.hostname | Wert direkt kopiert |
| kubernetes_container_name | target.resource.product_object_id | Wert direkt kopiert |
| bot_info.classification | security_result.detection_fields | Zusammengeführt aus „bot_info_classification_label“ (abgeleitet von „bot_info.classification“) |
| bot_info.name | security_result.detection_fields | Zusammengeführt aus „bot_info_name_label“ (abgeleitet von „bot_info.name“) |
| bot_info.type | security_result.detection_fields | Zusammengeführt aus „bot_info_type_label“ (abgeleitet von „bot_info.type“) |
| timestamp | @timestamp | Geprüft mit Datumsfilter mit RFC3339, UNIX, ISO8601 |
| visitor_id | security_result.detection_fields | Zusammengeführt aus „visitor_id_label“ (abgeleitet von „visitor_id“) |
| Tag | security_result.detection_fields | Zusammengeführt aus tag_label (abgeleitet von tag) |
| Aktion | security_result.action | Auf ALLOW setzen, wenn Übereinstimmungen zulässig sind, auf BLOCK, wenn Übereinstimmungen abgelehnt werden |
| die Ausprägung | security_result.severity | Auf „HIGH“ setzen, wenn ein Fehler oder eine Warnung vorliegt; auf „CRITICAL“, wenn ein kritischer Fehler vorliegt; auf „MEDIUM“, wenn eine Mitteilung vorliegt; auf „LOW“, wenn Informationen vorliegen. |
| die Ausprägung | security_result.severity_details | Wert direkt kopiert |
| api_endpoint | target.labels | Zusammengeführt aus „api_endpoint_label“ (abgeleitet von „api_endpoint“) |
| app_firewall_name | principal.process.command_line | Wert direkt kopiert |
| app_type | security_result.detection_fields | Zusammengeführt aus „about_app_type“ (abgeleitet von „app_type“) |
| as_org | security_result.detection_fields | Zusammengeführt aus about_as_org (abgeleitet von as_org) |
| asn | security_result.detection_fields | Zusammengeführt aus about_asn (abgeleitet von asn) |
| kubernetes.pod_id | security_result.detection_fields | Zusammengeführt aus „about_pod_id“ (abgeleitet von „kubernetes.pod_id“) |
| kubernetes.pod_name | security_result.detection_fields | Zusammengeführt aus about_pod_name (abgeleitet von kubernetes.pod_name) |
| latitude | principal.location.region_latitude | In Gleitkommazahl konvertiert |
| longitude | principal.location.region_longitude | In Gleitkommazahl konvertiert |
| req_params | additional.fields | Zusammengeführt aus about_req_params (abgeleitet von req_params) |
| as_number | additional.fields | Zusammengeführt aus „about_as_number“ (in String konvertiert aus „as_number“) |
| x_forwarded_for | intermediary.ip | Zusammengeführt, wenn gültige IP-Adresse |
| x_forwarded_for | security_result.about.resource.attribute.labels | Zusammengeführt aus x_forwarded_for_label, wenn nicht IP |
| policy_hit.malicious_user_mitigate_action | security_result.detection_fields | Zusammengeführt aus „malicious_user_label“ (abgeleitet von „policy_hit.malicious_user_mitigate_action“) |
| policy_hit.policy | security_result.about.resource.attribute.labels | Zusammengeführt aus policy_label (abgeleitet von policy_hit.policy) |
| policy_hit.policy_namespace | additional.fields | Zusammengeführt aus policy_namespace_label (abgeleitet von policy_hit.policy_namespace) |
| policy_hit.policy_rule | security_result.rule_name | Wert direkt kopiert |
| policy_hit.policy_rule_description | security_result.description | Wert direkt kopiert |
| policy_hit.policy_set | target.resource.name | Wert direkt kopiert |
| policy_hit.result | additional.fields | Zusammengeführt aus „result_label“ (abgeleitet von „policy_hit.result“) |
| vhost_id | security_result.detection_fields | Zusammengeführt aus vhostlabel (abgeleitet von vhost_id) |
| messageid | security_result.detection_fields | Zusammengeführt aus „messageid_label“ (abgeleitet von „messageid“) |
| sec_event_name | security_result.detection_fields | Zusammengeführt aus „sec_event_name_label“ (abgeleitet von „sec_event_name“) |
| sec_event_type | security_result.detection_fields | Zusammengeführt aus „sec_event_type_label“ (abgeleitet von „sec_event_type“) |
| vh_name | security_result.detection_fields | Zusammengeführt aus vhost_name_label (abgeleitet von vh_name) |
| tls_fingerprint | security_result.detection_fields | Zusammengeführt aus „tls_fingerprint_label“ (abgeleitet von „tls_fingerprint“) |
| Zeit | additional.fields | Zusammengeführt aus „time_label“ (abgeleitet von „time“) |
| kubernetes.namespace_name | additional.fields | Zusammengeführt aus namespace_name_label (abgeleitet von kubernetes.namespace_name) |
| src_instance | additional.fields | Zusammengeführt aus src_instance_label (abgeleitet von src_instance) |
| violation_rating | additional.fields | Zusammengeführt aus „violation_rating_label“ (abgeleitet aus „violation_rating“) |
| req_size | additional.fields | Zusammengeführt aus req_size_label (von req_size in String konvertiert) |
| rsp_code | additional.fields | Zusammengeführt aus rsp_code_label (in String aus rsp_code konvertiert) |
| rsp_code_class | additional.fields | Zusammengeführt aus rsp_code_class_label (in String konvertiert aus rsp_code_class) |
| rsp_size | additional.fields | Zusammengeführt aus rsp_size_label (von rsp_size in String konvertiert) |
| original_path | additional.fields | Zusammengeführt aus „original_path_label“ (abgeleitet von „original_path“) |
| req_path | target.url | Wert direkt kopiert |
| req_headers_size | additional.fields | Zusammengeführt aus req_headers_size_label (abgeleitet von req_headers_size) |
| recommended_action | additional.fields | Zusammengeführt aus „recommended_action_label“ (abgeleitet von „recommended_action“) |
| enforcement_mode | additional.fields | Zusammengeführt aus „enforcement_mode_label“ (abgeleitet von „enforcement_mode“) |
| src_ip | principal.ip, principal.asset.ip | Zusammengeführt, wenn sie mit dem IPv4-Regex übereinstimmt |
| Host | principal.ip, principal.asset.ip | Zusammengeführt, wenn sie mit dem IPv4-Regex übereinstimmt |
| Hostname | principal.hostname, principal.asset.hostname | Der Wert wird direkt kopiert, wenn er nicht leer ist, oder – |
| http_version | network.application_protocol_version | Wert direkt kopiert |
| http_version | network.application_protocol | Auf HTTP festlegen, wenn HTTP enthalten ist, auf HTTPS, wenn HTTPS enthalten ist |
| Netzwerk | principal.nat_ip | Zusammengeführt, wenn sie mit dem IPv4-Regex übereinstimmt |
| dst_ip | target.ip, target.asset.ip | Zusammengeführt, wenn sie mit dem IPv4-Regex übereinstimmt |
| dst_port | target.port | In Ganzzahl konvertiert |
| src_port | principal.port | In Ganzzahl konvertiert |
| src_site | additional.fields | Zusammengeführt aus src_site_field (abgeleitet von src_site) |
| Website | additional.fields | Zusammengeführt aus „site_field“ (abgeleitet von „site“) |
| cluster_name | additional.fields | Zusammengeführt aus cluster_name_field (abgeleitet von cluster_name) |
| Domain | principal.administrative_domain | Wert direkt kopiert |
| method | network.http.method | Wert wird direkt kopiert, wenn er nicht leer oder „N/A“ ist. |
| Namespace | target.namespace | Wert direkt kopiert |
| Ort | principal.location.city | Wert direkt kopiert |
| stream | security_result.detection_fields | Zusammengeführt aus stream_label (abgeleitet von stream) |
| Region | principal.location.country_or_region | Wert direkt kopiert |
| Nutzer | principal.user.userid | Vom Nutzer extrahiert, indem das Grok-Muster für user_id verwendet wird |
| user_ip | target.ip, target.asset.ip | Zusammengeführt aus extrahierter user_ip |
| Cookie | additional.fields | Zusammengeführt aus Cookie (abgeleitet von Cookie in req_headers) |
| X-F5-Request-Id | security_result.detection_fields | Zusammengeführt aus x_f5_request_id (abgeleitet aus X-F5-Request-Id in req_headers) |
| X-Request-Id | security_result.detection_fields | Zusammengeführt aus request_id (abgeleitet aus X-Request-Id in req_headers) |
| security_result | security_result | Direkt zusammengeführt |
| has_network, has_principal, has_target | metadata.event_type | Auf NETWORK_CONNECTION gesetzt, wenn alle Bedingungen zutreffen; STATUS_UPDATE, wenn has_principal „true“ ist; andernfalls GENERIC_EVENT |
| metadata.vendor_name | Auf „F5_DCS“ festlegen | |
| metadata.product_name | Auf „F5 DCS“ festlegen | |
| Vermittler | Vermittler | Direkt zusammengeführt |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten