Mengumpulkan log Azure Application Gateway
Dokumen ini menjelaskan cara mengumpulkan log Azure Application Gateway dengan menyiapkan feed Google Security Operations. Parser ini menangani struktur JSON satu dan multi-rekaman, mengekstrak kolom dari array "records", melakukan konversi jenis data, memetakan kolom ke UDM, dan memperkaya data dengan metadata dan kolom turunan seperti jenis koneksi jaringan. Selain itu, fungsi ini juga menangani logika tertentu untuk nilai operationName
yang berbeda, mengekstrak alamat IP, subnet, dan detail konfigurasi lainnya yang relevan.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps
- Akses istimewa ke langganan Azure
- Lingkungan (tenant) gateway aplikasi Azure di Azure
Mengonfigurasi Akun Azure Storage
- Di konsol Azure, cari Storage accounts.
- Klik Buat.
- Tentukan nilai untuk parameter input berikut:
- Langganan: Pilih langganan.
- Grup Resource: 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 Storage Account Overview, pilih submenu Access keys di Security + networking.
- Klik Tampilkan di samping key1 atau key2
- Klik Salin ke papan klip untuk menyalin kunci.
- Simpan kunci di lokasi yang aman untuk digunakan nanti.
- Dari halaman Storage Account Overview, pilih submenu Endpoints di Settings.
- Klik Salin ke papan klip untuk menyalin URL endpoint Blob service. (misalnya,
https://<storageaccountname>.blob.core.windows.net
) - Simpan URL endpoint di lokasi yang aman untuk digunakan nanti.
Cara mengonfigurasi Azure Application Gateway
- Login ke portal Azure.
- Buka grup resource yang Anda inginkan.
- Pilih Application gateway (jendela Application gateway akan muncul).
- Di bagian Monitoring, pilih Setelan diagnostik > Aktifkan diagnostik.
- Pilih Tambahkan setelan diagnostik (jendela Setelan diagnostik menampilkan setelan untuk log diagnostik).
- Di bagian log, lakukan tindakan berikut:
- Centang kotak ApplicationGatewayAccessLog.
- Centang kotak ApplicationGatewayFirewallLog.
- Untuk menyimpan log di akun penyimpanan, lakukan langkah-langkah berikut:
- Centang kotak Arsipkan ke akun penyimpanan.
- Di daftar Langganan, pilih langganan yang ada.
- Dalam daftar Storage account, pilih akun penyimpanan yang ada.
Menyiapkan feed
Ada dua titik entri berbeda untuk menyiapkan feed di platform Google SecOps:
- Setelan SIEM > Feed
- Hub Konten > Paket Konten
Menyiapkan feed dari Setelan SIEM > Feed
Untuk mengonfigurasi beberapa feed untuk berbagai jenis log dalam keluarga produk ini, lihat Mengonfigurasi feed menurut produk.
Untuk mengonfigurasi satu feed, ikuti langkah-langkah berikut:
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Di halaman berikutnya, klik Konfigurasi satu feed.
- Di kolom Feed name, masukkan nama feed (misalnya, Azure Application Gateway Logs).
- Pilih Microsoft Azure Blob Storage sebagai Jenis sumber.
- Pilih Azure Application Gateway sebagai Jenis log.
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
- Azure URI: 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,insights-logs-<logname>
)
- 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 dengan preferensi penyerapan Anda.
- Shared key: Kunci akses ke Azure Blob Storage.
- Namespace aset: Namespace aset.
- Label penyerapan: Label yang akan diterapkan ke peristiwa dari feed ini.
- Azure URI: URL endpoint blob.
Klik Berikutnya.
Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
Menyiapkan feed dari Hub Konten
Tentukan nilai untuk kolom 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,insights-logs-<logname>
)
- 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 dengan preferensi penyerapan Anda.
- Shared key: Kunci akses ke Azure Blob Storage.
Opsi lanjutan
- Nama Feed: Nilai yang telah diisi otomatis yang mengidentifikasi feed.
- Jenis Sumber: Metode yang digunakan untuk mengumpulkan log ke Google SecOps.
- Namespace Aset: Namespace yang terkait dengan feed.
- Label Penyerapan: Label yang diterapkan ke semua peristiwa dari feed ini.
Tabel Pemetaan UDM
Kolom Log | Pemetaan UDM | Logika |
---|---|---|
Category |
metadata.product_event_type |
Dipetakan langsung dari kolom Category . |
ClientOperationId |
additional.fields[].key:"ClientOperationId", value.string_value |
Dipetakan langsung dari kolom ClientOperationId . |
CorrelationRequestId |
additional.fields[].key:"CorrelationRequestId", value.string_value |
Dipetakan langsung dari kolom CorrelationRequestId . |
GatewayManagerVersion |
additional.fields[].key:"GatewayManagerVersion", value.string_value |
Dipetakan langsung dari kolom GatewayManagerVersion . |
category |
metadata.product_event_type |
Dipetakan langsung dari kolom category . |
level |
security_result.severity |
Dipetakan langsung dari kolom level , dikonversi menjadi huruf besar. Jika nilainya adalah "WARNING", tingkat keparahan ditetapkan ke "HIGH" dan security_result.severity_details ditetapkan ke nilai aslinya. |
properties.clientIP |
principal.ip , principal.asset.ip |
Dipetakan langsung dari kolom properties.clientIP . |
properties.clientPort |
principal.port |
Dipetakan langsung dari kolom properties.clientPort , dikonversi menjadi bilangan bulat. |
properties.clientResponseTime |
additional.fields[].key:"clientResponseTime", value.string_value |
Dipetakan langsung dari kolom properties.clientResponseTime . |
properties.configuration.BgpConfiguration.GatewayConfig.Asn |
security_result.detection_fields[].key:"ASN", value |
Dipetakan langsung dari kolom properties.configuration.BgpConfiguration.GatewayConfig.Asn saat operationName adalah "SetGatewayConfiguration". |
properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress |
target.ip , target.asset.ip |
Dipetakan langsung dari kolom properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress saat operationName adalah "SetGatewayConfiguration". |
properties.configuration.BgpConfiguration.GatewayConfig.PeerType |
security_result.detection_fields[].key:"PeerType", value |
Dipetakan langsung dari kolom properties.configuration.BgpConfiguration.GatewayConfig.PeerType saat operationName adalah "SetGatewayConfiguration". |
properties.configuration.IkeVersion |
principal.resource.attribute.labels[].key:"ike_version", value |
Dipetakan langsung dari kolom properties.configuration.IkeVersion saat operationName adalah "SetConnectionConfiguration". |
properties.configuration.LocalSubnets |
principal.resource.attribute.labels[].key:"local subnets", value |
String alamat IP yang digabungkan dari array properties.configuration.LocalSubnets saat operationName adalah "SetConnectionConfiguration". |
properties.configuration.LocalTunnelEndpoint |
principal.ip , principal.asset.ip |
Dipetakan langsung dari kolom properties.configuration.LocalTunnelEndpoint saat operationName adalah "SetConnectionConfiguration". |
properties.configuration.Name |
principal.hostname , principal.asset.hostname |
Dipetakan langsung dari kolom properties.configuration.Name . Jika kosong, nilai diambil dari properties.instance . |
properties.configuration.RemoteSite |
target.hostname , target.asset.hostname |
Dipetakan langsung dari kolom properties.configuration.RemoteSite . |
properties.configuration.RemoteSubnets |
principal.resource.attribute.labels[].key:"remote subnets", value |
String alamat IP yang digabungkan dari array properties.configuration.RemoteSubnets saat operationName adalah "SetConnectionConfiguration". |
properties.configuration.RemoteTunnelEndpoint |
target.ip , target.asset.ip |
Dipetakan langsung dari kolom properties.configuration.RemoteTunnelEndpoint saat operationName adalah "SetConnectionConfiguration". |
properties.configuration.VIPAddress |
principal.ip , principal.asset.ip |
Dipetakan langsung dari kolom properties.configuration.VIPAddress saat operationName adalah "SetGatewayConfiguration". |
properties.configuration.VirtualNetworkRanges |
principal.resource.attribute.labels[].key:"virutal network ranges", value |
String alamat IP yang digabungkan dari array properties.configuration.VirtualNetworkRanges saat operationName adalah "SetGatewayConfiguration". |
properties.configuration.VirtualNetworkSubnets |
principal.resource.attribute.labels[].key:"virtual network subnets", value |
String alamat IP yang digabungkan dari array properties.configuration.VirtualNetworkSubnets saat operationName adalah "SetGatewayConfiguration". |
properties.error_info |
additional.fields[].key:"error_info", value.string_value |
Dipetakan langsung dari kolom properties.error_info . |
properties.host |
principal.hostname , principal.asset.hostname |
Dipetakan langsung dari kolom properties.host jika properties.originalHost kosong. |
properties.httpMethod |
network.http.method |
Dipetakan langsung dari kolom properties.httpMethod . |
properties.httpStatus |
network.http.response_code |
Dipetakan langsung dari kolom properties.httpStatus , dikonversi menjadi bilangan bulat. |
properties.httpVersion |
network.application_protocol |
Ditetapkan ke "HTTP" jika kolom properties.httpVersion berisi "HTTP". |
properties.instance |
principal.hostname , principal.asset.hostname |
Digunakan sebagai nilai untuk principal.hostname jika properties.configuration.Name kosong. |
properties.message |
metadata.description |
Dipetakan langsung dari kolom properties.message . |
properties.operationName |
additional.fields[].key:"operationName", value.string_value |
Dipetakan langsung dari kolom properties.operationName . |
properties.operationStatus |
security_result.category_details |
Dipetakan langsung dari kolom properties.operationStatus . Jika nilainya adalah "Success" atau "InProgress", security_result.action disetel ke "ALLOW". |
properties.originalHost |
principal.hostname , principal.asset.hostname |
Dipetakan langsung dari kolom properties.originalHost . |
properties.originalRequestUriWithArgs |
additional.fields[].key:"originalRequestUriWithArgs", value.string_value |
Dipetakan langsung dari kolom properties.originalRequestUriWithArgs . |
properties.receivedBytes |
network.received_bytes |
Dipetakan langsung dari kolom properties.receivedBytes , dikonversi menjadi bilangan bulat yang tidak bertanda. |
properties.requestQuery |
additional.fields[].key:"requestQuery", value.string_value |
Dipetakan langsung dari kolom properties.requestQuery . |
properties.requestUri |
target.url |
Dipetakan langsung dari kolom properties.requestUri . |
properties.sentBytes |
network.sent_bytes |
Dipetakan langsung dari kolom properties.sentBytes , dikonversi menjadi bilangan bulat yang tidak bertanda. |
properties.serverResponseLatency |
additional.fields[].key:"Server Response Latency", value.string_value |
Dipetakan langsung dari kolom properties.serverResponseLatency . |
properties.serverRouted |
target.ip , target.asset.ip , target.port |
IP dan port diekstrak dari kolom properties.serverRouted menggunakan ekspresi reguler. |
properties.sslCipher |
network.tls.cipher |
Dipetakan langsung dari kolom properties.sslCipher . |
properties.sslClientCertificateIssuerName |
network.tls.server.certificate.issuer |
Dipetakan langsung dari kolom properties.sslClientCertificateIssuerName . |
properties.sslProtocol |
network.tls.version |
Dipetakan langsung dari kolom properties.sslProtocol . |
properties.timeTaken |
additional.fields[].key:"timeTaken", value.string_value |
Dipetakan langsung dari kolom properties.timeTaken . |
properties.transactionId |
network.session_id |
Dipetakan langsung dari kolom properties.transactionId . |
properties.userAgent |
network.http.user_agent , network.http.parsed_user_agent |
Dipetakan langsung dari kolom properties.userAgent . Selain itu, kolom dikonversi menjadi agen pengguna yang diuraikan dan dipetakan ke network.http.parsed_user_agent . |
properties.WAFEvaluationTime |
additional.fields[].key:"WAFEvaluationTime", value.string_value |
Dipetakan langsung dari kolom properties.WAFEvaluationTime . |
properties.WAFMode |
additional.fields[].key:"WAFMode", value.string_value |
Dipetakan langsung dari kolom properties.WAFMode . |
resourceId |
target.resource.id |
Dipetakan langsung dari kolom resourceId . |
resourceid |
target.resource.product_object_id |
Dipetakan langsung dari kolom resourceid . |
ruleName |
security_result.rule_name |
Dipetakan langsung dari kolom ruleName . |
time /timeStamp |
metadata.event_timestamp , timestamp |
Diuraikan sebagai stempel waktu menggunakan format RFC 3339 atau ISO8601. timeStamp lebih disarankan, tetapi time digunakan jika timeStamp tidak ada. |
(Logika Parser) | metadata.event_type |
Disetel ke "NETWORK_CONNECTION" jika pokok dan target ada, "STATUS_UPDATE" jika hanya pokok yang ada, dan "GENERIC_EVENT" jika tidak. |
(Logika Parser) | metadata.product_name |
Setel ke "Azure Gateway". |
(Logika Parser) | metadata.vendor_name |
Tetapkan ke "Microsoft". |
(Logika Parser) | has_principal |
Flag boolean, disetel ke "true" jika ada informasi utama (hostname, IP, atau port) yang diekstrak, dan "false" jika tidak. |
(Logika Parser) | has_target |
Flag boolean, ditetapkan ke "true" jika ada informasi target (nama host, IP, port, ID resource, atau URL) yang diekstrak, dan "false" jika tidak. |
(Logika Parser) | disambiguation_key |
Ditambahkan saat beberapa peristiwa diekstrak dari satu entri log. |