Mengumpulkan log AWS WAF
Dokumen ini menjelaskan cara mengumpulkan log AWS Web Application Firewall (WAF) dengan menyiapkan feed Google Security Operations. Parser mengubah log berformat JSON mentah menjadi format terstruktur yang sesuai dengan UDM Google SecOps. Proses ini mengekstrak kolom seperti alamat IP, URL, agen pengguna, dan detail aturan keamanan, lalu memetakannya ke kolom UDM yang sesuai untuk representasi dan analisis yang konsisten.
Sebelum memulai
*Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps
- Akses istimewa ke AWS
Mengonfigurasi bucket Amazon S3
- Buat bucket Amazon S3 dengan mengikuti panduan pengguna ini: Membuat bucket
- Simpan Nama dan Region bucket untuk digunakan nanti.
- Buat pengguna dengan mengikuti panduan pengguna ini: Membuat pengguna IAM.
- Pilih Pengguna yang dibuat.
- Pilih tab Kredensial keamanan.
- Klik Create Access Key di bagian Access Keys.
- Pilih Layanan pihak ketiga sebagai Kasus penggunaan.
- Klik Berikutnya.
- Opsional: tambahkan tag deskripsi.
- Klik Create access key.
- Klik Download CSV file untuk menyimpan Access Key dan Secret Access Key untuk digunakan nanti.
- Klik Selesai.
- Pilih tab Izin.
- Klik Tambahkan izin di bagian Kebijakan izin.
- Pilih Tambahkan izin.
- Pilih Lampirkan kebijakan secara langsung.
- Telusuri dan pilih kebijakan AmazonS3FullAccess.
- Klik Berikutnya.
- Klik Add permissions.
Membuat ACL web WAF (Daftar Kontrol Akses)
Jika belum menyiapkan AWS WAF, Anda harus membuat ACL web WAF (Daftar Kontrol Akses). Untuk penyiapan yang sudah ada, Anda dapat langsung melanjutkan ke prosedur berikutnya.
- Di Konsol AWS, telusuri dan pilih AWS WAF & Shield.
- Klik Create web ACL.
- Berikan setelan berikut:
- Nama: Beri nama ACL (misalnya,
my-waf-web-acl
). - Region: Pilih region tempat Anda ingin menerapkan WAF.
- Metrik CloudWatch: Aktifkan pengumpulan metrik untuk melacak aktivitas dan aturan yang dipicu.
- Nama: Beri nama ACL (misalnya,
- Setelah dibuat, pilih ACL web yang ingin Anda aktifkan pencatatannya.
Cara mengonfigurasi Logging AWS WAF
- Di AWS WAF Console, buka tab Logging di ACL web Anda.
- Klik Aktifkan Logging.
- Pilih Amazon S3 sebagai tujuan untuk log Anda.
- Pilih bucket S3 yang dibuat sebelumnya untuk menyimpan log.
- Opsional: konfigurasikan awalan log untuk mengatur log (misalnya,
waf-logs/
). - Klik Simpan.
Memverifikasi Izin untuk Bucket S3
Pastikan bucket S3 memiliki izin yang tepat agar AWS WAF dapat menulis log.
- Buka Konsol S3.
- Pilih bucket tempat log akan disimpan.
Di tab Permissions, tambahkan Kebijakan Bucket berikut untuk mengizinkan AWS WAF menulis log:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "wafv2.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::your-log-bucket-name/*" } ] }
- Klik Simpan.
Menyiapkan feed
Ada dua titik entri berbeda untuk menyiapkan feed di platform Google SecOps:
- Setelan SIEM > Feed > Tambahkan Baru
- Hub Konten > Paket Konten > Mulai
Cara menyiapkan feed AWS WAF
- Klik paket Amazon Cloud Platform.
- Cari jenis log AWS WAF.
Tentukan nilai di kolom berikut.
- Jenis Sumber: Amazon SQS V2
- Nama Antrean: Nama antrean SQS yang akan dibaca
- URI S3: URI bucket.
s3://your-log-bucket-name/
- Ganti
your-log-bucket-name
dengan nama sebenarnya bucket S3 Anda.
- Ganti
Opsi penghapusan sumber: Pilih opsi penghapusan sesuai dengan preferensi penyerapan Anda.
Usia File Maksimum: Menyertakan file yang diubah dalam beberapa hari terakhir. Defaultnya adalah 180 hari.
ID Kunci Akses Antrean SQS: Kunci akses akun yang berupa string alfanumerik 20 karakter.
Kunci Akses Rahasia Antrean SQS: Kunci akses akun yang berupa string alfanumerik 40 karakter.
Opsi lanjutan
- Nama Feed: Nilai yang telah diisi otomatis yang mengidentifikasi feed.
- Namespace Aset: Namespace yang terkait dengan feed.
- Label Penyerapan: Label yang diterapkan ke semua peristiwa dari feed ini.
Klik Buat feed.
Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi beberapa feed untuk berbagai jenis log dalam keluarga produk ini, lihat Mengonfigurasi feed menurut produk.
Tabel Pemetaan UDM
Kolom log | Pemetaan UDM | Logika |
---|---|---|
tindakan | security_result.action | Jika tindakan adalah ALLOW, tetapkan security_result.action ke ALLOW dan security_result.severity ke INFORMATIONAL. Jika tindakan adalah BLOCK, setel security_result.action ke BLOCK. Jika tindakan adalah CAPTCHA dan captchaResponse.responseCode adalah 405, tetapkan security_result.action ke BLOCK dan security_result.action_details ke "CAPTCHA {captchaResponse.failureReason}". |
captchaResponse.failureReason | security_result.action_details | Digunakan bersama dengan action dan captchaResponse.responseCode untuk menentukan security_result.action_details. |
captchaResponse.responseCode | security_result.action_details | Digunakan bersama dengan action dan captchaResponse.failureReason untuk menentukan security_result.action_details. |
httpRequest.clientIp | principal.ip, principal.asset.ip | Dipetakan langsung ke principal.ip dan principal.asset.ip. |
httpRequest.headers | target.hostname, target.asset.hostname, network.http.user_agent, network.http.parsed_user_agent, network.http.referral_url, target.location.country_or_region, target.resource.attribute.labels, target.user.userid | Melakukan iterasi melalui setiap header di httpRequest.headers. Jika nama header adalah "host" atau "Host", nilai akan dipetakan ke target.hostname dan target.asset.hostname. Jika nama header adalah "User-Agent" atau "user-agent", nilai akan dipetakan ke network.http.user_agent dan diuraikan ke network.http.parsed_user_agent. Jika nama header adalah "Referer" atau "referer", nilai akan dipetakan ke network.http.referral_url. Jika nama header adalah "(?i)time-zone", nilai akan dipetakan ke target.location.country_or_region. Jika nama header adalah "authorization", nilai akan didekode dan nama pengguna akan diekstrak serta dipetakan ke target.user.userid. Semua header lainnya ditambahkan sebagai pasangan nilai kunci ke target.resource.attribute.labels. |
httpRequest.httpMethod | network.http.method | Dipetakan langsung ke network.http.method. |
httpRequest.requestId | network.session_id | Dipetakan langsung ke network.session_id. |
httpRequest.uri | target.url | Dipetakan langsung ke target.url. |
httpSourceId | target.resource.name | Dipetakan langsung ke target.resource.name. |
httpSourceName | metadata.product_event_type | Dipetakan langsung ke metadata.product_event_type. |
labels | security_result.rule_labels | Melakukan iterasi melalui setiap label di labels. Jika nama label tidak kosong, nama label akan ditambahkan sebagai pasangan nilai kunci ke security_result.rule_labels. |
nonTerminatingMatchingRules | security_result.action_details, security_result.rule_labels | Melakukan iterasi melalui setiap aturan di nonTerminatingMatchingRules. Jika tindakan adalah ALLOW dan tindakan aturan adalah CAPTCHA, tetapkan security_result.action_details ke "CAPTCHA BERHASIL" dan tambahkan ID aturan ke security_result.rule_labels dengan kunci "nonTerminatingCaptchaRuleName". Jika tindakan adalah BLOCK atau ALLOW dan tindakan aturan adalah COUNT, tetapkan security_result.action_details ke "COUNT RULE" dan tambahkan ID aturan ke security_result.rule_labels dengan kunci "nonTerminatingCountRuleName". Jika tindakan adalah BLOCK atau ALLOW dan tindakan aturan adalah CHALLENGE, tetapkan security_result.action_details ke "COUNT RULE" dan tambahkan ID aturan ke security_result.rule_labels dengan kunci "nonTerminatingChallengeRuleName". |
rateBasedRuleList | security_result.rule_id, security_result.rule_name, security_result.description | Jika terminatingRuleType adalah "RATE_BASED", akan melakukan iterasi melalui setiap aturan dalam rateBasedRuleList. Jika terminatingRuleId cocok dengan nama aturan, ID aturan, nama aturan, dan deskripsi aturan akan dipetakan ke security_result.rule_id, security_result.rule_name, dan security_result.description. |
responseCodeSent | network.http.response_code | Dipetakan langsung ke network.http.response_code dan dikonversi menjadi bilangan bulat. |
ruleGroupList | intermediary.labels, security_result.rule_id, security_result.rule_name, security_result.description, security_result.detection_fields | Melakukan iterasi melalui setiap grup aturan dalam ruleGroupList. ID grup aturan ditambahkan sebagai pasangan nilai kunci ke intermediary.labels. Jika terminatingRuleType adalah "MANAGED_RULE_GROUP" dan terminatingRuleId cocok dengan ID grup aturan, ID aturan, nama aturan, dan deskripsi akan dipetakan ke security_result.rule_id, security_result.rule_name, dan security_result.description. Jika terminatingRuleType adalah "GROUP", ID aturan yang mengakhiri akan diekstrak dan dipetakan ke security_result.rule_name dan security_result.description. ID grup aturan penghentian ditambahkan ke security_result.rule_labels dengan kunci "terminatingRuleGroupName". Jika terminatingRuleType adalah "REGULAR", tindakan aturan penghentian akan diekstrak dan ditambahkan ke kolom security_result.detectiondengan kunci "terminatingRuleAction{index}". |
terminatingRuleId | security_result.rule_id, security_result.rule_name, security_result.description | Jika terminatingRuleType adalah "RATE_BASED", "MANAGED_RULE_GROUP", atau "REGULAR", terminatingRuleId dipetakan ke security_result.rule_id, security_result.rule_name, dan digunakan untuk membuat security_result.description. |
terminatingRuleMatchDetails | security_result.description, security_result.category_details, security_result.detection_fields | Melakukan iterasi melalui setiap kecocokan di terminatingRuleMatchDetails. Menetapkan security_result.description ke "Terminating Rule". Jika jenis kondisi tidak kosong, jenis tersebut akan ditambahkan ke security_result.category_details. Jika lokasi tidak kosong, lokasi akan ditambahkan ke security_result.detection_fields dengan kunci "location". Untuk setiap elemen data yang cocok, elemen tersebut ditambahkan ke security_result.detection_fields dengan kunci "matchedData". |
terminatingRuleType | security_result.rule_type | Dipetakan langsung ke security_result.rule_type. |
timestamp | metadata.event_timestamp | Dikonversi menjadi stempel waktu dan dipetakan ke metadata.event_timestamp. |
webaclId | intermediary.resource.name | Dipetakan langsung ke intermediary.resource.name. |
metadata.vendor_name | Tetapkan ke "AMAZON". | |
metadata.product_name | Setel ke "AWS Web Application Firewall". | |
metadata.log_type | Tetapkan ke "AWS_WAF". | |
network.application_protocol | Tetapkan ke "HTTP". | |
metadata.event_type | Disetel ke "NETWORK_HTTP" jika httpRequest.headers berisi header "host" atau "Host". Jika tidak, setel ke "STATUS_UPDATE". |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.