Mengumpulkan log Cloudflare

Didukung di:

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, HTTP, Audit, Zero Trust, dan CASB. Integrasi ini memungkinkan Anda mengirim log tersebut ke Google SecOps untuk dianalisis dan dipantau. Parser pertama-tama menginisialisasi serangkaian kolom kosong, lalu mem-parsing log Cloudflare berformat JSON, dan menghapus pesan yang bukan JSON valid. Kemudian, kode menggunakan logika bersyarat berdasarkan keberadaan dan nilai kolom tertentu untuk menentukan produk Cloudflare dan jenis peristiwa, serta mengisi kolom Model Data Terpadu (UDM) yang sesuai.

Sebelum memulai

Pastikan Anda memenuhi prasyarat berikut:

  • Instance Google SecOps.
  • Akun Cloudflare Enterprise dengan LogPush diaktifkan.
  • Untuk metode Webhook: Akses istimewa ke konsol Google Cloud .
  • Untuk metode Google Cloud Storage: 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 SecOps tanpa penyimpanan perantara.

Mengonfigurasi feed Webhook di Google SecOps

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan baru.
  3. Di kolom Nama feed, masukkan nama untuk feed (misalnya, Cloudflare Webhook).
  4. Pilih Webhook sebagai Jenis sumber.
  5. Pilih Cloudflare sebagai Jenis log.
  6. Klik Berikutnya.
  7. Tentukan nilai untuk parameter input berikut:
    • Pemisah pemisahan: \n.
    • Namespace aset: Namespace aset.
    • Label penyerapan: Label yang akan diterapkan ke peristiwa dari feed ini.
  8. Klik Berikutnya.
  9. Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
  10. Klik Buat Kunci Rahasia untuk membuat kunci rahasia guna mengautentikasi feed ini.
  11. Salin dan simpan kunci rahasia karena Anda tidak dapat melihat rahasia ini lagi.
  12. Buka tab Detail.
  13. Salin URL endpoint feed dari kolom Endpoint Information.
  14. Klik Selesai.

Membuat kunci API untuk feed Webhook

  1. Buka Google Cloud konsol > APIs & services > Credentials.
  2. Klik Create credentials, lalu pilih API key.
  3. Klik Edit API key.
  4. Di bagian Pembatasan API, pilih Batasi kunci.
  5. Pilih Google SecOps API dari daftar.
  6. Klik Simpan.
  7. Salin nilai kunci API.

Mengonfigurasi tujuan HTTP Cloudflare LogPush

  1. Login ke dasbor Cloudflare.
  2. Pilih akun Enterprise atau domain yang ingin Anda gunakan dengan LogPush.
  3. Buka Analytics & Logs > Logpush.
  4. Klik Buat tugas Logpush.
  5. Di Pilih tujuan, pilih Tujuan HTTP.
  6. 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 URL jika berisi karakter khusus).
    • <SECRET_KEY>: kunci rahasia dari feed Webhook (dienkode URL jika berisi karakter khusus).
  7. Klik Lanjutkan.

  8. Pilih set data yang akan dikirim (misalnya, Permintaan HTTP, DNS, Audit, Zero Trust, CASB).

  9. Konfigurasi tugas logpush Anda:

    • Masukkan Nama tugas.
    • Opsional: Di bagian Jika log cocok, konfigurasikan filter.
    • Di Kirim kolom berikut, pilih kolom yang akan disertakan.
    • Pilih format stempel waktu (direkomendasikan RFC3 339).
    • Konfigurasi frekuensi sampling jika diperlukan.
  10. Klik Submit untuk membuat tugas logpush.

Memverifikasi integrasi webhook

Setelah konfigurasi, log akan muncul di Google SecOps dalam beberapa menit. Untuk memverifikasi:

  1. Buka Investigasi > Penelusuran SIEM.
  2. Telusuri log dengan label penyerapan yang Anda konfigurasi.
  3. Pastikan log Cloudflare diuraikan dengan benar.

Metode 2: Mengonfigurasi ekspor log Cloudflare menggunakan Google Cloud Storage

Konfigurasi Cloudflare untuk mengirimkan log ke sana, yang melibatkan pemberian izin yang diperlukan kepada Cloudflare.

Buat Google Cloud Bucket

  1. Login ke Google Cloud console.
  2. Buka halaman Cloud Storage Buckets.
  3. Klik Buat.
  4. Di halaman Buat bucket, masukkan informasi bucket Anda:
    • Nama: 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 Optimize for file oriented and data-intensive workloads, lalu pilih Enable Hierarchical namespace on this bucket.
  5. Klik Buat.

Memberikan izin ke bucket

  1. Di konsol Cloud Storage, pilih bucket yang sebelumnya Anda buat.
  2. Klik tab Izin.
  3. Klik Grant access.
  4. Tambahkan akun logpush@cloudflare-data.iam.gserviceaccount.com dengan izin Storage Object Admin.
  5. Klik Simpan.

Mengonfigurasi Cloudflare LogPush ke Google Cloud Storage

  1. Login ke dasbor Cloudflare.
  2. Pilih akun Enterprise atau domain yang ingin Anda gunakan dengan LogPush.
  3. Buka Analytics & Logs > Logpush.
  4. Klik Buat tugas Logpush.
  5. Di Pilih tujuan, pilih Google Cloud Storage.
  6. Masukkan jalur bucket Google Cloud Storage Anda (misalnya, gs://cloudflare-data/logs/).
  7. Klik Lanjutkan.

  8. Masukkan Token Kepemilikan, lalu klik Lanjutkan.

  9. Pilih set data yang akan dikirim ke penyimpanan.

  10. Konfigurasi tugas logpush Anda:

    • Masukkan Nama tugas.
    • Di bagian Jika log cocok, Anda dapat memilih peristiwa yang akan disertakan atau dihapus dari log Anda.
    • Di Send the following fields, pilih log yang akan dikirim.
    • Pilih format stempel waktu (direkomendasikan RFC 339).
    • Konfigurasi frekuensi sampling jika diperlukan.
  11. Klik Kirim.

Mengonfigurasi feed di Google SecOps untuk menyerap log Cloudflare dari Google Cloud Storage

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan baru.
  3. Di kolom Nama feed, masukkan nama untuk feed (misalnya, Cloudflare GCS Logs).
  4. Pilih Google Cloud Storage V2 sebagai Source type.
  5. Pilih Cloudflare sebagai Jenis log.
  6. Klik Get Service Account.
  7. Klik Berikutnya.
  8. Tentukan nilai untuk parameter input berikut:

    • URI Bucket Penyimpanan:URL bucket Google Cloud dalam format gs://my-bucket/<value>/. URL ini harus diakhiri dengan garis miring (/).
    • Opsi penghapusan sumber: Pilih opsi penghapusan sesuai preferensi Anda.
    • 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.
  9. Klik Berikutnya.

  10. Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.

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.
Negara 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 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.
Lokasi 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.
Kebijakan 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.
Protokol 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 Perujuk.
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.
Stempel waktu 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.