Dataminr Alerts-Logs erfassen

Unterstützt in:

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

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

  1. Wenden Sie sich an Ihren Dataminr-Kundenbetreuer oder das Supportteam, um API-Zugriff anzufordern.
  2. Geben Sie die folgenden Informationen an:
    • Name Ihrer Organisation
    • Anwendungsfall: Integration in Google Chronicle SIEM
    • Erforderlicher Zugriff: Dataminr Pulse API for Cyber Risk
  3. 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_token zurückgegeben:

    {
      "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI...",
      "token_type": "Bearer",
      "expire": 3600
    }
    

Benachrichtigungslisten-IDs erfassen

  1. Melden Sie sich in der Dataminr Pulse-Webanwendung unter https://app.dataminr.com an.
  2. Rufen Sie Ihre konfigurierten Benachrichtigungslisten (Beobachtungslisten) auf.
  3. Notieren Sie sich die IDs der Warnungslisten, die Sie in Google SecOps aufnehmen möchten.

Dienstkonto für die Cloud Run-Funktion erstellen

  1. Wechseln Sie in der Google Cloud Console zu IAM & Verwaltung > Dienstkonten.
  2. Klicken Sie auf Dienstkonto erstellen.
  3. Geben Sie die folgenden Konfigurationsdetails an:
    • Name des Dienstkontos: Geben Sie dataminr-alert-collector ein.
    • Beschreibung des Dienstkontos: Geben Sie Service account for Dataminr Alerts Cloud Run function to write alert data to GCS 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, suchen Sie nach Storage-Objekt-Administrator und wählen Sie die Rolle aus.
    2. Klicken Sie auf Weitere Rolle hinzufügen, suchen Sie nach Cloud Run Invoker und wählen Sie die Rolle aus.
  6. Klicken Sie auf Weiter.
  7. Klicken Sie auf Fertig.

IAM-Berechtigungen für GCS-Bucket erteilen

  1. Rufen Sie Cloud Storage > Buckets auf.
  2. Klicken Sie auf den Namen Ihres Buckets, z. B. dataminr-alert-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. dataminr-alert-collector@PROJECT_ID.iam.gserviceaccount.com).
    • Rollen zuweisen: Wählen Sie Storage-Objekt-Administrator aus.
  6. 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.

  1. Rufen Sie in der Google Cloud Console Pub/Sub > Themen auf.
  2. Klicken Sie auf Thema erstellen.
  3. Geben Sie die folgenden Konfigurationsdetails an:
    • Themen-ID: Geben Sie dataminr-alert-trigger ein.
    • Standardabo hinzufügen: Häkchen beibehalten
  4. Klicken Sie auf Erstellen.

Cloud Run-Funktion erstellen

  1. Wechseln Sie in der Google Cloud Console zu Cloud Run-Funktionen.
  2. Klicken Sie auf Funktion erstellen.
  3. Geben Sie die folgenden Konfigurationsdetails an:

    Einstellung Wert
    Umgebung 2. Generation
    Funktionsname dataminr-alert-collector
    Region Wählen Sie dieselbe Region wie für Ihren GCS-Bucket aus.
    Triggertyp Cloud Pub/Sub
    Pub/Sub-Thema dataminr-alert-trigger
    Zugewiesener Arbeitsspeicher 512 MiB
    Zeitlimit 540 Sekunden
    Laufzeitdienstkonto dataminr-alert-collector
  4. Klicken Sie auf Weiter.

  5. Legen Sie als Laufzeit Python 3.12 fest.

  6. Legen Sie main als Einstiegspunkt fest.

  7. Fügen Sie in der Datei requirements.txt die folgenden Abhängigkeiten hinzu:

    functions-framework==3.*
    google-cloud-storage==2.*
    requests==2.*
    
  8. Fügen Sie in die Datei main.py den 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}")
            raise
    
  9. Klicken Sie auf Bereitstellen.

  10. Warten Sie, bis die Funktion bereitgestellt wurde. Wenn die Bereitstellung abgeschlossen ist, ändert sich der Status zu einem grünen Häkchen.

Umgebungsvariablen konfigurieren

  1. Rufen Sie nach der Bereitstellung der Funktion Cloud Run Functions > dataminr-alert-collector auf.
  2. Klicken Sie auf Neue Überarbeitung bearbeiten und bereitstellen.
  3. Klicken Sie auf den Tab Variablen und Secrets (oder maximieren Sie Laufzeit, Build, Verbindungen und Sicherheitseinstellungen für die 1. Generation).
  4. Fügen Sie die folgenden Umgebungsvariablen hinzu:

    Schlüssel Beispielwert
    GCS_BUCKET dataminr-alert-logs
    GCS_PREFIX dataminr_alerts
    STATE_KEY dataminr_state/cursor.json
    CLIENT_ID Ihre Dataminr-OAuth 2.0-Client-ID
    CLIENT_SECRET Ihr Dataminr-OAuth 2.0-Clientschlüssel
    ALERT_LISTS Durch Kommas getrennte Liste der Dataminr-Benachrichtigungs-IDs
    MAX_RECORDS 1000
    PAGE_SIZE 40
    LOOKBACK_HOURS 24
  5. Klicken 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.

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

    Einstellung Wert
    Name dataminr-alert-poll
    Region 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.
  4. Klicken Sie auf Weiter.

  5. Im Abschnitt Ausführung konfigurieren:

    • Zieltyp: Wählen Sie Pub/Sub aus.
    • Thema: Wählen Sie dataminr-alert-trigger aus.
    • Nachrichtentext: Geben Sie {"poll": true} ein.
  6. Klicken Sie auf Erstellen.

Cloud Run-Funktion prüfen

  1. Suchen Sie in Cloud Scheduler nach dem Job dataminr-alert-poll.
  2. Klicken Sie auf Ausführung erzwingen, um eine sofortige Ausführung auszulösen.
  3. Rufen Sie Cloud Run Functions > dataminr-alert-collector > Logs auf.
  4. 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.ndjson
    
  5. Rufen Sie Cloud Storage > Buckets > dataminr-alert-logs auf.

  6. Rufen Sie das Präfix dataminr_alerts/ auf.

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

  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. Dataminr Alerts.
  5. Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
  6. Wählen Sie Dataminr Alerts 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, um sie im nächsten Abschnitt zu verwenden.

  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://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).

  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.

  1. Rufen Sie Cloud Storage > Buckets auf.
  2. Klicken Sie auf den Namen Ihres Buckets, z. B. dataminr-alert-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
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