Mengumpulkan log Azure Application Gateway

Didukung di:

Dokumen ini menjelaskan cara mengumpulkan log Azure Application Gateway dengan menyiapkan feed Google Security Operations. Parser ini menangani struktur JSON satu dan multi-data, mengekstrak kolom dari array "data", melakukan konversi jenis data, memetakan kolom ke UDM, dan memperkaya data dengan metadata dan kolom turunan seperti jenis koneksi jaringan. Fungsi ini juga menangani logika tertentu untuk berbagai nilai operationName, mengekstrak alamat IP, subnet, dan detail konfigurasi lainnya yang relevan.

Sebelum memulai

Pastikan Anda memiliki:

  • Instance Google SecOps.
  • Akses dengan hak istimewa ke langganan Azure.
  • Lingkungan gateway aplikasi Azure (tenant) di Azure.

Mengonfigurasi Akun Azure Storage

  1. Di konsol Azure, telusuri Storage accounts.
  2. Klik Buat.
  3. 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.
  4. Klik Review + create.
  5. Tinjau ringkasan akun, lalu klik Buat.
  6. Dari halaman Ringkasan Akun Penyimpanan, pilih submenu Kunci akses di Keamanan + jaringan.
  7. Klik Tampilkan di samping kunci1 atau kunci2
  8. Klik Salin ke papan klip untuk menyalin kunci.
  9. Simpan kunci di lokasi yang aman untuk digunakan nanti.
  10. Dari halaman Ringkasan Akun Penyimpanan, pilih submenu Endpoint di Setelan.
  11. Klik Salin ke papan klip untuk menyalin URL endpoint Layanan blob. (misalnya, https://<storageaccountname>.blob.core.windows.net)
  12. Simpan URL endpoint di lokasi yang aman untuk digunakan nanti.

Mengonfigurasi Azure Application Gateway

  1. Login ke portal Azure.
  2. Buka grup resource yang Anda inginkan.
  3. Pilih Application gateway (jendela Application gateway akan muncul).
  4. Di bagian Monitoring, pilih Setelan diagnostik > Aktifkan diagnostik.
  5. Pilih Tambahkan setelan diagnostik (jendela Setelan diagnostik menampilkan setelan untuk log diagnostik).
  6. Di bagian log, lakukan tindakan berikut:
    1. Centang kotak ApplicationGatewayAccessLog.
    2. Centang kotak ApplicationGatewayFirewallLog.
  7. Untuk menyimpan log di akun penyimpanan, lakukan tindakan berikut:
    1. Centang kotak Arsipkan ke akun penyimpanan.
    2. Di daftar Langganan, pilih langganan yang ada.
    3. Dalam daftar Storage account, pilih akun penyimpanan yang ada.

Mengonfigurasi feed di Google SecOps untuk menyerap log Azure Application Gateway

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan baru.
  3. Di kolom Feed name, masukkan nama untuk feed (misalnya, Azure Application Gateway Logs).
  4. Pilih Microsoft Azure Blob Storage sebagai Jenis sumber.
  5. Pilih Azure Application Gateway sebagai Log type.
  6. Klik Berikutnya.
  7. 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. (misalnya, insights-logs-<logname>)
    • 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.
  8. Klik Berikutnya.

  9. Tinjau konfigurasi feed baru Anda di layar Finalize, lalu klik Submit.

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 ke huruf besar. Jika nilainya adalah "WARNING", tingkat keparahan ditetapkan ke "HIGH" dan security_result.severity_details ditetapkan ke nilai asli.
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 jika operationName adalah "SetGatewayConfiguration".
properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress target.ip, target.asset.ip Dipetakan langsung dari kolom properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress jika operationName adalah "SetGatewayConfiguration".
properties.configuration.BgpConfiguration.GatewayConfig.PeerType security_result.detection_fields[].key:"PeerType", value Dipetakan langsung dari kolom properties.configuration.BgpConfiguration.GatewayConfig.PeerType jika 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 jika 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 Tetapkan 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 "Success" atau "InProgress", security_result.action ditetapkan 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 tanpa tanda tangan.
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 tanpa tanda tangan.
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 Diurai sebagai stempel waktu menggunakan format RFC 3339 atau ISO8601. timeStamp lebih disarankan, tetapi time digunakan jika timeStamp tidak ada.
(Logika Parser) metadata.event_type Tetapkan ke "NETWORK_CONNECTION" jika akun utama dan target ada, "STATUS_UPDATE" jika hanya akun utama yang ada, dan "GENERIC_EVENT" jika tidak.
(Logika Parser) metadata.product_name Tetapkan ke "Azure Gateway".
(Logika Parser) metadata.vendor_name Tetapkan ke "Microsoft".
(Logika Parser) has_principal Flag boolean, ditetapkan ke "true" jika informasi utama (nama host, IP, atau port) diekstrak, dan "false" jika tidak.
(Logika Parser) has_target Flag boolean, ditetapkan ke "true" jika informasi target (nama host, IP, port, ID resource, atau URL) diekstrak, dan "false" jika tidak.
(Logika Parser) disambiguation_key Ditambahkan saat beberapa peristiwa diekstrak dari satu entri log.

Perubahan

2024-04-19

  • Menambahkan dukungan untuk beberapa log JSON peristiwa.

2023-12-22

  • Memetakan "resourceid" ke "target.resource.id".
  • Memetakan "properties.operationStatus" ke "security_result.category_details".
  • Memetakan "properties.configuration.Name" ke "principal.hostname".
  • Memetakan "properties.message" ke "metadata.description".
  • Memetakan "properties.configuration.RemoteStie" ke "target.hostname".
  • Memetakan "level" ke "security_result.severity_details".
  • Memetakan "properties.configuration.Ikeversion" ke "principal.resource.attribute.labels".
  • Memetakan "properties.configuration.LocalTunnelEndpoint" ke "principal.ip".
  • Memetakan "properties.configuration.RemoteTunnelEndpoint" ke "target.ip".
  • Memetakan "properties.configuration.LocalSubnets", "properties.configuration.RemoteSubnets", "properties.configuration.VirtualNetworkRanges", dan "properties.configuration.VirtualNetworkSubnets" ke "principal.resource.attribute.labels".
  • Memetakan "properties.configuration.VIPAddress" ke "principal.ip".
  • Memetakan "properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress" ke "targrt.ip".
  • Memetakan "properties.configuration.BgpConfiguration.GatewayConfig.PeerType" dan "properties.configuration.BgpConfiguration.GatewayConfig.Asn" ke "security_result.detection_fields".

2023-11-16

  • Parser yang baru dibuat.