Mengumpulkan log Elastic Defend
Dokumen ini menjelaskan cara menyerap log Elastic Defend ke Google Security Operations menggunakan Google Cloud Storage V2 dengan fungsi Cloud Run.
Elastic Defend adalah solusi deteksi dan respons endpoint (EDR) dalam Elastic Security yang menyediakan kemampuan pencegahan, deteksi, dan respons dengan visibilitas mendalam di seluruh sistem operasi Windows, macOS, dan Linux. EDR memantau eksekusi proses, aktivitas file, koneksi jaringan, modifikasi registri, dan pemuatan library untuk mendeteksi dan mencegah ancaman di tingkat endpoint. Data disimpan di Elasticsearch dan dapat diambil menggunakan Elasticsearch Search API.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps
- Project Google Cloud dengan API berikut diaktifkan:
- Cloud Storage
- Cloud Run Functions
- Cloud Scheduler
- Pub/Sub
- IAM
- Akses ke cluster Elasticsearch dengan Elastic Defend yang di-deploy
- Izin untuk membuat kunci API di Elasticsearch (hak istimewa cluster
manage_security,manage_api_key, ataumanage_own_api_key) - Konektivitas jaringan dari Cloud Run Functions ke cluster Elasticsearch Anda
Membuat bucket Google Cloud Storage
- Buka Konsol Google Cloud.
- Pilih project Anda atau buat project baru.
- Di menu navigasi, buka Cloud Storage > Buckets.
- Klik Create bucket.
Berikan detail konfigurasi berikut:
Setelan Nilai Beri nama bucket Anda Masukkan nama yang unik secara global (misalnya, elastic-defend-logs)Location type Pilih berdasarkan kebutuhan Anda (Region, Dual-region, Multi-region) Location Pilih lokasi (misalnya, us-central1)Kelas penyimpanan Standar (direkomendasikan untuk log yang sering diakses) Access control Seragam (direkomendasikan) Alat perlindungan Opsional: Aktifkan pembuatan versi objek atau kebijakan retensi Klik Create.
Mengumpulkan kredensial Elastic Defend
Agar fungsi Cloud Run dapat mengambil peristiwa Elastic Defend, Anda perlu membuat kunci API dengan izin baca pada aliran data logs-endpoint.
Membuat kunci API menggunakan Kibana
- Login ke Kibana.
- Di menu navigasi atau kolom penelusuran global, buka Stack Management > API Keys.
- Klik Buat kunci API.
- Di kolom Name, masukkan
Google SecOps Cloud Storage Integration. - Di kolom Masa berlaku, Anda dapat menetapkan tanggal habis masa berlaku. Secara default, masa berlaku kunci API tidak berakhir.
- Klik Kontrol hak istimewa keamanan.
- Di bagian Indeks, klik Tambahkan hak istimewa indeks.
- Konfigurasi hak istimewa indeks:
- Indeks: Masukkan
logs-endpoint.* - Hak istimewa: Pilih baca
- Indeks: Masukkan
- Kosongkan bagian Hak istimewa cluster (tidak ada hak istimewa cluster yang diperlukan).
- Klik Buat kunci API.
Mencatat kredensial API
Setelah membuat kunci API, dialog akan menampilkan kredensial Anda:
Dienkode: Kunci API yang dienkode base64 (misalnya,
VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw==)Anda juga perlu mencatat URL endpoint Elasticsearch:
Untuk Elastic Cloud: Endpoint ditampilkan di Konsol Cloud di bagian Elasticsearch deployment Anda (misalnya,
https://my-deployment.es.us-central1.gcp.cloud.es.io:443)Untuk Elasticsearch yang dikelola sendiri: Gunakan nama host atau alamat IP cluster Elasticsearch Anda dengan port (misalnya,
https://elasticsearch.example.com:9200)
Membuat kunci API menggunakan Alat Dev (metode alternatif)
Atau, Anda dapat membuat kunci API menggunakan Kibana Dev Tools:
- Login ke Kibana.
- Buka Pengelolaan > Alat Dev.
Di Konsol, jalankan perintah berikut:
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" } }Respons berisi kredensial kunci API Anda:
{ "id": "VuaCfGcBCdbkQm-e5aOx", "name": "Google SecOps Cloud Storage Integration", "api_key": "ui2lp2axTNmsyakw9tvNnw", "encoded": "VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw==" }Salin dan simpan nilai encoded. Ini adalah kunci API berenkode base64 yang akan Anda gunakan untuk autentikasi.
Membuat akun layanan
Buat akun layanan khusus untuk fungsi Cloud Run.
- Di Konsol Google Cloud, buka IAM & Admin > Service Accounts.
- Klik Create Service Account.
- Berikan detail konfigurasi berikut:
- Nama akun layanan: Masukkan
elastic-defend-collector - Deskripsi akun layanan: Masukkan
Service account for Elastic Defend log collection to GCS
- Nama akun layanan: Masukkan
- Klik Create and Continue.
- Di bagian Berikan akun layanan ini akses ke project, tambahkan peran berikut:
- Klik Select a role, lalu pilih Storage Object Admin (
roles/storage.objectAdmin). - Klik Add another role, lalu pilih Cloud Run Invoker (
roles/run.invoker).
- Klik Select a role, lalu pilih Storage Object Admin (
- Klik Lanjutkan.
- Klik Done.
Membuat topik Pub/Sub
Buat topik Pub/Sub untuk memicu fungsi Cloud Run dari Cloud Scheduler.
- Di konsol Google Cloud, buka Pub/Sub > Topics.
- Klik Buat Topik.
- Berikan detail konfigurasi berikut:
- ID Topik: Masukkan
elastic-defend-trigger - Tambahkan langganan default: Biarkan dicentang
- ID Topik: Masukkan
- Klik Create.
Membuat fungsi Cloud Run
Buat fungsi Cloud Run yang mengambil peristiwa dari Elasticsearch dan menuliskannya ke GCS.
Membuat fungsi
- Di konsol Google Cloud, buka Cloud Run functions.
- Klik Create function.
Berikan detail konfigurasi berikut:
Setelan Nilai Lingkungan Generasi ke-2 Nama fungsi elastic-defend-to-gcsRegion Pilih region yang sama dengan bucket GCS Anda Jenis pemicu Cloud Pub/Sub Topik Cloud Pub/Sub Pilih elastic-defend-triggerMemori yang dialokasikan 512 MiB (peningkatan untuk volume data besar) Waktu tunggu 540 detik Akun layanan runtime Pilih elastic-defend-collectorKlik Berikutnya.
Menambahkan variabel lingkungan
Tambahkan variabel lingkungan berikut di bagian Runtime, build, connections and security settings:
Variabel Nilai GCS_BUCKETNama bucket GCS Anda (misalnya, elastic-defend-logs)GCS_PREFIXAwalan untuk file log (misalnya, elastic-defend)STATE_KEYNama file status (misalnya, state.json)ES_HOSTURL Elasticsearch (misalnya, https://my-deployment.es.us-central1.gcp.cloud.es.io:443)ES_API_KEYKunci API yang dienkode dari langkah pembuatan kredensial MAX_RECORDSJumlah maksimum data per eksekusi (misalnya, 100000)PAGE_SIZEJumlah catatan per permintaan penelusuran (misalnya, 1000)LOOKBACK_HOURSJumlah jam untuk melihat kembali saat pertama kali dijalankan (misalnya, 24)
Tambahkan kode fungsi
- Pilih Python 3.11 sebagai Runtime.
- Tetapkan Entry point ke
main. - Di bagian Kode sumber, pilih Editor Inline.
Ganti konten
main.pydengan kode berikut: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"Ganti konten
requirements.txtdengan konten berikut:functions-framework==3.* google-cloud-storage==2.* requests==2.*Klik Deploy.
Tunggu hingga deployment berhasil diselesaikan.
Buat tugas Cloud Scheduler
Buat tugas Cloud Scheduler untuk memicu fungsi Cloud Run sesuai jadwal reguler.
- Di konsol Google Cloud, buka Cloud Scheduler.
- Klik Create Job.
Berikan detail konfigurasi berikut:
Setelan Nilai Nama elastic-defend-schedulerRegion Pilih region yang sama dengan fungsi Cloud Run Anda Frekuensi */5 * * * *(setiap 5 menit)Zona Waktu Pilih zona waktu Anda (misalnya, UTC)Klik Lanjutkan.
Di bagian Konfigurasi eksekusi:
- Jenis target: Pilih Pub/Sub
- Topik Cloud Pub/Sub: Pilih
elastic-defend-trigger - Isi pesan: Masukkan
{"run": true}
Klik Create.
Mengambil akun layanan Google SecOps dan mengonfigurasi feed
Google SecOps menggunakan akun layanan unik untuk membaca data dari bucket GCS Anda. Anda harus memberi akun layanan ini akses ke bucket Anda.
Dapatkan email akun layanan
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
Elastic Defend Events). - Pilih Google Cloud Storage V2 sebagai Source type.
- Pilih Elastic Defend sebagai Jenis log.
Klik Get Service Account. Email akun layanan yang unik akan ditampilkan, misalnya:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comSalin alamat email ini untuk digunakan di langkah berikutnya.
Mengonfigurasi feed
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
URL bucket penyimpanan: Masukkan URI bucket GCS dengan jalur awalan:
gs://elastic-defend-logs/elastic-defend/Ganti
elastic-defend-logsdengan nama bucket GCS Anda.Opsi penghapusan sumber: Pilih opsi penghapusan sesuai preferensi Anda:
- Jangan pernah: Tidak pernah menghapus file apa pun setelah transfer (direkomendasikan untuk pengujian).
- Hapus file yang ditransfer: Menghapus file setelah transfer berhasil.
Hapus file yang ditransfer dan direktori kosong: Menghapus file dan direktori kosong setelah transfer berhasil.
Usia File Maksimum: Menyertakan file yang diubah dalam beberapa hari terakhir (defaultnya adalah 180 hari)
Namespace aset: Namespace aset
Label penyerapan: Label yang akan diterapkan ke peristiwa dari feed ini
Klik Berikutnya.
Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
Memberikan izin IAM ke akun layanan Google SecOps
Akun layanan Google SecOps memerlukan peran Storage Object Viewer di bucket GCS Anda.
- Buka Cloud Storage > Buckets.
- Klik nama bucket Anda (misalnya,
elastic-defend-logs). - Buka tab Izin.
- Klik Grant access.
- Berikan detail konfigurasi berikut:
- Add principals: Tempel email akun layanan Google SecOps
- Tetapkan peran: Pilih Storage Object Viewer
Klik Simpan.
Tabel pemetaan UDM
| Kolom Log | Pemetaan UDM | Logika |
|---|---|---|
| _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 | Digabungkan dengan objek label yang berisi nilai dari kolom yang tercantum |
| _source.process.Ext.session_info.logon_type | extensions.auth.auth_details | Nilai disalin secara langsung |
| _source.host.os.full | hardware.cpu_platform | Nilai disalin secara langsung |
| _source.host.id | hardware.serial_number | Nilai disalin secara langsung |
| _source.rule.description | metadata.description | Nilai disalin secara langsung |
| _source.@timestamp | metadata.event_timestamp | Dikonversi menggunakan filter tanggal dengan format 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 | Ditetapkan berdasarkan kondisi index, event.action, dan has* | |
| metadata.log_type | Tetapkan ke "ELASTIC_DEFEND" | |
| metadata.product_event_type | Disetel ke "File Events" jika _index ~ events.file; "Library Events" jika events.library; "Network Events" jika events.network; "Process Events" jika events.process; "Registry Events" jika events.registry; "Security Events" jika events.security; "API Events" jika events.api; "Alerts" jika .alert | |
| _id | metadata.product_log_id | Nilai dari _id jika tidak ada di ["", " ", "null", "T/A"] |
| _source.ecs.version | metadata.product_version | Nilai disalin secara langsung |
| _source.network.type | network.application_protocol_version | Nilai disalin secara langsung |
| _source.network.transport | network.ip_protocol | Ditetapkan ke "TCP" jika cocok dengan (?i)tcp; "UDP" jika (?i)udp; "ICMP" jika (?i)icmp; jika tidak, "UNKNOWN_IP_PROTOCOL" |
| _source.destination.as.organization.name | network.organization_name | Nilai disalin secara langsung |
| _source.Endpoint.policy.applied.artifacts.global.identifiers | observer.file.names | Digabungkan dari _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 | Digabungkan dengan objek label yang berisi nilai dari kolom yang tercantum |
| _source.Endpoint.policy.applied.artifacts.user.version | observer.user.attribute.labels | Digabungkan dengan objek label yang berisi nilai dari _source.Endpoint.policy.applied.artifacts.user.version |
| _source.host.os.full | principal.asset.hardware.cpu_platform | Nilai disalin secara langsung |
| _source.host.id | principal.asset.hardware.serial_number | Nilai disalin secara langsung |
| _source.host.name | principal.asset.hostname | Nilai disalin secara langsung |
| _source.host.ip | principal.asset.ip | Digabungkan dari _source.host.ip |
| _source.host.os.type | principal.asset.platform_software.platform | Tetapkan ke "WINDOWS" jika cocok dengan (?i)windows; "LINUX" jika (?i)linux; "MAC" jika (?i)mac; "IOS" jika (?i)ios; atau "UNKNOWN_PLATFORM" |
| _source.host.os.kernel | principal.asset.platform_software.platform_patch_level | Nilai disalin secara langsung |
| _source.event.created | principal.domain.creation_time | Dikonversi menggunakan filter tanggal dengan format 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 | Nilai disalin secara langsung |
| _source.process.thread.capabilities.effective | principal.file.capabilities_tags | Digabungkan dari _source.process.thread.capabilities.effective |
| _source.process.executable | principal.file.full_path | Nilai disalin secara langsung |
| _source.process.hash.md5 | principal.file.md5 | Nilai disalin secara langsung |
| _source.file.name | principal.file.names | Digabungkan dari _source.file.name |
| _source.process.hash.sha1 | principal.file.sha1 | Nilai disalin secara langsung |
| _source.process.hash.sha256 | principal.file.sha256 | Nilai disalin secara langsung |
| _source.host.hostname | principal.hostname | Nilai disalin secara langsung |
| _source.host.ip | principal.ip | Digabungkan dari _source.host.ip |
| _source.host.mac | principal.mac | Digabungkan dari _source.host.mac setelah mengganti - dengan : |
| _source.host.os.Ext.variant | principal.platform_version | Nilai disalin secara langsung |
| _source.source.port | principal.port | Dikonversi ke string, lalu ke bilangan bulat |
| _source.process.command_line, _source.process.name | principal.process.command_line | Nilai dari _source.process.command_line jika tidak kosong, atau dari _source.process.name |
| _source.process.thread.capabilities.permitted | principal.process.file.capabilities_tags | Digabungkan dari _source.process.thread.capabilities.permitted |
| _source.process.executable | principal.process.file.full_path | Nilai disalin secara langsung |
| _source.process.hash.md5 | principal.process.file.md5 | Nilai disalin secara langsung |
| _source.process.hash.sha1 | principal.process.file.sha1 | Nilai disalin secara langsung |
| _source.process.hash.sha256 | principal.process.file.sha256 | Nilai disalin secara langsung |
| _source.process.parent.executable | principal.process.parent_process.file.full_path | Nilai disalin secara langsung |
| _source.process.pid | principal.process.pid | Dikonversi menjadi string, lalu disalin |
| _source.process.Ext.api.name | principal.resource.attribute.labels | Digabungkan dengan objek label yang berisi nilai dari _source.process.Ext.api.name |
| _source.event.code | principal.resource.product_object_id | Nilai disalin secara langsung |
| _source.group.name | principal.user.group_identifiers | Digabungkan dari _source.group.name |
| _source.user.name | principal.user.userid | Nilai disalin secara langsung |
| _source.user.id | principal.user.windows_sid | Nilai dari _source.user.id jika cocok dengan ekspresi reguler ^S-\\d-(\\\\d+-){1,14}\\\\d+$ |
| _source.file.Ext.malware_signature.primary.signature.hash.sha256 | security_result.about.file.sha256 | Nilai disalin secara langsung |
| _source.event.outcome | security_result.action | Nilai dari _source.event.outcome, huruf besar, lalu disetel ke ALLOW jika dalam [SUCCESS, ALLOW], BLOCK jika dalam [FAILURE, DENY, SKIPPED, RATE_LIMIT], UNKNOWN_ACTION jika UNKNOWN |
| _source.event.action | security_result.action_details | Nilai disalin secara langsung |
| _source.destination.geo.region_iso_code | security_result.associations | Digabungkan dengan objek yang berisi nama dari _source.destination.geo.region_iso_code |
| _source.kibana.alert.rule.parameters.threat.tactic.id, _source.kibana.alert.rule.parameters.threat.tactic.name | security_result.attack_details.tactics | Digabungkan dengan objek yang berisi ID dan nama dari kolom yang tercantum |
| _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 | Digabungkan dengan objek yang berisi id, name, subtechnique_id, subtechnique_name dari kolom yang tercantum |
| _source.event.category | security_result.category_details | Digabungkan dari _source.event.category |
| _source.kibana.alert.rule.description | security_result.description | Nilai disalin secara langsung |
| _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 | Digabungkan dengan objek label yang berisi nilai dari kolom yang tercantum |
| _source.rule.id, _source.kibana.alert.rule.rule_id | security_result.rule_id | Nilai dari _source.rule.id jika tidak kosong, atau dari _source.kibana.alert.rule.rule_id |
| _source.rule.name, _source.kibana.alert.rule.name | security_result.rule_name | Nilai dari _source.rule.name jika tidak kosong, atau dari _source.kibana.alert.rule.name |
| _source.rule.ruleset | security_result.rule_set | Nilai disalin secara langsung |
| security_result.severity | Tetapkan ke "LOW"; jika _index cocok dengan .alert, tetapkan ke "HIGH"; jika _source.kibana.alert.rule.parameters.severity cocok dengan (?i)LOW, tetapkan ke "LOW" | |
| _source.message | security_result.summary | Nilai disalin secara langsung |
| _source.file.Ext.malware_signature.primary.signature.id | security_result.threat_id | Nilai disalin secara langsung |
| _source.file.Ext.malware_signature.primary.signature.name | security_result.threat_name | Nilai disalin secara langsung |
| _source.source.address, _source.source.ip | src.asset.ip | Digabungkan dari _source.source.address dan _source.source.ip |
| _source.source.address, _source.source.ip | src.ip | Digabungkan dari _source.source.address dan _source.source.ip |
| _source.host.name | target.asset.hostname | Nilai disalin secara langsung |
| _source.destination.address, _source.destination.ip | target.asset.ip | Digabungkan dari _source.destination.address dan _source.destination.ip |
| _source.file.path, _source.dll.path, _source.process.executable, _source.Target.process.executable | target.file.full_path | Nilai dari _source.file.path jika events.file, _source.dll.path jika events.library, _source.process.executable jika events.process atau events.api, _source.Target.process.executable jika events.api |
| _source.dll.hash.md5, _source.process.hash.md5 | target.file.md5 | Nilai dari _source.dll.hash.md5 jika events.library, _source.process.hash.md5 jika .alert |
| _source.dll.name, _source.process.name | target.file.names | Digabungkan dari _source.dll.name jika events.library, _source.process.name jika .alert |
| _source.dll.hash.sha1, _source.process.hash.sha1 | target.file.sha1 | Nilai dari _source.dll.hash.sha1 jika events.library, _source.process.hash.sha1 jika .alert |
| _source.dll.hash.sha256, _source.process.hash.sha256 | target.file.sha256 | Nilai dari _source.dll.hash.sha256 jika events.library, _source.process.hash.sha256 jika .alert |
| _source.host.name | target.hostname | Nilai disalin secara langsung |
| _source.destination.address, _source.destination.ip | target.ip | Digabungkan dari _source.destination.address dan _source.destination.ip |
| _source.destination.geo.city_name | target.location.city | Nilai disalin secara langsung |
| _source.destination.geo.country_name | target.location.country_or_region | Nilai disalin secara langsung |
| _source.destination.geo.continent_name | target.location.name | Nilai disalin secara langsung |
| _source.destination.geo.location.lat | target.location.region_coordinates.latitude | Dikonversi menjadi string, lalu menjadi float |
| _source.destination.geo.location.lon | target.location.region_coordinates.longitude | Dikonversi menjadi string, lalu menjadi float |
| _source.destination.geo.region_name | target.location.state | Nilai disalin secara langsung |
| _source.data_stream.namespace | target.namespace | Nilai disalin secara langsung |
| _source.destination.port | target.port | Dikonversi ke string, lalu ke bilangan bulat |
| _source.process.command_line | target.process.command_line | Nilai disalin secara langsung |
| _source.process.executable | target.process.file.full_path | Nilai disalin secara langsung |
| _source.process.hash.md5 | target.process.file.md5 | Nilai disalin secara langsung |
| _source.process.hash.sha1 | target.process.file.sha1 | Nilai disalin secara langsung |
| _source.process.hash.sha256 | target.process.file.sha256 | Nilai disalin secara langsung |
| _source.process.name | target.process.file.names | Digabungkan dari _source.process.name |
| _source.registry.key | target.registry.registry_key | Nilai disalin secara langsung |
| _source.registry.path | target.registry.registry_value_data | Nilai disalin secara langsung |
| _source.registry.value | target.registry.registry_value_name | Nilai disalin secara langsung |
| _source.data_stream.dataset | target.resource.name | Nilai disalin secara langsung |
| _source.process.entity_id | target.user.userid | Nilai disalin secara langsung |
| metadata.product_name | Ditetapkan ke "Elastic Defend" | |
| metadata.vendor_name | Ditetapkan ke "Elastis" |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.