Mengumpulkan Google Cloud log Secure Web Proxy
Dokumen ini menjelaskan cara menyerap log Google Cloud Secure Web Proxy ke Google Security Operations menggunakan Google Cloud Storage V2.
Secure Web Proxy adalah layanan cloud-first yang membantu Anda mengamankan traffic web keluar (HTTP dan HTTPS). Layanan ini menyediakan solusi proxy terkelola yang memungkinkan kebijakan yang fleksibel dan terperinci berdasarkan identitas cloud-first dan aplikasi web. Secure Web Proxy mengidentifikasi traffic yang tidak sesuai dengan kebijakan dan mencatatnya ke Cloud Logging, sehingga Anda dapat memantau penggunaan internet, menemukan ancaman terhadap jaringan, dan merespons insiden keamanan.
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
- Secure Web Proxy aktif dan dikonfigurasi di lingkungan Google Cloud Anda
- Akses istimewa ke Google Cloud dan izin yang sesuai untuk mengakses log Secure Web Proxy
- Izin untuk membuat dan mengelola sink Cloud Logging
Membuat bucket Google Cloud Storage
Menggunakan Konsol Google Cloud
- 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, Google Cloud-swp-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.
Menggunakan alat command line gcloud
Atau, buat bucket menggunakan perintah
gcloud:gcloud storage buckets create gs://gcp-swp-logs \ --location=us-central1 \ --default-storage-class=STANDARD- Ganti:
gcp-swp-logs: Nama bucket yang Anda inginkan (unik secara global).us-central1: Region pilihan Anda (misalnya,us-central1,europe-west1).
- Ganti:
Mengonfigurasi Cloud Logging untuk mengekspor log Secure Web Proxy ke GCS
Secure Web Proxy secara otomatis mencatat log transaksi proxy ke Cloud Logging. Untuk mengekspor log ini ke Cloud Storage, Anda harus membuat sink Cloud Logging.
Menggunakan Konsol Google Cloud
- Di Konsol Google Cloud, buka Logging > Log Router.
- Klik Create sink.
- Berikan detail konfigurasi berikut:
- Sink name: Masukkan nama deskriptif (misalnya,
swp-export-sink). - Deskripsi wastafel: Deskripsi opsional.
- Sink name: Masukkan nama deskriptif (misalnya,
- Klik Berikutnya.
- Di bagian Pilih layanan sink:
- Sink service: Pilih Bucket Cloud Storage.
- Pilih bucket Cloud Storage: Pilih
gcp-swp-logsdari dropdown.
- Klik Berikutnya.
Di bagian Pilih log untuk menyertakan sink, masukkan kueri filter berikut:
logName="projects/<YOUR_PROJECT_ID>/logs/networkservices.googleapis.com/gateway_requests"- Ganti
<YOUR_PROJECT_ID>dengan ID project Google Cloud Anda.
- Ganti
Klik Berikutnya.
Tinjau konfigurasi, lalu klik Create sink.
Setelah membuat sink, Cloud Logging akan menampilkan identitas penulis sink (email akun layanan). Salin email akun layanan ini untuk langkah berikutnya.
Menggunakan alat command line gcloud
Atau, buat sink menggunakan perintah
gcloud:gcloud logging sinks create swp-export-sink \ storage.googleapis.com/gcp-swp-logs \ --log-filter='logName="projects/<YOUR_PROJECT_ID>/logs/networkservices.googleapis.com/gateway_requests"'- Ganti:
swp-export-sink: Nama sink yang Anda inginkan.gcp-swp-logs: Nama bucket GCS Anda.<YOUR_PROJECT_ID>: ID project Google Cloud Anda.
- Ganti:
Memberikan izin ke akun layanan Cloud Logging
Akun layanan identitas penulis sink Cloud Logging memerlukan izin untuk menulis log ke bucket GCS Anda.
Menggunakan Konsol Google Cloud
- Buka Cloud Storage > Buckets.
- Klik nama bucket Anda (
gcp-swp-logs). - Buka tab Izin.
- Klik Grant access.
- Berikan detail konfigurasi berikut:
- Tambahkan prinsipal: Tempelkan email akun layanan identitas penulis sink Cloud Logging (misalnya,
serviceAccount:service-123456789@gcp-sa-logging.iam.gserviceaccount.com). - Tetapkan peran: Pilih Storage Object Admin.
- Tambahkan prinsipal: Tempelkan email akun layanan identitas penulis sink Cloud Logging (misalnya,
Klik Simpan.
Menggunakan alat command line gcloud
Atau, berikan izin menggunakan perintah
gcloud:gcloud storage buckets add-iam-policy-binding gs://gcp-swp-logs \ --member="serviceAccount:<LOGGING_SERVICE_ACCOUNT_EMAIL>" \ --role="roles/storage.objectAdmin"- Ganti:
gcp-swp-logs: Nama bucket Anda.<LOGGING_SERVICE_ACCOUNT_EMAIL>: Email akun layanan identitas penulis sink Cloud Logging.
- Ganti:
Menggunakan alat command line gsutil (lama)
Tetapkan peran Object Admin ke akun layanan logging Anda:
gsutil iam ch serviceAccount:<LOGGING_SERVICE_ACCOUNT_EMAIL>:objectAdmin \ gs://gcp-swp-logs
Verifikasi izin
Untuk memverifikasi bahwa izin telah diberikan dengan benar:
gcloud storage buckets get-iam-policy gs://gcp-swp-logs \ --flatten="bindings[].members" \ --filter="bindings.role:roles/storage.objectAdmin"
Anda akan melihat email akun layanan Cloud Logging di output.
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.
Mengonfigurasi feed di Google SecOps untuk menyerap log GCP Secure Web Proxy
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
GGoogle CloudCP Secure Web Proxy Logs). - Pilih Google Cloud Storage V2 sebagai Source type.
Pilih GCP Secure Web Proxy 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.
Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
- URL bucket penyimpanan: Masukkan URI bucket GCS dengan jalur awalan:
gs://gcp-swp-logs/- Ganti:
gcp-swp-logs: 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.
Menggunakan Konsol Google Cloud
- Buka Cloud Storage > Buckets.
- Klik nama bucket Anda.
- 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.
Menggunakan alat command line gcloud
Atau, berikan izin menggunakan perintah
gcloud:gcloud storage buckets add-iam-policy-binding gs://gcp-swp-logs \ --member="serviceAccount:<SECOPS_SERVICE_ACCOUNT_EMAIL>" \ --role="roles/storage.objectViewer"- Ganti:
gcp-swp-logs: Nama bucket Anda.<SECOPS_SERVICE_ACCOUNT_EMAIL>: Email akun layanan Google SecOps.
- Ganti:
Menggunakan alat command line gsutil (lama)
Jalankan perintah berikut untuk memberikan izin Pelihat Objek ke akun layanan SecOps:
gsutil iam ch serviceAccount:<SECOPS_SERVICE_ACCOUNT_EMAIL>:objectViewer \ gs://gcp-swp-logs
Verifikasi izin
Untuk memverifikasi bahwa izin telah diberikan dengan benar:
gcloud storage buckets get-iam-policy gs://gcp-swp-logs \ --flatten="bindings[].members" \ --filter="bindings.role:roles/storage.objectViewer"
Anda akan melihat email akun layanan Google SecOps di output.
Tabel pemetaan UDM
| Kolom Log | Pemetaan UDM | Logika |
|---|---|---|
| httpRequest.latency, jsonPayload.@type, logName | additional.fields | Digabungkan dengan latency_label (kunci "HTTPRequest Latency", nilai dari latensi), type_label (kunci "Log Type", nilai dari @type), logname (kunci "Log Name", nilai dari logName) |
| receiveTimestamp | metadata.collected_timestamp | Diuraikan sebagai stempel waktu RFC3339 |
| metadata.event_type | Ditetapkan ke NETWORK_HTTP jika has_principal benar, has_target benar, protokol cocok dengan (?i)http; NETWORK_CONNECTION jika has_principal benar, has_target benar, network != ""; USER_LOGIN jika has_principal benar, has_target benar, has_principal_user benar; STATUS_UPDATE jika has_principal benar; GENERIC_EVENT jika tidak | |
| insertId | metadata.product_log_id | Nilai disalin secara langsung |
| httpRequest.protocol | network.application_protocol | Protokol yang diekstrak menggunakan pola grok %{DATA:protocol}/%{INT:http_version}, ditetapkan jika dalam ["HTTP","HTTPS"] |
| httpRequest.protocol | network.application_protocol_version | Mengekstrak http_version menggunakan pola grok %{DATA:protocol}/%{INT:http_version} |
| httpRequest.requestMethod | network.http.method | Nilai disalin secara langsung |
| httpRequest.userAgent | network.http.parsed_user_agent | Nilai disalin langsung, dikonversi ke parseduseragent |
| httpRequest.status | network.http.response_code | Dikonversi menjadi string, lalu menjadi bilangan bulat |
| httpRequest.userAgent | network.http.user_agent | Nilai disalin secara langsung |
| httpRequest.responseSize | network.received_bytes | Nilai disalin langsung, dikonversi menjadi uinteger |
| httpRequest.requestSize | network.sent_bytes | Nilai disalin langsung, dikonversi menjadi uinteger |
| httpRequest.serverIp | principal.asset.ip | Mengekstrak IP menggunakan pola grok %{IP:server_ip}, ditetapkan jika tidak kosong |
| httpRequest.serverIp | principal.ip | Mengekstrak IP menggunakan pola grok %{IP:server_ip}, ditetapkan jika tidak kosong |
| jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].action | security_result.action | Disetel ke ALLOW jika rule.action == ALLOW, BLOCK jika rule.action == DENIED |
| jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].action | security_result.action_details | Nilai disalin langsung dari rule.action |
| jsonPayload.enforcedGatewaySecurityPolicy.requestWasTlsIntercepted, resource.labels.gateway_name, resource.labels.resource_container, resource.labels.gateway_type | security_result.detection_fields | Digabungkan dengan tls_intercepted_label (kunci "requestWasTlsIntercepted", nilai dari requestWasTlsIntercepted), gateway_name_label (kunci "gateway-name", nilai dari gateway_name), resource_container_label (kunci "resource_container", nilai dari resource_container), gateway_type_label (kunci "gateway-type", nilai dari gateway_type) |
| jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].name | security_result.rule_name | Nilai disalin secara langsung |
| tingkat keseriusan, | security_result.severity | Ditetapkan ke CRITICAL jika severity == CRITICAL; ERROR jika severity == ERROR; HIGH jika severity in [ALERT, EMERGENCY]; INFORMATIONAL jika severity in [INFO, NOTICE]; LOW jika severity == DEBUG; MEDIUM jika severity == WARNING; UNKNOWN_SEVERITY else |
| jsonPayload.enforcedGatewaySecurityPolicy.hostname | target.asset.hostname | Nilai disalin secara langsung |
| httpRequest.remoteIp | target.asset.ip | Mengekstrak IP menggunakan pola grok %{IP:remote_ip}, ditetapkan jika tidak kosong |
| jsonPayload.enforcedGatewaySecurityPolicy.hostname | target.hostname | Nilai disalin secara langsung |
| httpRequest.remoteIp | target.ip | Mengekstrak IP menggunakan pola grok %{IP:remote_ip}, ditetapkan jika tidak kosong |
| resource.labels.location | target.resource.attribute.cloud.availability_zone | Nilai disalin secara langsung |
| resource.labels.network_name, resource.type | target.resource.attribute.labels | Digabungkan dengan rc_network_name_label (kunci "rc_network_name", nilai dari network_name), resource_type (kunci "Resource Type", nilai dari resource.type) |
| httpRequest.requestUrl | target.url | Nilai disalin secara langsung |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.