Mengumpulkan log platform ZeroFox
Dokumen ini menjelaskan cara menyerap log ZeroFox Platform ke Google Security Operations menggunakan Google Cloud Storage. ZeroFox Platform memberikan perlindungan risiko digital dengan memantau dan menganalisis ancaman di media sosial, aplikasi seluler, cloud, email, dan saluran digital lainnya.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps
- Project GCP dengan Cloud Storage API yang diaktifkan
- Izin untuk membuat dan mengelola bucket GCS
- Izin untuk mengelola kebijakan IAM di bucket GCS
- Izin untuk membuat layanan Cloud Run, topik Pub/Sub, dan tugas Cloud Scheduler
- Akses istimewa ke tenant ZeroFox Platform
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 Memberi nama bucket Anda Masukkan nama yang unik secara global (misalnya, zerofox-platform-logs)Location type Pilih sesuai kebutuhan Anda (Region, Dual-region, Multi-region) Location Pilih lokasi (misalnya, us-central1)Storage class Standard (direkomendasikan untuk log yang sering diakses) Kontrol akses Seragam (direkomendasikan) Alat perlindungan Opsional: Mengaktifkan pembuatan versi objek atau kebijakan retensi Klik Create.
Mengumpulkan kredensial ZeroFox Platform
Mendapatkan token akses pribadi ZeroFox
- Login ke ZeroFox Platform di https://cloud.zerofox.com.
- Buka Setelan > Sambungan Data > Feed Data API.
- URL langsung (setelah login): https://cloud.zerofox.com/data_connectors/api
- Catatan: Jika Anda tidak melihat item menu ini, hubungi administrator ZeroFox untuk mendapatkan akses. Menu ini juga dapat diberi label Konektor Data > Feed Data API, bergantung pada versi UI tenant Anda.
- Klik Generate Token atau Create Personal Access Token.
- Berikan detail konfigurasi berikut:
- Name: Masukkan nama deskriptif (misalnya,
Google SecOps GCS Ingestion). - Expiration: Pilih periode rotasi sesuai dengan kebijakan keamanan organisasi Anda.
- Permissions/Feeds: Pilih izin baca untuk:
- Notifikasi
- CTI feed
- Jenis data lain yang ingin Anda ekspor
- Name: Masukkan nama deskriptif (misalnya,
- Klik Generate.
- Salin dan simpan Token Akses Pribadi yang dihasilkan di lokasi yang aman (Anda tidak akan dapat melihatnya lagi).
Simpan ZEROFOX_BASE_URL:
https://api.zerofox.com(default untuk sebagian besar tenant).
Memverifikasi izin
Untuk memverifikasi bahwa akun memiliki izin yang diperlukan:
- Login ke ZeroFox Platform.
- Buka Setelan (⚙️) > Sambungan Data > Feed Data API.
- Jika Anda dapat melihat bagian Feed Data API dan membuat token, berarti Anda memiliki izin yang diperlukan.
- Jika Anda tidak dapat melihat opsi ini, hubungi administrator Anda untuk memberikan izin akses API.
Menguji akses API
Uji kredensial Anda sebelum melanjutkan integrasi:
# Replace with your actual credentials ZEROFOX_API_TOKEN="your-personal-access-token" ZEROFOX_BASE_URL="https://api.zerofox.com" # Test API access (example endpoint - adjust based on your data type) curl -v -H "Authorization: Bearer $ZEROFOX_API_TOKEN" \ -H "Accept: application/json" \ "$ZEROFOX_BASE_URL/v1/alerts?limit=1"
Membuat akun layanan untuk fungsi Cloud Run
Fungsi Cloud Run memerlukan akun layanan dengan izin untuk menulis ke bucket GCS dan dipanggil oleh Pub/Sub.
Membuat akun layanan
- Di Konsol GCP, buka IAM & Admin > Service Accounts.
- Klik Create Service Account.
- Berikan detail konfigurasi berikut:
- Service account name: Masukkan
zerofox-logs-collector-sa. - Service account description: Masukkan
Service account for Cloud Run function to collect ZeroFox Platform logs.
- Service account name: Masukkan
- Klik Create and Continue.
- Di bagian Grant this service account access to project, tambahkan peran berikut:
- Klik Pilih peran.
- Telusuri dan pilih Storage Object Admin.
- Klik + Add another role.
- Telusuri dan pilih Cloud Run Invoker.
- Klik + Add another role.
- Telusuri dan pilih Cloud Functions Invoker.
- Klik Lanjutkan.
- Klik Done.
Peran ini diperlukan untuk:
- Storage Object Admin: Menulis log ke bucket GCS dan mengelola state file
- Cloud Run Invoker: Mengizinkan Pub/Sub memanggil fungsi
- Cloud Functions Invoker: Mengizinkan pemanggilan fungsi
Memberikan izin IAM di bucket GCS
Beri akun layanan (zerofox-logs-collector-sa) izin tulis di bucket GCS:
- Buka Cloud Storage > Buckets.
- Klik nama bucket Anda (misalnya,
zerofox-platform-logs). - Buka tab Izin.
- Klik Grant access.
- Berikan detail konfigurasi berikut:
- Tambahkan entitas: Masukkan email akun layanan (misalnya,
zerofox-logs-collector-sa@PROJECT_ID.iam.gserviceaccount.com). - Assign roles: Pilih Storage Object Admin.
- Tambahkan entitas: Masukkan email akun layanan (misalnya,
- Klik Simpan.
Membuat topik Pub/Sub
Buat topik Pub/Sub yang akan dipublikasikan oleh Cloud Scheduler dan di-subscribe oleh fungsi Cloud Run.
- Di Konsol GCP, buka Pub/Sub > Topics.
- Klik Create topic.
- Berikan detail konfigurasi berikut:
- ID Topik: Masukkan
zerofox-logs-trigger. - Biarkan setelan lainnya sesuai default.
- ID Topik: Masukkan
- Klik Create.
Membuat fungsi Cloud Run untuk mengumpulkan log
Fungsi Cloud Run dipicu oleh pesan Pub/Sub dari Cloud Scheduler untuk mengambil log dari ZeroFox Platform API dan menulisnya ke GCS.
- Di Konsol GCP, buka Cloud Run.
- Klik Create service.
- Pilih Function (gunakan editor inline untuk membuat fungsi).
Di bagian Configure, berikan detail konfigurasi berikut:
Setelan Nilai Nama layanan zerofox-logs-collectorRegion Pilih region yang cocok dengan bucket GCS Anda (misalnya, us-central1)Runtime Pilih Python 3.12 atau yang lebih baru Di bagian Trigger (optional):
- Klik + Tambahkan pemicu.
- Pilih Cloud Pub/Sub.
- Di Select a Cloud Pub/Sub topic, pilih topik Pub/Sub (
zerofox-logs-trigger). - Klik Simpan.
Di bagian Authentication:
- Pilih Wajibkan autentikasi.
- Periksa Identity and Access Management (IAM).
Scroll ke bawah dan luaskan Containers, Networking, Security.
Buka tab Keamanan:
- Service account: Pilih akun layanan (
zerofox-logs-collector-sa).
- Service account: Pilih akun layanan (
Buka tab Penampung:
- Klik Variables & Secrets.
- Klik + Add variable untuk setiap variabel lingkungan:
Nama Variabel Nilai Contoh Deskripsi GCS_BUCKETzerofox-platform-logsNama bucket GCS GCS_PREFIXzerofox/platformAwalan untuk file log STATE_KEYzerofox/platform/state.jsonJalur file status ZEROFOX_BASE_URLhttps://api.zerofox.comURL dasar API ZEROFOX_API_TOKENyour-zerofox-personal-access-tokenToken akses pribadi LOOKBACK_HOURS24Periode lihat balik awal PAGE_SIZE200Data per halaman MAX_PAGES20Halaman maksimum per operasi HTTP_TIMEOUT60Waktu tunggu permintaan HTTP dalam detik HTTP_RETRIES3Jumlah percobaan ulang HTTP URL_TEMPLATE(opsional) Template URL kustom dengan {SINCE},{PAGE_TOKEN},{PAGE_SIZE}Di bagian Variables & Secrets, scroll ke bawah ke Requests:
- Request timeout: Masukkan
600detik (10 menit).
- Request timeout: Masukkan
Buka tab Setelan:
- Di bagian Resources:
- Memory: Pilih 512 MiB atau lebih tinggi.
- CPU: Pilih 1.
- Di bagian Resources:
Di bagian Revision scaling:
- Minimum number of instances: Masukkan
0. - Maximum number of instances: Masukkan
100(atau sesuaikan berdasarkan beban yang diharapkan).
- Minimum number of instances: Masukkan
Klik Create.
Tunggu hingga layanan dibuat (1-2 menit).
Setelah layanan dibuat, editor kode inline akan otomatis terbuka.
Menambahkan kode fungsi
- Masukkan main di Function entry point
Di editor kode inline, buat dua file:
- File pertama: main.py:
import functions_framework from google.cloud import storage import json import os import urllib3 from datetime import datetime, timezone, timedelta import time import urllib.parse # Initialize HTTP client with timeouts http = urllib3.PoolManager( timeout=urllib3.Timeout(connect=5.0, read=30.0), retries=False, ) # Initialize Storage client storage_client = storage.Client() # Environment variables GCS_BUCKET = os.environ.get('GCS_BUCKET') GCS_PREFIX = os.environ.get('GCS_PREFIX', 'zerofox/platform') STATE_KEY = os.environ.get('STATE_KEY', 'zerofox/platform/state.json') ZEROFOX_BASE_URL = os.environ.get('ZEROFOX_BASE_URL', 'https://api.zerofox.com') ZEROFOX_API_TOKEN = os.environ.get('ZEROFOX_API_TOKEN') LOOKBACK_HOURS = int(os.environ.get('LOOKBACK_HOURS', '24')) PAGE_SIZE = int(os.environ.get('PAGE_SIZE', '200')) MAX_PAGES = int(os.environ.get('MAX_PAGES', '20')) HTTP_TIMEOUT = int(os.environ.get('HTTP_TIMEOUT', '60')) HTTP_RETRIES = int(os.environ.get('HTTP_RETRIES', '3')) URL_TEMPLATE = os.environ.get('URL_TEMPLATE', '') def parse_datetime(value: str) -> datetime: """Parse ISO datetime string to datetime object.""" if value.endswith("Z"): value = value[:-1] + "+00:00" return datetime.fromisoformat(value) @functions_framework.cloud_event def main(cloud_event): """ Cloud Run function triggered by Pub/Sub to fetch ZeroFox Platform logs and write to GCS. Args: cloud_event: CloudEvent object containing Pub/Sub message """ if not all([GCS_BUCKET, ZEROFOX_BASE_URL, ZEROFOX_API_TOKEN]): print('Error: Missing required environment variables') return try: # Get GCS bucket bucket = storage_client.bucket(GCS_BUCKET) # Load state state = load_state(bucket, STATE_KEY) # Determine time window now = datetime.now(timezone.utc) last_time = None if isinstance(state, dict) and state.get("last_since"): try: last_time = parse_datetime(state["last_since"]) # Overlap by 2 minutes to catch any delayed events last_time = last_time - timedelta(minutes=2) except Exception as e: print(f"Warning: Could not parse last_since: {e}") if last_time is None: last_time = now - timedelta(hours=LOOKBACK_HOURS) since_iso = last_time.strftime('%Y-%m-%dT%H:%M:%SZ') print(f"Fetching logs since {since_iso}") # Fetch logs records, newest_since = fetch_logs( api_base=ZEROFOX_BASE_URL, api_token=ZEROFOX_API_TOKEN, since=since_iso, page_size=PAGE_SIZE, max_pages=MAX_PAGES, ) if not records: print("No new log records found.") save_state(bucket, STATE_KEY, since_iso) return # Write to GCS as NDJSON timestamp = now.strftime('%Y%m%d_%H%M%S') object_key = f"{GCS_PREFIX}/logs_{timestamp}.ndjson" blob = bucket.blob(object_key) ndjson = '\n'.join([json.dumps(record, ensure_ascii=False) for record in records]) + '\n' blob.upload_from_string(ndjson, content_type='application/x-ndjson') print(f"Wrote {len(records)} records to gs://{GCS_BUCKET}/{object_key}") # Update state with newest timestamp if newest_since: save_state(bucket, STATE_KEY, newest_since) else: save_state(bucket, STATE_KEY, since_iso) print(f"Successfully processed {len(records)} records") except Exception as e: print(f'Error processing logs: {str(e)}') raise def load_state(bucket, key): """Load state from GCS.""" try: blob = bucket.blob(key) if blob.exists(): state_data = blob.download_as_text() return json.loads(state_data) except Exception as e: print(f"Warning: Could not load state: {e}") return {} def save_state(bucket, key, last_since: str): """Save the last since timestamp to GCS state file.""" try: state = {'last_since': last_since} blob = bucket.blob(key) blob.upload_from_string( json.dumps(state, indent=2), content_type='application/json' ) print(f"Saved state: last_since={last_since}") except Exception as e: print(f"Warning: Could not save state: {e}") def fetch_logs(api_base: str, api_token: str, since: str, page_size: int, max_pages: int): """ Fetch logs from ZeroFox Platform API with pagination and rate limiting. Args: api_base: API base URL api_token: Personal access token since: ISO timestamp for filtering logs page_size: Number of records per page max_pages: Maximum pages to fetch Returns: Tuple of (records list, newest_since ISO string) """ # Use URL_TEMPLATE if provided, otherwise construct default alerts endpoint if URL_TEMPLATE: base_url = URL_TEMPLATE.replace("{SINCE}", urllib.parse.quote(since)) else: base_url = f"{api_base}/v1/alerts?since={urllib.parse.quote(since)}" headers = { 'Authorization': f'Bearer {api_token}', 'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'GoogleSecOps-ZeroFoxCollector/1.0' } records = [] newest_since = since page_num = 0 page_token = "" backoff = 1.0 while page_num < max_pages: page_num += 1 # Construct URL with pagination if URL_TEMPLATE: url = (base_url .replace("{PAGE_TOKEN}", urllib.parse.quote(page_token)) .replace("{PAGE_SIZE}", str(page_size))) else: url = f"{base_url}&limit={page_size}" if page_token: url += f"&page_token={urllib.parse.quote(page_token)}" attempt = 0 while attempt <= HTTP_RETRIES: try: response = http.request('GET', url, headers=headers, timeout=HTTP_TIMEOUT) # Handle rate limiting with exponential backoff if response.status == 429: retry_after = int(response.headers.get('Retry-After', str(int(backoff)))) print(f"Rate limited (429). Retrying after {retry_after}s...") time.sleep(retry_after) backoff = min(backoff * 2, 30.0) attempt += 1 continue backoff = 1.0 if response.status != 200: print(f"HTTP Error: {response.status}") response_text = response.data.decode('utf-8') print(f"Response body: {response_text}") return records, newest_since data = json.loads(response.data.decode('utf-8')) # Extract results (try multiple possible keys) page_results = [] for key in ('results', 'data', 'alerts', 'items', 'logs', 'events'): if isinstance(data.get(key), list): page_results = data[key] break if not page_results: print(f"No more results (empty page)") return records, newest_since print(f"Page {page_num}: Retrieved {len(page_results)} events") records.extend(page_results) # Track newest timestamp for event in page_results: try: # Try multiple possible timestamp fields event_time = (event.get('timestamp') or event.get('created_at') or event.get('last_modified') or event.get('event_time') or event.get('log_time') or event.get('updated_at')) if event_time and isinstance(event_time, str): if event_time > newest_since: newest_since = event_time except Exception as e: print(f"Warning: Could not parse event time: {e}") # Check for next page token next_token = (data.get('next') or data.get('next_token') or data.get('nextPageToken') or data.get('next_page_token')) if isinstance(next_token, dict): next_token = (next_token.get('token') or next_token.get('cursor') or next_token.get('value')) if not next_token: print("No more pages (no next token)") return records, newest_since page_token = str(next_token) break except urllib3.exceptions.HTTPError as e: if attempt < HTTP_RETRIES: print(f"HTTP error (attempt {attempt + 1}/{HTTP_RETRIES}): {e}") time.sleep(1 + attempt) attempt += 1 continue else: print(f"Error fetching logs after {HTTP_RETRIES} retries: {e}") return records, newest_since except Exception as e: print(f"Error fetching logs: {e}") return records, newest_since print(f"Retrieved {len(records)} total records from {page_num} pages") return records, newest_since- File kedua: requirements.txt:
functions-framework==3.* google-cloud-storage==2.* urllib3>=2.0.0Klik Deploy untuk menyimpan dan men-deploy fungsi.
Tunggu hingga deployment selesai (2-3 menit).
Buat tugas Cloud Scheduler
Cloud Scheduler memublikasikan pesan ke topik Pub/Sub (zerofox-logs-trigger) secara berkala, sehingga memicu fungsi Cloud Run.
- Di Konsol GCP, buka Cloud Scheduler.
- Klik Create Job.
Berikan detail konfigurasi berikut:
Setelan Nilai Nama zerofox-logs-collector-hourlyRegion Pilih region yang sama dengan fungsi Cloud Run Frekuensi 0 * * * *(setiap jam, tepat pada jamnya)Zona Waktu Pilih zona waktu (UTC direkomendasikan) Jenis target Pub/Sub Topik Pilih topik Pub/Sub ( zerofox-logs-trigger)Isi pesan {}(objek JSON kosong)Klik Create.
Opsi frekuensi jadwal
Pilih frekuensi berdasarkan volume log dan persyaratan latensi:
Frekuensi Ekspresi Cron Kasus Penggunaan Setiap 5 menit */5 * * * *Volume tinggi, latensi rendah Setiap 15 menit */15 * * * *Volume sedang Setiap jam 0 * * * *Standar (direkomendasikan) Setiap 6 jam 0 */6 * * *Volume rendah, pemrosesan batch Harian 0 0 * * *Pengumpulan data historis
Menguji integrasi
- Di konsol Cloud Scheduler, temukan tugas Anda (
zerofox-logs-collector-hourly). - Klik Force run untuk memicu tugas secara manual.
- Tunggu beberapa detik.
- Buka Cloud Run > Services.
- Klik nama fungsi Anda (
zerofox-logs-collector). - Klik tab Logs.
Pastikan fungsi berhasil dieksekusi. Cari hal berikut:
Fetching logs since YYYY-MM-DDTHH:MM:SSZ Page 1: Retrieved X events Wrote X records to gs://zerofox-platform-logs/zerofox/platform/logs_YYYYMMDD_HHMMSS.ndjson Successfully processed X recordsBuka Cloud Storage > Buckets.
Klik nama bucket Anda (
zerofox-platform-logs).Buka folder awalan (
zerofox/platform/).Pastikan file
.ndjsonbaru telah dibuat dengan stempel waktu saat ini.
Jika Anda melihat error di log:
- HTTP 401: Periksa kredensial API di variabel lingkungan. Pastikan
ZEROFOX_API_TOKENsudah benar dan belum habis masa berlakunya. - HTTP 403: Pastikan akun ZeroFox memiliki izin yang diperlukan untuk feed Pemberitahuan dan CTI. Buka Settings > Data Connections > API Data Feeds dan periksa izin token.
- HTTP 404: Endpoint
/v1/alertsdefault mungkin tidak benar untuk tenant Anda. Tetapkan variabel lingkunganURL_TEMPLATEagar sesuai dengan dokumentasi API ZeroFox Anda atau hubungi dukungan ZeroFox. - HTTP 429: Pembatasan kapasitas - fungsi akan otomatis mencoba lagi dengan backoff eksponensial.
- Variabel lingkungan tidak ada: Pastikan semua variabel yang diperlukan telah ditetapkan dalam konfigurasi fungsi Cloud Run.
Mengambil akun layanan Google SecOps
Google SecOps menggunakan akun layanan unik untuk membaca data dari bucket GCS Anda. Anda harus memberi akun layanan ini akses ke bucket Anda.
Mendapatkan email akun layanan
- Buka Setelan > Pengelolaan Data > Feed. Jika Anda menggunakan platform khusus SIEM, buka Settings > Feeds.
- Klik Tambahkan Feed Berita Baru.
- Klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
ZeroFox Platform Logs). - Pilih Google Cloud Storage V2 sebagai Source type.
- Pilih ZeroFox Platform sebagai Log type.
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.
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 (
zerofox-platform-logs). - Buka tab Izin.
- Klik Grant access.
- Berikan detail konfigurasi berikut:
- Add principals: Tempel email akun layanan Google SecOps.
- Assign roles: Pilih Storage Object Viewer.
Klik Simpan.
Mengonfigurasi feed di Google SecOps untuk menyerap log ZeroFox Platform
- Buka Setelan > Pengelolaan Data > Feed. Jika Anda menggunakan platform khusus SIEM, buka Settings > Feeds.
- Klik Tambahkan Feed Berita Baru.
- Klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
ZeroFox Platform Logs). - Pilih Google Cloud Storage V2 sebagai Source type.
- Pilih ZeroFox Platform sebagai Log type.
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
Storage bucket URL: Masukkan URI bucket GCS dengan jalur awalan:
gs://zerofox-platform-logs/zerofox/platform/Ganti:
zerofox-platform-logs: Nama bucket GCS Anda.zerofox/platform: Jalur awalan/folder tempat log disimpan.
Opsi penghapusan sumber: Pilih opsi penghapusan sesuai preferensi Anda:
- Never: Tidak pernah menghapus file apa pun setelah transfer (direkomendasikan untuk pengujian).
- Delete transferred files: Menghapus file setelah transfer berhasil.
Delete transferred files and empty directories: Menghapus file dan direktori kosong setelah transfer berhasil.
Usia File Maksimum: Sertakan file yang diubah dalam jumlah 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 berita baru Anda di layar Finalize, lalu klik Submit.
Tabel pemetaan UDM
| Kolom log | pemetaan UDM | Logika |
|---|---|---|
ai_confidence_display_color_label |
additional.fields |
Digabung |
ai_confidence_display_icon_label |
additional.fields |
Digabung |
ai_confidence_display_name_label |
additional.fields |
Digabung |
arecord_list |
additional.fields |
Digabung |
browser_label |
additional.fields |
Digabung |
created_at_label |
additional.fields |
Digabung |
model_name_label |
additional.fields |
Digabung |
mx_record_list |
additional.fields |
Digabung |
ns_record_list |
additional.fields |
Digabung |
redirect_list |
additional.fields |
Digabung |
screenshot_label |
additional.fields |
Digabung |
soa_record_list |
additional.fields |
Digabung |
tag_list |
additional.fields |
Digabung |
tier_1_2_label |
additional.fields |
Digabung |
tier_1_label |
additional.fields |
Digabung |
tier_2_label |
additional.fields |
Digabung |
timestamp_modify_tags_label |
additional.fields |
Digabung |
txt_record_list |
additional.fields |
Digabung |
whois_label |
additional.fields |
Digabung |
metadata1 |
metadata |
Diganti namanya/dipetakan |
created_at |
metadata.event_timestamp |
Diurai sebagai ISO8601 |
timestamp |
metadata.event_timestamp |
Diurai sebagai ISO8601 |
event_metadata.navigation_metadata.user_agent |
network.http.user_agent |
Dipetakan secara langsung |
event_metadata.unicode_domain_name |
principal.administrative_domain |
Dipetakan secara langsung |
asset.id |
principal.asset.asset_id |
Dipetakan secara langsung |
device_name_label |
principal.asset.attribute.labels |
Digabung |
ip |
principal.asset.hostname |
Dipetakan secara langsung |
ip |
principal.asset.ip |
Digabung |
asset.entity_group.name |
principal.group.group_display_name |
Dipetakan secara langsung |
asset.entity_group.id |
principal.group.product_object_id |
Diganti namanya/dipetakan |
asset.name |
principal.hostname |
Dipetakan secara langsung |
host_name |
principal.hostname |
Dipetakan secara langsung |
ip |
principal.hostname |
Dipetakan secara langsung |
ip |
principal.ip |
Digabung |
os |
principal.platform |
Dipetakan: (?i)Windows → WINDOWS, (?i)Linux → LINUX, (?i)Mac → MAC |
os |
principal.platform_version |
Dipetakan secara langsung |
last_modified_label |
principal.resource.attribute.labels |
Digabung |
id |
principal.resource.id |
Dipetakan secara langsung |
asset.image |
principal.url |
Dipetakan secara langsung |
perpetrator.display_name |
principal.user.user_display_name |
Dipetakan secara langsung |
perpetrator.id |
principal.user.userid |
Dipetakan secara langsung |
log_sec_res |
security_result |
Digabung |
alert_type |
security_result.category_details |
Digabung |
detect.confidence |
security_result.confidence_score |
Dipetakan secara langsung |
index |
security_result.confidence_score |
Dipetakan: 0 → float |
alert_reason_label |
security_result.detection_fields |
Digabung |
detect_confidence_label |
security_result.detection_fields |
Digabung |
detect_label |
security_result.detection_fields |
Digabung |
escalated_label |
security_result.detection_fields |
Digabung |
network_label |
security_result.detection_fields |
Digabung |
perpetrator_timestamp_label |
security_result.detection_fields |
Digabung |
reviewed_label |
security_result.detection_fields |
Digabung |
rule_group_id_label |
security_result.detection_fields |
Digabung |
sec_status_label |
security_result.detection_fields |
Digabung |
type_label |
security_result.detection_fields |
Digabung |
rule_id |
security_result.rule_id |
Dipetakan secara langsung |
rule_name |
security_result.rule_name |
Dipetakan secara langsung |
severity |
security_result.severity_details |
Dipetakan secara langsung |
content |
security_result.summary |
Dipetakan secara langsung |
offending_content_url |
security_result.url_back_to_product |
Dipetakan secara langsung |
| T/A | principal.platform |
Konstanta: WINDOWS |
Log Perubahan
Melihat Log Perubahan untuk parser ini
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.