Forseti Open Source-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie Forseti Open Source-Logs mit Google Cloud Storage V2 in Google Security Operations aufnehmen.
Forseti Security ist eine von der Community entwickelte Sammlung von Open-Source-Tools zur Verbesserung der Sicherheit von Google Cloud-Umgebungen. Forseti erstellt in regelmäßigen Abständen Inventar-Snapshots von GCP-Ressourcen, scannt Ressourcen, um sicherzustellen, dass die Zugriffskontrollen wie vorgesehen eingerichtet sind, und bietet Einblick in Cloud IAM-Richtlinien.
Hinweise
Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:
- Google SecOps-Instanz.
- GCP-Projekt mit aktivierter Cloud Storage API.
- Berechtigungen zum Erstellen und Verwalten von GCS-Buckets.
- Berechtigungen zum Verwalten von IAM-Richtlinien für GCS-Buckets.
- Eine vorhandene Forseti Security-Bereitstellung, z. B. mit dem Forseti Terraform-Modul in Google Compute Engine bereitgestellt.
- Zugriff auf die Konfigurationsdatei des Forseti-Servers (
forseti_conf_server.yaml).
Google Cloud Storage-Bucket erstellen
Google Cloud Console verwenden
- 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. forseti-violations-export.Standorttyp Wählen Sie je nach Bedarf aus (Region, Dual-Region, Multi-Region). Standort Wählen Sie den Speicherort 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.
gcloud-Befehlszeilentool verwenden
Alternativ können Sie einen Bucket mit dem Befehl gcloud erstellen:
gcloud storage buckets create gs://forseti-violations-export \
--location=us-central1 \
--default-storage-class=STANDARD
Ersetzen Sie:
forseti-violations-export: Der gewünschte Bucket-Name (global eindeutig).us-central1: Ihre bevorzugte Region (z. B.us-central1,europe-west1).
Forseti Security so konfigurieren, dass Verstöße in GCS exportiert werden
Forseti Security verwendet eine Notifier-Konfiguration in der Datei forseti_conf_server.yaml, um Scanner-Verstöße in Google Cloud Storage zu exportieren.
Stellen Sie eine SSH-Verbindung zu Ihrer Forseti-Server-VM her:
gcloud compute ssh forseti-server-vm --project=YOUR_PROJECT_ID --zone=YOUR_ZONEErsetzen Sie
YOUR_PROJECT_IDundYOUR_ZONEdurch die Werte Ihrer Forseti-Bereitstellung.Öffnen Sie die Konfigurationsdatei des Forseti-Servers zur Bearbeitung:
sudo nano /home/ubuntu/forseti-security/configs/forseti_conf_server.yamlWenn für Ihre Forseti-Bereitstellung eine GCS-basierte Konfiguration verwendet wird, laden Sie die Datei aus dem Bucket Ihres Forseti-Servers herunter:
gsutil cp gs://YOUR_FORSETI_SERVER_BUCKET/configs/forseti_conf_server.yaml ~/forseti_conf_server.yamlRufen Sie den Bereich
notifierauf und suchen Sie nach dem Unterbereichresources.Konfigurieren Sie für jeden Ressourcentyp für Verstöße, den Sie exportieren möchten, den
gcs_violations-Notifier. Fügen Sie die Konfiguration folgendermaßen hinzu oder aktualisieren Sie sie:notifier: resources: - resource: iam_policy_violations should_notify: true notifiers: - name: gcs_violations configuration: data_format: csv gcs_path: gs://forseti-violations-export/violations/ - resource: firewall_rule_violations should_notify: true notifiers: - name: gcs_violations configuration: data_format: csv gcs_path: gs://forseti-violations-export/violations/ - resource: cloudsql_acl_violations should_notify: true notifiers: - name: gcs_violations configuration: data_format: csv gcs_path: gs://forseti-violations-export/violations/ - resource: bucket_acl_violations should_notify: true notifiers: - name: gcs_violations configuration: data_format: csv gcs_path: gs://forseti-violations-export/violations/ - resource: config_validator_violations should_notify: true notifiers: - name: gcs_violations configuration: data_format: csv gcs_path: gs://forseti-violations-export/violations/Ersetzen Sie:
forseti-violations-export: Der Name des GCS-Buckets, den Sie im vorherigen Schritt erstellt haben.violations/: Optionaler Präfixpfad zum Organisieren von Dateien mit Verstößen.
Konfigurationsparameter:
resource: Der Ressourcentyp des Verstoßes. Welche Ressourcentypen verfügbar sind, hängt davon ab, welche Forseti-Scanner in Ihrer Bereitstellung aktiviert sind. Gängige Typen sindiam_policy_violations,firewall_rule_violations,cloudsql_acl_violations,bucket_acl_violations,config_validator_violationsundgroups_settings_violations.should_notify: Auftruefestgelegt, um Benachrichtigungen für diesen Ressourcentyp zu aktivieren.data_format: Das Format der exportierten Daten. Gültige Werte sindcsvundjson. Der Standardwert istcsv.gcs_path: Der Cloud Storage-Pfad, in den Verstöße exportiert werden. Der Pfad muss mitgs://beginnen und sollte einen nachgestellten Schrägstrich enthalten.
Speichern Sie die Konfigurationsdatei.
Wenn Sie die Konfiguration aus GCS heruntergeladen haben, laden Sie die aktualisierte Datei wieder in den Bucket Ihres Forseti-Servers hoch:
gsutil cp ~/forseti_conf_server.yaml gs://YOUR_FORSETI_SERVER_BUCKET/configs/forseti_conf_server.yamlLaden Sie die Forseti-Serverkonfiguration neu:
forseti server configuration reloadPrüfen Sie, ob die Konfiguration erfolgreich geladen wurde:
forseti server configuration get | grep gcs_violations
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.
Feed in Google SecOps konfigurieren, um Forseti Open Source-Logs aufzunehmen
- 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.
Forseti Violations. - Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
Wählen Sie Forseti Open Source 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. Sie verwenden es in der nächsten Aufgabe.
Klicken Sie auf Weiter.
Geben Sie Werte für die folgenden Eingabeparameter an:
- Storage-Bucket-URL: Geben Sie den GCS-Bucket-URI mit dem Präfixpfad ein:
gs://forseti-violations-export/violations/- Ersetzen Sie:
forseti-violations-export: Der Name Ihres GCS-Buckets.violations/: Optionales Präfix/Ordnerpfad, in dem Logs gespeichert werden (für den Stamm leer lassen).
Option zum Löschen der Quelle: Wählen Sie die gewünschte Löschoption aus:
- Nie: Es werden nach Übertragungen nie Dateien 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. Der Standardwert ist 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.
Dem Google SecOps-Dienstkonto IAM-Berechtigungen gewähren
Das Google SecOps-Dienstkonto benötigt die Rolle Storage-Objekt-Betrachter für Ihren GCS-Bucket.
Google Cloud Console verwenden
- Rufen Sie Cloud Storage > Buckets auf.
- Klicken Sie auf den Namen Ihres Buckets.
- 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.
gcloud-Befehlszeilentool verwenden
Alternativ können Sie Berechtigungen mit dem Befehl gcloud erteilen:
gcloud storage buckets add-iam-policy-binding gs://forseti-violations-export \
--member="serviceAccount:chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com" \
--role="roles/storage.objectViewer"
Ersetzen Sie:
forseti-violations-export: Ihr Bucket-Name.chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com: Die E-Mail-Adresse des Google SecOps-Dienstkontos.
gsutil-Befehlszeilentool verwenden (Legacy)
gsutil iam ch serviceAccount:chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com:objectViewer \
gs://forseti-violations-export
Berechtigungen prüfen
So prüfen Sie, ob die Berechtigungen richtig erteilt wurden:
gcloud storage buckets get-iam-policy gs://forseti-violations-export \
--flatten="bindings[].members" \
--filter="bindings.role:roles/storage.objectViewer"
In der Ausgabe sollte die E-Mail-Adresse des Google SecOps-Dienstkontos angezeigt werden.
UDM-Zuordnungstabelle
| Logfeld | UDM-Zuordnung | Logik |
|---|---|---|
| data.resource_data.instanceGroupUrls | about | Zusammengeführt aus dem Array „instanceGroupUrls“ |
| data.resource_data.nodePools.*.statusMessage | metadata.description | Wert aus „nodePool.statusMessage“ |
| data.resource_type | metadata.event_type | Auf RESOURCE_PERMISSIONS_CHANGE für kms_cryptokey/serviceaccount_key, RESOURCE_DELETION für firewall, STATUS_HEARTBEAT für kubernetes_cluster und ansonsten auf GENERIC_EVENT festlegen |
| data.scanner_index_id | metadata.product_log_id | Wert direkt kopiert, in String umgewandelt |
| metadata.product_name | Auf „FORSETI SECURITY“ festgelegt | |
| metadata.vendor_name | Auf „FORSETI“ festgelegt | |
| data.resource_data.direction | network.direction | Auf INBOUND gesetzt, wenn die Richtung INGRESS ist. |
| data.resource_data.endpoint | principal.ip | Wert direkt kopiert |
| data.resource_data.nodeConfig.oauthScopes.0 | principal.url | Wert direkt kopiert |
| data.full_name, serviceAccount | principal.user.userid | Wird aus „data.full_name“ mit „grok“ extrahiert oder auf „serviceAccount“ festgelegt, wenn nicht leer. |
| data.violation_data.protection_level, data.violation_data.purpose, data.violation_data.project_id, data.violation_data.node_pool_name, data.violation_data.violation_reason | security_result.detection_fields | Zusammengeführt aus mehreren Schlüssel/Wert-Paaren |
| data.violation_type | security_result.category | Auf POLICY_VIOLATION setzen, wenn FIREWALL_BLACKLIST_VIOLATION, auf UNKNOWN_CATEGORY, wenn KE_VERSION_VIOLATION, andernfalls auf ACL_VIOLATION |
| data.rule_name | security_result.rule_name | Wert direkt kopiert |
| data.violation_type | security_result.summary | Wert direkt kopiert |
| data.resource_data.zone | target.asset.attribute.cloud.availability_zone | Wert direkt kopiert |
| target.asset.attribute.cloud.environment | Auf „GOOGLE_CLOUD_PLATFORM“ festlegen | |
| data.full_name | target.asset.attribute.cloud.project.id | Mit grok aus data.full_name extrahiert |
| data.resource_data.subnetwork | target.asset.attribute.cloud.vpc.name | Wert direkt kopiert |
| data.resource_data.nodeConfig.machineType | target.asset.hardware | Zusammengeführt aus „machineType“ und konstanter CPU-Plattform |
| data.resource_data.privateClusterConfig.privateEndpoint | target.ip | Wert direkt kopiert |
| data.resource_data.versionTemplate.algorithm, data.resource_data.key_algorithm | target.labels | Zusammengeführtes Schlüssel/Wert-Paar für den Algorithmus, falls vorhanden |
| data.resource_data.location | target.location.name | Wert direkt kopiert |
| data.resource_name | target.resource.name | Wert direkt kopiert |
| data.resource_id | target.resource.product_object_id | Wert wird direkt kopiert, wenn er sich von „resource_name“ unterscheidet. |
| data.resource_type | target.resource.resource_subtype | Auf „gke“ festlegen, wenn „resource_type“ „kubernetes_cluster“ ist |
| data.resource_type | target.resource.resource_type | Entsprechend dem ursprünglichen „resource_type“ einem bestimmten Typ zugeordnet |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten