Mengumpulkan log Azure WAF
Dokumen ini menjelaskan cara mengekspor log Azure Web Application Firewall (WAF) ke Google Security Operations menggunakan Akun Penyimpanan Azure. Parser menangani log dalam format JSON, yang mengubahnya menjadi UDM. Fungsi ini memproses log yang berisi array records dengan melakukan iterasi pada setiap data dan memetakan kolom tertentu ke properti UDM. Jika array records tidak ada, parser akan menangani log sebagai satu peristiwa, mengekstrak, dan memetakan kolom sebagaimana mestinya.
Sebelum memulai
- Pastikan Anda memiliki instance Google Chronicle.
- Pastikan Anda memiliki tenant Azure yang aktif.
- Pastikan Anda memiliki akses dengan hak istimewa ke Azure.
Mengonfigurasi Akun Azure Storage
- Di konsol Azure, telusuri Storage accounts.
- Klik Buat.
- Tentukan nilai untuk parameter input berikut:
- Langganan: pilih langganan.
- Resource Group: pilih grup resource.
- Region: pilih region.
- Performa: pilih performa (Standar direkomendasikan).
- Redundansi: pilih redundansi (GRS atau LRS direkomendasikan).
- Nama akun penyimpanan: masukkan nama untuk akun penyimpanan baru.
- Klik Review + create.
- Tinjau ringkasan akun, lalu klik Buat.
- Dari halaman Ringkasan Akun Penyimpanan, pilih submenu Kunci akses di Keamanan + jaringan.
- Klik Tampilkan di samping kunci1 atau kunci2.
- Klik Salin ke papan klip untuk menyalin kunci.
- Simpan kunci di lokasi yang aman untuk digunakan nanti.
- Dari halaman Ringkasan Akun Penyimpanan, pilih submenu Endpoint di Setelan.
- Klik Salin ke papan klip untuk menyalin URL endpoint Layanan blob; misalnya,
https://<storageaccountname>.blob.core.windows.net
. - Simpan URL endpoint di lokasi yang aman untuk digunakan nanti.
Mengonfigurasi Ekspor Log untuk Log Azure WAF
- Login ke Portal Azure menggunakan akun dengan hak istimewa Anda.
- Buka Aturan Firewall Aplikasi Web (WAF), lalu pilih WAF yang akan dipantau.
- Pilih Monitoring > Diagnostic Settings.
- Klik + Tambahkan setelan diagnostik.
- Masukkan nama deskriptif untuk setelan diagnostik.
- Pilih allLogs.
- Pilih kotak centang Arsipkan ke akun penyimpanan sebagai tujuan.
- Tentukan Langganan dan Akun Penyimpanan.
- Klik Simpan.
Mengonfigurasi feed di Google SecOps untuk menyerap log Azure WAF
- Buka Setelan SIEM > Feed.
- Klik Tambahkan baru.
- Di kolom Feed name, masukkan nama untuk feed; misalnya, Azure WAF Logs.
- Pilih Microsoft Azure Blob Storage sebagai Jenis sumber.
- Pilih Azure WAF sebagai Jenis log.
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
- URI Azure: URL endpoint blob.
ENDPOINT_URL/BLOB_NAME
- Ganti kode berikut:
ENDPOINT_URL
: URL endpoint blob (https://<storageaccountname>.blob.core.windows.net
)BLOB_NAME
: nama blob (seperti,<logname>-logs
)
- Ganti kode berikut:
- URI adalah: pilih JENIS URI sesuai dengan konfigurasi aliran log (File tunggal | Direktori | Direktori yang menyertakan subdirektori).
Opsi penghapusan sumber: pilih opsi penghapusan sesuai preferensi Anda.
Kunci bersama: kunci akses ke Azure Blob Storage.
Namespace aset: namespace aset.
Label penyerapan: label yang akan diterapkan ke peristiwa dari feed ini.
- URI Azure: URL endpoint blob.
Klik Berikutnya.
Tinjau konfigurasi feed baru Anda di layar Finalize, lalu klik Submit.
Tabel Pemetaan UDM
Kolom Log | Pemetaan UDM | Logika |
---|---|---|
backendPoolName |
additional.fields[?key=='backendPoolName'].value.string_value |
Nilai diambil dari kolom backendPoolName dalam log mentah. |
backendSettingName |
additional.fields[?key=='backendSettingName'].value.string_value |
Nilai diambil dari kolom backendSettingName dalam log mentah. |
category |
metadata.product_event_type |
Nilai diambil dari kolom category dalam log mentah. |
EventEnqueuedUtcTime |
additional.fields[?key=='EventEnqueuedUtcTime'].value.string_value |
Nilai diambil dari kolom EventEnqueuedUtcTime dalam log mentah jika kolom records ada. |
EventProcessedUtcTime |
additional.fields[?key=='EventProcessedUtcTime'].value.string_value |
Nilai diambil dari kolom EventProcessedUtcTime dalam log mentah jika kolom records ada. |
operationName |
additional.fields[?key=='operationName'].value.string_value |
Nilai diambil dari kolom operationName dalam log mentah. |
properties.action |
additional.fields[?key=='action'].value.string_value |
Nilai diambil dari kolom properties.action dalam log mentah jika kolom records ada. |
properties.action |
security_result.action_details |
Nilai diambil dari kolom properties.action dalam log mentah jika kolom records tidak ada. |
properties.clientIP , properties.clientIp |
principal.asset.ip , principal.ip |
Nilai diambil dari kolom properties.clientIP atau properties.clientIp dalam log mentah, dengan memprioritaskan clientIP . |
properties.clientPort |
principal.port |
Nilai diambil dari kolom properties.clientPort dalam log mentah. |
properties.clientResponseTime |
principal.resource.attribute.labels[?key=='Client Response Time'].value |
Nilai diambil dari kolom properties.clientResponseTime dalam log mentah jika kolom records tidak ada. |
properties.details.data |
additional.fields[?key=='Properties data'].value.string_value |
Nilai diambil dari kolom properties.details.data dalam log mentah jika kolom records ada. |
properties.details.file |
principal.process.file.full_path |
Nilai diambil dari kolom properties.details.file dalam log mentah jika kolom records tidak ada. |
properties.details.matches[].matchVariableName , properties.details.matches[].matchVariableValue |
additional.fields[?key.startsWith('%{idx} ')].value.string_value |
Nilai diambil dari array properties.details.matches dalam log mentah. key di UDM dibuat menggunakan indeks (idx ) dan matchVariableName . value diambil dari matchVariableValue . |
properties.details.message |
metadata.description |
Nilai diambil dari kolom properties.details.message dalam log mentah setelah menghapus garis miring terbalik dan tanda kutip. |
properties.details.msg |
metadata.description |
Nilai diambil dari kolom properties.details.msg dalam log mentah jika kolom records ada. |
properties.httpMethod |
network.http.method |
Nilai diambil dari kolom properties.httpMethod dalam log mentah. |
properties.httpStatus |
network.http.response_code |
Nilai diambil dari kolom properties.httpStatus dalam log mentah. |
properties.httpVersion |
network.application_protocol |
Jika kolom properties.httpVersion berisi HTTP , nilai HTTP akan ditetapkan. |
properties.host , properties.hostname , properties.originalHost |
principal.asset.hostname , principal.hostname |
Nilai diambil dari salah satu properties.originalHost , properties.host , atau properties.hostname , dengan memprioritaskannya dalam urutan tersebut. |
properties.policyId |
security_result.detection_fields[?key=='policyId'].value |
Nilai diambil dari kolom properties.policyId dalam log mentah. |
properties.policyMode |
security_result.detection_fields[?key=='policyMode'].value |
Nilai diambil dari kolom properties.policyMode dalam log mentah jika kolom records ada. |
properties.policy |
additional.fields[?key=='Properties policy'].value.string_value |
Nilai diambil dari kolom properties.policy dalam log mentah jika kolom records ada. |
properties.receivedBytes |
network.received_bytes |
Nilai diambil dari kolom properties.receivedBytes dalam log mentah. |
properties.requestUri |
target.url |
Nilai diambil dari kolom properties.requestUri dalam log mentah. |
properties.ruleId |
security_result.rule_id |
Nilai diambil dari kolom properties.ruleId dalam log mentah. |
properties.ruleName |
security_result.rule_name |
Nilai diambil dari kolom properties.ruleName dalam log mentah jika kolom records ada. |
properties.ruleName , ruleSetType |
security_result.rule_name |
Nilai diambil dari kolom properties.ruleName , atau jika kosong, dari kolom ruleSetType dalam log mentah jika kolom records tidak ada. |
properties.ruleSetVersion |
security_result.detection_fields[?key=='ruleSetVersion'].value |
Nilai diambil dari kolom properties.ruleSetVersion dalam log mentah. |
properties.sentBytes |
network.sent_bytes |
Nilai diambil dari kolom properties.sentBytes dalam log mentah. |
properties.serverResponseLatency |
additional.fields[?key=='Server Response Latency'].value.string_value |
Nilai diambil dari kolom properties.serverResponseLatency dalam log mentah jika kolom records tidak ada. |
properties.serverRouted |
target.asset.ip , target.ip , target.port |
IP dan port diekstrak dari kolom properties.serverRouted . |
properties.sslCipher |
network.tls.cipher |
Nilai diambil dari kolom properties.sslCipher dalam log mentah. |
properties.sslClientCertificateIssuerName |
network.tls.server.certificate.issuer |
Nilai diambil dari kolom properties.sslClientCertificateIssuerName dalam log mentah. |
properties.sslProtocol |
network.tls.version |
Nilai diambil dari kolom properties.sslProtocol dalam log mentah. |
properties.timeTaken |
additional.fields[?key=='Properties Timetaken'].value.string_value |
Nilai diambil dari kolom properties.timeTaken dalam log mentah jika kolom records tidak ada. |
properties.trackingReference |
additional.fields[?key=='trackingReference'].value.string_value |
Nilai diambil dari kolom properties.trackingReference dalam log mentah jika kolom records ada. |
properties.transactionId |
network.session_id |
Nilai diambil dari kolom properties.transactionId dalam log mentah. |
properties.userAgent |
network.http.user_agent |
Nilai diambil dari kolom properties.userAgent dalam log mentah. |
properties.WAFEvaluationTime |
additional.fields[?key=='Properties WAFEvaluationTime'].value.string_value |
Nilai diambil dari kolom properties.WAFEvaluationTime dalam log mentah jika kolom records tidak ada. |
properties.WAFMode |
additional.fields[?key=='Properties WAFMode'].value.string_value |
Nilai diambil dari kolom properties.WAFMode dalam log mentah jika kolom records tidak ada. |
rec.category |
metadata.product_event_type |
Nilai diambil dari kolom rec.category dalam log mentah jika kolom records ada. |
rec.operationName |
additional.fields[?key=='operationName'].value.string_value |
Nilai diambil dari kolom rec.operationName dalam log mentah jika kolom records ada. |
rec.properties.clientIP , rec.properties.clientIp |
principal.asset.ip , principal.ip |
Nilai diambil dari kolom rec.properties.clientIP atau rec.properties.clientIp dalam log mentah, dengan memprioritaskan clientIP jika kolom records ada. |
rec.properties.clientPort |
principal.port |
Nilai diambil dari kolom rec.properties.clientPort dalam log mentah jika kolom records ada. |
rec.properties.host |
principal.asset.hostname , principal.hostname |
Nilai diambil dari kolom rec.properties.host dalam log mentah jika kolom records ada. |
rec.properties.policy |
additional.fields[?key=='Properties policy'].value.string_value |
Nilai diambil dari kolom rec.properties.policy dalam log mentah jika kolom records ada. |
rec.properties.requestUri |
target.url |
Nilai diambil dari kolom rec.properties.requestUri dalam log mentah jika kolom records ada. |
rec.properties.ruleName |
security_result.rule_name |
Nilai diambil dari kolom rec.properties.ruleName dalam log mentah jika kolom records ada. |
rec.properties.trackingReference |
additional.fields[?key=='trackingReference'].value.string_value |
Nilai diambil dari kolom rec.properties.trackingReference dalam log mentah jika kolom records ada. |
rec.resourceId |
target.resource.id |
Nilai diambil dari kolom rec.resourceId dalam log mentah jika kolom records ada. |
rec.time |
metadata.event_timestamp |
Nilai diambil dari kolom rec.time dalam log mentah jika kolom records ada. |
resourceId |
target.resource.id |
Nilai diambil dari kolom resourceId dalam log mentah jika kolom records tidak ada. |
timeStamp |
metadata.event_timestamp |
Nilai diambil dari kolom timeStamp dalam log mentah jika kolom records tidak ada. |
T/A | metadata.event_type |
Nilai ditetapkan ke NETWORK_CONNECTION jika akun utama (nama host atau IP klien) dan IP tujuan ada. Nilai ini ditetapkan ke STATUS_UPDATE jika akun utama ada, tetapi IP tujuan tidak ada. Jika tidak, nilai defaultnya adalah GENERIC_EVENT atau nilai kolom event_type . |
T/A | metadata.log_type |
Nilai di-hardcode menjadi AZURE_WAF . |
T/A | metadata.product_name |
Nilai di-hardcode menjadi Azure WAF Logs . |
T/A | metadata.vendor_name |
Nilai di-hardcode menjadi Microsoft . |
T/A | security_result.action |
Nilai ditetapkan ke ALLOW jika properties.action adalah Matched , BLOCK jika properties.action adalah Block . |
Perubahan
2024-04-07
Peningkatan:
- Memetakan
rec.properties.clientIp
keprincipal.ip
. - Menentukan
rec_properties_trackingReference
,rec_properties_host
,rec_properties_policyMode
,rec_properties_ruleName
,rec_properties_policy
,rec_properties_details_msg
,rec_properties_clientIP
, danrec_time
dalam data status.
2023-07-14
Peningkatan:
- Menambahkan loop
for
untuk menangani log JSON.
2023-02-28
Peningkatan:
- Memetakan
properties.ruleName
kesecurity_result.rule_name
. - Memetakan
properties.action
kesecurity_result.action
. - Menambahkan pemeriksaan on_error untuk
properties.clientPort
,properties.httpStatus
,properties.receivedBytes
,properties.sentBytes
,properties.clientResponseTime
,properties.timeTaken
.
2022-10-22
- Parser yang baru dibuat
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.