Symantec WSS-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie Symantec Web Security Service (WSS)-Logs mit Amazon S3 in Google Security Operations aufnehmen. Der Parser versucht zuerst, die Log-Nachricht als JSON zu parsen. Schlägt das fehl, werden mit einer Reihe von immer spezifischeren Grok-Mustern Felder aus dem Roh-Text extrahiert und die extrahierten Daten dem Unified Data Model (UDM) zugeordnet.
Hinweise
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Eine Google SecOps-Instanz.
- Privilegierter Zugriff auf Symantec Web Security Service.
- Privilegierter Zugriff auf AWS (S3, Identity and Access Management (IAM), Lambda, EventBridge).
Symantec WSS-Voraussetzungen (IDs, API-Schlüssel, Organisations-IDs, Tokens) erfassen
- Melden Sie sich als Administrator im Symantec Web Security Service-Portal an.
- Rufen Sie Konto > API-Anmeldedaten auf.
- Klicken Sie auf Hinzufügen.
- Geben Sie die folgenden Konfigurationsdetails an:
- API-Name: Geben Sie einen aussagekräftigen Namen ein, z. B.
Google SecOps Integration
. - Beschreibung: Geben Sie eine Beschreibung für die API-Anmeldedaten ein.
- API-Name: Geben Sie einen aussagekräftigen Namen ein, z. B.
- Klicken Sie auf Speichern und kopieren Sie die generierten API-Anmeldedaten sicher.
- Notieren Sie sich die WSS-Portal-URL und den Sync API-Endpunkt.
- Kopieren Sie die folgenden Details und speichern Sie sie an einem sicheren Ort:
- WSS_API_USERNAME
- WSS_API_PASSWORD
- WSS_SYNC_URL
AWS S3-Bucket und IAM für Google SecOps konfigurieren
- Erstellen Sie einen Amazon S3-Bucket. Folgen Sie dazu der Anleitung unter Bucket erstellen.
- Speichern Sie den Namen und die Region des Buckets zur späteren Verwendung (z. B.
symantec-wss-logs
). - Erstellen Sie einen Nutzer gemäß dieser Anleitung: IAM-Nutzer erstellen.
- Wählen Sie den erstellten Nutzer aus.
- Wählen Sie den Tab Sicherheitsanmeldedaten aus.
- Klicken Sie im Abschnitt Zugriffsschlüssel auf Zugriffsschlüssel erstellen.
- Wählen Sie Drittanbieterdienst als Anwendungsfall aus.
- Klicken Sie auf Weiter.
- Optional: Fügen Sie ein Beschreibungstag hinzu.
- Klicken Sie auf Zugriffsschlüssel erstellen.
- Klicken Sie auf CSV-Datei herunterladen, um den Access Key (Zugriffsschlüssel) und den Secret Access Key (geheimer Zugriffsschlüssel) für die zukünftige Verwendung zu speichern.
- Klicken Sie auf Fertig.
- Wählen Sie den Tab Berechtigungen aus.
- Klicken Sie im Bereich Berechtigungsrichtlinien auf Berechtigungen hinzufügen.
- Wählen Sie Berechtigungen hinzufügen aus.
- Wählen Sie Richtlinien direkt anhängen aus.
- Suchen Sie nach der Richtlinie AmazonS3FullAccess.
- Wählen Sie die Richtlinie aus.
- Klicken Sie auf Weiter.
- Klicken Sie auf Berechtigungen hinzufügen.
IAM-Richtlinie und ‑Rolle für S3-Uploads konfigurieren
- Rufen Sie in der AWS-Konsole IAM > Richtlinien auf.
- Klicken Sie auf Richtlinie erstellen> Tab „JSON“.
- Kopieren Sie die folgende Richtlinie und fügen Sie sie ein.
Policy JSON (ersetzen Sie
symantec-wss-logs
, wenn Sie einen anderen Bucket-Namen eingegeben haben):{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::symantec-wss-logs/*" }, { "Sid": "AllowGetStateObject", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::symantec-wss-logs/symantec/wss/state.json" } ] }
Klicken Sie auf Weiter > Richtlinie erstellen.
Rufen Sie IAM > Rollen > Rolle erstellen > AWS-Service > Lambda auf.
Hängen Sie die neu erstellte Richtlinie an.
Geben Sie der Rolle den Namen
SymantecWssToS3Role
und klicken Sie auf Rolle erstellen.
Lambda-Funktion erstellen
- Rufen Sie in der AWS Console Lambda > Funktionen > Funktion erstellen auf.
- Klicken Sie auf Von Grund auf erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Name symantec_wss_to_s3
Laufzeit Python 3.13 Architektur x86_64 Ausführungsrolle SymantecWssToS3Role
Nachdem die Funktion erstellt wurde, öffnen Sie den Tab Code, löschen Sie den Stub und fügen Sie den folgenden Code (
symantec_wss_to_s3.py
) ein.#!/usr/bin/env python3 # Lambda: Pull Symantec WSS logs and store raw payloads to S3 # - Time window via millisecond timestamps for WSS Sync API. # - Preserves vendor-native format (CSV/JSON/ZIP). # - Retries with exponential backoff; unique S3 keys to avoid overwrites. import os, json, time, uuid from urllib.request import Request, urlopen from urllib.error import URLError, HTTPError import boto3 S3_BUCKET = os.environ["S3_BUCKET"] S3_PREFIX = os.environ.get("S3_PREFIX", "symantec/wss/") STATE_KEY = os.environ.get("STATE_KEY", "symantec/wss/state.json") WINDOW_SEC = int(os.environ.get("WINDOW_SECONDS", "3600")) # default 1h HTTP_TIMEOUT= int(os.environ.get("HTTP_TIMEOUT", "60")) WSS_SYNC_URL = os.environ.get("WSS_SYNC_URL", "https://portal.threatpulse.com/reportpod/logs/sync") API_USERNAME = os.environ["WSS_API_USERNAME"] API_PASSWORD = os.environ["WSS_API_PASSWORD"] TOKEN_PARAM = os.environ.get("WSS_TOKEN_PARAM", "none") MAX_RETRIES = int(os.environ.get("MAX_RETRIES", "3")) USER_AGENT = os.environ.get("USER_AGENT", "symantec-wss-to-s3/1.0") s3 = boto3.client("s3") def _load_state(): try: obj = s3.get_object(Bucket=S3_BUCKET, Key=STATE_KEY) return json.loads(obj["Body"].read()) except Exception: return {} def _save_state(st): s3.put_object( Bucket=S3_BUCKET, Key=STATE_KEY, Body=json.dumps(st, separators=(",", ":")).encode("utf-8"), ContentType="application/json", ) def _ms_timestamp(ts: float) -> int: """Convert Unix timestamp to milliseconds for WSS API""" return int(ts * 1000) def _fetch_wss_logs(start_ms: int, end_ms: int) -> tuple[bytes, str, str]: # WSS Sync API parameters params = f"startDate={start_ms}&endDate={end_ms}&token={TOKEN_PARAM}" url = f"{WSS_SYNC_URL}?{params}" attempt = 0 while True: req = Request(url, method="GET") req.add_header("User-Agent", USER_AGENT) req.add_header("X-APIUsername", API_USERNAME) req.add_header("X-APIPassword", API_PASSWORD) try: with urlopen(req, timeout=HTTP_TIMEOUT) as r: blob = r.read() content_type = r.headers.get("Content-Type", "application/octet-stream") content_encoding = r.headers.get("Content-Encoding", "") return blob, content_type, content_encoding except (HTTPError, URLError) as e: attempt += 1 print(f"HTTP error on attempt {attempt}: {e}") if attempt > MAX_RETRIES: raise # exponential backoff with jitter time.sleep(min(60, 2 ** attempt) + (time.time() % 1)) def _determine_extension(content_type: str, content_encoding: str) -> str: """Determine file extension based on content type and encoding""" if "zip" in content_type.lower(): return ".zip" if "gzip" in content_type.lower() or content_encoding.lower() == "gzip": return ".gz" if "json" in content_type.lower(): return ".json" if "csv" in content_type.lower(): return ".csv" return ".bin" def _put_wss_data(blob: bytes, content_type: str, content_encoding: str, from_ts: float, to_ts: float) -> str: # Create unique S3 key for WSS data ts_path = time.strftime("%Y/%m/%d", time.gmtime(to_ts)) uniq = f"{int(time.time()*1e6)}_{uuid.uuid4().hex[:8]}" ext = _determine_extension(content_type, content_encoding) key = f"{S3_PREFIX}{ts_path}/symantec_wss_{int(from_ts)}_{int(to_ts)}_{uniq}{ext}" s3.put_object( Bucket=S3_BUCKET, Key=key, Body=blob, ContentType=content_type, Metadata={ 'source': 'symantec-wss', 'from_timestamp': str(int(from_ts)), 'to_timestamp': str(int(to_ts)), 'content_encoding': content_encoding } ) return key def lambda_handler(event=None, context=None): st = _load_state() now = time.time() from_ts = float(st.get("last_to_ts") or (now - WINDOW_SEC)) to_ts = now # Convert to milliseconds for WSS API start_ms = _ms_timestamp(from_ts) end_ms = _ms_timestamp(to_ts) print(f"Fetching Symantec WSS logs from {start_ms} to {end_ms}") blob, content_type, content_encoding = _fetch_wss_logs(start_ms, end_ms) print(f"Retrieved {len(blob)} bytes with content-type: {content_type}") if content_encoding: print(f"Content encoding: {content_encoding}") key = _put_wss_data(blob, content_type, content_encoding, from_ts, to_ts) st["last_to_ts"] = to_ts st["last_successful_run"] = now _save_state(st) return { "statusCode": 200, "body": { "success": True, "s3_key": key, "content_type": content_type, "content_encoding": content_encoding, "from_timestamp": from_ts, "to_timestamp": to_ts, "bytes_retrieved": len(blob) } } if __name__ == "__main__": print(lambda_handler())
Rufen Sie Konfiguration > Umgebungsvariablen auf.
Klicken Sie auf Bearbeiten> Neue Umgebungsvariable hinzufügen.
Geben Sie die Umgebungsvariablen aus der folgenden Tabelle ein und ersetzen Sie die Beispielwerte durch Ihre Werte.
Umgebungsvariablen
Schlüssel Beispielwert S3_BUCKET
symantec-wss-logs
S3_PREFIX
symantec/wss/
STATE_KEY
symantec/wss/state.json
WINDOW_SECONDS
3600
HTTP_TIMEOUT
60
MAX_RETRIES
3
USER_AGENT
symantec-wss-to-s3/1.0
WSS_SYNC_URL
https://portal.threatpulse.com/reportpod/logs/sync
WSS_API_USERNAME
your-api-username
(aus Schritt 2)WSS_API_PASSWORD
your-api-password
(aus Schritt 2)WSS_TOKEN_PARAM
none
Bleiben Sie nach dem Erstellen der Funktion auf der zugehörigen Seite oder öffnen Sie Lambda > Funktionen > Ihre Funktion.
Wählen Sie den Tab Konfiguration aus.
Klicken Sie im Bereich Allgemeine Konfiguration auf Bearbeiten.
Ändern Sie Zeitlimit in 5 Minuten (300 Sekunden) und klicken Sie auf Speichern.
EventBridge-Zeitplan erstellen
- Gehen Sie zu Amazon EventBridge > Scheduler > Create schedule (Amazon EventBridge > Scheduler > Zeitplan erstellen).
- Geben Sie die folgenden Konfigurationsdetails an:
- Wiederkehrender Zeitplan: Preis (
1 hour
). - Ziel: Ihre Lambda-Funktion
symantec_wss_to_s3
. - Name:
symantec-wss-1h
.
- Wiederkehrender Zeitplan: Preis (
- Klicken Sie auf Zeitplan erstellen.
(Optional) IAM-Nutzer mit Lesezugriff und Schlüssel für Google SecOps erstellen
- Wechseln Sie in der AWS-Konsole zu IAM > Nutzer.
- Klicken Sie auf Add users (Nutzer hinzufügen).
- Geben Sie die folgenden Konfigurationsdetails an:
- Nutzer: Geben Sie
secops-reader
ein. - Zugriffstyp: Wählen Sie Zugriffsschlüssel – programmatischer Zugriff aus.
- Nutzer: Geben Sie
- Klicken Sie auf Nutzer erstellen.
- Minimale Leseberechtigung (benutzerdefiniert) anhängen: Nutzer > secops-reader > Berechtigungen > Berechtigungen hinzufügen > Richtlinien direkt anhängen > Richtlinie erstellen.
JSON:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::symantec-wss-logs/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::symantec-wss-logs" } ] }
Name =
secops-reader-policy
.Klicken Sie auf Richtlinie erstellen> suchen/auswählen> Weiter> Berechtigungen hinzufügen.
Erstellen Sie einen Zugriffsschlüssel für
secops-reader
: Sicherheitsanmeldedaten > Zugriffsschlüssel.Klicken Sie auf Zugriffsschlüssel erstellen.
Laden Sie die CSV-Datei herunter. Sie fügen diese Werte in den Feed ein.
Feed in Google SecOps konfigurieren, um Symantec WSS-Logs aufzunehmen
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf + Neuen Feed hinzufügen.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B.
Symantec WSS logs
. - Wählen Sie Amazon S3 V2 als Quelltyp aus.
- Wählen Sie Symantec WSS als Logtyp aus.
- Klicken Sie auf Weiter.
- Geben Sie Werte für die folgenden Eingabeparameter an:
- S3-URI:
s3://symantec-wss-logs/symantec/wss/
- Optionen zum Löschen der Quelle: Wählen Sie die gewünschte Option zum Löschen aus.
- Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden. Der Standardwert ist 180 Tage.
- Zugriffsschlüssel-ID: Nutzerzugriffsschlüssel mit Zugriff auf den S3-Bucket.
- Geheimer Zugriffsschlüssel: Der geheime Schlüssel des Nutzers mit Zugriff auf den S3-Bucket.
- Asset-Namespace: Der Asset-Namespace.
- Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
- S3-URI:
- 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 |
---|---|---|
category_id | read_only_udm.metadata.product_event_type | Wenn „category_id“ = 1, wird „read_only_udm.metadata.product_event_type“ auf Security festgelegt. Wenn category_id = 5, wird read_only_udm.metadata.product_event_type auf Policy festgelegt. |
collector_device_ip | read_only_udm.principal.ip, read_only_udm.principal.asset.ip | Wert des Felds „collector_device_ip“ |
connection.bytes_download | read_only_udm.network.received_bytes | Wert des Felds „connection.bytes_download“ in eine Ganzzahl konvertiert |
connection.bytes_upload | read_only_udm.network.sent_bytes | Wert des Felds „connection.bytes_upload“ in eine Ganzzahl konvertiert |
connection.dst_ip | read_only_udm.target.ip | Wert des Felds „connection.dst_ip“ |
connection.dst_location.country | read_only_udm.target.location.country_or_region | Wert des Felds „connection.dst_location.country“ |
connection.dst_name | read_only_udm.target.hostname | Wert des Felds „connection.dst_name“ |
connection.dst_port | read_only_udm.target.port | Wert des Felds „connection.dst_port“ in eine Ganzzahl konvertiert |
connection.http_status | read_only_udm.network.http.response_code | Wert des Felds „connection.http_status“ in Ganzzahl konvertiert |
connection.http_user_agent | read_only_udm.network.http.user_agent | Wert des Felds „connection.http_user_agent“ |
connection.src_ip | read_only_udm.principal.ip, read_only_udm.src.ip | Wert des Felds „connection.src_ip“. Wenn „src_ip“ oder „collector_device_ip“ nicht leer ist, wird es „read_only_udm.src.ip“ zugeordnet. |
connection.tls.version | read_only_udm.network.tls.version_protocol | Wert des Felds „connection.tls.version“ |
connection.url.host | read_only_udm.target.hostname | Wert des Felds „connection.url.host“ |
connection.url.method | read_only_udm.network.http.method | Wert des Felds „connection.url.method“ |
connection.url.path | read_only_udm.target.url | Wert des Felds „connection.url.path“ |
connection.url.text | read_only_udm.target.url | Wert des Felds „connection.url.text“ |
cs_connection_negotiated_cipher | read_only_udm.network.tls.cipher | Wert des Felds „cs_connection_negotiated_cipher“ |
cs_icap_status | read_only_udm.security_result.description | Wert des Felds „cs_icap_status“ |
device_id | read_only_udm.target.resource.id, read_only_udm.target.resource.product_object_id | Wert des Felds „device_id“ |
device_ip | read_only_udm.intermediary.ip, read_only_udm.intermediary.asset.ip | Wert des Felds „device_ip“ |
device_time | read_only_udm.metadata.collected_timestamp, read_only_udm.metadata.event_timestamp | Der Wert des Felds „device_time“ wurde in einen String konvertiert. Wenn „when“ leer ist, wird es „read_only_udm.metadata.event_timestamp“ zugeordnet. |
Hostname | read_only_udm.principal.hostname, read_only_udm.principal.asset.hostname | Wert des Hostname-Felds |
log_time | read_only_udm.metadata.event_timestamp | Der Wert des Felds „log_time“ wurde in einen Zeitstempel konvertiert. Wenn „when“ und „device_time“ leer sind, wird der Wert „read_only_udm.metadata.event_timestamp“ verwendet. |
msg_desc | read_only_udm.metadata.description | Wert des Felds „msg_desc“ |
os_details | read_only_udm.target.asset.platform_software.platform, read_only_udm.target.asset.platform_software.platform_version | Wert des Felds „os_details“. Wenn „os_details“ nicht leer ist, wird es geparst, um „os_name“ und „os_ver“ zu extrahieren. Wenn os_name Windows enthält, wird read_only_udm.target.asset.platform_software.platform auf WINDOWS festgelegt. os_ver wird read_only_udm.target.asset.platform_software.platform_version zugeordnet. |
product_data.cs(Referer) | read_only_udm.network.http.referral_url | Wert des Felds „product_data.cs(Referer)“ |
product_data.r-supplier-country | read_only_udm.principal.location.country_or_region | Wert des Felds „product_data.r-supplier-country“ |
product_data.s-supplier-ip | read_only_udm.intermediary.ip, read_only_udm.intermediary.asset.ip | Wert des Felds „product_data.s-supplier-ip“ |
product_data.x-bluecoat-application-name | read_only_udm.target.application | Wert des Felds „product_data.x-bluecoat-application-name“ |
product_data.x-bluecoat-transaction-uuid | read_only_udm.metadata.product_log_id | Wert des Felds „product_data.x-bluecoat-transaction-uuid“ |
product_data.x-client-agent-sw | read_only_udm.observer.platform_version | Wert des Felds „product_data.x-client-agent-sw“ |
product_data.x-client-agent-type | read_only_udm.observer.application | Wert des Felds „product_data.x-client-agent-type“ |
product_data.x-client-device-id | read_only_udm.target.resource.type, read_only_udm.target.resource.id, read_only_udm.target.resource.product_object_id | Wenn nicht leer, wird „read_only_udm.target.resource.type“ auf DEVICE festgelegt. Der Wert des Felds „product_data.x-client-device-id“ wird „read_only_udm.target.resource.id“ und „read_only_udm.target.resource.product_object_id“ zugeordnet. |
product_data.x-client-device-name | read_only_udm.src.hostname, read_only_udm.src.asset.hostname | Wert des Felds „product_data.x-client-device-name“ |
product_data.x-cs-client-ip-country | read_only_udm.target.location.country_or_region | Wert des Felds „product_data.x-cs-client-ip-country“ |
product_data.x-cs-connection-negotiated-cipher | read_only_udm.network.tls.cipher | Wert des Felds „product_data.x-cs-connection-negotiated-cipher“ |
product_data.x-cs-connection-negotiated-ssl-version | read_only_udm.network.tls.version_protocol | Wert des Felds „product_data.x-cs-connection-negotiated-ssl-version“ |
product_data.x-exception-id | read_only_udm.security_result.summary | Wert des Felds „product_data.x-exception-id“ |
product_data.x-rs-certificate-hostname | read_only_udm.network.tls.client.server_name | Wert des Felds „product_data.x-rs-certificate-hostname“ |
product_data.x-rs-certificate-hostname-categories | read_only_udm.security_result.category_details | Wert des Felds „product_data.x-rs-certificate-hostname-categories“ |
product_data.x-rs-certificate-observed-errors | read_only_udm.network.tls.server.certificate.issuer | Wert des Felds „product_data.x-rs-certificate-observed-errors“ |
product_data.x-rs-certificate-validate-status | read_only_udm.network.tls.server.certificate.subject | Wert des Felds „product_data.x-rs-certificate-validate-status“ |
product_name | read_only_udm.metadata.product_name | Wert des Felds „product_name“ |
product_ver | read_only_udm.metadata.product_version | Wert des Felds „product_ver“ |
proxy_connection.src_ip | read_only_udm.intermediary.ip, read_only_udm.intermediary.asset.ip | Wert des Felds „proxy_connection.src_ip“ |
received_bytes | read_only_udm.network.received_bytes | Wert des Felds „received_bytes“ in Ganzzahl konvertiert |
ref_uid | read_only_udm.metadata.product_log_id | Wert des Felds „ref_uid“ |
s_action | read_only_udm.metadata.description | Wert des Felds „s_action“ |
sent_bytes | read_only_udm.network.sent_bytes | Wert des Felds „sent_bytes“ in eine Ganzzahl konvertiert |
severity_id | read_only_udm.security_result.severity | Wenn „severity_id“ 1 oder 2 ist, wird „read_only_udm.security_result.severity“ auf LOW gesetzt. Wenn „severity_id“ 3 oder 4 ist, wird „read_only_udm.security_result.severity“ auf MEDIUM festgelegt. Wenn severity_id 5 oder 6 ist, wird read_only_udm.security_result.severity auf HIGH festgelegt. |
supplier_country | read_only_udm.principal.location.country_or_region | Wert des Felds „supplier_country“ |
target_ip | read_only_udm.target.ip, read_only_udm.target.asset.ip | Wert des Felds „target_ip“ |
user.full_name | read_only_udm.principal.user.user_display_name | Wert des Felds „user.full_name“ |
nutzer.name | read_only_udm.principal.user.user_display_name | Wert des Felds „user.name“ |
user_name | read_only_udm.principal.user.user_display_name | Wert des Felds „user_name“ |
uuid | read_only_udm.metadata.product_log_id | Wert des UUID-Felds |
Wann? | read_only_udm.metadata.event_timestamp | Wert des Felds, als es in einen Zeitstempel konvertiert wurde |
read_only_udm.metadata.event_type | Wird auf NETWORK_UNCATEGORIZED gesetzt, wenn der Hostname leer und connection.dst_ip nicht leer ist. Wird auf SCAN_NETWORK gesetzt, wenn der Hostname nicht leer ist. Wird auf NETWORK_CONNECTION gesetzt, wenn „has_principal“ und „has_target“ true sind. Wird auf STATUS_UPDATE gesetzt, wenn „has_principal“ true und „has_target“ false ist. Wird auf GENERIC_EVENT gesetzt, wenn „has_principal“ und „has_target“ false sind. |
|
read_only_udm.metadata.log_type | Immer auf SYMANTEC_WSS festgelegt |
|
read_only_udm.metadata.vendor_name | Immer auf SYMANTEC festgelegt |
|
read_only_udm.security_result.action | Wird auf ALLOW gesetzt, wenn product_data.sc-filter_result OBSERVED oder PROXIED ist. Wird auf BLOCK gesetzt, wenn „product_data.sc-filter_result“ gleich DENIED ist. |
|
read_only_udm.security_result.action_details | Wert des Felds „product_data.sc-filter_result“ | |
read_only_udm.target.resource.type | Auf DEVICE setzen, wenn product_data.x-client-device-id nicht leer ist |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten