Mengumpulkan log F5 Shape
Versi Parser: 1.0
Dokumen ini menjelaskan cara menyerap log F5 Shape ke Google Security Operations menggunakan Google Cloud Storage V2.
F5 Distributed Cloud Bot Defense (sebelumnya Shape Security) melindungi aplikasi dari serangan otomatis dengan mengidentifikasi dan memitigasi bot berbahaya. Bot Defense menggunakan JavaScript dan SDK Seluler native untuk mengumpulkan telemetri dari browser klien dan perangkat seluler, serta memeriksa telemetri ini sebelum permintaan mencapai aplikasi Anda. Layanan ini menyediakan dasbor dan pelaporan terintegrasi untuk melihat informasi mendetail tentang traffic yang dianalisis, termasuk peristiwa keamanan, log akses, dan log audit.
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
- Akses istimewa ke F5 Distributed Cloud Console
- Akun F5 Distributed Cloud dengan akses layanan Multi-Cloud Network Connect atau Shared Configuration
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, f5-xc-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: Aktifkan pembuatan versi objek atau kebijakan retensi. Klik Create.
Membuat kredensial F5 Shape API
F5 Distributed Cloud menggunakan Sertifikat API (mTLS) atau Token API untuk autentikasi. Sertifikat API direkomendasikan untuk keamanan yang lebih baik.
Membuat Sertifikat API
- Login ke F5 Distributed Cloud Console.
- Dari halaman beranda Console, pilih Administration.
- Di menu navigasi sebelah kiri, buka Personal Management > Credentials.
- Klik Add Credentials.
- Di bagian Metadata, masukkan Nama untuk sertifikat Anda (misalnya,
secops-integration). - Dari daftar Credential Type, pilih API Certificate.
- Masukkan Password dan konfirmasi di kolom Confirm Password.
Pilih Tanggal Habis Masa Berlaku dari daftar kalender.
Klik Download untuk membuat dan mendownload sertifikat dalam format file
.p12.Simpan file sertifikat dan sandi yang didownload dengan aman untuk digunakan nanti.
Membuat Kredensial Cloud GCP di F5 Distributed Cloud
F5 Distributed Cloud memerlukan kredensial akun layanan Google Cloud untuk menulis log ke bucket GCS Anda.
Membuat akun layanan Google Cloud
- Di Konsol GCP, buka IAM & Admin > Service Accounts.
- Klik Create Service Account.
- Berikan detail konfigurasi berikut:
- Service account name: Masukkan
f5-xc-log-writer(atau nama pilihan Anda). - Service account description: Masukkan
Service account for F5 Distributed Cloud to write logs to GCS.
- Service account name: 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.
Memberikan izin IAM di bucket GCS
- Buka Cloud Storage > Buckets.
- Klik nama bucket Anda (misalnya,
f5-xc-logs). - Buka tab Izin.
- Klik Grant access.
- Berikan detail konfigurasi berikut:
- Tambahkan entitas: Masukkan email akun layanan (misalnya,
f5-xc-log-writer@PROJECT_ID.iam.gserviceaccount.com). - Assign roles: Pilih Storage Object Admin.
- Tambahkan entitas: Masukkan email akun layanan (misalnya,
- Klik Simpan.
Buat kunci akun layanan
- Di Konsol GCP, buka IAM & Admin > Service Accounts.
- Temukan akun layanan (misalnya,
f5-xc-log-writer) dan klik akun tersebut. - Buka tab Keys.
- Klik Add Key > Create new key.
- Pilih JSON sebagai jenis kunci.
- Klik Create.
- File kunci JSON akan didownload secara otomatis. Simpan file ini dengan aman.
Menambahkan Google Cloud Kredensial Cloud ke F5 Distributed Cloud
- Di F5 Distributed Cloud Console, dari halaman beranda, pilih Multi-Cloud Network Connect atau Shared Configuration.
- Di menu navigasi kiri, buka Manage > Site Management > Cloud Credentials.
- Klik Add Cloud Credentials.
- Di bagian Metadata, masukkan Name (misalnya,
gcp-secops-logs). - Dari daftar Cloud Credentials Type, pilih GCP Credentials.
- Di bagian GCP Credentials, klik Configure.
- Di bagian Service Account Key:
- Dari daftar Secret Type, pilih Blindfolded Secret.
- Dari daftar Action, pilih Blindfold New Secret.
- Dari daftar Policy Type, pilih Built-in.
- Di kolom Secret to Blindfold, tempel seluruh konten file kunci JSON yang Anda download.
- Klik Terapkan.
- Klik Save and Exit.
Mengonfigurasi Penerima Log Global untuk GCS
F5 Distributed Cloud Global Log Receiver mengalirkan log ke GCS setiap 5 menit dalam format NDJSON (JSON yang dibatasi baris baru).
Membuat Penerima Log Global
- Di F5 Distributed Cloud Console, dari halaman beranda, pilih Multi-Cloud Network Connect atau Shared Configuration.
- Untuk Multi-Cloud Network Connect: Buka Manage > Log Management > Global Log Receiver.
- Untuk Shared Configuration: Buka Manage > Global Log Receiver.
- Klik Add Global Log Receiver.
- Di bagian Metadata, masukkan Name (misalnya,
secops-gcs-receiver). - Secara opsional, tambahkan Labels dan Description.
Dari daftar Log Type, pilih jenis log yang ingin Anda kumpulkan:
- Log Permintaan: Log akses HTTP dari load balancer
- Peristiwa Keamanan: Peristiwa keamanan Bot Defense dan WAF
- Log Audit: Log audit administratif dan konfigurasi
- Log Permintaan DNS: Log kueri DNS
Dari daftar Log Message Selection:
- Jika menggunakan layanan Multi-Cloud Network Connect, pilih Select logs from current namespace (namespace sistem).
- Jika menggunakan layanan Shared Configuration, pilih salah satu opsi berikut:
- Select logs from current namespace: Mengirim log hanya dari namespace bersama.
- Pilih log dari semua namespace: Mengirim log dari semua namespace.
- Pilih log di namespace tertentu: Masukkan nama namespace tertentu dan klik Tambahkan item untuk menambahkan lainnya.
Dari daftar Receiver Configuration, pilih GCP Bucket.
Di bagian GCP Bucket, berikan konfigurasi berikut:
- GCP Bucket Name: Masukkan nama bucket GCS Anda (misalnya,
f5-xc-logs). - GCP Cloud Credentials: Dari daftar, pilih kredensial cloud yang Anda buat (misalnya,
gcp-secops-logs).
- GCP Bucket Name: Masukkan nama bucket GCS Anda (misalnya,
Mengonfigurasi setelan lanjutan (opsional)
- Klik tombol Show Advanced Fields.
Di bagian Batch Options, konfigurasikan hal berikut (opsional):
- Batch Timeout Options: Pilih Timeout Seconds dan masukkan nilai (default:
300detik). - Batch Max Events: Pilih Max Events dan masukkan nilai antara 32 dan 2000 (opsional).
- Byte Batch: Pilih Byte Maks dan masukkan nilai antara 4096 dan 1048576 (default:
10485760byte / 10 MB).
- Batch Timeout Options: Pilih Timeout Seconds dan masukkan nilai (default:
Menyelesaikan dan menguji konfigurasi
- Klik Save and Exit untuk membuat Penerima Log Global.
- Dalam daftar Global Log Receiver, temukan penerima Anda (misalnya,
secops-gcs-receiver). - Di kolom Actions, klik tiga titik ..., lalu pilih Test Connection.
Tunggu hingga pengujian selesai. Pesan berhasil menunjukkan bahwa koneksi berfungsi.
Memastikan log ditulis ke GCS:
- Buka Cloud Storage > Buckets di GCP Console.
- Klik nama bucket Anda (misalnya,
f5-xc-logs). - Dalam waktu 5-10 menit, Anda akan melihat folder yang dibuat dengan struktur berikut:
- Folder harian:
YYYY-MM-DD/ - Subfolder per jam:
YYYY-MM-DD/HH/ - File log:
YYYY-MM-DD/HH/logs_YYYYMMDDHHMMSS.ndjson.gz
- Folder harian:
Mengonfigurasi daftar yang diizinkan firewall
F5 Distributed Cloud memerlukan rentang IP tertentu yang diizinkan di firewall Anda untuk pengiriman log.
Tambahkan rentang alamat IP berikut ke daftar yang diizinkan di firewall Anda:
193.16.236.64/29185.160.8.152/29
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,
F5 Distributed Cloud Bot Defense). - Pilih Google Cloud Storage V2 sebagai Source type.
- Pilih F5_SHAPE sebagai Log type.
Klik Get Service Account. Email akun layanan yang unik akan ditampilkan, misalnya:
secops-12345678@secops-gcp-prod.iam.gserviceaccount.comSalin alamat email untuk digunakan di langkah berikutnya.
Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
Storage bucket URL: Masukkan URI bucket GCS dengan jalur awalan:
gs://f5-xc-logs/- Ganti
f5-xc-logsdengan nama bucket GCS Anda yang sebenarnya. - Jika Anda mengonfigurasi awalan tertentu di Penerima Log Global, sertakan awalan tersebut dalam jalur (misalnya,
gs://f5-xc-logs/bot-defense/).
- Ganti
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.
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-xc-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.
Tabel pemetaan UDM
| Kolom log | pemetaan UDM | Logika |
|---|---|---|
| msg.requestHeaders.Proxy-Client-IP, msg.requestHeaders.WF-Forwarded-For, msg.requestHeaders.X-Forwarded-For, msg.requestHeaders.wl-proxy-client-ip, msg.hashedUserAgent, msg.transactionId, msg.hashedUsername, msg.dcgShapeFailedOn, ShapeShifterId, eventType, eventId, latRequest, latResponse, latTotal, latRspWait, count, latEccWait | additional.fields | Digabungkan dari label yang dibuat dari berbagai kolom |
| perantara | perantara | Nilai disalin langsung jika tidak kosong |
| deskripsi | metadata.description | Nilai disalin langsung |
| target, has_principal_machine | metadata.event_type | Tetapkan ke NETWORK_HTTP jika target != "", jika tidak, STATUS_UPDATE jika has_principal_machine == true, jika tidak, GENERIC_EVENT |
| aplikasi | network.application_protocol | Nilai diubah menjadi huruf besar |
| requestMethod, msg.method | network.http.method | Nilai dari requestMethod jika tidak kosong, jika tidak, msg.method |
| requestClientApplication, msg.requestHeaders.User-Agent | network.http.parsed_user_agent | Nilai dari requestClientApplication jika tidak kosong, atau msg.requestHeaders.User-Agent, yang dikonversi ke agen pengguna yang diuraikan |
| requestContext, msg.requestHeaders.Referer | network.http.referral_url | Nilai dari requestContext jika tidak kosong, jika tidak, msg.requestHeaders.Referer |
| msg.sseResponseCode, prCode | network.http.response_code | Nilai dari msg.sseResponseCode jika tidak kosong, jika tidak, prCode, dikonversi menjadi bilangan bulat |
| requestClientApplication, msg.requestHeaders.User-Agent | network.http.user_agent | Nilai dari requestClientApplication jika tidak kosong, jika tidak, msg.requestHeaders.User-Agent |
| requestHeader.x-shape-src-virtual | observer.ip | Nilai disalin langsung |
| utama | utama | Nilai disalin langsung |
| msg.host | principal.asset.hostname | Nilai disalin langsung |
| src, msg.src, msg.trueClientIP, requestHeader.X-Forwarded-For | principal.asset.ip | Nilai dari src jika tidak kosong, jika tidak, msg.src, jika tidak, msg.trueClientIP, jika tidak, IP pertama dari X-Forwarded-For jika != src |
| msg.host | principal.hostname | Nilai disalin langsung |
| src, msg.src, msg.trueClientIP, requestHeader.X-Forwarded-For | principal.ip | Nilai dari src jika tidak kosong, jika tidak, msg.src, jika tidak, msg.trueClientIP, jika tidak, IP pertama dari X-Forwarded-For jika != src |
| msg.requestHeaders | principal.resource.attribute.labels | Digabungkan dari key-value pair di msg.requestHeaders |
| msg.uri | principal.url | Nilai disalin langsung |
| security_result | security_result | Nilai disalin langsung |
| deviceExternalId | security_result.about.asset_id | Nilai disalin langsung |
| flowLabel, agentLabel, requestHeader.Content-Length, requestHeader.Content-Type, requestHeader.Accept, requestHeader.Accept-Encoding, browserType, accountInfo, requestHeader.Via, asn, tid, ctag, requestHeader.Cache-Control, transactionResult | security_result.about.labels | Digabungkan dari label yang dibuat dari berbagai kolom |
| act, msg.transactionResult | security_result.action | Setel ke ALLOW jika act cocok dengan PASS dan isAttack, jika tidak, UNKNOWN_ACTION; atau ALLOW jika msg.transactionResult == Success, BLOCK jika Failure |
| act, msg.transactionResult | security_result.action_details | Value from act if not empty, else msg.transactionResult |
| tingkat keseriusan, | security_result.severity | Setel ke HIGH jika dalam Error, error, warning; CRITICAL jika cocok dengan critical; MEDIUM jika notice; LOW jika dalam information, info, INFO |
| tingkat keseriusan, | security_result.severity_details | Nilai disalin langsung |
| attackCause | security_result.threat_name | Nilai disalin langsung |
| target | target | Nilai disalin langsung |
| appName | target.application | Nilai disalin langsung |
| dst, msg.dst | target.asset.ip | Nilai dari dst jika tidak kosong, jika tidak, msg.dst |
| dhost | target.hostname | Nilai disalin langsung |
| dst, msg.dst | target.ip | Nilai dari dst jika tidak kosong, jika tidak, msg.dst |
| countryName | target.location.country_or_region | Nilai disalin langsung |
| dpt | target.port | Dikonversi ke bilangan bulat |
| msg.responseHeaders | target.resource.attribute.labels | Digabungkan dari key-value pair di msg.responseHeaders |
| permintaan | target.url | Nilai disalin langsung |
| requestHeader.X-Forwarded-For | intermediary.ip | Setel ke IP berikutnya dari array X-Forwarded-For |
| metadata.product_name | Tetapkan ke "Bentuk" | |
| metadata.vendor_name | Setel ke "F5" | |
requestHeaders_id_array.User-Agent |
network.http.user_agent |
Dipetakan dari log perubahan |
requestHeaders_id_array.Referer |
network.http.referral_url |
Dipetakan dari log perubahan |
requestHeaders_id_array.Proxy-Client-IP", "requestHeaders_id_array.WF-Forwarded-For", "requestHeaders_id_array.X-Forwarded-For", and "requestHeaders_id_array.wl-proxy-client-ip |
additional.fields |
Dipetakan dari log perubahan |
Log Perubahan
Melihat Log Perubahan untuk parser ini
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.