Elastic Defend-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie Elastic Defend-Logs mit Google Cloud Storage V2 und einer Cloud Run-Funktion in Google Security Operations aufnehmen.
Elastic Defend ist eine EDR-Lösung (Endpoint Detection and Response) innerhalb von Elastic Security, die Funktionen zur Prävention, Erkennung und Reaktion mit umfassender Transparenz für Windows-, macOS- und Linux-Betriebssysteme bietet. Es überwacht die Ausführung von Prozessen, Dateiaktivitäten, Netzwerkverbindungen, Änderungen an der Registrierung und das Laden von Bibliotheken, um Bedrohungen auf Endpunktebene zu erkennen und zu verhindern. Daten werden in Elasticsearch gespeichert und können über die Elasticsearch Search API abgerufen werden.
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
- Cloud Run-Funktionen
- Cloud Scheduler
- Pub/Sub
- IAM
- Zugriff auf einen Elasticsearch-Cluster, in dem Elastic Defend bereitgestellt ist
- Berechtigungen zum Erstellen von API-Schlüsseln in Elasticsearch (
manage_security-,manage_api_key- odermanage_own_api_key-Clusterberechtigung) - Netzwerkverbindung von Cloud Run Functions zu Ihrem Elasticsearch-Cluster
Google Cloud Storage-Bucket erstellen
- Öffnen Sie die 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. elastic-defend-logs.Standorttyp Wählen Sie je nach Bedarf aus (Region, Dual-Region, Multi-Region). Standort Wählen Sie den Ort 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.
Elastic Defend-Anmeldedaten erfassen
Damit die Cloud Run-Funktion Elastic Defend-Ereignisse abrufen kann, müssen Sie einen API-Schlüssel mit Leseberechtigungen für die logs-endpoint-Datenstreams erstellen.
API-Schlüssel mit Kibana erstellen
- Melden Sie sich in Kibana an.
- Rufen Sie im Navigationsmenü oder im globalen Suchfeld Stack Management > API Keys auf.
- Klicken Sie auf API-Schlüssel erstellen.
- Geben Sie im Feld Name
Google SecOps Cloud Storage Integrationein. - Legen Sie optional im Feld Ablauf ein Ablaufdatum fest. API-Schlüssel laufen standardmäßig nicht ab.
- Klicken Sie auf Sicherheitsberechtigungen verwalten.
- Klicken Sie im Bereich Indizes auf Indexberechtigung hinzufügen.
- Indexberechtigung konfigurieren:
- Indexe: Geben Sie
logs-endpoint.*ein. - Berechtigungen: Wählen Sie Lesen aus.
- Indexe: Geben Sie
- Lassen Sie den Abschnitt Cluster privileges leer (es sind keine Clusterberechtigungen erforderlich).
- Klicken Sie auf API-Schlüssel erstellen.
API-Anmeldedaten aufzeichnen
Nachdem Sie den API-Schlüssel erstellt haben, wird ein Dialogfeld mit Ihren Anmeldedaten angezeigt:
Codiert: Der base64-codierte API-Schlüssel (z. B.
VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw==)Außerdem müssen Sie die Elasticsearch-Endpunkt-URL aufzeichnen:
Für Elastic Cloud: Der Endpunkt wird in der Cloud Console im Elasticsearch-Bereich Ihrer Bereitstellung angezeigt (z. B.
https://my-deployment.es.us-central1.gcp.cloud.es.io:443).Für selbstverwaltete Elasticsearch-Instanzen: Verwenden Sie den Hostnamen oder die IP-Adresse Ihres Elasticsearch-Clusters mit Port (z. B.
https://elasticsearch.example.com:9200).
API-Schlüssel mit Entwicklertools erstellen (alternative Methode)
Alternativ können Sie einen API-Schlüssel mit Kibana Dev Tools erstellen:
- Melden Sie sich in Kibana an.
- Gehen Sie zu Verwaltung > Entwicklertools.
Führen Sie in der Console den folgenden Befehl aus:
POST /_security/api_key { "name": "Google SecOps Cloud Storage Integration", "role_descriptors": { "chronicle_reader": { "indices": [ { "names": ["logs-endpoint.*"], "privileges": ["read"] } ] } }, "metadata": { "application": "google-chronicle-gcs", "environment": "production" } }Die Antwort enthält Ihre API-Schlüssel-Anmeldedaten:
{ "id": "VuaCfGcBCdbkQm-e5aOx", "name": "Google SecOps Cloud Storage Integration", "api_key": "ui2lp2axTNmsyakw9tvNnw", "encoded": "VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw==" }Kopieren und speichern Sie den codierten Wert. Dies ist der base64-codierte API-Schlüssel, den Sie für die Authentifizierung verwenden.
Dienstkonto erstellen
Erstellen Sie ein dediziertes Dienstkonto für die Cloud Run-Funktion.
- 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
elastic-defend-collectorein. - Beschreibung des Dienstkontos: Geben Sie
Service account for Elastic Defend log collection 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 und wählen Sie Storage-Objekt-Administrator (
roles/storage.objectAdmin) aus. - Klicken Sie auf Weitere Rolle hinzufügen und wählen Sie Cloud Run Invoker (
roles/run.invoker) aus.
- Klicken Sie auf Rolle auswählen und wählen Sie Storage-Objekt-Administrator (
- Klicken Sie auf Weiter.
- Klicken Sie auf Fertig.
Pub/Sub-Thema erstellen
Erstellen Sie ein Pub/Sub-Thema, um die Cloud Run-Funktion über Cloud Scheduler auszulösen.
- 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
elastic-defend-triggerein. - Standardabo hinzufügen: Häkchen beibehalten
- Themen-ID: Geben Sie
- Klicken Sie auf Erstellen.
Cloud Run-Funktion erstellen
Cloud Run-Funktion erstellen, die Ereignisse aus Elasticsearch abruft und in GCS schreibt
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 elastic-defend-to-gcsRegion Wählen Sie dieselbe Region wie für Ihren GCS-Bucket aus. Triggertyp Cloud Pub/Sub Cloud Pub/Sub-Thema elastic-defend-triggerauswählenZugewiesener Arbeitsspeicher 512 MiB (bei großen Datenmengen erhöhen) Zeitlimit 540 Sekunden Laufzeitdienstkonto elastic-defend-collectorauswählenKlicken Sie auf Weiter.
Umgebungsvariablen hinzufügen
Fügen Sie im Abschnitt Laufzeit, Build, Verbindungen und Sicherheitseinstellungen die folgenden Umgebungsvariablen hinzu:
Variable Wert GCS_BUCKETName Ihres GCS-Buckets (z. B. elastic-defend-logs)GCS_PREFIXPräfix für Logdateien (z. B. elastic-defend)STATE_KEYName der Statusdatei (z. B. state.json)ES_HOSTElasticsearch-URL (z. B. https://my-deployment.es.us-central1.gcp.cloud.es.io:443)ES_API_KEYCodierter API-Schlüssel aus dem Schritt zum Erstellen von Anmeldedaten MAX_RECORDSMaximale Anzahl von Datensätzen pro Ausführung (z. B. 100000)PAGE_SIZEAnzahl der Datensätze pro Suchanfrage (z. B. 1000)LOOKBACK_HOURSStunden, die seit dem ersten Lauf zurückliegen (z. B. 24)
Funktionscode hinzufügen
- Wählen Sie Python 3.11 als Laufzeit aus.
- Legen Sie den Einstiegspunkt auf
mainfest. - Wählen Sie im Abschnitt Quellcode die Option Inline-Editor aus.
Ersetzen Sie den Inhalt von
main.pydurch den folgenden Code:import os import json import datetime import base64 import requests from google.cloud import storage GCS_BUCKET = os.environ["GCS_BUCKET"] GCS_PREFIX = os.environ.get("GCS_PREFIX", "elastic-defend") STATE_KEY = os.environ.get("STATE_KEY", "state.json") ES_HOST = os.environ["ES_HOST"] ES_API_KEY = os.environ["ES_API_KEY"] MAX_RECORDS = int(os.environ.get("MAX_RECORDS", "100000")) PAGE_SIZE = int(os.environ.get("PAGE_SIZE", "1000")) LOOKBACK_HOURS = int(os.environ.get("LOOKBACK_HOURS", "24")) INDEX_PATTERN = "logs-endpoint.*" SEARCH_PATH = f"/{INDEX_PATTERN}/_search" def _gcs_client(): return storage.Client() def _load_state(bucket): blob = bucket.blob(f"{GCS_PREFIX}/{STATE_KEY}") if blob.exists(): return json.loads(blob.download_as_text()) return {} def _save_state(bucket, state): blob = bucket.blob(f"{GCS_PREFIX}/{STATE_KEY}") blob.upload_from_string( json.dumps(state), content_type="application/json", ) def _build_query(gte_ts, sort_after=None): body = { "size": PAGE_SIZE, "query": { "range": { "@timestamp": { "gte": gte_ts, "format": "strict_date_optional_time", } } }, "sort": [ {"@timestamp": {"order": "asc"}}, {"_shard_doc": "asc"}, ], } if sort_after: body["search_after"] = sort_after return body def _search(session, body): url = f"{ES_HOST.rstrip('/')}{SEARCH_PATH}" resp = session.post( url, json=body, headers={ "Authorization": f"ApiKey {ES_API_KEY}", "Content-Type": "application/json", }, timeout=120, ) resp.raise_for_status() return resp.json() def _write_ndjson(bucket, records, ts_label): if not records: return now = datetime.datetime.utcnow().strftime("%Y%m%dT%H%M%SZ") blob_name = f"{GCS_PREFIX}/{ts_label}/{now}.ndjson" blob = bucket.blob(blob_name) ndjson = "\n".join(json.dumps(r, separators=(",", ":")) for r in records) blob.upload_from_string(ndjson, content_type="application/x-ndjson") print(f"Wrote {len(records)} records to gs://{GCS_BUCKET}/{blob_name}") def main(event, context): """Cloud Run function entry point triggered by Pub/Sub.""" client = _gcs_client() bucket = client.bucket(GCS_BUCKET) state = _load_state(bucket) sort_after = state.get("sort_after") if state.get("last_timestamp"): gte_ts = state["last_timestamp"] else: gte_ts = ( datetime.datetime.utcnow() - datetime.timedelta(hours=LOOKBACK_HOURS) ).strftime("%Y-%m-%dT%H:%M:%S.%fZ") session = requests.Session() total = 0 batch = [] last_ts = gte_ts ts_label = datetime.datetime.utcnow().strftime("%Y/%m/%d/%H") while total < MAX_RECORDS: body = _build_query(gte_ts, sort_after) result = _search(session, body) hits = result.get("hits", {}).get("hits", []) if not hits: break for hit in hits: doc = hit.get("_source", {}) doc["_id"] = hit.get("_id") doc["_index"] = hit.get("_index") batch.append(doc) hit_ts = doc.get("@timestamp", last_ts) if hit_ts > last_ts: last_ts = hit_ts sort_after = hits[-1].get("sort") total += len(hits) if len(batch) >= PAGE_SIZE: _write_ndjson(bucket, batch, ts_label) batch = [] if len(hits) < PAGE_SIZE: break if batch: _write_ndjson(bucket, batch, ts_label) new_state = { "last_timestamp": last_ts, "sort_after": sort_after, } _save_state(bucket, new_state) print(f"Done. Fetched {total} records. State: {json.dumps(new_state)}") return f"OK: {total} records"Ersetzen Sie den Inhalt von
requirements.txtdurch Folgendes:functions-framework==3.* google-cloud-storage==2.* requests==2.*Klicken Sie auf Bereitstellen.
Warten Sie, bis die Bereitstellung abgeschlossen ist.
Cloud Scheduler-Job erstellen
Erstellen Sie einen Cloud Scheduler-Job, um die Cloud Run-Funktion regelmäßig auszulösen.
- Rufen Sie in der Google Cloud Console Cloud Scheduler auf.
- Klicken Sie auf Job erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Name elastic-defend-schedulerRegion Wählen Sie dieselbe Region wie Ihre Cloud Run-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.
- Cloud Pub/Sub-Thema: Wählen Sie
elastic-defend-triggeraus. - Nachrichtentext: Geben Sie
{"run": true}ein.
Klicken Sie auf Erstellen.
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.
Elastic Defend Events. - Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
- Wählen Sie Elastic Defend 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 für den nächsten Schritt.
Feed konfigurieren
- 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://elastic-defend-logs/elastic-defend/Ersetzen Sie
elastic-defend-logsdurch den Namen Ihres GCS-Buckets.Option zum Löschen der Quelle: Wählen Sie die gewünschte Löschoption aus:
- Nie: Es werden niemals Dateien nach Übertragungen gelöscht (empfohlen für Tests).
- Übertragene Dateien löschen: Dateien werden nach der erfolgreichen Übertragung gelöscht.
Übertragene Dateien und leere Verzeichnisse löschen: Löscht Dateien und leere Verzeichnisse nach der erfolgreichen Übertragung.
Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden (Standard ist 180 Tage)
Asset-Namespace: Der Asset-Namespace
Labels für Datenaufnahme: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll
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.
elastic-defend-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 |
|---|---|---|
| _source.agent.id, _source.agent.type, _source.agent.version, _source.host.architecture, _source.event.agent_id_status, _source.event.id, _source.user.id, _source.group.id, _source.data_stream.type, _source.agent.build.original | additional.fields | Zusammengeführt mit Labelobjekten, die Werte aus den aufgeführten Feldern enthalten |
| _source.process.Ext.session_info.logon_type | extensions.auth.auth_details | Wert direkt kopiert |
| _source.host.os.full | hardware.cpu_platform | Wert direkt kopiert |
| _source.host.id | hardware.serial_number | Wert direkt kopiert |
| _source.rule.description | metadata.description | Wert direkt kopiert |
| _source.@timestamp | metadata.event_timestamp | Konvertiert mit Datumsfilter mit ISO8601, yyyy-MM-ddTHH:mm:ss.SSSSSSSSSZ, yyyy-MM-ddTHH:mm:ss.SSSSSSZ, yyyy-MM-ddTHH:mm:ss.SSSZ, yyyy-MM-ddTHH:mm:ssZ |
| metadata.event_type | Festgelegt auf Grundlage von index, event.action und has*-Bedingungen | |
| metadata.log_type | Auf „ELASTIC_DEFEND“ festlegen | |
| metadata.product_event_type | Auf „File Events“ (Dateiereignisse) festlegen, wenn _index ~ events.file; „Library Events“ (Bibliotheksereignisse), wenn events.library; „Network Events“ (Netzwerkereignisse), wenn events.network; „Process Events“ (Prozessereignisse), wenn events.process; „Registry Events“ (Registrierungsereignisse), wenn events.registry; „Security Events“ (Sicherheitsereignisse), wenn events.security; „API Events“ (API-Ereignisse), wenn events.api; „Alerts“ (Benachrichtigungen), wenn .alert | |
| _id | metadata.product_log_id | Wert aus _id, wenn nicht in ["", " ", "null", "N/A"] |
| _source.ecs.version | metadata.product_version | Wert direkt kopiert |
| _source.network.type | network.application_protocol_version | Wert direkt kopiert |
| _source.network.transport | network.ip_protocol | Auf „TCP“ gesetzt, wenn (?i)tcp übereinstimmt; „UDP“, wenn (?i)udp übereinstimmt; „ICMP“, wenn (?i)icmp übereinstimmt; andernfalls „UNKNOWN_IP_PROTOCOL“ |
| _source.destination.as.organization.name | network.organization_name | Wert direkt kopiert |
| _source.Endpoint.policy.applied.artifacts.global.identifiers | observer.file.names | Zusammengeführt aus _source.Endpoint.policy.applied.artifacts.global.identifiers |
| _source.Endpoint.policy.applied.artifacts.global.version, _source.Endpoint.policy.applied.artifacts.global.snapshot | observer.resource.attribute.labels | Zusammengeführt mit Labelobjekten, die Werte aus den aufgeführten Feldern enthalten |
| _source.Endpoint.policy.applied.artifacts.user.version | observer.user.attribute.labels | Zusammengeführt mit dem Label-Objekt, das den Wert aus _source.Endpoint.policy.applied.artifacts.user.version enthält |
| _source.host.os.full | principal.asset.hardware.cpu_platform | Wert direkt kopiert |
| _source.host.id | principal.asset.hardware.serial_number | Wert direkt kopiert |
| _source.host.name | principal.asset.hostname | Wert direkt kopiert |
| _source.host.ip | principal.asset.ip | Zusammengeführt aus _source.host.ip |
| _source.host.os.type | principal.asset.platform_software.platform | Auf „WINDOWS“ gesetzt, wenn (?i)windows übereinstimmt; „LINUX“, wenn (?i)linux übereinstimmt; „MAC“, wenn (?i)mac übereinstimmt; „IOS“, wenn (?i)ios übereinstimmt; andernfalls „UNKNOWN_PLATFORM“ |
| _source.host.os.kernel | principal.asset.platform_software.platform_patch_level | Wert direkt kopiert |
| _source.event.created | principal.domain.creation_time | Konvertiert mit Datumsfilter mit ISO8601, yyyy-MM-ddTHH:mm:ss.SSSSSSSSSZ, yyyy-MM-ddTHH:mm:ss.SSSSSSZ, yyyy-MM-ddTHH:mm:ss.SSSZ, yyyy-MM-ddTHH:mm:ssZ |
| _source.user.domain | principal.domain.name | Wert direkt kopiert |
| _source.process.thread.capabilities.effective | principal.file.capabilities_tags | Zusammengeführt aus _source.process.thread.capabilities.effective |
| _source.process.executable | principal.file.full_path | Wert direkt kopiert |
| _source.process.hash.md5 | principal.file.md5 | Wert direkt kopiert |
| _source.file.name | principal.file.names | Zusammengeführt aus _source.file.name |
| _source.process.hash.sha1 | principal.file.sha1 | Wert direkt kopiert |
| _source.process.hash.sha256 | principal.file.sha256 | Wert direkt kopiert |
| _source.host.hostname | principal.hostname | Wert direkt kopiert |
| _source.host.ip | principal.ip | Zusammengeführt aus _source.host.ip |
| _source.host.mac | principal.mac | Zusammengeführt aus _source.host.mac nach dem Ersetzen von „-“ durch „:“ |
| _source.host.os.Ext.variant | principal.platform_version | Wert direkt kopiert |
| _source.source.port | principal.port | In String und dann in Ganzzahl konvertiert |
| _source.process.command_line, _source.process.name | principal.process.command_line | Wert aus _source.process.command_line, falls nicht leer, andernfalls aus _source.process.name |
| _source.process.thread.capabilities.permitted | principal.process.file.capabilities_tags | Zusammengeführt aus _source.process.thread.capabilities.permitted |
| _source.process.executable | principal.process.file.full_path | Wert direkt kopiert |
| _source.process.hash.md5 | principal.process.file.md5 | Wert direkt kopiert |
| _source.process.hash.sha1 | principal.process.file.sha1 | Wert direkt kopiert |
| _source.process.hash.sha256 | principal.process.file.sha256 | Wert direkt kopiert |
| _source.process.parent.executable | principal.process.parent_process.file.full_path | Wert direkt kopiert |
| _source.process.pid | principal.process.pid | In String konvertiert und dann kopiert |
| _source.process.Ext.api.name | principal.resource.attribute.labels | Wird mit dem Label-Objekt zusammengeführt, das den Wert aus _source.process.Ext.api.name enthält. |
| _source.event.code | principal.resource.product_object_id | Wert direkt kopiert |
| _source.group.name | principal.user.group_identifiers | Zusammengeführt aus _source.group.name |
| _source.user.name | principal.user.userid | Wert direkt kopiert |
| _source.user.id | principal.user.windows_sid | Wert aus _source.user.id, wenn er mit dem regulären Ausdruck ^S-\\d-(\\\\d+-){1,14}\\\\d+$ übereinstimmt |
| _source.file.Ext.malware_signature.primary.signature.hash.sha256 | security_result.about.file.sha256 | Wert direkt kopiert |
| _source.event.outcome | security_result.action | Wert aus _source.event.outcome, in Großbuchstaben, dann auf ALLOW gesetzt, wenn in [SUCCESS, ALLOW], BLOCK, wenn in [FAILURE, DENY, SKIPPED, RATE_LIMIT], UNKNOWN_ACTION, wenn UNKNOWN |
| _source.event.action | security_result.action_details | Wert direkt kopiert |
| _source.destination.geo.region_iso_code | security_result.associations | Mit Objekt zusammengeführt, das den Namen aus _source.destination.geo.region_iso_code enthält |
| _source.kibana.alert.rule.parameters.threat.tactic.id, _source.kibana.alert.rule.parameters.threat.tactic.name | security_result.attack_details.tactics | Mit Objekt zusammengeführt, das ID und Name aus den aufgeführten Feldern enthält |
| _source.kibana.alert.rule.parameters.threat.technique.id, _source.kibana.alert.rule.parameters.threat.technique.name, _source.kibana.alert.rule.parameters.threat.technique.subtechnique.id, _source.kibana.alert.rule.parameters.threat.technique.subtechnique.name | security_result.attack_details.techniques | Zusammengeführt mit Objekten, die „id“, „name“, „subtechnique_id“ und „subtechnique_name“ aus den aufgeführten Feldern enthalten |
| _source.event.category | security_result.category_details | Zusammengeführt aus _source.event.category |
| _source.kibana.alert.rule.description | security_result.description | Wert direkt kopiert |
| _source.event.kind, _source.file.Ext.malware_signature.all_names, _source.file.Ext.malware_signature.identifier, _source.event.risk_score, _source.threat.tactic.reference, _source.threat.technique.reference, _source.threat.technique.subtechnique.reference | security_result.detection_fields | Zusammengeführt mit Labelobjekten, die Werte aus den aufgeführten Feldern enthalten |
| _source.rule.id, _source.kibana.alert.rule.rule_id | security_result.rule_id | Wert aus _source.rule.id, falls nicht leer, andernfalls aus _source.kibana.alert.rule.rule_id |
| _source.rule.name, _source.kibana.alert.rule.name | security_result.rule_name | Wert aus _source.rule.name, falls nicht leer, andernfalls aus _source.kibana.alert.rule.name |
| _source.rule.ruleset | security_result.rule_set | Wert direkt kopiert |
| security_result.severity | Auf „LOW“ festlegen; wenn _index mit „.alert“ übereinstimmt, auf „HIGH“ festlegen; wenn _source.kibana.alert.rule.parameters.severity mit (?i)LOW übereinstimmt, auf „LOW“ festlegen | |
| _source.message | security_result.summary | Wert direkt kopiert |
| _source.file.Ext.malware_signature.primary.signature.id | security_result.threat_id | Wert direkt kopiert |
| _source.file.Ext.malware_signature.primary.signature.name | security_result.threat_name | Wert direkt kopiert |
| _source.source.address, _source.source.ip | src.asset.ip | Zusammengeführt aus _source.source.address und _source.source.ip |
| _source.source.address, _source.source.ip | src.ip | Zusammengeführt aus _source.source.address und _source.source.ip |
| _source.host.name | target.asset.hostname | Wert direkt kopiert |
| _source.destination.address, _source.destination.ip | target.asset.ip | Zusammengeführt aus _source.destination.address und _source.destination.ip |
| _source.file.path, _source.dll.path, _source.process.executable, _source.Target.process.executable | target.file.full_path | Wert aus „_source.file.path“ für „events.file“, „_source.dll.path“ für „events.library“, „_source.process.executable“ für „events.process“ oder „events.api“, „_source.Target.process.executable“ für „events.api“ |
| _source.dll.hash.md5, _source.process.hash.md5 | target.file.md5 | Wert aus _source.dll.hash.md5, wenn events.library, _source.process.hash.md5, wenn .alert |
| _source.dll.name, _source.process.name | target.file.names | Zusammengeführt aus _source.dll.name, wenn events.library, _source.process.name, wenn .alert |
| _source.dll.hash.sha1, _source.process.hash.sha1 | target.file.sha1 | Wert aus _source.dll.hash.sha1, wenn events.library, _source.process.hash.sha1, wenn .alert |
| _source.dll.hash.sha256, _source.process.hash.sha256 | target.file.sha256 | Wert aus _source.dll.hash.sha256, wenn events.library, _source.process.hash.sha256, wenn .alert |
| _source.host.name | target.hostname | Wert direkt kopiert |
| _source.destination.address, _source.destination.ip | target.ip | Zusammengeführt aus _source.destination.address und _source.destination.ip |
| _source.destination.geo.city_name | target.location.city | Wert direkt kopiert |
| _source.destination.geo.country_name | target.location.country_or_region | Wert direkt kopiert |
| _source.destination.geo.continent_name | target.location.name | Wert direkt kopiert |
| _source.destination.geo.location.lat | target.location.region_coordinates.latitude | In String und dann in Gleitkommazahl konvertiert |
| _source.destination.geo.location.lon | target.location.region_coordinates.longitude | In String und dann in Gleitkommazahl konvertiert |
| _source.destination.geo.region_name | target.location.state | Wert direkt kopiert |
| _source.data_stream.namespace | target.namespace | Wert direkt kopiert |
| _source.destination.port | target.port | In String und dann in Ganzzahl konvertiert |
| _source.process.command_line | target.process.command_line | Wert direkt kopiert |
| _source.process.executable | target.process.file.full_path | Wert direkt kopiert |
| _source.process.hash.md5 | target.process.file.md5 | Wert direkt kopiert |
| _source.process.hash.sha1 | target.process.file.sha1 | Wert direkt kopiert |
| _source.process.hash.sha256 | target.process.file.sha256 | Wert direkt kopiert |
| _source.process.name | target.process.file.names | Zusammengeführt aus _source.process.name |
| _source.registry.key | target.registry.registry_key | Wert direkt kopiert |
| _source.registry.path | target.registry.registry_value_data | Wert direkt kopiert |
| _source.registry.value | target.registry.registry_value_name | Wert direkt kopiert |
| _source.data_stream.dataset | target.resource.name | Wert direkt kopiert |
| _source.process.entity_id | target.user.userid | Wert direkt kopiert |
| metadata.product_name | Auf „Elastic Defend“ festgelegt | |
| metadata.vendor_name | Auf „Elastisch“ festgelegt |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten