Mengumpulkan log F5 Shape
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 mengurangi 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 diaktifkan
- Izin untuk membuat dan mengelola bucket GCS
- Izin untuk mengelola kebijakan IAM di bucket GCS
- Akses istimewa ke Konsol F5 Distributed Cloud
- 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 Beri nama bucket Anda Masukkan nama yang unik secara global (misalnya, f5-xc-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.
Buat kredensial F5 Shape API
F5 Distributed Cloud menggunakan Sertifikat API (mTLS) atau Token API untuk autentikasi. Sertifikat API direkomendasikan untuk meningkatkan keamanan.
Membuat Sertifikat API
- Login ke F5 Distributed Cloud Console.
- Dari halaman beranda Konsol, pilih Administrasi.
- Di menu navigasi sebelah kiri, buka Pengelolaan Pribadi > Kredensial.
- Klik Add Credentials.
- Di bagian Metadata, masukkan Nama untuk sertifikat Anda (misalnya,
secops-integration). - Dari daftar Credential Type, pilih API Certificate.
- Masukkan Sandi dan konfirmasi di kolom Konfirmasi Sandi.
Pilih Tanggal Berakhir 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 Google Cloud kredensial akun layanan untuk menulis log ke bucket GCS Anda.
Buat akun layanan Google Cloud
- Di GCP Console, buka IAM & Admin > Service Accounts.
- Klik Create Service Account.
- Berikan detail konfigurasi berikut:
- Nama akun layanan: Masukkan
f5-xc-log-writer(atau nama pilihan Anda). - 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 Berikan akun layanan ini akses ke project:
- Klik Pilih peran.
- Telusuri dan pilih Storage Object Admin.
- Klik Lanjutkan.
- Klik Done.
Memberikan izin IAM pada 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 prinsipal: Masukkan email akun layanan (misalnya,
f5-xc-log-writer@PROJECT_ID.iam.gserviceaccount.com). - Tetapkan peran: Pilih Storage Object Admin.
- Tambahkan prinsipal: Masukkan email akun layanan (misalnya,
- Klik Simpan.
Buat kunci akun layanan
- Di GCP Console, buka IAM & Admin > Service Accounts.
- Temukan akun layanan (misalnya,
f5-xc-log-writer), lalu klik akun tersebut. - Buka tab Kunci.
- Klik Tambahkan Kunci > Buat kunci baru.
- 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 sebelah kiri, buka Kelola > Pengelolaan Situs > Kredensial Cloud.
- Klik Add Cloud Credentials.
- Di bagian Metadata, masukkan Nama (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 Tindakan, pilih Blindfold New Secret.
- Dari daftar Jenis Kebijakan, pilih Bawaan.
- Di kolom Secret to Blindfold, tempel seluruh konten file kunci JSON yang Anda download.
- Klik Terapkan.
- Klik Simpan dan Keluar.
Mengonfigurasi Penerima Log Global untuk GCS
F5 Distributed Cloud Global Log Receiver melakukan streaming 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 Konfigurasi Bersama: Buka Kelola > Penerima Log Global.
- Klik Tambahkan Penerima Log Global.
- Di bagian Metadata, masukkan Nama (misalnya,
secops-gcs-receiver). - Secara opsional, tambahkan Label dan Deskripsi.
Dari daftar Jenis Log, 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 konfigurasi dan administratif
- Log Permintaan DNS: Log kueri DNS
Dari daftar Log Message Selection:
- Jika menggunakan layanan Multi-Cloud Network Connect, pilih Pilih log dari namespace saat ini (namespace sistem).
- Jika menggunakan layanan Konfigurasi Bersama, pilih salah satu opsi berikut:
- Pilih log dari namespace saat ini: Mengirim log hanya dari namespace yang dibagikan.
- Pilih log dari semua namespace: Mengirim log dari semua namespace.
- Pilih log di namespace tertentu: Masukkan nama namespace tertentu, lalu klik Tambahkan item untuk menambahkan lebih banyak.
Dari daftar Receiver Configuration, pilih GCP Bucket.
Di bagian GCP Bucket, berikan konfigurasi berikut:
- Nama Bucket GCP: Masukkan nama bucket GCS Anda (misalnya,
f5-xc-logs). - Kredensial Cloud GCP: Dari daftar, pilih kredensial cloud yang Anda buat (misalnya,
gcp-secops-logs).
- Nama Bucket GCP: Masukkan nama bucket GCS Anda (misalnya,
Mengonfigurasi setelan lanjutan (opsional)
- Klik tombol Show Advanced Fields.
Di bagian Batch Options, konfigurasikan hal berikut (opsional):
- Opsi Waktu Tunggu Batch: Pilih Waktu Tunggu dalam Detik dan masukkan nilai (default:
300detik). - Peristiwa Maksimum Batch: Pilih Peristiwa Maksimum dan masukkan nilai antara 32 dan 2000 (opsional).
- Batch Byte: Pilih Byte Maks dan masukkan nilai antara 4096 dan 1048576 (default:
10485760byte / 10 MB).
- Opsi Waktu Tunggu Batch: Pilih Waktu Tunggu dalam Detik dan masukkan nilai (default:
Menyelesaikan dan menguji konfigurasi
- Klik Save and Exit untuk membuat Global Log Receiver.
- Dalam daftar Global Log Receiver, temukan penerima Anda (misalnya,
secops-gcs-receiver). - Di kolom Tindakan, klik tiga titik ..., lalu pilih Uji Koneksi.
Tunggu hingga pengujian selesai. Pesan berhasil menunjukkan bahwa koneksi berfungsi.
Verifikasi bahwa log sedang 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 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.
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 Distributed Cloud Bot Defense). - Pilih Google Cloud Storage V2 sebagai Source type.
- Pilih F5_SHAPE sebagai Jenis log.
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:
URL bucket penyimpanan: 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:
- 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.
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
- Tetapkan peran: 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 secara langsung jika tidak kosong |
| deskripsi | metadata.description | Nilai disalin secara langsung |
| target, has_principal_machine | metadata.event_type | Ditetapkan ke NETWORK_HTTP jika target != "", atau STATUS_UPDATE jika has_principal_machine == true, atau GENERIC_EVENT |
| aplikasi | network.application_protocol | Nilai huruf besar |
| requestMethod, msg.method | network.http.method | Nilai dari requestMethod jika tidak kosong, atau 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 menjadi agen pengguna yang diuraikan |
| requestContext, msg.requestHeaders.Referer | network.http.referral_url | Nilai dari requestContext jika tidak kosong, atau msg.requestHeaders.Referer |
| msg.sseResponseCode, prCode | network.http.response_code | Nilai dari msg.sseResponseCode jika tidak kosong, atau prCode, dikonversi menjadi bilangan bulat |
| requestClientApplication, msg.requestHeaders.User-Agent | network.http.user_agent | Nilai dari requestClientApplication jika tidak kosong, atau msg.requestHeaders.User-Agent |
| requestHeader.x-shape-src-virtual | observer.ip | Nilai disalin secara langsung |
| utama | utama | Nilai disalin secara langsung |
| msg.host | principal.asset.hostname | Nilai disalin secara 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 secara 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 secara langsung |
| security_result | security_result | Nilai disalin secara langsung |
| deviceExternalId | security_result.about.asset_id | Nilai disalin secara 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 | Ditetapkan 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 | Nilai dari act jika tidak kosong, atau msg.transactionResult |
| tingkat keseriusan, | security_result.severity | Setel ke TINGGI jika dalam Error, error, warning; KRITIS jika cocok dengan critical; SEDANG jika notice; RENDAH jika dalam information, info, INFO |
| tingkat keseriusan, | security_result.severity_details | Nilai disalin secara langsung |
| attackCause | security_result.threat_name | Nilai disalin secara langsung |
| target | target | Nilai disalin secara langsung |
| appName | target.application | Nilai disalin secara langsung |
| dst, msg.dst | target.asset.ip | Nilai dari dst jika tidak kosong, atau msg.dst |
| dhost | target.hostname | Nilai disalin secara langsung |
| dst, msg.dst | target.ip | Nilai dari dst jika tidak kosong, atau msg.dst |
| countryName | target.location.country_or_region | Nilai disalin secara 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 secara langsung |
| requestHeader.X-Forwarded-For | intermediary.ip | Ditetapkan ke IP berikutnya dari array X-Forwarded-For |
| metadata.product_name | Tetapkan ke "Bentuk" | |
| metadata.vendor_name | Disetel ke "F5" |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.