Log sumber daya untuk Azure Web Application Firewall
Anda bisa memantau sumberdaya Web Application Firewall menggunakan log. Anda dapat menyimpan performa, akses, dan data lainnya atau mengkonsumsinya dari sumber daya untuk tujuan pemantauan.
Catatan
Sebaiknya Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Untuk memulai, lihat Menginstal Azure PowerShell. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.
Log Diagnostik
Anda dapat menggunakan berbagai jenis log di Azure untuk mengelola dan memecahkan masalah gateway aplikasi. Anda dapat mengakses beberapa log ini melalui portal. Semua log dapat diekstrak dari Azure Blob storage dan ditampilkan di alat yang berbeda, seperti log Azure Monitor, Excel, dan Power BI. Anda dapat mempelajari selengkapnya tentang berbagai jenis log dari daftar berikut ini:
- Log aktivitas: Anda dapat menggunakan log aktivitas Azure untuk melihat semua operasi yang dikirimkan ke langganan Azure Anda, dan statusnya. Entri log aktivitas dikumpulkan secara default, dan Anda dapat melihatnya di portal Microsoft Azure.
- Log Akses Resource: Anda dapat menggunakan log ini untuk melihat pola akses Application Gateway dan menganalisis informasi penting. Ini termasuk IP penelepon, URL yang diminta, latensi respons, kode pengembalian, dan byte masuk dan keluar. Log ini berisi catatan individu untuk setiap permintaan dan asosiasi yang meminta ke Application Gateway unik yang memproses permintaan tersebut. Instans Application Gateway unik dapat diidentifikasi oleh instanceId properti.
- Log Performa Resource: Anda dapat menggunakan log ini untuk melihat bagaimana performa instans Application Gateway. Log ini mengambil informasi performa untuk setiap instans, termasuk total permintaan yang dilayani, throughput dalam byte, total permintaan yang dilayani, jumlah permintaan yang gagal, dan jumlah instans back-end yang sehat dan tidak sehat. Log performa dikumpulkan setiap 60 detik. Log Performa hanya tersedia untuk SKU v1. Untuk SKU v2, gunakan Metrik untuk data performa.
- Log Firewall Resource: Anda dapat menggunakan log ini untuk melihat permintaan yang dicatat melalui mode deteksi atau pencegahan application gateway yang dikonfigurasi dengan web application firewall.
Catatan
Log hanya tersedia untuk sumber daya yang disebarkan dalam model penyebaran Azure Resource Manager. Anda tidak dapat menggunakan log untuk sumber daya dalam model penyebaran klasik. Untuk pemahaman yang lebih baik tentang dua model ini, lihat artikel Memahami penyebaran Resource Manager dan penyebaran klasik.
Anda memiliki tiga opsi untuk menyimpan log:
- Akun penyimpanan: Akun penyimpanan paling baik digunakan untuk log yang disimpan untuk durasi yang lebih lama dan ditinjau saat diperlukan.
- Hub peristiwa: Hub acara adalah opsi yang bagus untuk pengintegrasian dengan alat informasi keamanan dan manajemen peristiwa (SIEM) lainnya untuk mendapatkan peringatan tentang sumber daya Anda.
- Log Azure Monitor: Log Azure Monitor paling baik digunakan untuk pemantauan aplikasi secara real-time dan menyeluruh atau melihat tren.
Aktifkan pengelogan dengan PowerShell
Pembuatan log aktivitas diaktifkan secara otomatis untuk setiap sumber daya Resource Manager. Anda harus mengaktifkan akses dan pengelogan performa untuk mulai mengumpulkan data yang tersedia dalam log tersebut. Untuk mengaktifkan pengelogan, gunakan langkah berikut:
Perhatikan ID sumber daya akun penyimpanan Anda, tempat data log disimpan. Nilai ini dalam bentuk formulir: /subscriptions/<subscriptionId>/resourceGroups/<nama grup sumber daya>/providers/Microsoft.Storage/storageAccounts/<nama akun penyimpanan>. Anda dapat menggunakan akun penyimpanan apa pun di langganan Anda. Anda dapat menggunakan portal Microsoft Azure untuk melihat informasi ini.
Perhatikan ID sumber daya gateway aplikasi Anda yang pengelogannya aktif. Nilai ini dalam bentuk formulir: /subscriptions/<subscriptionId>/resourceGroups/<nama grup sumber daya>/providers/Microsoft.Network/applicationGateways/<nama gateway aplikasi>. Anda dapat menggunakan portal untuk melihat informasi ini.
Aktifkan pengelogan sumber daya dengan menggunakan cmdlet PowerShell berikut ini:
Set-AzDiagnosticSetting -ResourceId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Network/applicationGateways/<application gateway name> -StorageAccountId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name> -Enabled $true
Tip
Log aktivitas tidak memerlukan akun penyimpanan terpisah. Penggunaan penyimpanan untuk log akses dan performa dikenakan biaya layanan.
Aktifkan pengelogan melalui portal Microsoft Azure
Di portal Microsoft Azure, temukan sumber daya Anda dan pilih Pengaturan diagnostik.
Untuk Application Gateway, tersedia tiga log:
- Log akses
- Log performa
- Log firewall
Pilih Menambahkan pengaturan diagnostik.
Halaman Pengaturan diagnostik menyediakan pengaturan untuk log sumber daya. Pada contoh ini, Log Analitik menyimpan log. Anda juga dapat menggunakan pusat aktivitas, akun penyimpanan, atau solusi mitra untuk menyimpan log sumber daya.
Ketik nama untuk pengaturan, konfirmasikan pengaturan, dan pilih Simpan.
Log aktivitas
Azure menghasilkan log aktivitas secara default. Log ini disimpan selama 90 hari di penyimpanan log peristiwa Azure. Pelajari selengkapnya tentang log ini dengan membaca artikel Melihat log peristiwa dan log aktivitas.
Log akses
Log akses dibuat hanya jika Anda telah mengaktifkannya pada setiap instans Application Gateway, sebagaimana terperinci dalam langkah sebelumnya. Data disimpan di akun penyimpanan yang Anda tentukan saat Anda mengaktifkan pengelogan. Setiap akses Application Gateway dicatat dalam format JSON, seperti yang ditunjukkan dalam contoh berikut untuk v1:
Nilai | Deskripsi |
---|---|
instansId | Instans Application Gateway yang melayani permintaan. |
clientIP | IP asal permintaan. |
clientPort | Porta asal permintaan. |
httpMethod | Metode HTTP yang digunakan oleh permintaan. |
requestUri | URI permintaan yang diterima. |
RequestQuery | Server-Routed: Instans kumpulan back-end yang dikirimi permintaan. X-AzureApplicationGateway-LOG-ID: ID Korelasi yang digunakan untuk permintaan. ID korelasi ini dapat digunakan untuk memecahkan masalah lalu lintas di server ujung belakang. SERVER-STATUS: Kode respons HTTP yang diterima Application Gateway dari ujung-belakang. |
UserAgent | Agen pengguna dari header permintaan HTTP. |
httpStatus | Kode status HTTP yang dikembalikan ke klien dari Application Gateway. |
httpVersion | Versi HTTP permintaan. |
receivedBytes | Ukuran paket yang diterima, dalam byte. |
sentBytes | Ukuran paket yang dikirim, dalam byte. |
timeTaken | Lamanya waktu (dalam milidetik) yang diperlukan untuk permintaan diproses dan responsnya dikirim. Dihitung sebagai interval dari waktu ketika Application Gateway menerima byte pertama permintaan HTTP sampai waktu ketika operasi pengiriman respons selesai. Penting untuk diperhatikan bahwa bidang Time-Taken biasanya mencakup waktu paket permintaan dan respons melintasi jaringan. |
sslEnabled | Apakah komunikasi ke kumpulan back-end menggunakan TLS / SSL atau tidak. Nilai yang valid yaitu aktif dan nonaktif. |
tuan rumah | Nama host yang mengirimkan permintaan ke server ujung belakang. Jika nama host ujung belakang sedang ditimpa, nama ini akan menunjukkannya. |
originalHost | Nama host tempat Application Gateway menerima permintaan dari klien. |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayAccess",
"timestamp": "2017-04-26T19:27:38Z",
"category": "ApplicationGatewayAccessLog",
"properties": {
"instanceId": "ApplicationGatewayRole_IN_0",
"clientIP": "191.96.249.97",
"clientPort": 46886,
"httpMethod": "GET",
"requestUri": "/phpmyadmin/scripts/setup.php",
"requestQuery": "X-AzureApplicationGateway-CACHE-HIT=0&SERVER-ROUTED=10.4.0.4&X-AzureApplicationGateway-LOG-ID=874f1f0f-6807-41c9-b7bc-f3cfa74aa0b1&SERVER-STATUS=404",
"userAgent": "-",
"httpStatus": 404,
"httpVersion": "HTTP/1.0",
"receivedBytes": 65,
"sentBytes": 553,
"timeTaken": 205,
"sslEnabled": "off",
"host": "www.contoso.com",
"originalHost": "www.contoso.com"
}
}
Untuk Application Gateway dan WAF v2, log menunjukkan sedikit lebih banyak informasi:
Nilai | Deskripsi |
---|---|
instansId | Instans Application Gateway yang melayani permintaan. |
clientIP | IP asal permintaan. |
clientPort | Porta asal permintaan. |
httpMethod | Metode HTTP yang digunakan oleh permintaan. |
requestUri | URI permintaan yang diterima. |
UserAgent | Agen pengguna dari header permintaan HTTP. |
httpStatus | Kode status HTTP yang dikembalikan ke klien dari Application Gateway. |
httpVersion | Versi HTTP permintaan. |
receivedBytes | Ukuran paket yang diterima, dalam byte. |
sentBytes | Ukuran paket yang dikirim, dalam byte. |
timeTaken | Lamanya waktu (dalam milidetik) yang diperlukan untuk permintaan diproses dan responsnya dikirim. Dihitung sebagai interval dari waktu ketika Application Gateway menerima byte pertama permintaan HTTP sampai waktu ketika operasi pengiriman respons selesai. Penting untuk diperhatikan bahwa bidang Time-Taken biasanya mencakup waktu paket permintaan dan respons melintasi jaringan. |
sslEnabled | Apakah komunikasi ke kumpulan back-end menggunakan TLS / SSL atau tidak. Nilai yang valid yaitu aktif dan nonaktif. |
sslCipher | Cipher suite yang sedang digunakan untuk komunikasi TLS (jika TLS aktif). |
sslProtocol | Protokol TLS sedang digunakan (jika TLS diaktifkan). |
serverRouted | Server ujung belakang tempat gateway aplikasi merutekan permintaan. |
serverStatus | Kode status HTTP server ujung belakang. |
serverResponseLatency | Latensi respons dari server ujung belakang. |
tuan rumah | Alamat yang tercantum di header host permintaan. |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayAccess",
"time": "2017-04-26T19:27:38Z",
"category": "ApplicationGatewayAccessLog",
"properties": {
"instanceId": "appgw_1",
"clientIP": "191.96.249.97",
"clientPort": 46886,
"httpMethod": "GET",
"requestUri": "/phpmyadmin/scripts/setup.php",
"userAgent": "-",
"httpStatus": 404,
"httpVersion": "HTTP/1.0",
"receivedBytes": 65,
"sentBytes": 553,
"timeTaken": 205,
"sslEnabled": "off",
"sslCipher": "",
"sslProtocol": "",
"serverRouted": "104.41.114.59:80",
"serverStatus": "200",
"serverResponseLatency": "0.023",
"host": "www.contoso.com",
}
}
Log performa
Log performa dibuat hanya jika Anda telah mengaktifkannya pada setiap instans Application Gateway, sebagaimana terperinci dalam langkah sebelumnya. Data disimpan di akun penyimpanan yang Anda tentukan saat Anda mengaktifkan pengelogan. Data log performa dihasilkan dalam interval 1 menit. Data ini hanya tersedia untuk SKU v1. Untuk SKU v2, gunakan Metrik untuk data performa. Data berikut dicatat:
Nilai | Deskripsi |
---|---|
instansId | Instans Application Gateway tempat data performa dihasilkan. Untuk gateway aplikasi multi-instans, ada satu baris per instans. |
healthyHostCount | Jumlah host sehat di kumpulan back-end. |
unHealthyHostCount | Jumlah host tidak sehat di kumpulan back-end. |
requestCount | Jumlah permintaan yang dilayani. |
latency | Rata-rata latensi (dalam milidetik) permintaan dari instans ke ujung belakang yang melayani permintaan. |
failedRequestCount | Jumlah permintaan yang gagal. |
throughput | Rata-rata throughput sejak log terakhir, dihitung dalam byte per detik. |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayPerformance",
"time": "2016-04-09T00:00:00Z",
"category": "ApplicationGatewayPerformanceLog",
"properties":
{
"instanceId":"ApplicationGatewayRole_IN_1",
"healthyHostCount":"4",
"unHealthyHostCount":"0",
"requestCount":"185",
"latency":"0",
"failedRequestCount":"0",
"throughput":"119427"
}
}
Catatan
Latensi dihitung dari waktu ketika byte pertama permintaan HTTP diterima hingga saat byte terakhir respons HTTP dikirim. Ini adalah jumlah waktu pemrosesan Application Gateway ditambah biaya jaringan ke ujung belakang, ditambah waktu yang diperlukan ujung belakang untuk memproses permintaan.
Log firewall
Log firewall dibuat hanya jika Anda telah mengaktifkannya pada setiap instans Application Gateway, sebagaimana terperinci dalam langkah sebelumnya. Log ini juga mengharuskan firewall aplikasi web dikonfigurasi di gateway aplikasi. Data disimpan di tujuan yang Anda tentukan saat mengaktifkan pengelogan. Data berikut dicatat:
Nilai | Deskripsi |
---|---|
instansId | Instans Application Gateway tempat data firewall dihasilkan. Untuk gateway aplikasi multi-instans, ada satu baris per instans. |
clientIp | IP asal permintaan. |
requestUri | URI permintaan yang diterima. |
ruleSetType | Jenis seperangkat aturan. Nilai yang tersedia adalah OWASP. |
ruleSetVersion | Versi seperangkat aturan yang digunakan. Nilai yang tersedia adalah 2.2.9 dan 3.0. |
ruleId | ID aturan dari kejadian pemicu. |
pesan | Pesan ramah-pengguna untuk kejadian pemicu. Detail lebih lanjut disediakan di bagian detail. |
tindakan | Mode Kebijakan: Deteksi Terdeteksi - - Ini adalah satu-satunya tindakan untuk WAF saat dalam mode deteksi. Semua kondisi untuk aturan tertentu dicocokkan dan permintaan dicatat kemudian diteruskan ke backend. Mode Kebijakan: Pencegahan - Diizinkan - Semua kondisi dicocokkan untuk aturan tertentu dan permintaan diteruskan ke backend. - Diblokir - Semua kondisi dicocokkan untuk aturan tertentu dan permintaan diblokir. - Cocok - Satu/lebih kondisi dicocokkan dengan aturan tertentu, tetapi keputusan untuk memblokir atau meneruskan permintaan akan memerlukan evaluasi lebih lanjut dan akan dievaluasi berdasarkan aturan penilaian anomali akhir. Mode Kebijakan: Tantangan JS - JSChallengeIssued: Dikeluarkan karena izin tantangan yang hilang/tidak valid, jawaban yang hilang. Log ini dibuat ketika klien meminta akses ke aplikasi web untuk pertama kalinya dan belum ditantang sebelumnya. Klien ini menerima halaman tantangan JS dan melanjutkan untuk menghitung tantangan JS. Setelah komputasi berhasil, klien diberikan cookie validitas. - JSChallengePass: Lulus karena jawaban tantangan yang valid. Log ini dibuat ketika klien memecahkan tantangan JS dan mengirimkan ulang permintaan dengan jawaban yang benar. Dalam hal ini, Azure WAF memvalidasi cookie dan melanjutkan untuk memproses aturan yang tersisa tanpa menghasilkan tantangan JS lain. - JSChallengeValid: Logged/passthrough karena tantangan yang valid Log ini dibuat ketika klien sebelumnya telah menyelesaikan tantangan. Dalam hal ini, Azure WAF mencatat permintaan dan melanjutkan untuk memproses aturan yang tersisa. - JSChallengeBlock: Diblokir Log ini dibuat ketika komputasi tantangan JS gagal. |
site | Situs tempat log dihasilkan. Saat ini, hanya Global yang terdaftar karena aturan bersifat global. |
detail | Detail kejadian pemicu. |
details.message | Deskripsi aturan. |
details.data | Data tertentu yang ditemukan dalam permintaan yang cocok dengan aturan. |
details.file | File konfigurasi yang memuat aturan. |
details.line | Nomor baris dalam file konfigurasi yang memicu peristiwa. |
hostname | Nama host atau alamat IP Application Gateway. |
transactionId | ID khusus untuk transaksi tertentu yang membantu mengelompokkan beberapa pelanggaran aturan yang terjadi dalam permintaan yang sama. |
policyId | ID unik Kebijakan Firewall yang terkait dengan Gateway Aplikasi, Perespons, atau Jalur. |
policyScope | Lokasi kebijakan - nilai dapat berupa "Global", "Perespons", atau "Lokasi". |
policyScopeName | Nama objek tempat kebijakan diterapkan. |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayFirewall",
"time": "2017-03-20T15:52:09.1494499Z",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "ApplicationGatewayRole_IN_0",
"clientIp": "52.161.109.147",
"requestUri": "/",
"ruleSetType": "OWASP",
"ruleSetVersion": "3.0",
"ruleId": "920350",
"ruleGroup": "920-PROTOCOL-ENFORCEMENT",
"message": "Host header is a numeric IP address",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \"^[\\\\d.:]+$\" at REQUEST_HEADERS:Host ....",
"data": "127.0.0.1",
"file": "rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf",
"line": "791"
},
"hostname": "127.0.0.1",
"transactionId": "16861477007022634343",
"policyId": "/subscriptions/1496a758-b2ff-43ef-b738-8e9eb5161a86/resourceGroups/drewRG/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/perListener",
"policyScope": "Listener",
"policyScopeName": "httpListener1"
}
}
}
Melihat dan menganalisis log aktivitas
Anda dapat melihat dan menganalisis data log aktivitas dengan menggunakan salah satu metode berikut:
- Alat Azure: Mengambil informasi dari log aktivitas melalui Azure PowerShell, Azure CLI, REST API Azure, atau portal Microsoft Azure. Petunjuk langkah demi langkah untuk setiap metode dijelaskan dalam artikel Operasi aktivitas dengan Resource Manager.
- Power BI: Jika Anda belum memiliki akun Power BI, Anda dapat mencobanya secara gratis. Dengan menggunakan aplikasi templat Power BI, Anda dapat menganalisis data.
Melihat dan menganalisis log akses, performa, dan firewall
Log Azure Monitor dapat mengumpulkan penghitung dan file log peristiwa dari akun Blob storage Anda. Ini termasuk visualisasi dan kemampuan pencarian yang canggih untuk menganalisis log Anda.
Anda juga dapat terhubung ke akun penyimpanan dan mengambil entri log JSON untuk log akses dan performa. Setelah mengunduh file JSON, Anda dapat mengonversinya ke CSV dan menampilkannya di Excel, Power BI, atau alat visualisasi data lainnya.
Tip
Jika Anda terbiasa dengan Visual Studio dan konsep dasar pengubahan nilai untuk konstanta dan variabel di C#, Anda dapat menggunakan alat pengonversi log yang tersedia dari GitHub.
Menganalisis log Access melalui GoAccess
Kami telah menerbitkan templat Resource Manager yang menginstal dan menjalankan penganalisis log populer GoAccess untuk Log Akses Application Gateway. GoAccess menyediakan statistik lalu lintas HTTP penting seperti Pengunjung Unik, File yang Diminta, Host, Sistem Operasi, Browser, kode Status HTTP, dan banyak lagi. Untuk detail lebih lanjut, lihat file Readme di folder templat Resource Manager di GitHub.
Langkah berikutnya
- Visualisasikan penghitung dan log peristiwa dengan menggunakan log Azure Monitor.
- Visualisasikan log aktivitas Azure Anda dengan posting blog Power BI.
- Lihat dan analisis log aktivitas Azure di Power BI dan posting blog lainnya.