Dataminr Alerts-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie Dataminr Alerts-Logs mit Google Cloud Storage V2, einer Cloud Run-Funktion und Cloud Scheduler in Google Security Operations aufnehmen.
Dataminr Pulse liefert KI-basierte Echtzeitinformationen aus über 500.000 globalen öffentlichen Datenquellen, einschließlich des Deep und Dark Web. Die Plattform bietet Frühwarnungen zu neuen Cyberbedrohungen, Sicherheitslücken, Ransomware-Angriffen, Datenlecks und digitalen Risiken, die Ihr Unternehmen und Dritte betreffen. Die Dataminr Pulse API verwendet die Authentifizierung mit OAuth 2.0-Clientanmeldedaten und die cursorbasierte Paginierung zum Abrufen von Benachrichtigungen.
Hinweise
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Eine Google SecOps-Instanz
- Ein Google Cloud-Projekt mit den folgenden aktivierten APIs:
- Cloud Storage API
- Cloud Run Functions API
- Cloud Scheduler API
- Cloud Pub/Sub API
- Berechtigungen zum Erstellen und Verwalten von GCS-Buckets, Cloud Run-Funktionen, Pub/Sub-Themen und Cloud Scheduler-Jobs
- Berechtigungen zum Verwalten von IAM-Richtlinien für GCS-Buckets
- Ein aktives Dataminr Pulse-Konto mit aktiviertem API-Zugriff
- Dataminr Pulse API-Anmeldedaten (Client-ID und Client-Secret)
- Mindestens eine Dataminr Pulse-Benachrichtigungsliste in Ihrem Dataminr-Konto konfiguriert
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. dataminr-alert-logs.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.
Dataminr-Anmeldedaten erfassen
Damit die Cloud Run-Funktion Benachrichtigungsdaten abrufen kann, benötigen Sie API-Anmeldedaten mit OAuth 2.0-Clientanmeldedaten-Authentifizierung von Ihrem Dataminr-Kundenbetreuer.
API-Anmeldedaten abrufen
- Wenden Sie sich an Ihren Dataminr-Kundenbetreuer oder das Supportteam, um API-Zugriff anzufordern.
- Geben Sie die folgenden Informationen an:
- Name Ihrer Organisation
- Anwendungsfall: Integration in Google Chronicle SIEM
- Erforderlicher Zugriff: Dataminr Pulse API for Cyber Risk
Dataminr stellt API-Anmeldedaten bereit und bietet Ihnen Folgendes:
- Client-ID: Ihre eindeutige OAuth 2.0-Client-ID
- Clientschlüssel: Ihr OAuth 2.0-Clientschlüssel
API-Anmeldedaten prüfen
Führen Sie den folgenden Befehl aus, um zu prüfen, ob Ihre Anmeldedaten funktionieren:
curl -X POST https://gateway.dataminr.com/auth/2/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=api_key"Bei einer erfolgreichen Antwort wird ein JSON-Objekt mit dem Feld
access_tokenzurückgegeben:{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI...", "token_type": "Bearer", "expire": 3600 }
Benachrichtigungslisten-IDs erfassen
- Melden Sie sich in der Dataminr Pulse-Webanwendung unter
https://app.dataminr.coman. - Rufen Sie Ihre konfigurierten Benachrichtigungslisten (Beobachtungslisten) auf.
Notieren Sie sich die IDs der Warnungslisten, die Sie in Google SecOps aufnehmen möchten.
Dienstkonto für die Cloud Run-Funktion erstellen
- Wechseln Sie in der Google Cloud Console zu IAM & Verwaltung > Dienstkonten.
- Klicken Sie auf Dienstkonto erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name des Dienstkontos: Geben Sie
dataminr-alert-collectorein. - Beschreibung des Dienstkontos: Geben Sie
Service account for Dataminr Alerts Cloud Run function to write alert data to GCSein.
- Name des Dienstkontos: Geben Sie
- Klicken Sie auf Erstellen und fortfahren.
- Fügen Sie im Abschnitt Diesem Dienstkonto Zugriff auf das Projekt erteilen die folgenden Rollen hinzu:
- Klicken Sie auf Rolle auswählen, suchen Sie nach Storage-Objekt-Administrator und wählen Sie die Rolle aus.
- Klicken Sie auf Weitere Rolle hinzufügen, suchen Sie nach Cloud Run Invoker und wählen Sie die Rolle aus.
- Klicken Sie auf Weiter.
- Klicken Sie auf Fertig.
IAM-Berechtigungen für GCS-Bucket erteilen
- Rufen Sie Cloud Storage > Buckets auf.
- Klicken Sie auf den Namen Ihres Buckets, z. B.
dataminr-alert-logs. - Wechseln Sie zum Tab Berechtigungen.
- Klicken Sie auf Zugriff erlauben.
- Geben Sie die folgenden Konfigurationsdetails an:
- Hauptkonten hinzufügen: Geben Sie die E-Mail-Adresse des Dienstkontos ein (z. B.
dataminr-alert-collector@PROJECT_ID.iam.gserviceaccount.com). - Rollen zuweisen: Wählen Sie Storage-Objekt-Administrator aus.
- Hauptkonten hinzufügen: Geben Sie die E-Mail-Adresse des Dienstkontos ein (z. B.
- Klicken Sie auf Speichern.
Pub/Sub-Thema erstellen
Das Pub/Sub-Thema löst die Cloud Run-Funktion aus, wenn eine Nachricht von Cloud Scheduler veröffentlicht wird.
- Rufen Sie in der Google Cloud Console Pub/Sub > Themen auf.
- Klicken Sie auf Thema erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Themen-ID: Geben Sie
dataminr-alert-triggerein. - Standardabo hinzufügen: Häkchen beibehalten
- Themen-ID: Geben Sie
- Klicken Sie auf Erstellen.
Cloud Run-Funktion erstellen
- Wechseln Sie in der Google Cloud Console zu Cloud Run-Funktionen.
- Klicken Sie auf Funktion erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Umgebung 2. Generation Funktionsname dataminr-alert-collectorRegion Wählen Sie dieselbe Region wie für Ihren GCS-Bucket aus. Triggertyp Cloud Pub/Sub Pub/Sub-Thema dataminr-alert-triggerZugewiesener Arbeitsspeicher 512 MiB Zeitlimit 540 Sekunden Laufzeitdienstkonto dataminr-alert-collectorKlicken Sie auf Weiter.
Legen Sie als Laufzeit Python 3.12 fest.
Legen Sie
mainals Einstiegspunkt fest.Fügen Sie in der Datei
requirements.txtdie folgenden Abhängigkeiten hinzu:functions-framework==3.* google-cloud-storage==2.* requests==2.*Fügen Sie in die Datei
main.pyden folgenden Code ein:import functions_framework import json import os import logging import time from datetime import datetime, timedelta, timezone from google.cloud import storage import requests logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) storage_client = storage.Client() TOKEN_URL = "https://gateway.dataminr.com/auth/2/token" ALERTS_URL = "https://gateway.dataminr.com/api/3/alerts" def _get_access_token(client_id: str, client_secret: str) -> str: """Obtain an OAuth 2.0 access token from Dataminr.""" payload = { "client_id": client_id, "client_secret": client_secret, "grant_type": "api_key", } headers = {"Content-Type": "application/x-www-form-urlencoded"} resp = requests.post(TOKEN_URL, data=payload, headers=headers, timeout=30) resp.raise_for_status() token_data = resp.json() access_token = token_data.get("access_token") if not access_token: raise ValueError("No access_token in token response") logger.info("Successfully obtained Dataminr access token.") return access_token def _load_state(bucket_name: str, state_key: str) -> dict: """Load the last cursor (alertId) from GCS.""" try: bucket = storage_client.bucket(bucket_name) blob = bucket.blob(state_key) if blob.exists(): data = json.loads(blob.download_as_text()) logger.info(f"Loaded state: {data}") return data except Exception as e: logger.warning(f"State read error: {e}") logger.info("No previous state found.") return {} def _save_state(bucket_name: str, state_key: str, state: dict) -> None: """Save the cursor state to GCS.""" bucket = storage_client.bucket(bucket_name) blob = bucket.blob(state_key) blob.upload_from_string( json.dumps(state), content_type="application/json" ) logger.info(f"Saved state: {state}") def _fetch_alerts( access_token: str, alert_lists: str, page_size: int, cursor: str = None, ) -> tuple: """Fetch a page of alerts from the Dataminr Pulse API.""" headers = { "Authorization": f"Bearer {access_token}", "Accept": "application/json", } params = { "lists": alert_lists, "num": page_size, } if cursor: params["from"] = cursor resp = requests.get( ALERTS_URL, headers=headers, params=params, timeout=60 ) # Handle rate limiting via response headers rate_remaining = resp.headers.get("x-ratelimit-remaining") rate_reset = resp.headers.get("x-ratelimit-reset") if resp.status_code == 429: reset_time = int(rate_reset) if rate_reset else 60 wait_seconds = max(reset_time - int(time.time()), 1) logger.warning( f"Rate limited. Waiting {wait_seconds}s before retry." ) time.sleep(wait_seconds) resp = requests.get( ALERTS_URL, headers=headers, params=params, timeout=60 ) resp.raise_for_status() if rate_remaining is not None: logger.info( f"Rate limit remaining: {rate_remaining}, reset: {rate_reset}" ) data = resp.json() alerts = data if isinstance(data, list) else data.get("data", []) return alerts @functions_framework.cloud_event def main(cloud_event): """Cloud Run function entry point triggered by Pub/Sub.""" bucket_name = os.environ["GCS_BUCKET"] prefix = os.environ.get("GCS_PREFIX", "dataminr_alerts") state_key = os.environ.get("STATE_KEY", "dataminr_state/cursor.json") client_id = os.environ["CLIENT_ID"] client_secret = os.environ["CLIENT_SECRET"] alert_lists = os.environ["ALERT_LISTS"] max_records = int(os.environ.get("MAX_RECORDS", "1000")) page_size = min(int(os.environ.get("PAGE_SIZE", "40")), 40) lookback_hours = int(os.environ.get("LOOKBACK_HOURS", "24")) try: access_token = _get_access_token(client_id, client_secret) state = _load_state(bucket_name, state_key) cursor = state.get("last_cursor") is_first_run = cursor is None all_alerts = [] total_fetched = 0 pages_fetched = 0 while total_fetched < max_records: logger.info( f"Fetching page {pages_fetched + 1} (cursor: {cursor})..." ) alerts = _fetch_alerts( access_token, alert_lists, page_size, cursor=cursor ) if not alerts: logger.info("No more alerts returned. Stopping pagination.") break # Filter by lookback window on first run (no prior cursor) if is_first_run: cutoff_ms = int( ( datetime.now(timezone.utc) - timedelta(hours=lookback_hours) ).timestamp() * 1000 ) alerts = [ a for a in alerts if a.get("eventTime", 0) >= cutoff_ms ] all_alerts.extend(alerts) total_fetched += len(alerts) pages_fetched += 1 # Update cursor to the last alertId in this page last_alert = alerts[-1] if alerts else None if last_alert and "alertId" in last_alert: cursor = last_alert["alertId"] else: break # Stop if we received fewer alerts than requested if len(alerts) < page_size: logger.info("Received partial page. Stopping pagination.") break logger.info( f"Collected {len(all_alerts)} alerts across {pages_fetched} pages." ) if not all_alerts: logger.info("No new alerts to write.") return "No new alerts", 200 # Write alerts as NDJSON to GCS now_str = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ") blob_path = f"{prefix}/{now_str}.ndjson" ndjson_body = "\n".join( json.dumps(alert, separators=(",", ":")) for alert in all_alerts ) bucket = storage_client.bucket(bucket_name) blob = bucket.blob(blob_path) blob.upload_from_string( ndjson_body, content_type="application/x-ndjson" ) _save_state( bucket_name, state_key, { "last_cursor": cursor, "last_run": datetime.now(timezone.utc).isoformat(), }, ) msg = ( f"Wrote {len(all_alerts)} alerts to " f"gs://{bucket_name}/{blob_path}" ) logger.info(msg) return msg, 200 except Exception as e: logger.error(f"Error collecting Dataminr alerts: {e}") raiseKlicken Sie auf Bereitstellen.
Warten Sie, bis die Funktion bereitgestellt wurde. Wenn die Bereitstellung abgeschlossen ist, ändert sich der Status zu einem grünen Häkchen.
Umgebungsvariablen konfigurieren
- Rufen Sie nach der Bereitstellung der Funktion Cloud Run Functions > dataminr-alert-collector auf.
- Klicken Sie auf Neue Überarbeitung bearbeiten und bereitstellen.
- Klicken Sie auf den Tab Variablen und Secrets (oder maximieren Sie Laufzeit, Build, Verbindungen und Sicherheitseinstellungen für die 1. Generation).
Fügen Sie die folgenden Umgebungsvariablen hinzu:
Schlüssel Beispielwert GCS_BUCKETdataminr-alert-logsGCS_PREFIXdataminr_alertsSTATE_KEYdataminr_state/cursor.jsonCLIENT_IDIhre Dataminr-OAuth 2.0-Client-ID CLIENT_SECRETIhr Dataminr-OAuth 2.0-Clientschlüssel ALERT_LISTSDurch Kommas getrennte Liste der Dataminr-Benachrichtigungs-IDs MAX_RECORDS1000PAGE_SIZE40LOOKBACK_HOURS24Klicken Sie auf Bereitstellen.
Cloud Scheduler-Job erstellen
Cloud Scheduler veröffentlicht in regelmäßigen Abständen eine Nachricht im Pub/Sub-Thema, wodurch die Cloud Run-Funktion ausgelöst wird, um Dataminr Pulse nach neuen Benachrichtigungen abzufragen.
- Rufen Sie in der Google Cloud Console Cloud Scheduler auf.
- Klicken Sie auf Job erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Name dataminr-alert-pollRegion Wählen Sie dieselbe Region wie für Ihre Funktion aus. Frequenz */5 * * * *(alle 5 Minuten)Zeitzone Wählen Sie Ihre Zeitzone aus, z. B. UTC.Klicken Sie auf Weiter.
Im Abschnitt Ausführung konfigurieren:
- Zieltyp: Wählen Sie Pub/Sub aus.
- Thema: Wählen Sie
dataminr-alert-triggeraus. - Nachrichtentext: Geben Sie
{"poll": true}ein.
Klicken Sie auf Erstellen.
Cloud Run-Funktion prüfen
- Suchen Sie in Cloud Scheduler nach dem Job
dataminr-alert-poll. - Klicken Sie auf Ausführung erzwingen, um eine sofortige Ausführung auszulösen.
- Rufen Sie Cloud Run Functions > dataminr-alert-collector > Logs auf.
Prüfen Sie, ob die Funktion erfolgreich ausgeführt wurde. Suchen Sie dazu nach Logeinträgen wie:
Successfully obtained Dataminr access token. Fetching page 1 (cursor: None)... Collected 35 alerts across 1 pages. Wrote 35 alerts to gs://dataminr-alert-logs/dataminr_alerts/20250115T103000Z.ndjsonRufen Sie Cloud Storage > Buckets > dataminr-alert-logs auf.
Rufen Sie das Präfix
dataminr_alerts/auf.Prüfen Sie, ob NDJSON-Dateien mit Dataminr-Benachrichtigungsdaten erstellt werden.
Google SecOps-Dienstkonto abrufen und Feed konfigurieren
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.
E-Mail-Adresse des Dienstkontos 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.
Dataminr Alerts. - Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
- Wählen Sie Dataminr Alerts 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, um sie im nächsten Abschnitt zu verwenden.
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://dataminr-alert-logs/dataminr_alerts/Option zum Löschen der Quelle: Wählen Sie die gewünschte Option zum Löschen aus:
- Nie: Es werden niemals Dateien nach Übertragungen gelöscht (empfohlen für Tests).
- Übertragene Dateien löschen: Löscht Dateien nach der erfolgreichen Übertragung.
Übertragene Dateien und leere Verzeichnisse löschen: Dateien und leere Verzeichnisse werden nach der erfolgreichen Übertragung gelöscht.
Höchstalter von Dateien: Dateien einschließen, die in den letzten Tagen geändert wurden (Standardwert: 180 Tage).
Asset-Namespace: Asset-Namespace.
Labels für Datenaufnahme: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll (z. B.
DATAMINR_ALERT).
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.
- Rufen Sie Cloud Storage > Buckets auf.
- Klicken Sie auf den Namen Ihres Buckets, z. B.
dataminr-alert-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.
- Rollen zuweisen: Wählen Sie Storage-Objekt-Betrachter aus.
Klicken Sie auf Speichern.
UDM-Zuordnungstabelle
| Logfeld | UDM-Zuordnung | Logik |
|---|---|---|
| alertId | metadata.product_log_id | Wert direkt kopiert |
| alertType.color | about.labels.alertType_color | Wert direkt kopiert |
| alertType.id | about.labels.alertType_id | Wert direkt kopiert |
| alertType.name | about.labels.alertType_name | Wert direkt kopiert |
| availableRelatedAlerts | about.labels.availableRelatedAlerts | In String konvertiert |
| Untertitel | metadata.description | Wert direkt kopiert |
| cat.name | security_result.category_details | Wert direkt kopiert |
| cat.id | security_result.detection_fields.categories_id | Wert direkt kopiert |
| cat.idStr | security_result.detection_fields.categories_idStr | Wert direkt kopiert |
| cat.path | security_result.detection_fields.categories_path | Wert direkt kopiert |
| cat.requested | security_result.detection_fields.categories_requested | Wert direkt kopiert |
| cat.retired | security_result.detection_fields.categories_retired | In String konvertiert |
| cat.topicType | about.labels.categories_topicType | Wert direkt kopiert |
| cat.name | security_result.category | Auf POLICY_VIOLATION setzen, wenn cat.name == „Cybersecurity – Policy“; auf NETWORK_MALICIOUS, wenn in [„Cybersecurity – Threats & Vulnerabilities“, „Cybersecurity – Crime & Malicious Activity“, „Threats & Precautions“, „Threats“]; auf NETWORK_SUSPICIOUS, wenn =~ „Cybersecurity“; auf MAIL_PHISHING, wenn =~ „Email and Web Servers“; auf DATA_EXFILTRATION, wenn =~ „Data Exposure and Breaches“; auf POLICY_VIOLATION, wenn =~ „Government, Policy, & Political Affairs“; auf PHISHING, wenn =~ „(Malware |
| comp.dm_bucket.name | security_result.about.resource.attribute.labels.dmbucket%{bucket.id} | Wert direkt kopiert |
| comp.dm_sector.name | security_result.about.resource.attribute.labels.dmsector%{sector.id} | Wert direkt kopiert |
| comp.id | security_result.about.resource.attribute.labels.companies_id | Wert direkt kopiert |
| comp.idStr | security_result.about.resource.attribute.labels.companies_idStr | Wert direkt kopiert |
| comp.locations.city | security_result.about.location.city | Wert aus loc.city, wenn loc_index == 0 |
| comp.locations.country, comp.locations.state.symbol | security_result.about.location.country_or_region | Verkettet als %{loc.country} – %{loc.state.symbol}, wenn loc_index == 0 und beide nicht leer sind |
| comp.locations.postalCode | security_result.about.resource.attribute.labels.locations_postalCode | Wert wird direkt kopiert, wenn loc_index == 0 und nicht leer |
| comp.locations.state.name | security_result.about.location.state | Wert wird direkt kopiert, wenn loc_index == 0 |
| comp.locations.city | about.labels.loc_%{loc_index}_city | Wert wird direkt kopiert, wenn loc_index != 0 und nicht leer ist. |
| comp.locations.country, comp.locations.state.symbol | about.labels.loc_%{loc_index}_country_or_region | Verkettet als %{loc.country} – %{loc.state.symbol}, wenn loc_index != 0 und beide nicht leer sind |
| comp.locations.postalCode | securityresult.about.resource.attribute.labels.locations%{loc_index}_postalCode | Wert wird direkt kopiert, wenn loc_index != 0 und nicht leer ist. |
| comp.locations.state.name | about.labels.loc_%{loc_index}_state_name | Wert wird direkt kopiert, wenn loc_index != 0 und nicht leer ist. |
| comp.name | security_result.about.resource.name | Wert direkt kopiert |
| comp.requested | security_result.about.resource.attribute.labels.companies_requested | Wert direkt kopiert |
| comp.retired | security_result.about.resource.attribute.labels.companies_retired | In String konvertiert |
| comp.ticker | security_result.about.resource.attribute.labels.companies_ticker | Wert direkt kopiert |
| comp.topicType | security_result.about.resource.attribute.labels.companies_topicType | Wert direkt kopiert |
| eventLocation.coordinates.0 | principal.location.region_coordinates.latitude | Wert direkt kopiert |
| eventLocation.coordinates.1 | principal.location.region_coordinates.longitude | Wert direkt kopiert |
| eventLocation.name | principal.location.name | Wert direkt kopiert |
| eventLocation.places | principal.labels.location_places | Aus Array mit Komma als Trennzeichen zusammengeführt |
| eventLocation.probability | principal.labels.eventLocation_probability | In String konvertiert |
| eventLocation.radius | principal.labels.eventLocation_radius | In String konvertiert |
| eventMapLargeURL | principal.labels.eventMapLargeURL | Wert direkt kopiert |
| eventMapSmallURL | principal.labels.eventMapSmallURL | Wert direkt kopiert |
| eventTime | @timestamp | Von Epoch-Millisekunden in Zeitstempel konvertiert |
| eventVolume | about.labels.eventVolume | In String konvertiert |
| expandAlertURL | metadata.url_back_to_product | Wert direkt kopiert |
| expandMapURL | principal.labels.expandMapURL | Wert direkt kopiert |
| headerColor | about.labels.headerColor | Wert direkt kopiert |
| headerLabel | about.labels.headerLabel | Wert direkt kopiert |
| metadata.cyber.addresses.ip | principal.ip | Extrahierte Daten mit dem Grok-Muster, wenn index == 0 |
| metadata.cyber.addresses.port | principal.port | Wert wird direkt kopiert, wenn index == 0, in Ganzzahl konvertiert |
| metadata.cyber.addresses.port | principal.labels.addresses_%{index}_port | Wert wird direkt kopiert, wenn index != 0 |
| metadata.cyber.addresses.version | principal.labels.metadata_cyberaddresses%{index}_version | Wert direkt kopiert |
| metadata.cyber.asns | network.asn | Wert wird direkt kopiert, wenn index == 0 |
| metadata.cyber.asns | about.labels.metadatacyber%{index}_asn | Wert wird direkt kopiert, wenn index != 0 |
| metadata.cyber.hashValues.value | security_result.about.file.sha1 | Wert wird direkt kopiert, wenn type == SHA1, in Kleinbuchstaben |
| metadata.cyber.hashValues.value | security_result.about.file.sha256 | Wert wird direkt kopiert, wenn type == SHA256, in Kleinbuchstaben |
| metadata.cyber.malwares | security_result.associations.name | Wert direkt kopiert |
| metadata.cyber.malwares | security_result.associations.type | Auf MALWARE festgelegt |
| metadata.cyber.orgs | network.organization_name | Wert wird direkt kopiert, wenn index == 0 |
| metadata.cyber.orgs | about.labels.metadatacyber%{index}_orgs | Wert wird direkt kopiert, wenn index != 0 |
| metadata.cyber.products | principal.application | Wert wird direkt kopiert, wenn index == 0 |
| metadata.cyber.products | principal.labels.metadata_cyberproducts%{index} | Wert wird direkt kopiert, wenn index != 0 |
| metadata.cyber.threats | security_result.threat_name | Wert wird direkt kopiert, wenn index == 0 |
| metadata.cyber.threats | security_result.about.labels.metadata_cyberthreats%{index} | Wert wird direkt kopiert, wenn index != 0 |
| metadata.cyber.URLs | security_result.about.url | Wert wird direkt kopiert, wenn index == 0 |
| metadata.cyber.URLs | securityresult.about.labels.url%{index} | Wert wird direkt kopiert, wenn index != 0 |
| metadata.cyber.malwares.0 | security_result.category | Auf SOFTWARE_MALICIOUS gesetzt, falls vorhanden |
| metadata.cyber.vulnerabilities.cvss | extensions.vulns.vulnerabilities.cvss_base_score | Wert direkt kopiert |
| metadata.cyber.vulnerabilities.exploitPocLinks | extensions.vulns.vulnerabilities.cve_description | Aus Array mit Trennzeichen „ n“ zusammengefügt |
| metadata.cyber.vulnerabilities.id | extensions.vulns.vulnerabilities.cve_id | Wert direkt kopiert |
| metadata.cyber.vulnerabilities.products.productName | extensions.vulns.vulnerabilities.about.application | Wert wird direkt kopiert, wenn index == 0 |
| metadata.cyber.vulnerabilities.products.productVendor | extensions.vulns.vulnerabilities.vendor | Wert wird direkt kopiert, wenn index == 0 |
| metadata.cyber.vulnerabilities.products.productVersion | extensions.vulns.vulnerabilities.about.platform_version | Wert direkt kopiert, wenn index == 0, Leerzeichen entfernt |
| metadata.cyber.vulnerabilities.products.productName | extensions.vulns.vulnerabilities.about.labels.productName_%{index} | Wert wird direkt kopiert, wenn index != 0 |
| metadata.cyber.vulnerabilities.products.productVendor | extensions.vulns.vulnerabilities.about.labels.productVendor_%{index} | Wert wird direkt kopiert, wenn index != 0 |
| metadata.cyber.vulnerabilities.products.productVersion | extensions.vulns.vulnerabilities.about.labels.productVersion_%{index} | Wert direkt kopiert, wenn index != 0, Leerzeichen entfernt |
| parentAlertId | about.labels.parentAlertId | Wert direkt kopiert |
| post.languages.lang | target.labels.post_languageslang%{index} | Wert direkt kopiert |
| post.languages.position | target.labels.post_languagesposition%{index} | In String konvertiert |
| post.link | target.labels.post_link | Wert direkt kopiert |
| post.media.link | principal.resource.name | Wert wird direkt kopiert, wenn index == 0 |
| post.media.description | target.resource.attribute.labels.post_media_description | Wert wird direkt kopiert, wenn index == 0 |
| post.media.display_url | target.resource.attribute.labels.post_media_display_url | Wert wird direkt kopiert, wenn index == 0 |
| post.media.isSafe | target.resource.attribute.labels.post_media_isSafe | In String konvertiert, wenn index == 0 |
| post.media.media_url | target.resource.attribute.labels.post_media_media_url | Wert wird direkt kopiert, wenn index == 0 |
| post.media.sizes.large.h | target.resource.attribute.labels.post_media_sizes_large_h | In String konvertiert, wenn index == 0 |
| post.media.sizes.large.resize | target.resource.attribute.labels.post_media_sizes_large_resize | Wert wird direkt kopiert, wenn index == 0 |
| post.media.sizes.large.w | target.resource.attribute.labels.post_media_sizes_large_w | In String konvertiert, wenn index == 0 |
| post.media.sizes.medium.h | target.resource.attribute.labels.post_media_sizes_medium_h | In String konvertiert, wenn index == 0 |
| post.media.sizes.medium.resize | target.resource.attribute.labels.post_media_sizes_medium_resize | Wert wird direkt kopiert, wenn index == 0 |
| post.media.sizes.medium.w | target.resource.attribute.labels.post_media_sizes_medium_w | In String konvertiert, wenn index == 0 |
| post.media.sizes.small.h | target.resource.attribute.labels.post_media_sizes_small_h | In String konvertiert, wenn index == 0 |
| post.media.sizes.small.resize | target.resource.attribute.labels.post_media_sizes_small_resize | Wert wird direkt kopiert, wenn index == 0 |
| post.media.sizes.small.w | target.resource.attribute.labels.post_media_sizes_small_w | In String konvertiert, wenn index == 0 |
| post.media.sizes.thumb.h | target.resource.attribute.labels.post_media_sizes_thumb_h | In String konvertiert, wenn index == 0 |
| post.media.sizes.thumb.resize | target.resource.attribute.labels.post_media_sizes_thumb_resize | Wert wird direkt kopiert, wenn index == 0 |
| post.media.sizes.thumb.w | target.resource.attribute.labels.post_media_sizes_thumb_w | In String konvertiert, wenn index == 0 |
| post.media.source | target.resource.attribute.labels.post_media_source | Wert wird direkt kopiert, wenn index == 0 |
| post.media.thumbnail | target.resource.attribute.labels.post_media_thumbnail | Wert wird direkt kopiert, wenn index == 0 |
| post.media.title | target.resource.attribute.labels.post_media_title | Wert wird direkt kopiert, wenn index == 0 |
| post.media.url | target.resource.attribute.labels.post_media_url | Wert wird direkt kopiert, wenn index == 0 |
| post.media.video_info.duration_millis | target.resource.attribute.labels.post_media_video_info_duration_millis | In String konvertiert, wenn index == 0 |
| post.media.video_info.aspect_ratio | target.resource.attribute.labels.post_media_video_info_aspect_ratio | Verkettet als %{med.video_info.aspect_ratio.0}, %{med.video_info.aspect_ratio.1}, wenn index == 0 |
| post.media.video_info.variants.bitrate | target.resource.attribute.labels.post_media_video_info_variantsbitrate%{var_index} | In String konvertiert |
| post.media.video_info.variants.content_type | target.resource.attribute.labels.post_media_video_info_variants_contenttype%{var_index} | Wert direkt kopiert |
| post.media.video_info.variants.url | target.resource.attribute.labels.post_media_video_info_variantsurl%{var_index} | Wert direkt kopiert |
| post.media.type | principal.resource.resource_subtype | Wert wird direkt kopiert, wenn index == 0 |
| post.media.link | about.resource.name | Wert wird direkt kopiert, wenn index != 0 |
| post.media.description | about.resource.attribute.labels.post_media_description | Wert wird direkt kopiert, wenn index != 0 |
| post.media.display_url | about.resource.attribute.labels.post_media_display_url | Wert wird direkt kopiert, wenn index != 0 |
| post.media.isSafe | about.resource.attribute.labels.post_media_isSafe | In String konvertiert, wenn index != 0 |
| post.media.media_url | about.resource.attribute.labels.post_media_media_url | Wert wird direkt kopiert, wenn index != 0 |
| post.media.sizes.large.h | about.resource.attribute.labels.post_media_sizes_large_h | In String konvertiert, wenn index != 0 |
| post.media.sizes.large.resize | about.resource.attribute.labels.post_media_sizes_large_resize | Wert wird direkt kopiert, wenn index != 0 |
| post.media.sizes.large.w | about.resource.attribute.labels.post_media_sizes_large_w | In String konvertiert, wenn index != 0 |
| post.media.sizes.medium.h | about.resource.attribute.labels.post_media_sizes_medium_h | In String konvertiert, wenn index != 0 |
| post.media.sizes.medium.resize | about.resource.attribute.labels.post_media_sizes_medium_resize | Wert wird direkt kopiert, wenn index != 0 |
| post.media.sizes.medium.w | about.resource.attribute.labels.post_media_sizes_medium_w | In String konvertiert, wenn index != 0 |
| post.media.sizes.small.h | about.resource.attribute.labels.post_media_sizes_small_h | In String konvertiert, wenn index != 0 |
| post.media.sizes.small.resize | about.resource.attribute.labels.post_media_sizes_small_resize | Wert wird direkt kopiert, wenn index != 0 |
| post.media.sizes.small.w | about.resource.attribute.labels.post_media_sizes_small_w | In String konvertiert, wenn index != 0 |
| post.media.sizes.thumb.h | about.resource.attribute.labels.post_media_sizes_thumb_h | In String konvertiert, wenn index != 0 |
| post.media.sizes.thumb.resize | about.resource.attribute.labels.post_media_sizes_thumb_resize | Wert wird direkt kopiert, wenn index != 0 |
| post.media.sizes.thumb.w | about.resource.attribute.labels.post_media_sizes_thumb_w | In String konvertiert, wenn index != 0 |
| post.media.source | about.resource.attribute.labels.post_media_source | Wert wird direkt kopiert, wenn index != 0 |
| post.media.thumbnail | about.resource.attribute.labels.post_media_thumbnail | Wert wird direkt kopiert, wenn index != 0 |
| post.media.title | about.resource.attribute.labels.post_media_title | Wert wird direkt kopiert, wenn index != 0 |
| post.media.url | about.resource.attribute.labels.post_media_url | Wert wird direkt kopiert, wenn index != 0 |
| post.media.video_info.duration_millis | about.resource.attribute.labels.post_media_video_info_duration_millis | In String konvertiert, wenn index != 0 |
| post.media.video_info.aspect_ratio | about.resource.attribute.labels.post_media_video_info_aspect_ratio | Verkettet als %{med.video_info.aspect_ratio.0}, %{med.video_info.aspect_ratio.1}, wenn index != 0 |
| post.media.video_info.variants.bitrate | about.resource.attribute.labels.post_media_video_info_variantsbitrate%{var_index} | In String konvertiert |
| post.media.video_info.variants.content_type | about.resource.attribute.labels.post_media_video_info_variants_contenttype%{var_index} | Wert direkt kopiert |
| post.media.video_info.variants.url | about.resource.attribute.labels.post_media_video_info_variantsurl%{var_index} | Wert direkt kopiert |
| post.media.type | about.resource.resource_subtype | Wert wird direkt kopiert, wenn index != 0 |
| post.translatedText | target.labels.post_translatedText | Wert direkt kopiert |
| post.text | target.labels.post_text | Wert direkt kopiert |
| post.timestamp | target.resource.attribute.creation_time | Von Epoch-Millisekunden in Zeitstempel konvertiert |
| publisherCategory.color | target.labels.publisherCategory_color | Wert direkt kopiert |
| publisherCategory.name | target.labels.publisherCategory_name | Wert direkt kopiert |
| publisherCategory.shortName | target.labels.publisherCategory_shortName | Wert direkt kopiert |
| relatedTerms.url | principal.labels.relatedTerms_%{terms.text} | Wert direkt kopiert |
| relatedTermsQueryURL | principal.labels.relatedTermsQueryURL | Wert direkt kopiert |
| sect.id | about.labels.sectors_id | Wert direkt kopiert |
| sect.idStr | about.labels.sectors_idStr | Wert direkt kopiert |
| sect.name | about.labels.sectors_name | Wert direkt kopiert |
| sect.retired | about.labels.sectors_retired | In String konvertiert |
| sect.topicType | about.labels.sectors_topicType | Wert direkt kopiert |
| source.channels.0 | principal.application | Wert direkt kopiert |
| source.displayName | principal.user.user_display_name | Wert direkt kopiert |
| source.link | principal.url | Wert direkt kopiert |
| source.verified | principal.labels.source_verified | In String konvertiert |
| subCaption.bullets.content | about.labels.subCaption_bullets_content | Wert direkt kopiert |
| subCaption.bullets.media | about.labels.subCaption_bullets_media | Wert direkt kopiert |
| subCaption.bullets.source | about.labels.subCaption_bullets_source | Wert direkt kopiert |
| watchlist.id | about.labels.watchlistsMatchedByType_id | Wert direkt kopiert |
| watchlist.externalTopicIds | about.labels.watchlistsMatchedByType_externalTopicIds | Aus Array mit Komma als Trennzeichen zusammengeführt |
| watchlist.name | about.labels.watchlistsMatchedByType_name | Wert direkt kopiert |
| watchlist.type | about.labels.watchlistsMatchedByType_type | Wert direkt kopiert |
| watchlist.userProperties.omnilist | about.labels.watchlistsMatchedByType_userProperties_omnilist | Wert direkt kopiert |
| watchlist.userProperties.uiListType | about.labels.watchlistsMatchedByType_userProperties_uiListType | Wert direkt kopiert |
| watchlist.userProperties.watchlistColor | about.labels.watchlistsMatchedByType_userProperties_watchlistColor | Wert direkt kopiert |
| watchlist.locationGroups.locations.id | about.labels.watchlistsMatchedByTypelocationGroups%{lg_i}_locationsid%{loc_i} | Wert direkt kopiert |
| watchlist.locationGroups.locations.lng | about.labels.watchlistsMatchedByTypelocationGroups%{lg_i}_locationslng%{loc_i} | In String konvertiert, wenn lg_i != 0 oder loc_i != 0 |
| watchlist.locationGroups.locations.lat | about.labels.watchlistsMatchedByTypelocationGroups%{lg_i}_locationslat%{loc_i} | In String konvertiert, wenn lg_i != 0 oder loc_i != 0 |
| watchlist.locationGroups.locations.name | about.labels.watchlistsMatchedByTypelocationGroups%{lg_i}_locationsname%{loc_i} | Wert wird direkt kopiert, wenn lg_i != 0 oder loc_i != 0 |
| watchlist.locationGroups.id | about.labels.watchlistsMatchedByType_locationGroupsid%{lg_i} | Wert direkt kopiert |
| watchlist.locationGroups.name | about.labels.watchlistsMatchedByType_locationGroupsname%{lg_i} | Wert direkt kopiert |
| watchlist.locationGroups.locations.lng | about.location.region_coordinates.longitude | Wert wird direkt kopiert, wenn lg_i == 0 und loc_i == 0 |
| watchlist.locationGroups.locations.lat | about.location.region_coordinates.latitude | Wert wird direkt kopiert, wenn lg_i == 0 und loc_i == 0 |
| watchlist.locationGroups.locations.name | about.location.name | Wert wird direkt kopiert, wenn lg_i == 0 und loc_i == 0 |
| source.entityName | principal.hostname | Wert direkt kopiert |
| metadata.event_type | Auf „GENERIC_EVENT“ festgelegt; wird in „SCAN_HOST“ geändert, wenn „principal_ip“ oder „principal.hostname“ nicht leer ist. |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten