Mengumpulkan log F5 Distributed Cloud Services
Dokumen ini menjelaskan cara menyerap log F5 Distributed Cloud Services ke Google Security Operations menggunakan Google Cloud Storage V2.
F5 Distributed Cloud Services adalah platform pengelolaan aplikasi, jaringan, dan keamanan berbasis SaaS yang menyediakan infrastruktur cloud terdistribusi, pengiriman aplikasi, keamanan API, dan kemampuan firewall aplikasi web di berbagai lokasi multicloud dan edge.
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
- Akses istimewa ke konsol F5 Distributed Cloud
- Izin untuk membuat objek Global Log Receiver di F5 Distributed Cloud
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, f5-dcs-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 F5 Distributed Cloud untuk mengekspor ke GCS
Menambahkan bucket GCS ke daftar yang diizinkan firewall
F5 Distributed Cloud Global Log Receiver memerlukan rentang alamat IP berikut untuk ditambahkan ke daftar yang diizinkan firewall Anda:
193.16.236.64/29185.160.8.152/29
Jika bucket GCS Anda menggunakan Kontrol Layanan VPC atau aturan firewall, tambahkan rentang IP ini ke daftar yang diizinkan.
Membuat akun layanan Google Cloud untuk F5 Distributed Cloud
- Di Konsol Google Cloud, buka IAM & Admin > Service Accounts.
- Klik Create Service Account.
Berikan detail konfigurasi berikut:
- Nama akun layanan: Masukkan
f5-dcs-log-writer(atau nama deskriptif) - Deskripsi akun layanan: Masukkan
Service account for F5 Distributed Cloud to write logs to GCS
- Nama akun layanan: Masukkan
Klik Create and Continue.
Di bagian Grant this service account access to project:
- Klik Pilih peran.
- Telusuri dan pilih Storage Object Admin.
Klik Lanjutkan.
Klik Done.
Membuat kunci akun layanan
- Di daftar Akun Layanan, klik akun layanan yang Anda buat (misalnya,
f5-dcs-log-writer). - Buka tab Kunci.
- Klik Tambahkan Kunci > Buat kunci baru.
- Pilih JSON sebagai jenis kunci.
- Klik Create.
- File kunci JSON akan didownload ke komputer Anda.
- Simpan file ini dengan aman. Anda akan membutuhkannya pada langkah berikutnya.
Memberikan izin IAM pada bucket GCS
- Buka Cloud Storage > Buckets.
- Klik nama bucket Anda (misalnya,
f5-dcs-logs). - Buka tab Izin.
- Klik Grant access.
- Berikan detail konfigurasi berikut:
- Tambahkan prinsipal: Masukkan email akun layanan (misalnya,
f5-dcs-log-writer@PROJECT_ID.iam.gserviceaccount.com) - Tetapkan peran: Pilih Storage Object Admin
- Tambahkan prinsipal: Masukkan email akun layanan (misalnya,
- Klik Simpan.
Buat kredensial Google Cloud di konsol F5 Distributed Cloud
- Login ke konsol F5 Distributed Cloud di
https://<tenant>.console.ves.volterra.io. - Pilih layanan Multi-Cloud Network Connect dari halaman beranda.
- Buka Kelola > Pengelolaan Situs > Kredensial Cloud.
- Klik Add Cloud Credentials.
- Di bagian Metadata:
- Nama: Masukkan nama deskriptif (misalnya,
gcp-chronicle-logs) - Deskripsi (opsional): Masukkan
Cloud Storage credentials for Google SecOps log export
- Nama: Masukkan nama deskriptif (misalnya,
- Di bagian Cloud Credentials Type, pilih GCP Credentials.
- Klik Configure di kolom GCP Credentials.
- Di menu dropdown Credential Type, pilih Service Account Credentials File.
- Klik Upload File, lalu pilih file kunci JSON yang Anda download di langkah sebelumnya.
- Klik Terapkan.
- Klik Simpan dan Keluar.
Membuat Penerima Log Global
- Di F5 Distributed Cloud Console, pastikan Anda berada di layanan Multi-Cloud Network Connect.
- Buka Manage > Log Management > Global Log Receiver.
- Klik Tambahkan Penerima Log Global.
Di bagian Metadata:
- Nama: Masukkan nama deskriptif (misalnya,
chronicle-gcs-receiver) - Deskripsi (opsional): Masukkan
Global log receiver for Google SecOps SIEM
- Nama: Masukkan nama deskriptif (misalnya,
Di dropdown Jenis Log, pilih jenis log yang ingin Anda ekspor:
- Log Permintaan: Log permintaan/respons HTTP dengan pengguna, jalur, metode, kode respons
- Peristiwa Keamanan: Peristiwa WAF, DDoS, Perlindungan API, Pertahanan Bot
- Log Audit: Perubahan konfigurasi melalui API publik
- Log Permintaan DNS: Log kueri DNS
Di dropdown Log Message Selection, pilih salah satu opsi berikut:
- Pilih log dari namespace saat ini: Mengirim log hanya dari namespace saat ini
- Pilih log dari semua namespace: Mengirim log dari semua namespace (direkomendasikan untuk visibilitas yang komprehensif)
- Pilih log di namespace tertentu: Mengirim log dari namespace yang ditentukan (klik Tambahkan item untuk menambahkan nama namespace)
Di dropdown Receiver Configuration, pilih GCP Bucket Receiver.
Di kolom GCP Bucket Name, masukkan nama bucket GCS Anda (misalnya,
f5-dcs-logs).Di dropdown GCP Cloud Credentials, pilih kredensial cloud yang Anda buat sebelumnya (misalnya,
gcp-chronicle-logs).Opsional: Luaskan Tampilkan Kolom Lanjutan untuk mengonfigurasi opsi batch:
- Opsi Waktu Tunggu Batch: Pilih Detik Waktu Tunggu dan masukkan nilai (default:
300detik) - Peristiwa Maksimal Batch: Pilih Peristiwa Maksimal dan masukkan nilai antara 32 dan 2000 (biarkan tidak disetel jika tidak ada batas)
- Batch Byte: Pilih Byte Maksimum dan masukkan nilai antara 4096 dan 1048576 (default:
10485760byte / 10 MB)
- Opsi Waktu Tunggu Batch: Pilih Detik Waktu Tunggu dan masukkan nilai (default:
Klik Simpan dan Keluar.
Menguji koneksi
- Dalam daftar Global Log Receiver, temukan penerima yang Anda buat (misalnya,
chronicle-gcs-receiver). - Klik tiga titik (...) di kolom Tindakan.
- Pilih Uji Koneksi.
- Tunggu hingga pengujian selesai.
Pesan yang menunjukkan koneksi berhasil akan muncul.
Memverifikasi log di bucket GCS
- Buka Cloud Storage > Buckets di konsol GCP.
- Klik nama bucket Anda (misalnya,
f5-dcs-logs). - Pastikan file log dibuat di bucket.
F5 Distributed Cloud mengatur log dalam struktur folder berikut:
YYYY/MM/DD/HH/- Folder dibuat untuk setiap hari (YYYY/MM/DD)
- Dalam setiap folder hari, subfolder dibuat untuk setiap jam (HH)
- Setiap 5 menit, file gzip terkompresi baru ditulis ke subfolder per jam
- File dalam format NDJSON (JSON yang dibatasi baris baru)
Klik file gzip untuk mendownload dan memeriksa format log.
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.
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,
F5 DCS Logs). - Pilih Google Cloud Storage V2 sebagai Source type.
- Pilih F5 Distributed Cloud Services 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.
Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
URL bucket penyimpanan: Masukkan URI bucket GCS:
gs://f5-dcs-logs/Ganti
f5-dcs-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,
f5-dcs-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 |
|---|---|---|
| _id | metadata.product_log_id | Nilai disalin secara langsung |
| src | principal.namespace | Nilai disalin secara langsung |
| kubernetes_labels_app | target.resource.attribute.labels | Digabungkan dari app_label (berasal dari kubernetes_labels_app) |
| kubernetes_host | target.hostname | Nilai disalin secara langsung |
| kubernetes_container_name | target.resource.product_object_id | Nilai disalin secara langsung |
| bot_info.classification | security_result.detection_fields | Digabungkan dari bot_info_classification_label (berasal dari bot_info.classification) |
| bot_info.name | security_result.detection_fields | Digabungkan dari bot_info_name_label (berasal dari bot_info.name) |
| bot_info.type | security_result.detection_fields | Digabungkan dari bot_info_type_label (berasal dari bot_info.type) |
| timestamp | @timestamp | Diuraikan menggunakan filter tanggal dengan RFC3339, UNIX, ISO8601 |
| visitor_id | security_result.detection_fields | Digabungkan dari visitor_id_label (berasal dari visitor_id) |
| tag | security_result.detection_fields | Digabungkan dari tag_label (berasal dari tag) |
| tindakan | security_result.action | Setel ke ALLOW jika kecocokan diizinkan, BLOCK jika kecocokan ditolak |
| tingkat keseriusan, | security_result.severity | Setel ke TINGGI jika ada error/peringatan; KRITIS jika penting; SEDANG jika pemberitahuan; RENDAH jika informasi/info |
| tingkat keseriusan, | security_result.severity_details | Nilai disalin secara langsung |
| api_endpoint | target.labels | Digabungkan dari api_endpoint_label (berasal dari api_endpoint) |
| app_firewall_name | principal.process.command_line | Nilai disalin secara langsung |
| app_type | security_result.detection_fields | Digabungkan dari about_app_type (berasal dari app_type) |
| as_org | security_result.detection_fields | Digabungkan dari about_as_org (berasal dari as_org) |
| asn | security_result.detection_fields | Digabungkan dari about_asn (berasal dari asn) |
| kubernetes.pod_id | security_result.detection_fields | Digabungkan dari about_pod_id (berasal dari kubernetes.pod_id) |
| kubernetes.pod_name | security_result.detection_fields | Digabungkan dari about_pod_name (berasal dari kubernetes.pod_name) |
| latitude | principal.location.region_latitude | Dikonversi menjadi float |
| longitude | principal.location.region_longitude | Dikonversi menjadi float |
| req_params | additional.fields | Digabungkan dari about_req_params (berasal dari req_params) |
| as_number | additional.fields | Digabungkan dari about_as_number (dikonversi menjadi string dari as_number) |
| x_forwarded_for | intermediary.ip | Digabungkan jika IP valid |
| x_forwarded_for | security_result.about.resource.attribute.labels | Digabungkan dari x_forwarded_for_label jika bukan IP |
| policy_hit.malicious_user_mitigate_action | security_result.detection_fields | Digabungkan dari malicious_user_label (berasal dari policy_hit.malicious_user_mitigate_action) |
| policy_hit.policy | security_result.about.resource.attribute.labels | Digabungkan dari policy_label (berasal dari policy_hit.policy) |
| policy_hit.policy_namespace | additional.fields | Digabungkan dari policy_namespace_label (berasal dari policy_hit.policy_namespace) |
| policy_hit.policy_rule | security_result.rule_name | Nilai disalin secara langsung |
| policy_hit.policy_rule_description | security_result.description | Nilai disalin secara langsung |
| policy_hit.policy_set | target.resource.name | Nilai disalin secara langsung |
| policy_hit.result | additional.fields | Digabungkan dari result_label (berasal dari policy_hit.result) |
| vhost_id | security_result.detection_fields | Digabungkan dari vhostlabel (berasal dari vhost_id) |
| messageid | security_result.detection_fields | Digabungkan dari messageid_label (diperoleh dari messageid) |
| sec_event_name | security_result.detection_fields | Digabungkan dari sec_event_name_label (berasal dari sec_event_name) |
| sec_event_type | security_result.detection_fields | Digabungkan dari sec_event_type_label (berasal dari sec_event_type) |
| vh_name | security_result.detection_fields | Digabungkan dari vhost_name_label (berasal dari vh_name) |
| tls_fingerprint | security_result.detection_fields | Digabungkan dari tls_fingerprint_label (berasal dari tls_fingerprint) |
| waktu | additional.fields | Digabungkan dari time_label (berasal dari waktu) |
| kubernetes.namespace_name | additional.fields | Digabungkan dari namespace_name_label (berasal dari kubernetes.namespace_name) |
| src_instance | additional.fields | Digabungkan dari src_instance_label (berasal dari src_instance) |
| violation_rating | additional.fields | Digabungkan dari violation_rating_label (berasal dari violation_rating) |
| req_size | additional.fields | Digabungkan dari req_size_label (dikonversi menjadi string dari req_size) |
| rsp_code | additional.fields | Digabungkan dari rsp_code_label (dikonversi menjadi string dari rsp_code) |
| rsp_code_class | additional.fields | Digabungkan dari rsp_code_class_label (dikonversi menjadi string dari rsp_code_class) |
| rsp_size | additional.fields | Digabungkan dari rsp_size_label (dikonversi menjadi string dari rsp_size) |
| original_path | additional.fields | Digabungkan dari original_path_label (berasal dari original_path) |
| req_path | target.url | Nilai disalin secara langsung |
| req_headers_size | additional.fields | Digabungkan dari req_headers_size_label (berasal dari req_headers_size) |
| recommended_action | additional.fields | Digabungkan dari recommended_action_label (berasal dari recommended_action) |
| enforcement_mode | additional.fields | Digabungkan dari enforcement_mode_label (berasal dari enforcement_mode) |
| src_ip | principal.ip, principal.asset.ip | Digabungkan jika cocok dengan regex IPv4 |
| host | principal.ip, principal.asset.ip | Digabungkan jika cocok dengan regex IPv4 |
| hostname | principal.hostname, principal.asset.hostname | Nilai disalin langsung jika tidak kosong atau - |
| http_version | network.application_protocol_version | Nilai disalin secara langsung |
| http_version | network.application_protocol | Setel ke HTTP jika berisi HTTP, HTTPS jika berisi HTTPS |
| jaringan | principal.nat_ip | Digabungkan jika cocok dengan regex IPv4 |
| dst_ip | target.ip, target.asset.ip | Digabungkan jika cocok dengan regex IPv4 |
| dst_port | target.port | Dikonversi ke bilangan bulat |
| src_port | principal.port | Dikonversi ke bilangan bulat |
| src_site | additional.fields | Digabungkan dari src_site_field (berasal dari src_site) |
| situs | additional.fields | Digabungkan dari site_field (berasal dari situs) |
| cluster_name | additional.fields | Digabungkan dari cluster_name_field (berasal dari cluster_name) |
| domain | principal.administrative_domain | Nilai disalin secara langsung |
| metode | network.http.method | Nilai disalin langsung jika tidak kosong atau N/A |
| namespace | target.namespace | Nilai disalin secara langsung |
| city | principal.location.city | Nilai disalin secara langsung |
| aliran | security_result.detection_fields | Digabungkan dari stream_label (berasal dari stream) |
| region | principal.location.country_or_region | Nilai disalin secara langsung |
| pengguna | principal.user.userid | Diekstrak dari pengguna menggunakan pola grok untuk user_id |
| user_ip | target.ip, target.asset.ip | Digabungkan dari user_ip yang diekstrak |
| Cookie | additional.fields | Digabungkan dari cookie (berasal dari Cookie di req_headers) |
| X-F5-Request-Id | security_result.detection_fields | Digabungkan dari x_f5_request_id (berasal dari X-F5-Request-Id di req_headers) |
| X-Request-Id | security_result.detection_fields | Digabungkan dari request_id (berasal dari X-Request-Id di req_headers) |
| security_result | security_result | Digabungkan secara langsung |
| has_network, has_principal, has_target | metadata.event_type | Disetel ke NETWORK_CONNECTION jika semuanya benar; STATUS_UPDATE jika has_principal benar; atau GENERIC_EVENT |
| metadata.vendor_name | Tetapkan ke "F5_DCS" | |
| metadata.product_name | Tetapkan ke "F5 DCS" | |
| perantara | perantara | Digabungkan secara langsung |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.