Salesforce Commerce Cloud-Protokolle erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie Salesforce Commerce Cloud-Logs mit Google Cloud Storage V2 in Google Security Operations aufnehmen.

Salesforce Commerce Cloud ist eine E-Commerce-Plattform, die Transaktions-, Zugriffs- und Sicherheitsaudit-Logs generiert. Eine Cloud Run-Funktion stellt planmäßig eine Verbindung zum Salesforce Commerce Cloud WebDAV-Endpunkt her, lädt Logdateien herunter, schreibt sie im NDJSON-Format in einen GCS-Bucket und Google SecOps nimmt sie über einen GCS V2-Feed auf.

Hinweis

Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:

  • Eine Google SecOps-Instanz
  • Ein 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
  • Berechtigungen zum Erstellen von Cloud Run-Diensten, Pub/Sub-Themen und Cloud Scheduler-Jobs
  • Berechtigter Zugriff auf Salesforce Commerce Cloud Business Manager mit WebDAV-Zugriffsberechtigung

Google Cloud Storage-Bucket erstellen

  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. sfcc-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, 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.

Salesforce Commerce Cloud-Anmeldedaten erfassen

WebDAV-Zugriff konfigurieren

  1. Melden Sie sich im Business Manager für Ihre Salesforce Commerce Cloud-Instanz an.
  2. Klicken Sie auf Verwaltung > Organisation > Rollen und Berechtigungen.
  3. Prüfen Sie, ob für Ihr Nutzerkonto die Berechtigung WebDAV File Access aktiviert ist.
  4. Notieren Sie sich den Hostnamen Ihrer SFCC-Instanz (z. B. development-yoursite-dw.demandware.net).
  5. Speichern Sie die folgenden Anmeldedaten an einem sicheren Ort:

    • SFCC-Host: Der Hostname Ihrer Instanz (z. B. development-yoursite-dw.demandware.net).
    • Nutzername: Ihr Business Manager-Nutzername.
    • Passwort: Ihr Business Manager-Passwort.

Berechtigungen prüfen

So prüfen Sie, ob das Konto die erforderlichen Berechtigungen hat:

  1. Melden Sie sich im Business Manager für Ihre Salesforce Commerce Cloud-Instanz an.
  2. Rufen Sie Verwaltung > Website-Entwicklung > Entwicklungseinrichtung auf.
  3. Klicken Sie im Bereich „WebDAV“ auf Log Files (Protokolldateien).
  4. Wenn Sie Logdateiverzeichnisse sehen können, haben Sie die erforderlichen Berechtigungen.
  5. Wenn Sie diese Option nicht sehen, wenden Sie sich an Ihren SFCC-Administrator, um WebDAV-Zugriff zu erhalten.

API-Zugriff testen

  • Testen Sie Ihre Anmeldedaten, bevor Sie mit der Integration fortfahren:

    # Replace with your actual credentials
    SFCC_HOST="development-yoursite-dw.demandware.net"
    USERNAME="your-username"
    PASSWORD="your-password"
    
    # Test WebDAV access to log directory
    curl -v -u "${USERNAME}:${PASSWORD}" \
      "https://${SFCC_HOST}/on/demandware.servlet/webdav/Sites/Logs/"
    

Dienstkonto für Cloud Run-Funktion erstellen

Die Cloud Run-Funktion benötigt ein Dienstkonto mit Berechtigungen zum Schreiben in den GCS-Bucket und zum Aufrufen durch Pub/Sub.

Dienstkonto erstellen

  1. Wechseln Sie in der GCP Console zu IAM & Verwaltung > Dienstkonten.
  2. Klicken Sie auf Dienstkonto erstellen.
  3. Geben Sie die folgenden Konfigurationsdetails an:
    • Name des Dienstkontos: Geben Sie sfcc-logs-collector-sa ein.
    • Beschreibung des Dienstkontos: Geben Sie Service account for Cloud Run function to collect Salesforce Commerce Cloud logs ein.
  4. Klicken Sie auf Erstellen und fortfahren.
  5. Fügen Sie im Abschnitt Diesem Dienstkonto Zugriff auf das Projekt erteilen die folgenden Rollen hinzu:
    1. Klicken Sie auf Rolle auswählen.
    2. Suchen Sie nach Storage-Objekt-Administrator und wählen Sie die Rolle aus.
    3. Klicken Sie auf + Weitere Rolle hinzufügen.
    4. Suchen Sie nach Cloud Run Invoker und wählen Sie die Rolle aus.
    5. Klicken Sie auf + Weitere Rolle hinzufügen.
    6. Suchen Sie nach Cloud Functions Invoker und wählen Sie die Rolle aus.
  6. Klicken Sie auf Weiter.
  7. Klicken Sie auf Fertig.

Diese Rollen sind erforderlich für:

  • Storage-Objekt-Administrator: Protokolle in GCS-Bucket schreiben und Statusdateien verwalten
  • Cloud Run-Aufrufer: Pub/Sub darf die Funktion aufrufen.
  • Cloud Functions-Invoker: Funktionsaufruf zulassen

IAM-Berechtigungen für GCS-Bucket erteilen

Gewähren Sie dem Dienstkonto Schreibberechtigungen für den GCS-Bucket:

  1. Rufen Sie Cloud Storage > Buckets auf.
  2. Klicken Sie auf den Namen Ihres Buckets, z. B. sfcc-logs.
  3. Wechseln Sie zum Tab Berechtigungen.
  4. Klicken Sie auf Zugriff erlauben.
  5. Geben Sie die folgenden Konfigurationsdetails an:
    • Hauptkonten hinzufügen: Geben Sie die E-Mail-Adresse des Dienstkontos ein (z. B. sfcc-logs-collector-sa@your-project.iam.gserviceaccount.com).
    • Rollen zuweisen: Wählen Sie Storage-Objekt-Administrator aus.
  6. Klicken Sie auf Speichern.

Pub/Sub-Thema erstellen

Erstellen Sie ein Pub/Sub-Thema, in dem Cloud Scheduler veröffentlicht und das von der Cloud Run-Funktion abonniert wird.

  1. Rufen Sie in der GCP Console Pub/Sub > Themen auf.
  2. Klicken Sie auf Thema erstellen.
  3. Geben Sie die folgenden Konfigurationsdetails an:
    • Themen-ID: Geben Sie sfcc-logs-trigger ein.
    • Übernehmen Sie die anderen Einstellungen.
  4. Klicken Sie auf Erstellen.

Cloud Run-Funktion zum Erfassen von Logs erstellen

Die Cloud Run-Funktion wird durch Pub/Sub-Nachrichten von Cloud Scheduler ausgelöst, um Protokolle aus Salesforce Commerce Cloud WebDAV abzurufen und in GCS zu schreiben.

  1. Rufen Sie in der GCP Console Cloud Run auf.
  2. Klicken Sie auf Dienst erstellen.
  3. Wählen Sie Funktion aus, um eine Funktion mit einem Inline-Editor zu erstellen.
  4. Geben Sie im Abschnitt Konfigurieren die folgenden Konfigurationsdetails an:

    Einstellung Wert
    Dienstname sfcc-logs-collector
    Region Wählen Sie die Region aus, die Ihrem GCS-Bucket entspricht (z. B. us-central1).
    Laufzeit Wählen Sie Python 3.12 oder höher aus.
  5. Im Abschnitt Trigger (optional):

    1. Klicken Sie auf + Trigger hinzufügen.
    2. Wählen Sie Cloud Pub/Sub aus.
    3. Wählen Sie unter Cloud Pub/Sub-Thema auswählen das Thema sfcc-logs-trigger aus.
    4. Klicken Sie auf Speichern.
  6. Im Abschnitt Authentifizierung:

    1. Wählen Sie Authentifizierung erforderlich aus.
    2. Identitäts- und Zugriffsverwaltung
  7. Scrollen Sie nach unten und maximieren Sie Container, Netzwerk, Sicherheit.

  8. Rufen Sie den Tab Sicherheit auf:

    • Dienstkonto: Wählen Sie das Dienstkonto sfcc-logs-collector-sa aus.
  9. Rufen Sie den Tab Container auf:

    1. Klicken Sie auf Variablen und Secrets.
    2. Klicken Sie für jede Umgebungsvariable auf + Variable hinzufügen:
    Variablenname Beispielwert Beschreibung
    GCS_BUCKET sfcc-logs Name des GCS-Buckets
    GCS_PREFIX sfcc Präfix für Protokolldateien
    STATE_KEY sfcc/state.json Statusdateipfad
    SFCC_HOST development-yoursite-dw.demandware.net SFCC-Instanzhostname
    SFCC_USERNAME your-username Nutzername des Unternehmensmanagers
    SFCC_PASSWORD your-password Passwort für den Unternehmensmanager
    LOG_DIRS security,error,warn,customerror Kommagetrennte Protokollverzeichnisse
    LOOKBACK_HOURS 24 Erster Rückschauzeitraum
  10. Scrollen Sie auf dem Tab Variablen und Secrets nach unten zu Anfragen:

    • Zeitlimit für Anfragen: Geben Sie 600 Sekunden (10 Minuten) ein.
  11. Rufen Sie den Tab Einstellungen unter Container auf:

    • Im Abschnitt Ressourcen:
      • Arbeitsspeicher: Wählen Sie 512 MiB oder höher aus.
      • CPU: Wählen Sie 1 aus.
    • Klicken Sie auf Fertig.
  12. Scrollen Sie nach unten zu Ausführungsumgebung:

    • Wählen Sie Standard aus (empfohlen).
  13. Im Abschnitt Versionsskalierung:

    • Mindestanzahl von Instanzen: Geben Sie 0 ein.
    • Maximale Anzahl von Instanzen: Geben Sie 100 ein (oder passen Sie den Wert an die erwartete Last an).
  14. Klicken Sie auf Erstellen.

  15. Warten Sie ein bis zwei Minuten, bis der Dienst erstellt wurde.

  16. Nachdem der Dienst erstellt wurde, wird automatisch der Inline-Code-Editor geöffnet.

Funktionscode hinzufügen

  1. Geben Sie main in Funktionseinstiegspunkt ein.
  2. Erstellen Sie im Inline-Code-Editor zwei Dateien:

    • Erste Datei: main.py::

      import functions_framework
      from google.cloud import storage
      import json
      import os
      import urllib3
      from datetime import datetime, timezone, timedelta
      import time
      import base64
      import re
      
      # Initialize HTTP client with timeouts
      http = urllib3.PoolManager(
        timeout=urllib3.Timeout(connect=10.0, read=60.0),
        retries=False,
      )
      
      # Initialize Storage client
      storage_client = storage.Client()
      
      # Environment variables
      GCS_BUCKET = os.environ.get('GCS_BUCKET')
      GCS_PREFIX = os.environ.get('GCS_PREFIX', 'sfcc')
      STATE_KEY = os.environ.get('STATE_KEY', 'sfcc/state.json')
      SFCC_HOST = os.environ.get('SFCC_HOST')
      SFCC_USERNAME = os.environ.get('SFCC_USERNAME')
      SFCC_PASSWORD = os.environ.get('SFCC_PASSWORD')
      LOG_DIRS = [d.strip() for d in os.environ.get('LOG_DIRS', 'security,error,warn,customerror').split(',') if d.strip()]
      LOOKBACK_HOURS = int(os.environ.get('LOOKBACK_HOURS', '24'))
      
      def parse_datetime(value: str) -> datetime:
        """Parse ISO datetime string to datetime object."""
        if value.endswith("Z"):
          value = value[:-1] + "+00:00"
        return datetime.fromisoformat(value)
      
      @functions_framework.cloud_event
      def main(cloud_event):
        """
        Cloud Run function triggered by Pub/Sub to fetch Salesforce Commerce Cloud
        logs via WebDAV and write to GCS.
      
        Args:
          cloud_event: CloudEvent object containing Pub/Sub message
        """
      
        if not all([GCS_BUCKET, SFCC_HOST, SFCC_USERNAME, SFCC_PASSWORD]):
          print('Error: Missing required environment variables')
          return
      
        try:
          bucket = storage_client.bucket(GCS_BUCKET)
      
          # Load state
          state = load_state(bucket, STATE_KEY)
      
          now = datetime.now(timezone.utc)
          last_time = None
      
          if isinstance(state, dict) and state.get("last_event_time"):
            try:
              last_time = parse_datetime(state["last_event_time"])
            except Exception as e:
              print(f"Warning: Could not parse last_event_time: {e}")
      
          if last_time is None:
            last_time = now - timedelta(hours=LOOKBACK_HOURS)
      
          print(f"Fetching logs since {last_time.isoformat()}")
      
          # Build auth header
          credentials = f"{SFCC_USERNAME}:{SFCC_PASSWORD}"
          encoded_credentials = base64.b64encode(credentials.encode('utf-8')).decode('utf-8')
          headers = {
            'Authorization': f'Basic {encoded_credentials}',
            'User-Agent': 'GoogleSecOps-SFCCCollector/1.0'
          }
      
          total_files = 0
          webdav_base = f"https://{SFCC_HOST}/on/demandware.servlet/webdav/Sites/Logs"
      
          for log_dir in LOG_DIRS:
            print(f"Processing log directory: {log_dir}")
            files_processed = fetch_and_upload_logs(
              bucket=bucket,
              webdav_base=webdav_base,
              log_dir=log_dir,
              headers=headers,
              since=last_time,
              now=now,
            )
            total_files += files_processed
      
          if total_files == 0:
            print("No new log files found.")
          else:
            print(f"Successfully processed {total_files} log files")
      
          save_state(bucket, STATE_KEY, now.isoformat())
      
        except Exception as e:
          print(f'Error processing logs: {str(e)}')
          raise
      
      def load_state(bucket, key):
        """Load state from GCS."""
        try:
          blob = bucket.blob(key)
          if blob.exists():
            state_data = blob.download_as_text()
            return json.loads(state_data)
        except Exception as e:
          print(f"Warning: Could not load state: {e}")
      
        return {}
      
      def save_state(bucket, key, last_event_time_iso: str):
        """Save the last event timestamp to GCS state file."""
        try:
          state = {'last_event_time': last_event_time_iso}
          blob = bucket.blob(key)
          blob.upload_from_string(
            json.dumps(state, indent=2),
            content_type='application/json'
          )
          print(f"Saved state: last_event_time={last_event_time_iso}")
        except Exception as e:
          print(f"Warning: Could not save state: {e}")
      
      def list_webdav_files(webdav_url: str, headers: dict):
        """List files in a WebDAV directory using PROPFIND."""
        backoff = 1.0
        max_retries = 3
      
        for attempt in range(max_retries):
          response = http.request('PROPFIND', webdav_url, headers={**headers, 'Depth': '1'})
      
          if response.status == 429:
            retry_after = int(response.headers.get('Retry-After', str(int(backoff))))
            print(f"Rate limited (429). Retrying after {retry_after}s...")
            time.sleep(retry_after)
            backoff = min(backoff * 2, 30.0)
            continue
      
          if response.status not in (200, 207):
            print(f"HTTP Error listing {webdav_url}: {response.status}")
            return []
      
          content = response.data.decode('utf-8')
          # Parse file names from WebDAV PROPFIND XML response
          files = re.findall(r'<D:href>([^<]+)</D:href>', content)
          return [f for f in files if not f.endswith('/')]
      
        return []
      
      def fetch_and_upload_logs(bucket, webdav_base: str, log_dir: str, headers: dict, since: datetime, now: datetime):
        """
        Fetch log files from a WebDAV directory and upload to GCS.
      
        Args:
          bucket: GCS bucket object
          webdav_base: WebDAV base URL
          log_dir: Log directory name
          headers: HTTP headers with auth
          since: Only process files newer than this
          now: Current time for file naming
      
        Returns:
          Number of files processed
        """
        dir_url = f"{webdav_base}/{log_dir}/"
        files = list_webdav_files(dir_url, headers)
        files_processed = 0
        backoff = 1.0
      
        for file_path in files:
          file_name = file_path.split('/')[-1]
          if not file_name:
            continue
      
          # Download file
          file_url = f"https://{SFCC_HOST}{file_path}"
      
          response = http.request('GET', file_url, headers=headers)
      
          if response.status == 429:
            retry_after = int(response.headers.get('Retry-After', str(int(backoff))))
            print(f"Rate limited (429). Retrying after {retry_after}s...")
            time.sleep(retry_after)
            backoff = min(backoff * 2, 30.0)
            response = http.request('GET', file_url, headers=headers)
      
          if response.status != 200:
            print(f"Error downloading {file_name}: {response.status}")
            continue
      
          backoff = 1.0
          content = response.data
      
          if not content:
            continue
      
          # Upload to GCS
          timestamp = now.strftime('%Y%m%d_%H%M%S')
          object_key = f"{GCS_PREFIX}/{log_dir}/{file_name}_{timestamp}"
          blob = bucket.blob(object_key)
      
          # Convert log lines to NDJSON
          lines = content.decode('utf-8', errors='replace').splitlines()
          records = []
          for line in lines:
            line = line.strip()
            if line:
              try:
                record = json.loads(line)
              except json.JSONDecodeError:
                record = {'raw_log': line, 'log_dir': log_dir, 'source_file': file_name}
              records.append(record)
      
          if records:
            ndjson = '\n'.join([json.dumps(r, ensure_ascii=False) for r in records]) + '\n'
            blob.upload_from_string(ndjson, content_type='application/x-ndjson')
            print(f"Uploaded {len(records)} records from {file_name} to gs://{GCS_BUCKET}/{object_key}")
            files_processed += 1
      
        return files_processed
      
    • Zweite Datei – requirements.txt::

      functions-framework==3.*
      google-cloud-storage==2.*
      urllib3>=2.0.0
      
  3. Klicken Sie auf Bereitstellen, um die Funktion zu speichern und bereitzustellen.

  4. Warten Sie, bis die Bereitstellung abgeschlossen ist (2–3 Minuten).

Cloud Scheduler-Job erstellen

Cloud Scheduler veröffentlicht in regelmäßigen Abständen Nachrichten im Pub/Sub-Thema und löst so die Cloud Run-Funktion aus.

  1. Rufen Sie in der GCP Console Cloud Scheduler auf.
  2. Klicken Sie auf Job erstellen.
  3. Geben Sie die folgenden Konfigurationsdetails an:

    Einstellung Wert
    Name sfcc-logs-collector-hourly
    Region Dieselbe Region wie für die Cloud Run-Funktion auswählen
    Frequenz 0 * * * * (jede Stunde, zur vollen Stunde)
    Zeitzone Zeitzone auswählen (UTC empfohlen)
    Zieltyp Pub/Sub
    Thema Wählen Sie das Thema sfcc-logs-trigger aus.
    Inhalt der Nachricht {} (leeres JSON-Objekt)
  4. Klicken Sie auf Erstellen.

Optionen für die Häufigkeit des Zeitplans

Wählen Sie die Häufigkeit basierend auf dem Logvolumen und den Latenzanforderungen aus:

Häufigkeit Cron-Ausdruck Anwendungsfall
Alle 5 Minuten */5 * * * * Hohes Volumen, niedrige Latenz
Alle 15 Minuten */15 * * * * Mittleres Suchvolumen
Stündlich 0 * * * * Standard (empfohlen)
Alle 6 Stunden 0 */6 * * * Geringes Volumen, Batchverarbeitung
Täglich 0 0 * * * Erhebung von Verlaufsdaten

Integration testen

  1. Suchen Sie in der Cloud Scheduler-Konsole nach Ihrem Job (sfcc-logs-collector-hourly).
  2. Klicken Sie auf Force run (Ausführung erzwingen), um den Trigger manuell auszulösen.
  3. Warten Sie einige Sekunden und rufen Sie Cloud Run > Dienste > sfcc-logs-collector > Logs auf.
  4. Prüfen Sie, ob die Funktion erfolgreich ausgeführt wurde. Darauf sollten Sie achten:

    Fetching logs since YYYY-MM-DDTHH:MM:SS+00:00
    Processing log directory: security
    Uploaded X records from filename.log to gs://sfcc-logs/sfcc/security/filename.log_YYYYMMDD_HHMMSS
    Successfully processed X log files
    
  5. Prüfen Sie den GCS-Bucket (sfcc-logs), um zu bestätigen, dass Logs geschrieben wurden.

Wenn Sie Fehler in den Logs sehen:

  • HTTP 401: SFCC-Anmeldedaten in Umgebungsvariablen prüfen
  • HTTP 403: Prüfen Sie, ob das Konto im Unternehmensmanager die Berechtigung „WebDAV-Dateizugriff“ hat.
  • HTTP 429: Ratenbegrenzung – Funktion wird automatisch mit Backoff wiederholt
  • Fehlende Umgebungsvariablen: Prüfen Sie, ob alle erforderlichen Variablen festgelegt sind.

Feed in Google SecOps konfigurieren, um Salesforce Commerce Cloud-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. Salesforce Commerce Cloud Logs.
  5. Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
  6. Wählen Sie Salesforce Commerce Cloud als Logtyp aus.
  7. 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.com
    
  8. Kopieren Sie diese E-Mail-Adresse. Sie verwenden es in der nächsten Aufgabe.

  9. Klicken Sie auf Weiter.

  10. Geben Sie Werte für die folgenden Eingabeparameter an:

    • Storage-Bucket-URL: Geben Sie den GCS-Bucket-URI mit dem Präfixpfad ein:

      gs://sfcc-logs/sfcc/
      
      • Ersetzen Sie:
        • sfcc-logs: Der Name Ihres GCS-Buckets.
        • sfcc/: Präfix/Ordnerpfad, in dem Logs gespeichert werden.
    • 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: Dateien und leere Verzeichnisse werden nach der erfolgreichen Übertragung gelöscht.

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

  11. Klicken Sie auf Weiter.

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

  1. Rufen Sie Cloud Storage > Buckets auf.
  2. Klicken Sie auf den Namen Ihres Buckets (sfcc-logs).
  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.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
auth.mechanism extensions.auth.mechanism Zusammengeführt
csv_format extensions.auth.mechanism Zugeordnet: false → auth.mechanism
event_id extensions.auth.mechanism Zugeordnet: Login: Success → auth.mechanism
mechanism extensions.auth.mechanism Zusammengeführt
LoginType extensions.auth.type Zugeordnet: Application → AUTHTYPE_UNSPECIFIED
csv_format extensions.auth.type Zugeordnet: false → AUTHTYPE_UNSPECIFIED
event_id extensions.auth.type Zugeordnete Werte (insgesamt 6, z.B. „Login“, „LoginAsEvent“, „IdentityVerificationEvent“, „LoginE...
eventType.name metadata.description Direkt zugeordnet
metadata_description metadata.description Direkt zugeordnet
collected_timestamp metadata.event_timestamp Geparst als yyyyMMddHHmmss
createdAt metadata.event_timestamp Geparst als UNIX_MS
createdDate metadata.event_timestamp Geparst als yyyy-MM-ddTHH:mm:ss.SSS
timestamp metadata.event_timestamp Geparst als yyyyMMddHHmmss
ts_date metadata.event_timestamp Geparst als yyyy-MM-dd HH:mm:ss.SSSZ
csv_format metadata.event_type Zugeordnet: false → USER_LOGIN, false → USER_LOGOUT, false → `USER_RESOURCE_UPDATE_CON...
event_id metadata.event_type Zugeordnet: Login: Success → USER_LOGIN, Logout → USER_LOGOUT
event_type metadata.event_type Direkt zugeordnet
label metadata.ingestion_labels Zusammengeführt
resource_name metadata.ingestion_labels Zugeordnet: `"ReportEvent","SessionHijackingEventStore","BulkApiResultEventStore","CredentialStu...
attrs.cat metadata.product_event_type Umbenannt/zugeordnet
eventType.id metadata.product_event_type Direkt zugeordnet
event_id metadata.product_event_type Direkt zugeordnet
event_identifier metadata.product_log_id Direkt zugeordnet
id metadata.product_log_id Direkt zugeordnet
protocol network.application_protocol Direkt zugeordnet
transaction_id network.dhcp.transaction_id Direkt zugeordnet
referral_url network.http.referral_url Direkt zugeordnet
request_status network.http.response_code Direkt zugeordnet
attrs.Application principal.application Umbenannt/zugeordnet
enterpriseId principal.group.product_object_id Direkt zugeordnet
attrs.src principal.ip Zusammengeführt
csv_format principal.ip Zugeordnet: false → attrs.src
event_id principal.ip Zugeordnet: Login: Success → attrs.src
Status_LK principal.labels Zusammengeführt
Status_LK principal.resource.attribute.labels Zusammengeführt
browser_name principal.resource.name Direkt zugeordnet
memberId principal.resource.product_object_id Direkt zugeordnet
principal_resource_type principal.resource.type Direkt zugeordnet
attrs.usrName principal.user.email_addresses Zusammengeführt
csv_format principal.user.email_addresses Zugeordnet: false → attrs.usrName
src_email principal.user.email_addresses Zusammengeführt
attrs.USER_ID_DERIVED principal.user.product_object_id Umbenannt/zugeordnet
employee.employeeName principal.user.user_display_name Direkt zugeordnet
user_display_name principal.user.user_display_name Direkt zugeordnet
attrs.usrName principal.user.userid Direkt zugeordnet
employee.userName principal.user.userid Direkt zugeordnet
login_key principal.user.userid Direkt zugeordnet
user_id principal.user.userid Direkt zugeordnet
csv_format security_result Zugeordnet: false → sec_result
event_id security_result Zugeordnet: Login: Success → sec_result
sec_result security_result Zusammengeführt
sr security_result Zusammengeführt
action security_result.action Zusammengeführt
eventSource.name src.resource.name Direkt zugeordnet
eventSource.id src.resource.product_object_id Direkt zugeordnet
organization_id target.administrative_domain Direkt zugeordnet
target_hostname target.asset.hostname Direkt zugeordnet
device_id target.asset_id Direkt zugeordnet
target_hostname target.hostname Direkt zugeordnet
call_time target.resource.attribute.labels Zusammengeführt
cpu target.resource.attribute.labels Zusammengeführt
db_cpu target.resource.attribute.labels Zusammengeführt
db_type target.resource.attribute.labels Zusammengeführt
duration_time target.resource.attribute.labels Zusammengeführt
entry_p target.resource.attribute.labels Zusammengeführt
exe_time target.resource.attribute.labels Zusammengeführt
no_sql_que target.resource.attribute.labels Zusammengeführt
ope target.resource.attribute.labels Zusammengeführt
rows_proc target.resource.attribute.labels Zusammengeführt
run target.resource.attribute.labels Zusammengeführt
ses_level target.resource.attribute.labels Zusammengeführt
ss_type target.resource.attribute.labels Zusammengeführt
total_time target.resource.attribute.labels Zusammengeführt
user_ty target.resource.attribute.labels Zusammengeführt
verify_method target.resource.attribute.labels Zusammengeführt
attrs.AccountId target.resource.id Umbenannt/zugeordnet
attrs.CaseId target.resource.id Umbenannt/zugeordnet
attrs.ContactId target.resource.id Umbenannt/zugeordnet
eventSource.id target.resource.id Direkt zugeordnet
request_id target.resource.id Direkt zugeordnet
eventSource.name target.resource.name Direkt zugeordnet
object.name target.resource.name Direkt zugeordnet
resource_name target.resource.name Direkt zugeordnet
object.id target.resource.product_object_id Direkt zugeordnet
event_id target.resource.resource_type Zugeordnet: PlatformEncryption → ACCESS_POLICY, ApexCallout → ACCESS_POLICY, `ApexTrigge...
target_resource_type target.resource.resource_type Direkt zugeordnet
event_id target.resource.type Zugeordnet: (QueuedExecution/ApexExecution) → BATCH, ApexTrigger → DATABASE_TRIGGER, `Co...
attrs.LoginUrl target.url Umbenannt/zugeordnet
attrs.attributes.url target.url Umbenannt/zugeordnet
uri target.url Direkt zugeordnet
attrs.usrName target.user.email_addresses Zusammengeführt
csv_format target.user.email_addresses Zugeordnet: false → attrs.usrName
event_id target.user.email_addresses Zugeordnet: Logout → attrs.usrName
target_user_display_name target.user.user_display_name Direkt zugeordnet
target_user_name target.user.userid Direkt zugeordnet
extensions.auth.auth_details Konstante: ACTIVE
extensions.auth.type Konstante: SSO
metadata.event_type Konstante: GENERIC_EVENT
metadata.product_name Konstante: SALESFORCE
metadata.vendor_name Konstante: SALESFORCE
target.resource.resource_type Konstante: ACCESS_POLICY
target.resource.type Konstante: BATCH

Änderungsprotokoll

Änderungsprotokoll für diesen Parser ansehen

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten