Mengumpulkan log Custom Security Data Analytics
Dokumen ini menjelaskan cara menyerap data analisis keamanan kustom ke Google Security Operations menggunakan beberapa metode penyerapan. Panduan ini ditujukan untuk sumber data keamanan kustom yang tidak memiliki parser atau jenis log bawaan.
Analisis data keamanan kustom mencakup telemetri keamanan eksklusif, log aplikasi kustom, alat keamanan internal, atau data yang relevan dengan keamanan dari sumber tanpa integrasi Google SecOps native. Anda dapat menyerap data ini sebagai log tidak terstruktur dan secara opsional menormalisasinya menggunakan parser kustom.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps
- Sumber data keamanan kustom yang dapat mengekspor log dalam format JSON, CSV, SYSLOG, atau format terstruktur lainnya
- Akses ke salah satu opsi berikut:
- Google Cloud Console (untuk pembuatan kunci API dan GCS)
- Konsol AWS (untuk S3 atau Firehose)
- Portal Azure (untuk Azure Blob Storage)
- Klien atau aplikasi HTTP yang dapat mengirim permintaan webhook
- Izin untuk membuat dan mengelola feed di Google SecOps
Memilih metode penyerapan
Google SecOps mendukung beberapa metode penyerapan untuk data keamanan kustom. Pilih metode yang paling sesuai dengan kemampuan sumber data Anda:
| Metode Penyerapan | Kasus Penggunaan | Latensi | Kompleksitas Penyiapan |
|---|---|---|---|
| Webhook | Pemberitahuan push real-time dari aplikasi | Detik | Rendah |
| Amazon S3 V2 | Mengekspor batch ke bucket S3 | Menit ke jam | Sedang |
| Google Cloud Storage V2 | Mengekspor batch ke bucket GCS | Menit ke jam | Sedang |
| Azure Blob Storage V2 | Mengekspor batch ke penyimpanan Azure | Menit ke jam | Sedang |
| Amazon Data Firehose | Streaming real-time dari AWS | Detik | Tinggi |
Opsi 1: Penyerapan webhook (Push real-time)
Gunakan metode ini saat aplikasi keamanan kustom Anda dapat mengirim permintaan HTTP POST ke endpoint eksternal.
Membuat feed webhook di Google SecOps
Buat feed
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Di halaman berikutnya, klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
custom-security-analytics-webhook). - Pilih Webhook sebagai Jenis sumber.
- Pilih Custom Security Data Analytics sebagai Jenis log.
- Klik Berikutnya.
- Tentukan nilai untuk parameter input berikut:
- Pemisah pemisahan: Opsional: Masukkan pemisah untuk memisahkan peristiwa multi-baris. Nilai umum:
\n- Pembatas baris baru (paling umum untuk NDJSON)- Biarkan kosong jika setiap permintaan berisi satu acara
- Namespace aset: Namespace aset
- Label penyerapan: Label yang akan diterapkan ke peristiwa dari feed ini
- Pemisah pemisahan: Opsional: Masukkan pemisah untuk memisahkan peristiwa multi-baris. Nilai umum:
- Klik Berikutnya.
- Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
Buat dan simpan kunci rahasia
Setelah membuat feed, Anda harus membuat kunci rahasia untuk autentikasi:
- Di halaman detail feed, klik Buat Kunci Rahasia.
- Dialog akan menampilkan kunci rahasia.
Salin dan simpan kunci rahasia dengan aman.
Mendapatkan URL endpoint feed
- Buka tab Detail untuk feed tersebut.
- Di bagian Endpoint Information, salin Feed endpoint URL.
Format URL-nya adalah:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateatau
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateSimpan URL ini untuk langkah berikutnya.
Klik Done.
Membuat kunci Google Cloud API
Google SecOps memerlukan kunci API untuk autentikasi. Buat kunci API terbatas di Konsol Google Cloud.
Buat kunci API
- Buka halaman Credentials Google Cloud Console.
- Pilih project Anda (project yang terkait dengan instance Chronicle Anda).
- Klik Create credentials > API key.
- Kunci API dibuat dan ditampilkan dalam dialog.
- Klik Edit API key untuk membatasi kunci.
Membatasi kunci API
- Di halaman setelan kunci API:
- Name: Masukkan nama deskriptif (misalnya,
Chronicle Webhook API Key).
- Name: Masukkan nama deskriptif (misalnya,
- Di bagian Pembatasan API:
- Pilih Restrict key.
- Di drop-down Select APIs, telusuri dan pilih Google SecOps API (atau Chronicle API).
- Klik Simpan.
- Salin nilai kunci API dari kolom Kunci API di bagian atas halaman.
Simpan kunci API dengan aman.
Mengonfigurasi aplikasi kustom untuk mengirim data
Konfigurasi aplikasi atau skrip keamanan kustom Anda untuk mengirim permintaan POST HTTP ke endpoint webhook Chronicle.
Buat URL webhook:
Gabungkan URL endpoint Chronicle dan kunci API:
<ENDPOINT_URL>?key=<API_KEY>Contoh:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
Format permintaan HTTP:
Metode: POST
URL:
<ENDPOINT_URL>?key=<API_KEY>Header:
Content-Type: application/json x-chronicle-auth: <SECRET_KEY>Isi (satu acara):
{ "timestamp": "2025-01-15T10:30:00Z", "event_type": "authentication", "user": "john.doe@example.com", "action": "login", "result": "success", "source_ip": "203.0.113.45", "custom_field_1": "value1", "custom_field_2": "value2" }Isi (beberapa acara dengan pembatas baris baru):
{"timestamp": "2025-01-15T10:30:00Z", "event_type": "authentication", "action": "login"} {"timestamp": "2025-01-15T10:30:05Z", "event_type": "file_access", "action": "read"} {"timestamp": "2025-01-15T10:30:10Z", "event_type": "authentication", "action": "logout"}
Contoh:
Contoh: Skrip Python:
import requests import json from datetime import datetime # Configuration ENDPOINT_URL = "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate" API_KEY = "your-api-key-here" SECRET_KEY = "your-secret-key-here" # Construct full URL url = f"{ENDPOINT_URL}?key={API_KEY}" # Headers headers = { "Content-Type": "application/json", "x-chronicle-auth": SECRET_KEY } # Sample event event = { "timestamp": datetime.utcnow().isoformat() + "Z", "event_type": "custom_security_event", "severity": "high", "source": "custom_security_tool", "message": "Suspicious activity detected", "user": "admin@example.com", "ip_address": "192.168.1.100" } # Send request response = requests.post(url, headers=headers, data=json.dumps(event)) if response.status_code == 200: print("Event sent successfully") else: print(f"Error: {response.status_code} - {response.text}")Contoh: perintah cURL:
curl -X POST \ "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=YOUR_API_KEY" \ -H "Content-Type: application/json" \ -H "x-chronicle-auth: YOUR_SECRET_KEY" \ -d '{ "timestamp": "2025-01-15T10:30:00Z", "event_type": "security_alert", "severity": "critical", "source": "custom_tool", "message": "Threat detected" }'
Referensi metode autentikasi
Feed webhook Google SecOps mendukung beberapa metode autentikasi. Pilih metode yang didukung aplikasi Anda.
Metode 1: Header kustom (Direkomendasikan)
Jika aplikasi Anda mendukung header HTTP kustom, gunakan metode ini untuk keamanan yang lebih baik.
Format permintaan:
POST <ENDPOINT_URL> HTTP/1.1 Content-Type: application/json x-goog-chronicle-auth: <API_KEY> x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }Kelebihan:
- Kunci API dan secret tidak terlihat di URL.
- Lebih aman karena header tidak dicatat dalam log akses server web.
- Metode pilihan jika aplikasi mendukungnya.
Metode 2: Parameter kueri
Jika aplikasi Anda tidak mendukung header kustom, tambahkan kredensial ke URL.
Format URL:
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>Contoh:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...Format permintaan:
POST <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY> HTTP/1.1 Content-Type: application/json { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }Kekurangan:
- Kredensial terlihat di URL.
- Kredensial dapat dicatat dalam log akses server web.
- Kurang aman daripada header.
Metode 3: Hybrid (URL + Header)
Beberapa konfigurasi menggunakan kunci API di URL dan kunci rahasia di header.
Format permintaan:
POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1 Content-Type: application/json x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
Batasan dan praktik terbaik webhook
Batas permintaan
| Batas | Nilai |
|---|---|
| Ukuran permintaan maksimum | 4 MB |
| QPS Maks (kueri per detik) | 15.000 |
| Waktu tunggu permintaan | 30 seconds |
| Perilaku percobaan ulang | Otomatis dengan backoff eksponensial |
Praktik terbaik
- Peristiwa batch: Kirim beberapa peristiwa dalam satu permintaan menggunakan format JSON yang dibatasi newline (NDJSON) untuk mengurangi overhead.
- Sertakan stempel waktu: Selalu sertakan kolom stempel waktu dalam format ISO 8601 untuk pengurutan acara yang akurat.
- Gunakan data terstruktur: Kirim data dalam format JSON agar lebih mudah diuraikan dan diekstrak kolomnya.
- Terapkan logika percobaan ulang: Tangani kegagalan sementara dengan backoff eksponensial.
- Pantau kode respons: Mencatat dan memberikan peringatan pada respons non-200.
Opsi 2: Penyerapan Amazon S3 V2 (Ekspor batch)
Gunakan metode ini saat aplikasi keamanan kustom Anda dapat mengekspor log ke bucket Amazon S3.
Buat bucket Amazon S3
- Buka konsol Amazon S3.
- Klik Create Bucket.
- Berikan detail konfigurasi berikut:
- Nama Bucket: Masukkan nama yang bermakna untuk bucket (misalnya,
custom-security-analytics-logs). - Region: Pilih region AWS pilihan Anda (misalnya,
us-east-1).
- Nama Bucket: Masukkan nama yang bermakna untuk bucket (misalnya,
- Klik Create.
Membuat pengguna IAM dengan akses S3
- Buka IAM console.
- Klik Pengguna > Tambahkan pengguna.
- Masukkan nama pengguna (misalnya,
chronicle-s3-reader). - Pilih Akses terprogram.
- Klik Berikutnya: Izin.
- Pilih Lampirkan kebijakan yang ada secara langsung.
- Telusuri dan pilih AmazonS3FullAccess.
- Klik Berikutnya: Tanda.
- Klik Berikutnya: Tinjau.
- Klik Buat pengguna.
- Klik Download .csv file untuk menyimpan Access Key ID dan Secret Access Key.
- Klik Close.
Mengonfigurasi aplikasi Anda untuk diekspor ke S3
Konfigurasi aplikasi keamanan kustom Anda untuk menulis file log ke bucket S3. Aplikasi harus:
- Tulis log dalam format terstruktur (JSON, CSV, atau teks biasa).
- Gunakan konvensi penamaan file yang konsisten.
- Opsional: Atur file menurut tanggal (misalnya,
logs/2025/01/15/events.json). Tulis file lengkap (hindari penulisan sebagian).
Contoh struktur file:
s3://custom-security-analytics-logs/ ├── security-events/ │ ├── 2025/01/15/ │ │ ├── events-10-00.json │ │ ├── events-11-00.json │ │ └── events-12-00.jsonContoh format file log (NDJSON):
{"timestamp": "2025-01-15T10:00:00Z", "event_type": "login", "user": "alice@example.com", "result": "success"} {"timestamp": "2025-01-15T10:05:00Z", "event_type": "file_access", "user": "bob@example.com", "file": "/data/sensitive.txt"} {"timestamp": "2025-01-15T10:10:00Z", "event_type": "logout", "user": "alice@example.com"}
Mengonfigurasi feed Google SecOps untuk S3
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Di halaman berikutnya, klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
custom-security-analytics-s3). - Pilih Amazon S3 V2 sebagai Jenis sumber.
- Pilih Custom Security Data Analytics sebagai Jenis log.
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
URI S3: URI bucket dalam format:
s3://custom-security-analytics-logs/security-events/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 dimodifikasi dalam beberapa hari terakhir (defaultnya adalah 180 hari).
Access Key ID: Masukkan kunci akses dari pengguna IAM.
Secret Access Key: Masukkan kunci rahasia dari pengguna IAM.
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.
Opsi 3: Penyerapan Google Cloud Storage V2 (Ekspor batch)
Gunakan metode ini saat aplikasi keamanan kustom Anda dapat mengekspor log ke bucket Google Cloud Storage.
Membuat bucket GCS
- 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, custom-security-analytics-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.
Mengonfigurasi aplikasi Anda untuk diekspor ke GCS
Konfigurasi aplikasi keamanan kustom Anda untuk menulis file log ke bucket GCS menggunakan salah satu metode berikut:
- Google Cloud SDK: Menggunakan
gsutilatau library klien - Akun Layanan: Buat akun layanan dengan peran Storage Object Creator
URL yang ditandatangani: Membuat URL yang ditandatangani untuk akses tulis sementara
Contoh menggunakan gsutil:
gsutil cp /path/to/logs/events.json gs://custom-security-analytics-logs/security-events/Contoh menggunakan library klien Python:
from google.cloud import storage import json # Initialize client client = storage.Client() bucket = client.bucket('custom-security-analytics-logs') # Upload log file blob = bucket.blob('security-events/2025/01/15/events.json') # Write NDJSON data events = [ {"timestamp": "2025-01-15T10:00:00Z", "event_type": "login"}, {"timestamp": "2025-01-15T10:05:00Z", "event_type": "logout"} ] ndjson_data = '\n'.join([json.dumps(event) for event in events]) + '\n' blob.upload_from_string(ndjson_data, content_type='application/x-ndjson')
Mendapatkan akun layanan Google SecOps
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
custom-security-analytics-gcs). - Pilih Google Cloud Storage V2 sebagai Source type.
- Pilih Custom Security Data Analytics 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.
Memberikan izin IAM
- Buka Cloud Storage > Buckets.
- Klik nama bucket Anda.
- 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.
Mengonfigurasi feed Google SecOps untuk GCS
- Lanjutkan dari halaman pembuatan feed (atau buka Setelan SIEM > Feed > Tambahkan Feed Baru).
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
URL bucket penyimpanan: Masukkan URI bucket GCS dengan jalur awalan:
gs://custom-security-analytics-logs/security-events/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 dimodifikasi 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.
Opsi 4: Penyerapan Azure Blob Storage V2 (Ekspor batch)
Gunakan metode ini saat aplikasi keamanan kustom Anda dapat mengekspor log ke Azure Blob Storage.
Buat Akun Azure Storage
- Di portal Azure, cari Storage accounts.
- Klik + Create.
Berikan detail konfigurasi berikut:
Setelan Nilai Langganan Pilih langganan Azure Anda Grup resource Pilih yang sudah ada atau buat yang baru Nama akun penyimpanan Masukkan nama unik (misalnya, customsecuritylogs)Region Pilih region (misalnya, East US)Performa Standar (direkomendasikan) Redundansi GRS (Geo-redundant storage) atau LRS (Locally redundant storage) Klik Review + create.
Tinjau ringkasan akun, lalu klik Buat.
Tunggu hingga deployment selesai.
Mendapatkan kredensial Akun Penyimpanan
- Buka Akun Penyimpanan yang baru saja Anda buat.
- Di navigasi kiri, pilih Kunci akses di bagian Keamanan + jaringan.
- Klik Tampilkan kunci.
- Salin dan simpan yang berikut untuk digunakan nanti:
- Nama akun penyimpanan:
customsecuritylogs - Key 1 atau Key 2: Kunci akses bersama
- Nama akun penyimpanan:
Buat penampung blob
- Di Akun Penyimpanan yang sama, pilih Containers dari navigasi kiri.
- Klik + Penampung.
- Berikan detail konfigurasi berikut:
- Name: Masukkan nama container (misalnya,
security-events) - Tingkat akses publik: Pilih Pribadi (tidak ada akses anonim)
- Name: Masukkan nama container (misalnya,
- Klik Create.
Mengonfigurasi aplikasi Anda untuk diekspor ke Azure Blob
Konfigurasi aplikasi keamanan kustom Anda untuk menulis file log ke container Azure Blob menggunakan salah satu metode berikut:
- Azure CLI: Gunakan
az storage blob upload - Azure SDK: Menggunakan library klien untuk bahasa pemrograman Anda
- AzCopy: Menggunakan alat command line AzCopy
Contoh:
Contoh menggunakan Azure CLI:
az storage blob upload \ --account-name customsecuritylogs \ --container-name security-events \ --name logs/2025/01/15/events.json \ --file /path/to/events.json \ --account-key <YOUR_ACCESS_KEY>Contoh menggunakan Python SDK:
from azure.storage.blob import BlobServiceClient import json # Initialize client connection_string = "DefaultEndpointsProtocol=https;AccountName=customsecuritylogs;AccountKey=<YOUR_KEY>;EndpointSuffix=core.windows.net" blob_service_client = BlobServiceClient.from_connection_string(connection_string) # Get container client container_client = blob_service_client.get_container_client("security-events") # Upload log file blob_client = container_client.get_blob_client("logs/2025/01/15/events.json") # Write NDJSON data events = [ {"timestamp": "2025-01-15T10:00:00Z", "event_type": "login"}, {"timestamp": "2025-01-15T10:05:00Z", "event_type": "logout"} ] ndjson_data = '\n'.join([json.dumps(event) for event in events]) + '\n' blob_client.upload_blob(ndjson_data, overwrite=True)
Mengonfigurasi feed Google SecOps untuk Azure Blob
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Di halaman berikutnya, klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
custom-security-analytics-azure). - Pilih Microsoft Azure Blob Storage V2 sebagai Jenis sumber.
- Pilih Custom Security Data Analytics sebagai Jenis log.
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
URI Azure: Masukkan URL endpoint Blob Service dengan jalur kontainer:
https://customsecuritylogs.blob.core.windows.net/security-events/Opsi penghapusan sumber: Pilih opsi penghapusan sesuai preferensi Anda:
- Jangan pernah: Tidak pernah menghapus file apa pun setelah transfer.
- 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 dimodifikasi dalam beberapa hari terakhir (defaultnya adalah 180 hari).
Shared key: Masukkan nilai kunci bersama (kunci akses) dari Akun Penyimpanan.
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.
Opsi 5: Penyerapan Amazon Data Firehose (Streaming real-time)
Gunakan metode ini saat aplikasi keamanan kustom Anda menulis log ke Amazon CloudWatch Logs dan Anda memerlukan streaming real-time ke Google SecOps.
Membuat feed Firehose Google SecOps
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
custom-security-analytics-firehose). - Pilih Amazon Data Firehose sebagai Jenis sumber.
- Pilih Custom Security Data Analytics sebagai Jenis log.
- Klik Berikutnya.
- Tentukan nilai untuk parameter input berikut:
- Pemisah pemisahan: Opsional: Masukkan
\nuntuk memisahkan log yang dipisahkan dengan baris baru. - Namespace aset: Namespace aset.
- Label penyerapan: Label yang akan diterapkan ke peristiwa dari feed ini.
- Pemisah pemisahan: Opsional: Masukkan
- Klik Berikutnya.
- Tinjau konfigurasi feed, lalu klik Kirim.
- Klik Buat Kunci Rahasia untuk membuat kunci rahasia guna mengautentikasi feed ini.
- Salin dan simpan kunci rahasia karena Anda tidak dapat melihat rahasia ini lagi.
- Buka tab Detail.
- Salin URL endpoint feed dari kolom Endpoint Information.
- Klik Done.
Membuat kunci Google Cloud API
- Buka halaman Credentials di Konsol Google Cloud di https://console.cloud.google.com/apis/credentials
- Klik Create credentials, lalu pilih API key.
- Klik Edit API key untuk membatasi kunci.
- Di bagian Pembatasan API, pilih Batasi kunci.
- Cari dan pilih Google SecOps API.
- Klik Simpan.
- Salin dan simpan kunci API.
Buat URL endpoint
Tambahkan kunci API ke URL endpoint feed dalam format berikut:
<FEED_ENDPOINT_URL>?key=<API_KEY>Contoh:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...Simpan URL lengkap ini untuk langkah berikutnya.
Membuat kebijakan IAM untuk Firehose
- Di AWS Console, buka IAM > Policies > Create policy > JSON tab.
Tempelkan JSON kebijakan berikut:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Resource": "arn:aws:firehose:<REGION>:<ACCOUNT_ID>:deliverystream/CustomSecurityToChronicle" } ] }Ganti kode berikut:
<REGION>: Region AWS Anda (misalnya,us-east-1).<ACCOUNT_ID>: ID akun AWS Anda (angka 12 digit).
Beri nama kebijakan
CloudWatchLogsToFirehosePolicy.Klik Create policy.
Buat peran IAM untuk CloudWatch Logs
- Buka IAM > Roles > Create role.
Pilih Custom trust policy dan tempel:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<REGION>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }Ganti
<REGION>dengan region AWS Anda.Klik Berikutnya.
Cari dan pilih kebijakan
CloudWatchLogsToFirehosePolicyyang Anda buat pada langkah sebelumnya.Klik Berikutnya.
Beri nama peran
CloudWatchLogsToFirehoseRole.Klik Buat peran.
Buat aliran pengiriman Kinesis Data Firehose
- Di AWS Console, buka Kinesis > Data Firehose > Create delivery stream.
Berikan detail konfigurasi berikut:
Sumber dan tujuan:
- Sumber: Pilih PUT langsung atau sumber lainnya
- Tujuan: Pilih Endpoint HTTP
Nama aliran pengiriman:
- Nama aliran pengiriman: Masukkan
CustomSecurityToChronicle
- Nama aliran pengiriman: Masukkan
Tujuan endpoint HTTP:
- URL endpoint HTTP: Masukkan URL endpoint lengkap yang Anda buat sebelumnya (endpoint feed + kunci API)
- Encoding konten: Pilih GZIP (direkomendasikan untuk menghemat bandwidth)
Header HTTP kustom:
- Klik Tambahkan header HTTP kustom
- Nama header: Masukkan
X-Goog-Chronicle-Auth - Nilai header: Masukkan kunci rahasia yang Anda simpan di langkah sebelumnya
Setelan pencadangan:
- Cadangan rekaman sumber di Amazon S3: Pilih Data yang gagal saja (direkomendasikan)
- Bucket S3: Pilih bucket yang ada atau buat bucket baru untuk data yang gagal
Petunjuk buffer:
- Buffer size: Masukkan
1MiB (minimum untuk endpoint HTTP) - Interval buffer: Masukkan
60detik
- Buffer size: Masukkan
Durasi coba lagi:
- Durasi percobaan ulang: Masukkan
300detik (5 menit)
- Durasi percobaan ulang: Masukkan
Klik Buat aliran pengiriman.
Tunggu hingga status aliran pengiriman berubah menjadi Aktif (1-2 menit).
Berlangganan Grup Log CloudWatch ke Firehose
- Di Konsol AWS, buka CloudWatch > Logs > Log groups.
- Pilih grup log target yang berisi log analisis keamanan kustom Anda.
- Klik tab Filter langganan.
- Klik Buat > Buat filter langganan Amazon Kinesis Data Firehose.
- Berikan detail konfigurasi berikut:
- Tujuan: Pilih aliran pengiriman
CustomSecurityToChronicle. - Berikan izin: Pilih peran
CloudWatchLogsToFirehoseRole. - Nama filter langganan: Masukkan
CustomSecurityToChronicle. - Format log: Pilih Lainnya (Google SecOps menangani parsing).
- Pola filter langganan: Biarkan kosong untuk mengirim semua peristiwa, atau masukkan pola filter untuk mengirim hanya peristiwa tertentu.
- Tujuan: Pilih aliran pengiriman
- Klik Mulai streaming.
- Log kini akan di-streaming secara real-time ke Google SecOps melalui Firehose.
Buat parser kustom (opsional)
Setelah menyerap data keamanan kustom sebagai log tidak terstruktur, Anda dapat membuat parser kustom untuk menormalisasi data ke dalam format UDM agar lebih mudah dicari dan dideteksi.
Kapan harus membuat parser kustom
Buat parser kustom jika:
- Anda perlu mengekstrak kolom tertentu dari format log kustom
- Anda ingin mengaktifkan penelusuran UDM pada data kustom
- Anda perlu memetakan kolom kustom ke kolom UDM standar untuk aturan deteksi
- Anda ingin meningkatkan performa penelusuran dengan mengindeks kolom tertentu
Membuat jenis log kustom
- Buka SIEM Settings > Available Log Types.
- Klik Minta Jenis Log.
- Di bagian Buat jenis log kustom atau minta jenis log bawaan, pilih Buat jenis log kustom.
- Berikan informasi berikut:
- Nama jenis log: Masukkan nama deskriptif (misalnya,
CUSTOM_SECURITY_ANALYTICS). - Deskripsi: Masukkan deskripsi jenis log.
- Contoh log: Tempelkan 5-10 entri log contoh dalam format mentahnya.
- Nama jenis log: Masukkan nama deskriptif (misalnya,
- Klik Kirim.
- Jenis log kustom akan tersedia dalam waktu sekitar 10 menit.
Membuat parser kustom
- Buka Setelan SIEM > Parser.
- Klik Create Parser.
- Pilih Parser Kustom.
- Berikan informasi berikut:
- Nama parser: Masukkan nama deskriptif
- Jenis log: Pilih jenis log kustom Anda (misalnya,
CUSTOM_SECURITY_ANALYTICS) - Kode parser: Masukkan konfigurasi parser Anda menggunakan bahasa konfigurasi parser Google SecOps
- Uji parser dengan log sampel.
- Klik Kirim untuk mengaktifkan parser.
Contoh konfigurasi parser
Untuk format log JSON kustom:
{ "timestamp": "2025-01-15T10:30:00Z", "event_type": "authentication", "user": "john.doe@example.com", "action": "login", "result": "success", "source_ip": "203.0.113.45" }Contoh konfigurasi parser:
filter { json { fields { timestamp: timestamp event_type: event_type user: user action: action result: result source_ip: source_ip } } } event { $e.metadata.event_timestamp.seconds = parseTimestamp(timestamp, "yyyy-MM-dd'T'HH:mm:ss'Z'") $e.metadata.event_type = "USER_LOGIN" $e.principal.user.email_addresses = user $e.target.ip = source_ip $e.security_result.action = if(result == "success", "ALLOW", "BLOCK") }Untuk mengetahui informasi selengkapnya tentang cara membuat parser kustom, lihat Mengelola parser bawaan dan kustom.
Memverifikasi penyerapan data
Setelah mengonfigurasi feed, pastikan data berhasil di-ingest.
Memeriksa status feed
- Buka Setelan SIEM > Feed.
- Temukan feed Anda dalam daftar.
- Periksa kolom Status:
- Aktif: Feed berjalan dan menyerap data
- Error: Feed mengalami error (klik untuk melihat detail)
- Dijeda: Feed dijeda
Menelusuri log yang diserap
- Buka Penelusuran > Pemindaian Log Mentah.
Masukkan kueri penelusuran untuk menemukan log kustom Anda:
metadata.log_type = "CUSTOM_SECURITY_DATA_ANALYTICS"Sesuaikan rentang waktu jika perlu.
Klik Telusuri.
Pastikan log Anda muncul di hasil.
Memantau metrik feed
- Buka Setelan SIEM > Feed.
- Klik nama feed Anda.
- Buka tab Metrik.
- Tinjau metrik berikut:
- Peristiwa yang diserap: Total jumlah peristiwa yang diserap
- Byte yang diserap: Total volume data yang diserap
- Kecepatan penyerapan: Peristiwa per detik
- Error: Jumlah error penyerapan
Pemecahan masalah
Masalah penyerapan webhook
Masalah: HTTP 401 Tidak Sah
- Penyebab: Kunci API atau kunci rahasia tidak valid
- Solusi: Pastikan kunci API dan kunci rahasia sudah benar dan belum habis masa berlakunya
Masalah: HTTP 403 Forbidden
- Penyebab: Kunci API tidak memiliki izin Chronicle API
- Solusi: Edit kunci API dan pastikan Chronicle API dipilih di bagian pembatasan API
Masalah: HTTP 400 Bad Request
- Penyebab: Format atau payload permintaan tidak valid
- Solusi: Verifikasi bahwa header Content-Type ditetapkan ke
application/jsondan payload adalah JSON yang valid
Masalah penyerapan S3/GCS/Azure Blob
Masalah: Tidak ada data yang di-ingest
- Penyebab: URI bucket salah atau izin tidak ada
- Solusi: Pastikan URI bucket menyertakan garis miring di akhir dan akun layanan memiliki peran Storage Object Viewer
Masalah: File tidak dihapus setelah penyerapan
- Penyebab: Akun layanan tidak memiliki izin hapus
- Solusi: Berikan peran Storage Object Admin, bukan Storage Object Viewer
Masalah: File lama tidak diproses
- Penyebab: Setelan Usia File Maksimum mengecualikan file lama
- Solusi: Tingkatkan nilai Usia File Maksimum dalam konfigurasi feed
Masalah penyerapan Firehose
Masalah: Aliran pengiriman menampilkan error
- Penyebab: URL endpoint atau autentikasi tidak valid
- Solusi: Pastikan URL endpoint menyertakan parameter kunci API dan header X-Goog-Chronicle-Auth berisi kunci rahasia yang benar
Masalah: Metrik keaktualan data yang tinggi
- Penyebab: Firehose dibatasi atau mengalami kegagalan pengiriman
- Solusi: Periksa metrik CloudWatch untuk rasio
ThrottledRecordsdanDeliveryToHTTP.Success
Masalah: Tidak ada log yang di-streaming dari CloudWatch
- Penyebab: Filter langganan tidak dikonfigurasi atau peran IAM tidak memiliki izin
- Solusi: Pastikan filter langganan aktif dan peran IAM memiliki izin
firehose:PutRecord
Tabel pemetaan UDM
Log analisis data keamanan kustom diserap sebagai data tidak terstruktur. Untuk mengaktifkan pemetaan kolom UDM, buat parser kustom seperti yang dijelaskan di bagian "Buat parser kustom" di atas.
Setelah membuat parser kustom, kolom UDM akan diisi berdasarkan konfigurasi parser Anda. Kolom UDM umum untuk data analisis keamanan meliputi:
| Kolom UDM | Deskripsi |
|---|---|
metadata.event_timestamp |
Stempel waktu peristiwa |
metadata.event_type |
Jenis peristiwa (misalnya, USER_LOGIN, FILE_ACCESS) |
principal.user.email_addresses |
Alamat email pengguna |
principal.ip |
Alamat IP sumber |
target.resource.name |
Nama resource target |
security_result.action |
Tindakan keamanan (ALLOW, BLOCK, dll.) |
security_result.severity |
Tingkat keparahan peristiwa |
Untuk mengetahui daftar lengkap kolom UDM, lihat referensi kolom UDM.
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.