Mengumpulkan log DNS Kustom
Parser Version: 1.0
Dokumen ini menjelaskan cara menyerap log DNS Kustom ke Google Security Operations menggunakan Google Cloud Storage V2.
DNS kustom adalah jenis log generik untuk log server DNS dari penerapan DNS kustom atau yang tidak didukung. Data ini mencatat data kueri dan respons DNS, termasuk domain, jenis data, dan informasi klien. Karena log ini berasal dari sumber DNS nonstandar, Anda harus mengekspornya ke bucket Google Cloud Storage (GCS), lalu mengonfigurasi feed Google SecOps untuk menyerapnya.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps
- Project Google Cloud dengan Cloud Storage API diaktifkan
- Izin untuk membuat dan mengelola bucket GCS
- Izin untuk mengelola kebijakan IAM di bucket GCS
- Server DNS atau layanan yang membuat log dalam format yang didukung (direkomendasikan JSON)
- Akses administratif ke server DNS untuk mengonfigurasi ekspor log
Buat 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, custom-dns-logs)Location type Pilih berdasarkan kebutuhan Anda (Region, Dual-region, Multi-region) Location Pilih lokasi yang paling dekat dengan instance Google SecOps Anda (misalnya, us-central1)Kelas penyimpanan Standar (direkomendasikan untuk log yang sering diakses) Kontrol akses Seragam (direkomendasikan) Alat perlindungan Opsional: Aktifkan pembuatan versi objek atau kebijakan retensi Klik Create.
Mengonfigurasi ekspor otomatis log DNS ke GCS
Metode untuk mengekspor log DNS bergantung pada penerapan server DNS Anda. Pilih pendekatan yang paling sesuai dengan lingkungan Anda.
Opsi 1: Sink Cloud Logging (untuk server DNS di GCE)
Jika server DNS Anda berjalan di instance Google Compute Engine dan mencatat log ke Cloud Logging, buat sink log untuk mengekspor log DNS langsung ke GCS.
- Di GCP Console, buka Logging > Log Router.
- Klik Create Sink.
Berikan detail konfigurasi berikut:
Setelan Nilai Sink name custom-dns-to-gcsSink destination Bucket Cloud Storage Bucket custom-dns-logsFilter penyertaan Filter yang cocok dengan entri log DNS Anda (misalnya, resource.type="gce_instance" AND logName="projects/YOUR_PROJECT_ID/logs/dns")Klik Create Sink.
Opsi 2: Cloud Scheduler dengan Cloud Build (untuk server DNS lokal)
Gunakan Cloud Build yang dipicu oleh Cloud Scheduler untuk menjalankan tugas ekspor yang di-container yang mengumpulkan log DNS dari server jarak jauh dan menuliskannya ke GCS.
Buat akun layanan untuk tugas ekspor:
- Di Konsol GCP, buka IAM & Admin > Service Accounts.
- Klik Create Service Account.
- Berikan detail konfigurasi berikut:
- Nama akun layanan: Masukkan
dns-log-export-sa - Deskripsi akun layanan: Masukkan
Service account for automated DNS log export to GCS
- Nama akun layanan: Masukkan
- Klik Create and Continue.
- Tambahkan peran berikut:
- Storage Object Admin (untuk menulis file ke GCS)
- Cloud Build Editor (untuk menjalankan tugas Cloud Build)
- Klik Done.
Buat file konfigurasi Cloud Build (
cloudbuild.yaml):steps: - name: 'gcr.io/cloud-builders/gcloud' entrypoint: 'bash' args: - '-c' - | # Collect DNS logs from your server # Replace with the actual command for your environment # Example: pull logs via syslog-ng, rsync from remote server, or query DNS log API curl -s -H "Authorization: Bearer $${API_TOKEN}" \ "https://your-dns-server.example.com/api/logs?format=json" \ -o /workspace/dns_logs.json # Upload to GCS gcloud storage cp /workspace/dns_logs.json \ gs://${_BUCKET_NAME}/dns/dns_logs_$(date -u +%Y%m%d_%H%M%S).json substitutions: _BUCKET_NAME: 'custom-dns-logs'Buat tugas Cloud Scheduler untuk memicu build:
- Di Konsol GCP, buka Cloud Scheduler.
- Klik Create Job.
Berikan detail konfigurasi berikut:
Setelan Nilai Nama dns-log-export-hourlyRegion Pilih region yang sama dengan bucket GCS Anda Frekuensi 0 * * * *(setiap jam)Zona Waktu UTC (direkomendasikan) Jenis target HTTP URL https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/buildsMetode HTTP POST Header otorisasi Tambahkan token OAuth Service account dns-log-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.comKlik Create.
Opsi 3: Storage Transfer Service (untuk sistem file lokal)
Jika log DNS ditulis ke sistem file lokal, gunakan Storage Transfer Service dengan Agen Transfer untuk memindahkannya ke GCS.
- Di GCP Console, buka Storage Transfer Service.
- Klik Buat tugas transfer.
- Pilih POSIX filesystem sebagai sumber.
- Ikuti petunjuk untuk menginstal Storage Transfer Agent di server DNS atau komputer dengan akses ke file log DNS.
Konfigurasi tugas transfer:
Setelan Nilai Direktori sumber Jalur ke direktori file log DNS Bucket tujuan custom-dns-logsJalur tujuan dns/Jadwal Menetapkan jadwal berulang (misalnya, setiap jam) Klik Create.
Mengambil 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 DNS Logs). - Pilih Google Cloud Storage V2 sebagai Source type.
- Pilih DNS Kustom 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 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,
custom-dns-logs). - Buka tab Izin.
- Klik Grant access.
- Berikan detail konfigurasi berikut:
- Add principals: Tempel email akun layanan Google SecOps (misalnya,
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com). - Tetapkan peran: Pilih Storage Object Viewer.
- Add principals: Tempel email akun layanan Google SecOps (misalnya,
Klik Simpan.
Mengonfigurasi feed Google SecOps
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
Custom DNS Logs). - Pilih Google Cloud Storage V2 sebagai Source type.
- Pilih DNS Kustom sebagai Jenis log.
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
URI bucket penyimpanan: Masukkan URI bucket GCS:
gs://custom-dns-logs/dns/- Ganti
custom-dns-logsdengan nama bucket GCS Anda. - Ganti
dnsdengan jalur awalan yang dikonfigurasi.
- Ganti
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 dan direktori kosong: Menghapus file dan direktori kosong setelah transfer berhasil.
Usia File Maksimum: Sertakan 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.
Tabel pemetaan UDM
| Kolom Log | Pemetaan UDM | Logika |
|---|---|---|
receiveTimestamp |
metadata.event_timestamp |
Diuraikan sebagai RFC 3339 |
message |
metadata.event_type |
Dipetakan: "dns_query" → NETWORK_DNS |
jsonPayload.msg |
metadata.product_event_type |
Dipetakan secara langsung |
insertId |
metadata.product_log_id |
Dipetakan secara langsung |
message |
metadata.product_name |
Dipetakan: "dns_query" → Custom DNS |
message |
metadata.vendor_name |
Dipetakan: "dns_query" → CUSTOM |
message |
network.application_protocol |
Dipetakan: "dns_query" → DNS |
dns_answers |
network.dns.answers |
Digabung |
message |
network.dns.answers |
Dipetakan: "dns_query" → dns_answers |
dns_question |
network.dns.questions |
Digabung |
message |
network.dns.questions |
Dipetakan: "dns_query" → dns_question |
dns.response_code |
network.dns.response_code |
Diganti nama/dipetakan |
message |
principal.hostname |
Dipetakan: "dns_query" → jsonPayload.dns_query.server |
jsonPayload.dns_query.server |
principal.ip |
Digabung |
message |
principal.ip |
Dipetakan: "dns_query" → jsonPayload.dns_query.server |
message |
security_result |
Dipetakan: "dns_query" → security_result |
logName |
security_result.category_details |
Digabung |
message |
security_result.category_details |
Dipetakan: "dns_query" → logName |
message |
security_result.severity |
Dipetakan: "dns_query" → INFORMATIONAL, "dns_query" → MEDIUM, "dns_query" → HIGH |
labels.application |
target.application |
Dipetakan secara langsung |
message |
target.hostname |
Dipetakan: "dns_query" → jsonPayload.dns_query.server |
jsonPayload.dns_query.server |
target.ip |
Digabung |
message |
target.ip |
Dipetakan: "dns_query" → jsonPayload.dns_query.server |
component_label |
target.labels |
Digabung |
instance_group_label |
target.labels |
Digabung |
message |
target.labels |
Dipetakan: "dns_query" → component_label, "dns_query" → instance_group_label |
labels.region |
target.location.country_or_region |
Dipetakan secara langsung |
resource.labels.zone |
target.resource.attribute.cloud.availability_zone |
Dipetakan secara langsung |
message |
target.resource.attribute.cloud.environment |
Dipetakan: "dns_query" → GOOGLE_CLOUD_PLATFORM |
resource.labels.project_id |
target.resource.attribute.cloud.project.id |
Dipetakan secara langsung |
message |
target.resource.resource_type |
Dipetakan: "dns_query" → VIRTUAL_MACHINE |
| T/A | metadata.event_type |
Konstanta: NETWORK_DNS |
| T/A | metadata.product_name |
Konstanta: Custom DNS |
| T/A | metadata.vendor_name |
Konstanta: CUSTOM |
| T/A | network.application_protocol |
Konstanta: DNS |
| T/A | principal.hostname |
Konstanta: jsonPayload.dns_query.server |
| T/A | security_result.severity |
Konstanta: INFORMATIONAL |
| T/A | target.hostname |
Konstanta: jsonPayload.dns_query.server |
| T/A | target.resource.attribute.cloud.environment |
Konstanta: GOOGLE_CLOUD_PLATFORM |
| T/A | target.resource.resource_type |
Konstanta: VIRTUAL_MACHINE |
Log Perubahan
Melihat Log Perubahan untuk parser ini
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.