Mengumpulkan log Cloudflare
Dokumen ini menjelaskan cara menyerap log Cloudflare ke Google Security Operations menggunakan Webhook (tujuan HTTP) atau Google Cloud Storage. Cloudflare menghasilkan data operasional dalam bentuk log untuk DNS, permintaan HTTP, peristiwa Firewall, Audit, Zero Trust, dan CASB. Integrasi ini memungkinkan Anda mengirim log tersebut ke Google SecOps untuk dianalisis dan dipantau.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps.
- Akun Cloudflare Enterprise dengan Logpush diaktifkan.
- Untuk metode Webhook: Akses istimewa ke Konsol Google Cloud.
- Untuk metode GCS: Akses istimewa ke Google Cloud Storage.
Metode 1: Mengonfigurasi ekspor log Cloudflare menggunakan Webhook (tujuan HTTP)
Metode ini memungkinkan Anda melakukan streaming log Cloudflare langsung ke Google Security Operations tanpa penyimpanan perantara, sehingga mengurangi biaya dan menyederhanakan konfigurasi.
Mengonfigurasi feed Webhook di Google SecOps
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
Cloudflare Webhook). - Pilih Webhook sebagai Jenis sumber.
- Pilih Cloudflare sebagai Jenis log.
- Klik Berikutnya.
- Tentukan nilai untuk parameter input berikut:
- Pemisah pemisahan:
\n. - Namespace aset: namespace aset.
- Label penyerapan: label yang akan diterapkan ke peristiwa dari feed ini.
- Pemisah pemisahan:
- Klik Berikutnya.
- Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
- Klik Buat Kunci Rahasia untuk membuat kunci rahasia guna mengautentikasi feed ini.
- Salin dan simpan kunci rahasia karena Anda tidak dapat melihat rahasia ini lagi.
- Buka tab Detail.
- Salin URL endpoint feed dari kolom Endpoint Information.
- Klik Done.
Membuat kunci API untuk feed Webhook
- Buka halaman Credentials Google Cloud Console.
- Pilih project Anda (project yang terkait dengan instance Google SecOps Anda).
- Klik Create credentials > API key.
- Klik Edit kunci API.
- Di bagian Pembatasan API, pilih Batasi kunci.
- Di drop-down Select APIs, telusuri dan pilih Chronicle API.
- Klik Simpan.
- Salin nilai kunci API.
Mengonfigurasi tujuan HTTP Cloudflare Logpush
- Login ke dasbor Cloudflare.
- Pilih akun Enterprise atau domain yang ingin Anda gunakan dengan Logpush.
- Buka Analytics & Logs > Logs.
- Klik Create a Logpush job.
- Di bagian Pilih tujuan, pilih Tujuan HTTP.
Masukkan URL endpoint HTTP dengan parameter autentikasi:
<ENDPOINT_URL>?header_X-goog-api-key=<API_KEY>&header_X-Webhook-Access-Key=<SECRET_KEY>Ganti kode berikut:
<ENDPOINT_URL>: URL endpoint feed dari Google SecOps.<API_KEY>: kunci API dari Konsol Google Cloud (dienkode agar sesuai ketentuan URL jika berisi karakter khusus).<SECRET_KEY>: kunci rahasia dari feed Webhook (dienkode URL jika berisi karakter khusus).
Klik Lanjutkan.
Pilih set data yang akan dikirim (misalnya, Permintaan HTTP, Log DNS, Peristiwa firewall, Log audit, Log Zero Trust, Temuan CASB).
Konfigurasi tugas Logpush Anda:
- Masukkan Nama tugas.
- Di bagian Jika log cocok, konfigurasikan filter secara opsional.
- Di Kirim kolom berikut, pilih kolom yang akan disertakan.
- Pilih format stempel waktu:
- RFC 3339 (direkomendasikan untuk Google SecOps)
- Unix (detik sejak epoch)
- UnixNano (nanodetik sejak epoch)
- Konfigurasi frekuensi sampling jika diperlukan.
Klik Submit untuk membuat tugas Logpush.
Memverifikasi integrasi Webhook
Setelah konfigurasi, log akan muncul di Google SecOps dalam beberapa menit. Untuk memverifikasi:
- Buka Investigasi > Penelusuran SIEM.
- Telusuri log dengan label penyerapan yang Anda konfigurasi.
- Pastikan log Cloudflare diuraikan dengan benar.
Metode 2: Mengonfigurasi ekspor log Cloudflare menggunakan Google Cloud Storage
Membuat bucket Google Cloud Storage
- Login ke konsol Google Cloud.
- Buka halaman Cloud Storage > Buckets.
- Klik Create.
- Di halaman Buat bucket, masukkan informasi bucket Anda:
- Name: Masukkan nama unik yang memenuhi persyaratan nama bucket (misalnya,
cloudflare-data). - Jenis lokasi: Pilih jenis lokasi dan wilayah.
- Untuk mengaktifkan namespace hierarkis, klik panah peluas untuk meluaskan Optimalkan untuk beban kerja berorientasi file dan intensif data, lalu pilih Aktifkan Namespace hierarkis di bucket ini.
- Name: Masukkan nama unik yang memenuhi persyaratan nama bucket (misalnya,
- Klik Create.
Memberikan izin Cloudflare ke bucket
- Di konsol Cloud Storage, pilih bucket GCS (misalnya,
cloudflare-data). - Klik tab Permissions.
- Klik Grant access.
- Di kolom Add principals, masukkan
logpush@cloudflare-data.iam.gserviceaccount.com. - Di dropdown Assign roles, pilih Storage Object Admin.
- Klik Simpan.
Mengonfigurasi Cloudflare Logpush ke Cloud Storage
- Login ke dasbor Cloudflare.
- Pilih akun Enterprise atau domain yang ingin Anda gunakan dengan Logpush.
- Buka Analytics & Logs > Logs.
- Klik Create a Logpush job.
- Di Pilih tujuan, pilih Google Cloud Storage.
- Masukkan jalur bucket GCS Anda (misalnya,
cloudflare-data/logs/). Klik Lanjutkan.
Masukkan Token Kepemilikan, lalu klik Lanjutkan.
Pilih set data yang akan dikirim ke penyimpanan.
Konfigurasi tugas Logpush Anda:
- Masukkan Nama tugas.
- Di bagian Jika log cocok, Anda dapat memilih peristiwa yang akan disertakan dan/atau dihapus dari log Anda.
- Di Kirim kolom berikut, pilih kolom yang akan didorong.
- Pilih format stempel waktu:
- RFC 3339 (direkomendasikan untuk Google SecOps)
- Unix (detik sejak epoch)
- UnixNano (nanodetik sejak epoch)
- Konfigurasi frekuensi sampling jika diperlukan.
Klik Kirim.
Mengonfigurasi feed di Google SecOps untuk menyerap log Cloudflare dari GCS
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
Cloudflare GCS Logs). - Pilih Google Cloud Storage V2 sebagai Source type.
- Pilih Cloudflare sebagai Jenis log.
- Klik Get Service Account.
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
URI Bucket Penyimpanan: URL bucket Google Cloud Storage dalam format
gs://my-bucket/<value>/.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
- Buka Cloud Storage > Buckets.
- Klik nama bucket (misalnya,
cloudflare-data). - Buka tab Izin.
- Klik Grant access.
- Di kolom Add principals, tempelkan email akun layanan Google SecOps.
- Di dropdown Assign roles, pilih Storage Object Viewer.
- Klik Simpan.
Tabel pemetaan UDM
| Kolom log | Pemetaan UDM | Logika |
|---|---|---|
ClientIP |
read_only_udm.principal.asset.ip, read_only_udm.principal.ip |
Nilai diambil dari kolom ClientIP. |
ClientRequestHost |
read_only_udm.target.asset.hostname, read_only_udm.target.hostname |
Nilai diambil dari kolom ClientRequestHost. |
ClientRequestMethod |
read_only_udm.network.http.method |
Nilai diambil dari kolom ClientRequestMethod. |
ClientRequestURI |
read_only_udm.target.url |
Nilai diambil dari kolom ClientRequestURI. Jika kolom ClientRequestHost tidak kosong, nilai akan digabungkan dengan kolom ClientRequestHost. |
ClientSrcPort |
read_only_udm.principal.port |
Nilai diambil dari kolom ClientSrcPort. |
ClientRequestUserAgent |
read_only_udm.network.http.user_agent |
Nilai diambil dari kolom ClientRequestUserAgent. |
ClientSSLCipher |
read_only_udm.network.tls.cipher |
Nilai diambil dari kolom ClientSSLCipher. |
ClientSSLProtocol |
read_only_udm.network.tls.version |
Nilai diambil dari kolom ClientSSLProtocol. |
Country |
read_only_udm.target.location.country_or_region |
Nilai diambil dari kolom Negara. |
CreatedAt |
read_only_udm.metadata.event_timestamp |
Nilai diambil dari kolom CreatedAt. |
Datetime |
read_only_udm.metadata.event_timestamp |
Nilai diambil dari kolom Datetime. |
DestinationIP |
read_only_udm.target.asset.ip, read_only_udm.target.ip |
Nilai diambil dari kolom DestinationIP. |
DestinationPort |
read_only_udm.target.port |
Nilai diambil dari kolom DestinationPort. |
DeviceID |
read_only_udm.principal.asset_id |
Nilai diambil dari kolom DeviceID dan diberi awalan "Cloudflare:". |
DeviceName |
read_only_udm.principal.asset.hostname, read_only_udm.principal.hostname |
Nilai diambil dari kolom DeviceName. |
DstIP |
read_only_udm.target.asset.ip, read_only_udm.target.ip |
Nilai diambil dari kolom DstIP. |
DstPort |
read_only_udm.target.port |
Nilai diambil dari kolom DstPort. |
EdgeResponseBytes |
read_only_udm.network.received_bytes |
Nilai diambil dari kolom EdgeResponseBytes. |
EdgeResponseStatus |
read_only_udm.network.http.response_code |
Nilai diambil dari kolom EdgeResponseStatus. |
EdgeServerIP |
read_only_udm.target.asset.ip, read_only_udm.target.ip |
Nilai diambil dari kolom EdgeServerIP. |
Email |
read_only_udm.principal.user.email_addresses, read_only_udm.target.user.email_addresses |
Nilai diambil dari kolom Email. |
FirewallMatchesActions |
read_only_udm.security_result.action |
Nilai disetel ke "ALLOW" jika kolom FirewallMatchesAction adalah "allow", "Allow", "ALLOW", "skip", "SKIP", atau "Skip", "ALLOW_WITH_MODIFICATION" jika kolom FirewallMatchesAction adalah "challengeSolved" atau "jschallengeSolved", "BLOCK" jika kolom FirewallMatchesAction adalah "drop" atau "block", "UNKNOWN_ACTION" jika kolom FirewallMatchesAction tidak kosong. |
FirewallMatchesRuleIDs |
read_only_udm.security_result.rule_id |
Nilai diambil dari kolom FirewallMatchesRuleIDs. |
FirewallMatchesSources |
read_only_udm.security_result.rule_name |
Nilai diambil dari kolom FirewallMatchesSources. |
HTTPMethod |
read_only_udm.network.http.method |
Nilai diambil dari kolom HTTPMethod. |
HTTPHost |
read_only_udm.target.hostname |
Nilai diambil dari kolom HTTPHost. |
HTTPVersion |
read_only_udm.network.application_protocol |
Nilai diambil dari kolom HTTPVersion. Jika nilai berisi "HTTP", nilai tersebut akan diganti dengan "HTTP". |
IPAddress |
read_only_udm.target.asset.ip, read_only_udm.target.ip |
Nilai diambil dari kolom IPAddress. |
IsIsolated |
read_only_udm.about.labels, read_only_udm.security_result.about.resource.attribute.labels |
Nilai diambil dari kolom IsIsolated dan dikonversi menjadi string. |
Location |
read_only_udm.principal.location.name |
Nilai diambil dari kolom Lokasi. |
OriginIP |
read_only_udm.intermediary.ip, read_only_udm.target.asset.ip, read_only_udm.target.ip |
Nilai diambil dari kolom OriginIP. |
OriginPort |
read_only_udm.target.port |
Nilai diambil dari kolom OriginPort. |
OwnerID |
read_only_udm.target.user.product_object_id |
Nilai diambil dari kolom OwnerID. |
Policy |
read_only_udm.security_result.rule_name |
Nilai diambil dari kolom Kebijakan. |
PolicyID |
read_only_udm.security_result.rule_id |
Nilai diambil dari kolom PolicyID. |
PolicyName |
read_only_udm.security_result.rule_name |
Nilai diambil dari kolom PolicyName. |
Protocol |
read_only_udm.network.ip_protocol |
Nilai diambil dari kolom Protocol dan dikonversi menjadi huruf besar. |
QueryCategoryIDs |
read_only_udm.security_result.about.labels, read_only_udm.security_result.about.resource.attribute.labels |
Nilai diambil dari kolom QueryCategoryIDs. |
QueryName |
read_only_udm.network.dns.questions.name |
Nilai diambil dari kolom QueryName. |
QueryNameReversed |
read_only_udm.network.dns.questions.name |
Nilai diambil dari kolom QueryNameReversed. |
QuerySize |
read_only_udm.network.sent_bytes |
Nilai diambil dari kolom QuerySize. |
QueryType |
read_only_udm.network.dns.questions.type |
Nilai diambil dari kolom QueryType. Jika nilainya adalah salah satu jenis data DNS yang diketahui, nilai tersebut akan dipetakan ke nilai numerik yang sesuai. Jika tidak, nilai akan dikonversi menjadi string. |
RData |
read_only_udm.network.dns.answers |
Nilai diambil dari kolom RData. Kolom jenis dikonversi menjadi bilangan bulat yang tidak bertanda tangan. |
RayID |
read_only_udm.metadata.product_log_id |
Nilai diambil dari kolom RayID. |
Referer |
read_only_udm.network.http.referral_url |
Nilai diambil dari kolom Referer. |
RequestID |
read_only_udm.metadata.product_log_id |
Nilai diambil dari kolom RequestID. |
ResolverDecision |
read_only_udm.security_result.summary |
Nilai diambil dari kolom ResolverDecision. |
ResourceID |
read_only_udm.target.resource.id, read_only_udm.target.resource.product_object_id |
Nilai diambil dari kolom ResourceID. |
ResourceType |
read_only_udm.target.resource.resource_subtype |
Nilai diambil dari kolom ResourceType. |
SNI |
read_only_udm.network.tls.client.server_name |
Nilai diambil dari kolom SNI. |
SecurityAction |
read_only_udm.security_result.action |
Nilai ditetapkan ke "ALLOW" jika kolom SecurityAction kosong atau kolom sec_action kosong, "ALLOW_WITH_MODIFICATION" jika kolom SecurityAction adalah "challengeSolved" atau "jschallengeSolved", "BLOCK" jika kolom SecurityAction adalah "drop" atau "block". |
SecurityLevel |
read_only_udm.security_result.severity |
Nilai diambil dari kolom SecurityLevel dan dipetakan ke nilai tingkat keparahan UDM yang sesuai. |
SessionID |
read_only_udm.network.session_id |
Nilai diambil dari kolom SessionID. |
SessionStartTime |
read_only_udm.metadata.event_timestamp |
Nilai diambil dari kolom SessionStartTime. |
SourceIP |
read_only_udm.principal.asset.ip, read_only_udm.principal.ip, read_only_udm.src.asset.ip, read_only_udm.src.ip |
Nilai diambil dari kolom SourceIP. |
SourcePort |
read_only_udm.principal.port, read_only_udm.src.port |
Nilai diambil dari kolom SourcePort. |
SrcIP |
read_only_udm.principal.asset.ip, read_only_udm.principal.ip |
Nilai diambil dari kolom SrcIP. |
SrcPort |
read_only_udm.principal.port |
Nilai diambil dari kolom SrcPort. |
TemporaryAccessDuration |
read_only_udm.network.session_duration.seconds |
Nilai diambil dari kolom TemporaryAccessDuration. |
Timestamp |
read_only_udm.metadata.event_timestamp |
Nilai diambil dari kolom Stempel waktu. |
Transport |
read_only_udm.network.ip_protocol |
Nilai diambil dari kolom Transportasi dan dikonversi menjadi huruf besar. |
URL |
read_only_udm.target.url |
Nilai diambil dari kolom URL. |
UserAgent |
read_only_udm.network.http.user_agent |
Nilai diambil dari kolom UserAgent. |
UserID |
read_only_udm.principal.user.product_object_id |
Nilai diambil dari kolom UserID. |
UserUID |
read_only_udm.target.user.product_object_id |
Nilai diambil dari kolom UserUID. |
VirtualNetworkID |
read_only_udm.principal.resource.product_object_id |
Nilai diambil dari kolom VirtualNetworkID. |
WAFAction |
read_only_udm.security_result.about.labels, read_only_udm.security_result.about.resource.attribute.labels |
Nilai diambil dari kolom WAFAction. |
WAFAttackScore |
read_only_udm.security_result.about.resource.attribute.labels |
Nilai diambil dari kolom WAFAttackScore. |
WAFFlags |
read_only_udm.security_result.about.resource.attribute.labels |
Nilai diambil dari kolom WAFFlags. |
WAFProfile |
read_only_udm.security_result.about.labels, read_only_udm.security_result.about.resource.attribute.labels |
Nilai diambil dari kolom WAFProfile. |
WAFRCEAttackScore |
read_only_udm.security_result.about.resource.attribute.labels |
Nilai diambil dari kolom WAFRCEAttackScore. |
WAFRuleID |
read_only_udm.security_result.about.labels, read_only_udm.security_result.about.resource.attribute.labels, read_only_udm.security_result.threat_id |
Nilai diambil dari kolom WAFRuleID. |
WAFRuleMessage |
read_only_udm.security_result.rule_name, read_only_udm.security_result.threat_name |
Nilai diambil dari kolom WAFRuleMessage. |
WAFSQLiAttackScore |
read_only_udm.security_result.about.resource.attribute.labels |
Nilai diambil dari kolom WAFSQLiAttackScore. |
WAFXSSAttackScore |
read_only_udm.security_result.about.resource.attribute.labels |
Nilai diambil dari kolom WAFXSSAttackScore. |
ZoneID |
read_only_udm.additional.fields |
Nilai diambil dari kolom ZoneID. |
read_only_udm.metadata.log_type |
Nilai ditetapkan ke "CLOUDFLARE". | |
read_only_udm.metadata.product_name |
Nilai ditetapkan ke "Cloudflare Gateway DNS" jika log adalah log DNS, "Cloudflare Gateway HTTP" jika log adalah log HTTP Gateway, "Cloudflare Audit" jika log adalah log Audit, atau "Web Application Firewall" jika tidak. | |
read_only_udm.metadata.vendor_name |
Nilai ditetapkan ke "Cloudflare". | |
read_only_udm.network.application_protocol |
Nilai ditetapkan ke "DNS" jika log adalah log DNS, "HTTP" jika kolom HTTPVersion berisi "HTTP", atau nilai kolom Protocol yang dikonversi menjadi huruf besar jika kolom Protocol tidak kosong dan bukan "tls" atau "TLS". | |
read_only_udm.network.direction |
Nilai ditetapkan ke "OUTBOUND" jika kolom EgressIP tidak kosong. | |
read_only_udm.network.http.parsed_user_agent |
Nilai diambil dari kolom UserAgent atau ClientRequestUserAgent dan diuraikan menggunakan filter parseduseragent. | |
read_only_udm.extensions.auth.type |
Nilai ditetapkan ke "MACHINE" jika kolom Action adalah "login" atau "logout". | |
read_only_udm.metadata.event_type |
Nilai ditetapkan ke "NETWORK_DNS" jika log adalah log DNS, "NETWORK_CONNECTION" jika log adalah log HTTP Gateway, "USER_RESOURCE_ACCESS" jika log adalah log Audit dan kolom ActorIP dan ActorEmail kosong, "USER_RESOURCE_UPDATE_CONTENT" jika log adalah log Audit dan kolom ResourceType dan newvalue tidak kosong, "USER_LOGIN" jika kolom Action adalah "login", "USER_LOGOUT" jika kolom Action adalah "logout", "USER_RESOURCE_ACCESS" jika kolom Email tidak kosong dan cocok dengan format alamat email, atau "NETWORK_CONNECTION" jika kolom EgressIP dan SourceIP tidak kosong atau kolom OriginIP dan SourceIP tidak kosong. | |
read_only_udm.target.file.mime_type |
Nilai diambil dari kolom EdgeResponseContentType. | |
read_only_udm.target.location.country_or_region |
Nilai diambil dari kolom Negara. | |
read_only_udm.target.resource.id |
Nilai diambil dari kolom AccountID atau kolom ResourceID. | |
read_only_udm.target.resource.product_object_id |
Nilai diambil dari kolom AccountID, kolom AppUUID, atau kolom ResourceID. | |
read_only_udm.target.user.product_object_id |
Nilai diambil dari kolom OwnerID atau kolom UserUID. |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.