Benutzerdefinierte DNS-Logs erfassen
Parserversion: 1.0
In diesem Dokument wird beschrieben, wie Sie benutzerdefinierte DNS-Logs mit Google Cloud Storage V2 in Google Security Operations aufnehmen.
„Benutzerdefiniertes DNS“ ist ein generischer Logtyp für DNS-Serverlogs aus benutzerdefinierten oder nicht unterstützten DNS-Implementierungen. Sie erfasst Daten zu DNS-Anfragen und ‑Antworten, einschließlich Domains, Datensatztypen und Clientinformationen. Da diese Logs aus nicht standardmäßigen DNS-Quellen stammen, müssen Sie sie in einen Google Cloud Storage-Bucket (GCS) exportieren und dann einen Google SecOps-Feed konfigurieren, um sie aufzunehmen.
Hinweis
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
- Ein DNS-Server oder -Dienst, der Logs in einem unterstützten Format generiert (JSON wird empfohlen)
- Administratorzugriff auf den DNS-Server zum Konfigurieren von Log-Exporten
Google Cloud Storage-Bucket erstellen
- Gehen Sie zur 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. custom-dns-logs.Standorttyp Wählen Sie die Option aus, die am besten zu Ihren Anforderungen passt (Region, Dual-Region, Multi-Region). Standort Wählen Sie den Standort aus, der Ihrer Google SecOps-Instanz am nächsten ist (z. B. us-central1).Speicherklasse Standard (empfohlen für Logs, auf die häufig zugegriffen wird) Zugriffskontrolle Einheitlich (empfohlen) Schutztools Optional: Objektversionierung oder Aufbewahrungsrichtlinie aktivieren Klicken Sie auf Erstellen.
Automatischen Export von DNS-Logs nach GCS konfigurieren
Die Methode zum Exportieren von DNS-Logs hängt von der Implementierung Ihres DNS-Servers ab. Wählen Sie den Ansatz aus, der am besten zu Ihrer Umgebung passt.
Option 1: Cloud Logging-Senke (für DNS-Server in GCE)
Wenn Ihr DNS-Server auf einer Google Compute Engine-Instanz ausgeführt wird und Logs in Cloud Logging speichert, erstellen Sie einen Log-Sink, um DNS-Logs direkt in GCS zu exportieren.
- Rufen Sie in der GCP Console Logging > Log Router auf.
- Klicken Sie auf Senke erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Name der Senke custom-dns-to-gcsSenkenziel Cloud Storage-Bucket Bucket custom-dns-logsEinschlussfilter Ein Filter, der mit Ihren DNS-Logeinträgen übereinstimmt (z. B. resource.type="gce_instance" AND logName="projects/YOUR_PROJECT_ID/logs/dns")Klicken Sie auf Senke erstellen.
Option 2: Cloud Scheduler mit Cloud Build (für lokale DNS-Server)
Verwenden Sie Cloud Build, das von Cloud Scheduler ausgelöst wird, um einen containerisierten Exportjob auszuführen, der DNS-Logs von einem Remote-Server erfasst und in GCS schreibt.
Erstellen Sie ein Dienstkonto für den Exportjob:
- Wechseln Sie in der GCP Console zu IAM und Verwaltung > Dienstkonten.
- Klicken Sie auf Dienstkonto erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name des Dienstkontos: Geben Sie
dns-log-export-saein. - Beschreibung des Dienstkontos: Geben Sie
Service account for automated DNS log export to GCSein.
- Name des Dienstkontos: Geben Sie
- Klicken Sie auf Erstellen und fortfahren.
- Fügen Sie die folgenden Rollen hinzu:
- Storage-Objekt-Administrator (zum Schreiben von Dateien in GCS)
- Cloud Build-Bearbeiter (zum Ausführen von Cloud Build-Jobs)
- Klicken Sie auf Fertig.
Erstellen Sie eine Cloud Build-Konfigurationsdatei (
cloudbuild.yaml):steps: - name: 'gcr.io/cloud-builders/gcloud' entrypoint: 'bash' args: - '-c' - | # Collect DNS logs from your server # Replace with the actual command for your environment # Example: pull logs via syslog-ng, rsync from remote server, or query DNS log API curl -s -H "Authorization: Bearer $${API_TOKEN}" \ "https://your-dns-server.example.com/api/logs?format=json" \ -o /workspace/dns_logs.json # Upload to GCS gcloud storage cp /workspace/dns_logs.json \ gs://${_BUCKET_NAME}/dns/dns_logs_$(date -u +%Y%m%d_%H%M%S).json substitutions: _BUCKET_NAME: 'custom-dns-logs'Cloud Scheduler-Job erstellen, um den Build auszulösen:
- Rufen Sie in der GCP Console Cloud Scheduler auf.
- Klicken Sie auf Job erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Name dns-log-export-hourlyRegion Wählen Sie dieselbe Region wie für Ihren GCS-Bucket aus. Frequenz 0 * * * *(jede Stunde)Zeitzone UTC (empfohlen) Zieltyp HTTP URL https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/buildsHTTP-Methode POST Auth-Header OAuth-Token hinzufügen Dienstkonto dns-log-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.comKlicken Sie auf Erstellen.
Option 3: Storage Transfer Service (für lokale Dateisysteme)
Wenn DNS-Logs in ein lokales Dateisystem geschrieben werden, verwenden Sie Storage Transfer Service mit einem Transfer Agent, um sie in GCS zu verschieben.
- Rufen Sie in der GCP Console den Storage Transfer Service auf.
- Klicken Sie auf Übertragung erstellen.
- Wählen Sie POSIX-Dateisystem als Quelle aus.
- Folgen Sie der Anleitung, um den Storage Transfer Agent auf dem DNS-Server oder einem Computer mit Zugriff auf die DNS-Logdateien zu installieren.
Übertragungsjob konfigurieren:
Einstellung Wert Quellverzeichnis Pfad zum Verzeichnis der DNS-Logdatei Ziel-Bucket custom-dns-logsZielpfad dns/Planen Wiederkehrenden Zeitplan festlegen (z. B. stündlich) Klicken Sie auf Erstellen.
Google SecOps-Dienstkonto 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.
Custom DNS Logs. - Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
- Wählen Sie Benutzerdefiniertes DNS als Protokolltyp 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.
Dem Google SecOps-Dienstkonto IAM-Berechtigungen gewähren
Das Google SecOps-Dienstkonto benötigt die Rolle Storage Object Viewer für Ihren GCS-Bucket.
- Rufen Sie Cloud Storage > Buckets auf.
- Klicken Sie auf den Namen Ihres Buckets (z. B.
custom-dns-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 (z. B.
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com). - Rollen zuweisen: Wählen Sie Storage Object Viewer aus.
- Hauptkonten hinzufügen: Fügen Sie die E-Mail-Adresse des Google SecOps-Dienstkontos ein (z. B.
Klicken Sie auf Speichern.
Google SecOps-Feed konfigurieren
- 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.
Custom DNS Logs. - Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
- Wählen Sie Benutzerdefiniertes DNS als Protokolltyp aus.
- Klicken Sie auf Weiter.
Geben Sie Werte für die folgenden Eingabeparameter an:
Storage-Bucket-URI: Geben Sie den GCS-Bucket-URI ein:
gs://custom-dns-logs/dns/- Ersetzen Sie
custom-dns-logsdurch den Namen Ihres GCS-Buckets. - Ersetzen Sie
dnsdurch den konfigurierten Präfixpfad.
- Ersetzen Sie
Option zum Löschen der Quelle: Wählen Sie die gewünschte Option zum Löschen aus:
- Nie: Löscht nach Übertragungen nie Dateien (empfohlen für Tests).
Ü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 (Standardwert: 180 Tage).
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 |
|---|---|---|
receiveTimestamp |
metadata.event_timestamp |
Als RFC 3339 geparst |
message |
metadata.event_type |
Zugeordnet: "dns_query" → NETWORK_DNS |
jsonPayload.msg |
metadata.product_event_type |
Direkt zugeordnet |
insertId |
metadata.product_log_id |
Direkt zugeordnet |
message |
metadata.product_name |
Zugeordnet: "dns_query" → Custom DNS |
message |
metadata.vendor_name |
Zugeordnet: "dns_query" → CUSTOM |
message |
network.application_protocol |
Zugeordnet: "dns_query" → DNS |
dns_answers |
network.dns.answers |
Zusammengeführt |
message |
network.dns.answers |
Zugeordnet: "dns_query" → dns_answers |
dns_question |
network.dns.questions |
Zusammengeführt |
message |
network.dns.questions |
Zugeordnet: "dns_query" → dns_question |
dns.response_code |
network.dns.response_code |
Umbenannt/zugeordnet |
message |
principal.hostname |
Zugeordnet: "dns_query" → jsonPayload.dns_query.server |
jsonPayload.dns_query.server |
principal.ip |
Zusammengeführt |
message |
principal.ip |
Zugeordnet: "dns_query" → jsonPayload.dns_query.server |
message |
security_result |
Zugeordnet: "dns_query" → security_result |
logName |
security_result.category_details |
Zusammengeführt |
message |
security_result.category_details |
Zugeordnet: "dns_query" → logName |
message |
security_result.severity |
Zugeordnet: "dns_query" → INFORMATIONAL, "dns_query" → MEDIUM, "dns_query" → HIGH |
labels.application |
target.application |
Direkt zugeordnet |
message |
target.hostname |
Zugeordnet: "dns_query" → jsonPayload.dns_query.server |
jsonPayload.dns_query.server |
target.ip |
Zusammengeführt |
message |
target.ip |
Zugeordnet: "dns_query" → jsonPayload.dns_query.server |
component_label |
target.labels |
Zusammengeführt |
instance_group_label |
target.labels |
Zusammengeführt |
message |
target.labels |
Zugeordnet: "dns_query" → component_label, "dns_query" → instance_group_label |
labels.region |
target.location.country_or_region |
Direkt zugeordnet |
resource.labels.zone |
target.resource.attribute.cloud.availability_zone |
Direkt zugeordnet |
message |
target.resource.attribute.cloud.environment |
Zugeordnet: "dns_query" → GOOGLE_CLOUD_PLATFORM |
resource.labels.project_id |
target.resource.attribute.cloud.project.id |
Direkt zugeordnet |
message |
target.resource.resource_type |
Zugeordnet: "dns_query" → VIRTUAL_MACHINE |
| – | metadata.event_type |
Konstante: NETWORK_DNS |
| – | metadata.product_name |
Konstante: Custom DNS |
| – | metadata.vendor_name |
Konstante: CUSTOM |
| – | network.application_protocol |
Konstante: DNS |
| – | principal.hostname |
Konstante: jsonPayload.dns_query.server |
| – | security_result.severity |
Konstante: INFORMATIONAL |
| – | target.hostname |
Konstante: jsonPayload.dns_query.server |
| – | target.resource.attribute.cloud.environment |
Konstante: GOOGLE_CLOUD_PLATFORM |
| – | target.resource.resource_type |
Konstante: VIRTUAL_MACHINE |
Änderungsprotokoll
Änderungsprotokoll für diesen Parser ansehen
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten