Mengumpulkan log Cloudflare Page Shield
Dokumen ini menjelaskan cara menyerap log Cloudflare Page Shield ke Google Security Operations menggunakan Amazon S3.
Page Shield membantu mengelola resource yang dimuat oleh pengunjung situs Anda, termasuk skrip, koneksinya, dan cookie, serta memicu notifikasi peringatan saat resource berubah atau dianggap berbahaya.
Sebelum memulai
- Instance Google SecOps
- Akun Cloudflare dengan Page Shield diaktifkan
- Akses istimewa ke dasbor Cloudflare
- Akses istimewa ke AWS (S3, IAM)
Opsi ini menggunakan Cloudflare Logpush untuk mengekspor peristiwa Page Shield ke Amazon S3, yang kemudian di-ingest oleh Google SecOps.
Mengaktifkan Page Shield
- Login ke dasbor Cloudflare.
- Pilih akun dan domain Anda.
- Buka Security > Page Shield.
- Klik Aktifkan Page Shield.
Buat bucket Amazon S3
- Buka konsol Amazon S3.
- Klik Create Bucket.
- Berikan detail konfigurasi berikut:
- Nama Bucket: Masukkan nama yang bermakna untuk bucket (misalnya,
cloudflare-pageshield-logs). - Region: Pilih region AWS pilihan Anda (misalnya,
us-east-1).
- Nama Bucket: Masukkan nama yang bermakna untuk bucket (misalnya,
- Klik Buat.
- Simpan nama bucket dan region untuk referensi di masa mendatang.
Membuat pengguna IAM dengan akses S3
- Buka IAM console.
- Klik Pengguna > Tambahkan pengguna.
- Masukkan nama pengguna (misalnya,
chronicle-s3-user). - Pilih Akses terprogram.
- Klik Berikutnya: Izin.
- Pilih Lampirkan kebijakan yang ada secara langsung.
- Telusuri dan pilih kebijakan AmazonS3FullAccess.
- Klik Berikutnya: Tanda.
- Klik Berikutnya: Tinjau.
- Klik Buat pengguna.
- Klik Download .csv file untuk menyimpan Access Key ID dan Secret Access Key.
Mengonfigurasi kebijakan bucket S3 untuk Cloudflare
- Di konsol Amazon S3, pilih bucket Anda.
- Klik Izin > Kebijakan bucket.
- Klik Edit.
Tempel kebijakan berikut, dengan mengganti
<BUCKET_NAME>dengan nama bucket Anda:{ "Id": "Policy1506627184792", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1506627150918", "Action": ["s3:PutObject"], "Effect": "Allow", "Resource": "arn:aws:s3:::<BUCKET_NAME>/*", "Principal": { "AWS": ["arn:aws:iam::391854517948:user/cloudflare-logpush"] } } ] }Klik Simpan perubahan.
Buat tugas Cloudflare Logpush
- Login ke dasbor Cloudflare.
- Pilih akun dan domain Anda.
- Buka Analytics & Logs > Logs.
- Klik Create a Logpush job.
- Di Pilih tujuan, pilih Amazon S3.
- Masukkan informasi tujuan berikut:
- Nama bucket: Masukkan nama bucket S3 Anda (misalnya,
cloudflare-pageshield-logs). - Region bucket: Pilih region yang cocok dengan bucket S3 Anda.
- Jalur bucket (opsional): Masukkan awalan jalur (misalnya,
pageshield/).
- Nama bucket: Masukkan nama bucket S3 Anda (misalnya,
- Klik Lanjutkan.
- Untuk membuktikan kepemilikan, Cloudflare akan mengirimkan file ke tujuan yang Anda tentukan. Untuk menemukan token, pilih tombol Buka di tab Ringkasan file tantangan kepemilikan, lalu tempelkan ke dasbor Cloudflare untuk memverifikasi akses Anda ke bucket. Masukkan Token Kepemilikan, lalu pilih Lanjutkan.
- Di Pilih set data, pilih Peristiwa Page Shield.
- Klik Berikutnya.
- Konfigurasi tugas logpush Anda:
- Nama tugas: Masukkan nama deskriptif (misalnya,
pageshield-to-s3). - Jika log cocok: Biarkan kosong untuk menyertakan semua peristiwa atau konfigurasi filter sesuai kebutuhan.
- Kirim kolom berikut: Pilih Semua kolom atau pilih kolom tertentu.
- Nama tugas: Masukkan nama deskriptif (misalnya,
- Klik Kirim.
Mengonfigurasi feed di Google SecOps untuk menyerap log Page Shield
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Di halaman berikutnya, klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
Cloudflare Page Shield S3). - Pilih Amazon S3 V2 sebagai Jenis sumber.
- Pilih Cloudflare Page Shield sebagai Jenis log.
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
URI S3: Masukkan URI bucket dalam format:
s3://<BUCKET_NAME>/<BUCKET_PATH>/Opsi penghapusan sumber: Pilih opsi penghapusan sesuai preferensi Anda:
- Jangan pernah: Tidak pernah menghapus file apa pun setelah transfer.
- 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.
ID Kunci Akses: Kunci akses pengguna dengan akses ke bucket S3.
Kunci Akses Rahasia: Kunci rahasia pengguna dengan akses ke bucket S3.
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.
Tabel pemetaan UDM
| Kolom Log | Pemetaan UDM | Logika |
|---|---|---|
| URLContainsCDNCGIPath | event.idm.read_only_udm.additional.fields.CGI_label | Nilai diambil dari URLContainsCDNCGIPath, ditetapkan sebagai string_value dalam label dengan kunci "CGI" |
| Tindakan | event.idm.read_only_udm.additional.fields.action_label | Nilai diambil dari Tindakan, ditetapkan sebagai string_value dalam label dengan kunci "action" |
| resource.first_page_url | event.idm.read_only_udm.additional.fields.first_page_label | Nilai diambil dari resource.first_page_url, ditetapkan sebagai string_value dalam label dengan kunci "first_page_url" |
| resource.last_page_url | event.idm.read_only_udm.additional.fields.last_page_label | Nilai diambil dari resource.last_page_url, ditetapkan sebagai string_value dalam label dengan kunci "last_page_url" |
| nama | event.idm.read_only_udm.additional.fields.name_label | Nilai diambil dari nama, ditetapkan sebagai string_value dalam label dengan kunci "name" |
| ts | event.idm.read_only_udm.metadata.event_timestamp | Dikonversi dari ts (UNIX) menjadi stempel waktu |
| event.idm.read_only_udm.metadata.event_type | Diperoleh berdasarkan has_principal, has_target, has_target_user: NETWORK_CONNECTION jika principal dan target; USER_UNCATEGORIZED jika target_user; STATUS_UPDATE jika principal; selain itu GENERIC_EVENT | |
| resource.url | event.idm.read_only_udm.network.http.referral_url | Nilai diambil dari resource.url |
| Host | event.idm.read_only_udm.principal.asset.hostname | Nilai yang diambil dari Host atau host.hostname |
| Host | event.idm.read_only_udm.principal.hostname | Nilai yang diambil dari Host atau host.hostname |
| alert_type | event.idm.read_only_udm.principal.resource.attribute.labels.alert_type_label | Nilai diambil dari alert_type, ditetapkan sebagai nilai dalam label dengan kunci "alert_type" |
| resource.cryptomining_score | event.idm.read_only_udm.principal.resource.attribute.labels.crypto_label | Nilai diambil dari resource.cryptomining_score, ditetapkan sebagai nilai dalam label dengan kunci "cryptominingscore%{index2}" |
| resource.dataflow_score | event.idm.read_only_udm.principal.resource.attribute.labels.dataflow_label | Nilai diambil dari resource.dataflow_score, ditetapkan sebagai nilai dalam label dengan kunci "dataflowscore%{index2}" |
| policie.description | event.idm.read_only_udm.principal.resource.attribute.labels.desc_label | Nilai diambil dari policie.description, ditetapkan sebagai nilai dalam label dengan kunci "description_%{index}" |
| version.fetched_at | event.idm.read_only_udm.principal.resource.attribute.labels.fetched_at_label | Nilai diambil dari version.fetched_at, ditetapkan sebagai nilai dalam label dengan kunci "fetchedat%{index2}" |
| version.hash | event.idm.read_only_udm.principal.resource.attribute.labels.hash_label | Nilai diambil dari version.hash, ditetapkan sebagai nilai dalam label dengan kunci "hash_%{index2}" |
| policie.id | event.idm.read_only_udm.principal.resource.attribute.labels.id_label | Nilai diambil dari policie.id, ditetapkan sebagai nilai dalam label dengan kunci "policyid%{index}" |
| data.options.remove_dashboard_links | event.idm.read_only_udm.principal.resource.attribute.labels.remove_dash_label | Nilai diambil dari data.options.remove_dashboard_links, ditetapkan sebagai nilai dalam label dengan kunci "remove_dashboard_links" |
| resource.resource_type | event.idm.read_only_udm.principal.resource.attribute.labels.res_type_label | Nilai diambil dari resource.resource_type, ditetapkan sebagai nilai dalam label dengan kunci "resourcetype%{index2}" |
| data.type | event.idm.read_only_udm.principal.resource.attribute.labels.type_label | Nilai diambil dari data.type, ditetapkan sebagai nilai dalam label dengan kunci "type" |
| data.zones | event.idm.read_only_udm.principal.resource.attribute.labels.zones_label | Nilai diambil dari data.zones, ditetapkan sebagai nilai dalam label dengan kunci "zones" |
| resource.id | event.idm.read_only_udm.principal.resource.id | Nilai diambil dari resource.id |
| PageURL | event.idm.read_only_udm.principal.url | Nilai diambil dari PageURL |
| account_id | event.idm.read_only_udm.principal.user.product_object_id | Nilai diambil dari account_id |
| policy_id | event.idm.read_only_udm.security_result.detection_fields.policy_id_label | Nilai diambil dari policy_id, ditetapkan sebagai nilai dalam label dengan kunci "policy_id" |
| policy_name | event.idm.read_only_udm.security_result.detection_fields.policy_name_label | Nilai diambil dari policy_name, ditetapkan sebagai nilai dalam label dengan kunci "policy_name" |
| teks | event.idm.read_only_udm.security_result.description | Nilai yang diambil dari teks |
| resource.first_seen_at | event.idm.read_only_udm.security_result.first_discovered_time | Dikonversi dari resource.first_seen_at ke stempel waktu ISO8601 |
| PolicyID | event.idm.read_only_udm.security_result.rule_name | Nilai diambil dari PolicyID |
| data.severity | event.idm.read_only_udm.security_result.severity | Diperoleh dari data.severity: jika "INFO" → "INFORMATIONAL"; jika "WARN" → "MEDIUM"; jika tidak, "UNKNOWN_SEVERITY" |
| URL | event.idm.read_only_udm.target.url | Nilai diambil dari URL |
| URLHost | event.idm.read_only_udm.target.user.email_addresses | Nilai diambil dari URLHost jika cocok dengan pola email |
Perlu bantuan lebih lanjut? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.