Mengumpulkan log Google Cloud Compute
Versi Parser: 2.0
Dokumen ini menjelaskan cara mengonfigurasi ekspor log Compute Google Cloud ke Google Security Operations menggunakan Cloud Storage. Parser mengekstrak kolom, menormalisasi kolom pesan, dan memetakan data yang diekstrak ke skema Unified Data Model (UDM) untuk representasi peristiwa keamanan yang konsisten. Log ini menangani berbagai format log, termasuk pesan seperti syslog dan pasangan nilai kunci, serta mengategorikan peristiwa berdasarkan kolom yang diekstrak seperti type dan action.
Sebelum Memulai
Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps.
- Compute disiapkan dan aktif di lingkungan Google Cloud Anda.
- Akses istimewa ke Google Cloud.
Membuat Bucket Google Cloud Storage
- Login ke Google Cloud konsol.
Buka halaman Cloud Storage Buckets.
Klik Buat.
Di halaman Buat bucket, masukkan informasi bucket Anda. Setelah setiap langkah berikut, klik Lanjutkan untuk melanjutkan ke langkah berikutnya:
Di bagian Mulai, lakukan tindakan berikut:
- Masukkan nama unik yang memenuhi persyaratan nama bucket; misalnya, compute-logs.
Untuk mengaktifkan namespace hierarkis, klik panah peluas untuk meluaskan bagian Optimalkan untuk beban kerja berorientasi file dan intensif data, lalu pilih Aktifkan namespace hierarkis di bucket ini.
- Untuk menambahkan label bucket, klik panah peluas untuk meluaskan bagian Labels.
- Klik Tambahkan label, lalu tentukan kunci dan nilai untuk label Anda.
Di bagian Pilih tempat untuk menyimpan data Anda, lakukan tindakan berikut:
Pilih Location type.
- Gunakan menu jenis lokasi untuk memilih Location tempat data objek dalam bucket Anda akan disimpan secara permanen.
- Untuk menyiapkan replikasi lintas bucket, luaskan bagian Set up cross-bucket replication.
Di bagian Pilih kelas penyimpanan untuk data Anda, pilih kelas penyimpanan default untuk bucket, atau pilih Autoclass untuk pengelolaan kelas penyimpanan otomatis untuk data bucket Anda.
Di bagian Choose how to control access to objects, pilih not untuk menerapkan public access prevention, lalu pilih access control model untuk objek bucket Anda.
Di bagian Choose how to protect object data, lakukan hal berikut:
- Pilih salah satu opsi di bagian Perlindungan data yang ingin Anda tetapkan untuk bucket Anda.
- Untuk memilih cara data objek Anda akan dienkripsi, klik panah peluas berlabel Data encryption, lalu pilih Data encryption method.
Klik Create.
Mengonfigurasi Google Cloud Compute Logs Export
- Di Konsol Google Cloud, buka Logging > Log Router.
- Klik Create Sink.
- Berikan detail konfigurasi berikut:
- Sink Name: Masukkan nama yang bermakna (misalnya,
Compute-Logs-Sink). - Sink Destination: Pilih Cloud Storage.
- Bucket Cloud Storage: Masukkan URI bucket (misalnya,
gs://compute-logs/compute-logs/).
- Sink Name: Masukkan nama yang bermakna (misalnya,
Di bagian Filter penyertaan build, konfigurasi filter log untuk merekam log Google Cloud Compute menggunakan satu atau beberapa pola berikut:
Filter jenis resource (wajib - pilih salah satu):
Untuk Log Instance VM saja:
resource.type="gce_instance"Untuk semua resource terkait GCE (instance VM, subnetwork, firewall):
resource.type=("gce_instance" OR "gce_subnetwork" OR "gce_network" OR "gce_firewall_rule")
Jenis log tertentu (opsional - tambahkan sesuai kebutuhan):
Untuk Log audit (operasi instance, perubahan konfigurasi):
resource.type="gce_instance" logName:"cloudaudit.googleapis.com/activity"Untuk Log Aliran VPC (traffic jaringan):
resource.type="gce_subnetwork" logName:"vpc_flows"Untuk Log firewall (koneksi yang diizinkan/ditolak):
resource.type="gce_subnetwork" logName:"compute.googleapis.com/firewall"Untuk log serial console:
resource.type="gce_instance" logName:"serialconsole.googleapis.com"
Filter terkait jaringan (opsional - tambahkan sesuai kebutuhan):
Filter menurut detail koneksi (IP sumber/tujuan, port):
jsonPayload.connection.dest_ip:* OR jsonPayload.connection.src_ip:*Filter menurut detail instance:
jsonPayload.dest_instance.project_id:* OR jsonPayload.src_instance.project_id:*Filter menurut tindakan keamanan:
jsonPayload.rule_details.action=("ALLOW" OR "BLOCK")
Contoh: Filter lengkap untuk logging Compute yang komprehensif:
(resource.type="gce_instance" OR resource.type="gce_subnetwork") AND ( logName:"cloudaudit.googleapis.com/activity" OR logName:"vpc_flows" OR logName:"compute.googleapis.com/firewall" OR jsonPayload.connection.dest_ip:* OR jsonPayload.connection.src_ip:* )Klik Create Sink.
Mengonfigurasi Izin untuk Cloud Storage
- Buka IAM > IAM & Admin > Service Accounts.
- Temukan akun layanan Cloud Logging; misalnya, service-account@logging.iam.gserviceaccount.com.
- Beri peran roles/storage.admin di bucket.
Menyiapkan feed
Ada dua titik entri yang berbeda untuk menyiapkan feed di platform Google SecOps:
- Setelan SIEM > Feed > Tambahkan Baru
- Hub Konten > Paket Konten > Mulai
Cara menyiapkan feed komputasi Google Cloud
- Klik paket Google Cloud Compute platform.
- Cari jenis log GCP Compute Feed, lalu klik Tambahkan feed baru.
Tentukan nilai untuk kolom berikut:
- Source Type: Google Cloud Storage V2.
- Storage Bucket URI: URL bucket Cloud Storage; misalnya,
gs://compute-context-logs/. URL ini harus diakhiri dengan garis miring (/). Opsi penghapusan sumber: pilih opsi penghapusan sesuai preferensi Anda.
Usia File Maksimum: Menyertakan file yang diubah dalam jumlah hari terakhir. Defaultnya adalah 180 hari.
Akun Layanan Chronicle: Salin Akun Layanan. Anda akan memerlukannya untuk menambahkan izin di bucket untuk Akun Layanan ini agar Google SecOps dapat membaca atau menghapus data di bucket.
Opsi lanjutan
- Nama Feed: Nilai yang diisi otomatis yang mengidentifikasi feed.
- Namespace Aset: Namespace yang terkait dengan feed.
- Label Penyerapan: Label yang diterapkan ke semua peristiwa dari feed ini.
Klik Buat feed.
Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi beberapa feed untuk berbagai jenis log dalam kelompok produk ini, lihat Mengonfigurasi feed menurut produk.
Tabel Pemetaan UDM
| Kolom log | Pemetaan UDM | Logika |
|---|---|---|
| addr | read_only_udm.principal.ip | Digabungkan ke dalam daftar alamat IP utama jika kolom tidak kosong atau "?". |
| jsonPayload.connection.dest_ip | read_only_udm.target.ip | Digabungkan ke dalam daftar alamat IP target jika kolom ada. |
| jsonPayload.connection.dest_port | read_only_udm.target.port | Dikonversi menjadi string, lalu menjadi bilangan bulat dan dipetakan jika tidak ada error selama konversi. |
| jsonPayload.connection.protocol | read_only_udm.network.ip_protocol | Dikonversi ke string, lalu ke bilangan bulat. Digunakan untuk menentukan protokol IP (TCP, UDP, dll.) menggunakan tabel pemeta dan dipetakan jika tidak ada error selama konversi. |
| jsonPayload.connection.src_ip | read_only_udm.principal.ip | Digabungkan ke dalam daftar alamat IP utama jika kolom ada. |
| jsonPayload.connection.src_port | read_only_udm.principal.port | Dikonversi ke string, lalu ke bilangan bulat dan dipetakan jika tidak terjadi error selama konversi. |
| jsonPayload.dest_instance.project_id | read_only_udm.target.resource.product_object_id | Dipetakan secara kondisional jika jsonPayload.dest_vpc.project_id ada. |
| jsonPayload.dest_instance.region | read_only_udm.target.location.name | Dipetakan secara kondisional jika jsonPayload.dest_vpc.project_id ada. |
| jsonPayload.dest_instance.vm_name | read_only_udm.target.resource.attribute.cloud.project.name | Dipetakan secara kondisional jika jsonPayload.dest_vpc.project_id ada. |
| jsonPayload.dest_instance.zone | read_only_udm.target.resource.attribute.cloud.availability_zone | Dipetakan secara kondisional jika jsonPayload.dest_vpc.project_id ada. |
| jsonPayload.dest_vpc.project_id | read_only_udm.target.cloud.vpc.product_object_id | Digunakan sebagai kondisi untuk memetakan kolom terkait. |
| jsonPayload.dest_vpc.subnetwork_name | read_only_udm.target.cloud.vpc.name | Dipetakan secara kondisional jika jsonPayload.dest_vpc.project_id ada. |
| jsonPayload.instance.project_id | read_only_udm.target.resource.product_object_id | Dipetakan secara kondisional jika jsonPayload.instance.project_id ada. |
| jsonPayload.instance.region | read_only_udm.target.location.name | Dipetakan secara kondisional jika jsonPayload.instance.project_id ada. |
| jsonPayload.instance.vm_name | read_only_udm.target.resource.attribute.cloud.project.name | Dipetakan secara bersyarat jika jsonPayload.instance.project_id ada. |
| jsonPayload.instance.zone | read_only_udm.target.resource.attribute.cloud.availability_zone | Dipetakan secara bersyarat jika jsonPayload.instance.project_id ada. |
| jsonPayload.message | read_only_udm.metadata.product_event_type, read_only_udm.principal.application, read_only_udm.target.process.pid, read_only_udm.target.user.userid, read_only_udm.principal.hostname, read_only_udm.target.process.command_line, read_only_udm.security_result.description, read_only_udm.principal.process.file.full_path | Diurai dan dipetakan ke berbagai kolom berdasarkan pola grok dan logika kondisional. |
| jsonPayload.rule_details.action | read_only_udm.security_result.action | Digunakan untuk menentukan tindakan hasil keamanan (ALLOW/BLOCK) dan dipetakan. |
| jsonPayload.rule_details.direction | read_only_udm.network.direction | Digunakan untuk menentukan arah jaringan (INBOUND/OUTBOUND/UNKNOWN_DIRECTION) dan dipetakan. |
| jsonPayload.rule_details.priority | read_only_udm.security_result.priority_details | Dikonversi menjadi string dan dipetakan jika tidak ada error selama konversi. |
| jsonPayload.rule_details.reference | read_only_udm.security_result.rule_labels.value | Dipetakan ke nilai label aturan. |
| jsonPayload.src_instance.project_id | read_only_udm.principal.resource.product_object_id | Dipetakan secara bersyarat jika jsonPayload.src_vpc.project_id ada. |
| jsonPayload.src_instance.region | read_only_udm.principal.location.name | Dipetakan secara bersyarat jika jsonPayload.src_vpc.project_id ada. |
| jsonPayload.src_instance.vm_name | read_only_udm.principal.resource.attribute.cloud.project.name | Dipetakan secara bersyarat jika jsonPayload.src_vpc.project_id ada. |
| jsonPayload.src_instance.zone | read_only_udm.principal.resource.attribute.cloud.availability_zone | Dipetakan secara bersyarat jika jsonPayload.src_vpc.project_id ada. |
| jsonPayload.src_vpc.project_id | read_only_udm.principal.cloud.vpc.product_object_id | Digunakan sebagai kondisi untuk memetakan kolom terkait. |
| jsonPayload.src_vpc.subnetwork_name | read_only_udm.principal.cloud.vpc.name | Dipetakan secara bersyarat jika jsonPayload.src_vpc.project_id ada. |
| jsonPayload.vpc.project_id | read_only_udm.target.cloud.vpc.product_object_id | Dipetakan secara kondisional jika jsonPayload.vpc.project_id ada. |
| jsonPayload.vpc.subnetwork_name | read_only_udm.target.cloud.vpc.name | Dipetakan secara kondisional jika jsonPayload.vpc.project_id ada. |
| logName | read_only_udm.security_result.category_details | Dipetakan secara langsung. |
| resource.labels.instance_id | read_only_udm.principal.resource.product_object_id, read_only_udm.principal.asset_id | Dipetakan secara bersyarat. Jika jenisnya adalah "PROCTITLE", ID ini digunakan untuk membuat ID aset. |
| resource.labels.location | read_only_udm.principal.location.name | Dipetakan secara bersyarat jika kolom ada. |
| resource.labels.project_id | read_only_udm.metadata.product_deployment_id | Dipetakan secara bersyarat jika kolom ada. |
| resource.labels.zone | read_only_udm.principal.resource.attribute.cloud.availability_zone | Dipetakan secara bersyarat jika kolom ada. |
| resource.type | read_only_udm.metadata.event_type | Digunakan untuk menentukan jenis peristiwa dan dipetakan. |
| timestamp | read_only_udm.metadata.event_timestamp | Dipetakan secara langsung. |
| jenis | read_only_udm.metadata.product_event_type, read_only_udm.metadata.event_type, read_only_udm.extensions.auth.type | Digunakan untuk menentukan jenis peristiwa, jenis peristiwa produk, dan jenis autentikasi serta dipetakan dengan tepat. |
| read_only_udm.metadata.event_type | Logika menetapkan jenis peristiwa berdasarkan kolom "type" dan kondisi lainnya. Jika tidak ada kecocokan spesifik yang ditemukan, nilai defaultnya adalah "GENERIC_EVENT". | |
| read_only_udm.metadata.log_type | Nilai konstanta "GCP_COMPUTE". | |
| read_only_udm.metadata.vendor_name | Nilai konstan "Google Cloud Platform". | |
| read_only_udm.metadata.product_name | Nilai konstan "Google Cloud Platform". | |
| read_only_udm.security_result.rule_labels.key | Nilai konstan "Reference". | |
| read_only_udm.target.cloud.vpc.resource_type | Ditetapkan secara bersyarat ke "VPC_NETWORK" jika jsonPayload.instance.project_id atau jsonPayload.dest_vpc.project_id ada. | |
| read_only_udm.target.resource.attribute.cloud.environment | Ditetapkan secara bersyarat ke "GOOGLE_CLOUD_PLATFORM" jika jsonPayload.instance.project_id, jsonPayload.dest_vpc.project_id, atau jsonPayload.src_vpc.project_id ada. | |
| read_only_udm.principal.administrative_domain | Dipetakan dari kolom "Account Domain" yang diekstrak dari kolom "kv_data". | |
| read_only_udm.principal.user.user_display_name | Dipetakan dari kolom "Nama Akun" yang diekstrak dari kolom "kv_data". | |
| read_only_udm.target.resource.name | Dipetakan dari kolom "Nama Objek" yang diekstrak dari kolom "kv_data". | |
| read_only_udm.target.resource.type | Dipetakan dari kolom "Jenis Objek" yang diekstrak dari kolom "kv_data". | |
| read_only_udm.principal.process.pid | Dipetakan dari kolom "ID proses" yang diekstrak dari kolom "kv_data". | |
| read_only_udm.target.user.windows_sid | Dipetakan dari kolom "Security ID" yang diekstrak dari kolom "kv_data". | |
| read_only_udm.network.session_id | Dipetakan dari kolom "auid". |
Log Perubahan
Melihat Log Perubahan untuk parser ini
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.