Forseti Open Source-Logs erfassen

Unterstützt in:

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

  1. Gehen Sie zur Google Cloud Console.
  2. Wählen Sie Ihr Projekt aus oder erstellen Sie ein neues.
  3. Rufen Sie im Navigationsmenü Cloud Storage > Buckets auf.
  4. Klicken Sie auf Bucket erstellen.
  5. 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
  6. 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.

  1. Stellen Sie eine SSH-Verbindung zu Ihrer Forseti-Server-VM her:

    gcloud compute ssh forseti-server-vm --project=YOUR_PROJECT_ID --zone=YOUR_ZONE
    

    Ersetzen Sie YOUR_PROJECT_ID und YOUR_ZONE durch die Werte Ihrer Forseti-Bereitstellung.

  2. Öffnen Sie die Konfigurationsdatei des Forseti-Servers zur Bearbeitung:

    sudo nano /home/ubuntu/forseti-security/configs/forseti_conf_server.yaml
    

    Wenn 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.yaml
    
  3. Rufen Sie den Bereich notifier auf und suchen Sie nach dem Unterbereich resources.

  4. 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 sind iam_policy_violations, firewall_rule_violations, cloudsql_acl_violations, bucket_acl_violations, config_validator_violations und groups_settings_violations.
    • should_notify: Auf true festgelegt, um Benachrichtigungen für diesen Ressourcentyp zu aktivieren.
    • data_format: Das Format der exportierten Daten. Gültige Werte sind csv und json. Der Standardwert ist csv.
    • gcs_path: Der Cloud Storage-Pfad, in den Verstöße exportiert werden. Der Pfad muss mit gs:// beginnen und sollte einen nachgestellten Schrägstrich enthalten.
  5. Speichern Sie die Konfigurationsdatei.

  6. 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.yaml
    
  7. Laden Sie die Forseti-Serverkonfiguration neu:

    forseti server configuration reload
    
  8. Prü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

  1. Rufen Sie die SIEM-Einstellungen > Feeds auf.
  2. Klicken Sie auf Neuen Feed hinzufügen.
  3. Klicken Sie auf Einzelnen Feed konfigurieren.
  4. Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. Forseti Violations.
  5. Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
  6. Wählen Sie Forseti Open Source als Logtyp aus.

  7. Klicken Sie auf Dienstkonto abrufen.

  8. Es wird eine eindeutige E-Mail-Adresse für das Dienstkonto angezeigt, z. B.:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. Kopieren Sie diese E-Mail-Adresse. Sie verwenden es in der nächsten Aufgabe.

  10. Klicken Sie auf Weiter.

  11. 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.
  12. Klicken Sie auf Weiter.

  13. 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

  1. Rufen Sie Cloud Storage > Buckets auf.
  2. Klicken Sie auf den Namen Ihres Buckets.
  3. Wechseln Sie zum Tab Berechtigungen.
  4. Klicken Sie auf Zugriff erlauben.
  5. 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.
  6. 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