Raccogliere i log di Azure Application Gateway

Supportato in:

Questo documento spiega come raccogliere i log di Azure Application Gateway configurando un feed di Google Security Operations. Questo parser gestisce strutture JSON sia con un solo record sia con più record, estrae i campi dall'array "records", esegue conversioni di tipo di dati, mappa i campi all'UDM e arricchisce i dati con metadati e campi derivati come il tipo di connessione di rete. Gestisce inoltre una logica specifica per diversi valori operationName, estraendo indirizzi IP, sottoreti e altri dettagli di configurazione pertinenti.

Prima di iniziare

Assicurati di avere:

  • Un'istanza Google SecOps.
  • Accesso con privilegi a un abbonamento Azure.
  • Un ambiente (tenant) di Azure Application Gateway in Azure.

Configura l'account di archiviazione Azure

  1. Nella console di Azure, cerca Account di archiviazione.
  2. Fai clic su Crea.
  3. Specifica i valori per i seguenti parametri di input:
    • Abbonamento: seleziona l'abbonamento.
    • Gruppo di risorse: seleziona il gruppo di risorse.
    • Regione: seleziona la regione.
    • Prestazioni: seleziona il rendimento (consigliato standard).
    • Redundanza: seleziona la ridondanza (consigliata GRS o LRS).
    • Nome account di archiviazione: inserisci un nome per il nuovo account di archiviazione.
  4. Fai clic su Review + create (Rivedi e crea).
  5. Esamina la panoramica dell'account e fai clic su Crea.
  6. Nella pagina Panoramica dell'account di archiviazione, seleziona il sottomenu Chiavi di accesso in Sicurezza + reti.
  7. Fai clic su Mostra accanto a chiave1 o chiave2.
  8. Fai clic su Copia negli appunti per copiare la chiave.
  9. Salva la chiave in un luogo sicuro per utilizzarla in un secondo momento.
  10. Nella pagina Panoramica dell'account di archiviazione, seleziona il sottomenu Endpoint in Impostazioni.
  11. Fai clic su Copia negli appunti per copiare l'URL dell'endpoint del servizio Blob. (ad esempio https://<storageaccountname>.blob.core.windows.net)
  12. Salva l'URL dell'endpoint in un luogo sicuro per utilizzarlo in un secondo momento.

Configura Azure Application Gateway

  1. Accedi al portale di Azure.
  2. Vai al gruppo di risorse che ti interessa.
  3. Seleziona Application Gateway (viene visualizzata la finestra Application Gateway).
  4. Nella sezione Monitoraggio, seleziona Impostazioni di diagnostica > Attiva la diagnostica.
  5. Seleziona Aggiungi impostazione di diagnostica (la finestra Impostazioni di diagnostica mostra le impostazioni per i log di diagnostica).
  6. Nella sezione log, segui questi passaggi:
    1. Seleziona la casella di controllo ApplicationGatewayAccessLog.
    2. Seleziona la casella di controllo ApplicationGatewayFirewallLog.
  7. Per archiviare i log nell'account di archiviazione:
    1. Seleziona la casella di controllo Archivia in un account di archiviazione.
    2. Nell'elenco Abbonamento, seleziona un abbonamento esistente.
    3. Nell'elenco Account archiviazione, seleziona un account archiviazione esistente.

Configura un feed in Google SecOps per importare i log di Azure Application Gateway

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo.
  3. Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log di Azure Application Gateway).
  4. Seleziona Microsoft Azure Blob Storage come Tipo di origine.
  5. Seleziona Azure Application Gateway come Tipo di log.
  6. Fai clic su Avanti.
  7. Specifica i valori per i seguenti parametri di input:

    • URI Azure: l'URL dell'endpoint blob.
      • ENDPOINT_URL/BLOB_NAME
        • Sostituisci quanto segue:
          • ENDPOINT_URL: l'URL dell'endpoint del blob. (https://<storageaccountname>.blob.core.windows.net)
          • BLOB_NAME: il nome del blob. (ad esempio insights-logs-<logname>)
    • L'URI è un: seleziona il TIPO DI URI in base alla configurazione dello stream di log (File singolo | Directory | Directory che include sottodirectory).
    • Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
    • Chiave condivisa: la chiave di accesso ad Azure Blob Storage.
    • Spazio dei nomi degli asset: lo spazio dei nomi degli asset.
    • Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
  8. Fai clic su Avanti.

  9. Rivedi la configurazione del nuovo feed nella schermata Concludi e poi fai clic su Invia.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
Category metadata.product_event_type Mappato direttamente dal campo Category.
ClientOperationId additional.fields[].key:"ClientOperationId", value.string_value Mappato direttamente dal campo ClientOperationId.
CorrelationRequestId additional.fields[].key:"CorrelationRequestId", value.string_value Mappato direttamente dal campo CorrelationRequestId.
GatewayManagerVersion additional.fields[].key:"GatewayManagerVersion", value.string_value Mappato direttamente dal campo GatewayManagerVersion.
category metadata.product_event_type Mappato direttamente dal campo category.
level security_result.severity Mappato direttamente dal campo level, convertito in maiuscolo. Se il valore è "WARNING", la gravità è impostata su "HIGH" e security_result.severity_details è impostato sul valore originale.
properties.clientIP principal.ip, principal.asset.ip Mappato direttamente dal campo properties.clientIP.
properties.clientPort principal.port Mappato direttamente dal campo properties.clientPort, convertito in un numero intero.
properties.clientResponseTime additional.fields[].key:"clientResponseTime", value.string_value Mappato direttamente dal campo properties.clientResponseTime.
properties.configuration.BgpConfiguration.GatewayConfig.Asn security_result.detection_fields[].key:"ASN", value Mappato direttamente dal campo properties.configuration.BgpConfiguration.GatewayConfig.Asn quando operationName è "SetGatewayConfiguration".
properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress target.ip, target.asset.ip Mappato direttamente dal campo properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress quando operationName è "SetGatewayConfiguration".
properties.configuration.BgpConfiguration.GatewayConfig.PeerType security_result.detection_fields[].key:"PeerType", value Mappato direttamente dal campo properties.configuration.BgpConfiguration.GatewayConfig.PeerType quando operationName è "SetGatewayConfiguration".
properties.configuration.IkeVersion principal.resource.attribute.labels[].key:"ike_version", value Mappato direttamente dal campo properties.configuration.IkeVersion quando operationName è "SetConnectionConfiguration".
properties.configuration.LocalSubnets principal.resource.attribute.labels[].key:"local subnets", value Stringa concatenata di indirizzi IP dall'array properties.configuration.LocalSubnets quando operationName è "SetConnectionConfiguration".
properties.configuration.LocalTunnelEndpoint principal.ip, principal.asset.ip Mappato direttamente dal campo properties.configuration.LocalTunnelEndpoint quando operationName è "SetConnectionConfiguration".
properties.configuration.Name principal.hostname, principal.asset.hostname Mappato direttamente dal campo properties.configuration.Name. Se è vuoto, il valore viene preso da properties.instance.
properties.configuration.RemoteSite target.hostname, target.asset.hostname Mappato direttamente dal campo properties.configuration.RemoteSite.
properties.configuration.RemoteSubnets principal.resource.attribute.labels[].key:"remote subnets", value Stringa concatenata di indirizzi IP dall'array properties.configuration.RemoteSubnets quando operationName è "SetConnectionConfiguration".
properties.configuration.RemoteTunnelEndpoint target.ip, target.asset.ip Mappato direttamente dal campo properties.configuration.RemoteTunnelEndpoint quando operationName è "SetConnectionConfiguration".
properties.configuration.VIPAddress principal.ip, principal.asset.ip Mappato direttamente dal campo properties.configuration.VIPAddress quando operationName è "SetGatewayConfiguration".
properties.configuration.VirtualNetworkRanges principal.resource.attribute.labels[].key:"virutal network ranges", value Stringa concatenata di indirizzi IP dall'array properties.configuration.VirtualNetworkRanges quando operationName è "SetGatewayConfiguration".
properties.configuration.VirtualNetworkSubnets principal.resource.attribute.labels[].key:"virtual network subnets", value Stringa concatenata di indirizzi IP dall'array properties.configuration.VirtualNetworkSubnets quando operationName è "SetGatewayConfiguration".
properties.error_info additional.fields[].key:"error_info", value.string_value Mappato direttamente dal campo properties.error_info.
properties.host principal.hostname, principal.asset.hostname Mappato direttamente dal campo properties.host se properties.originalHost è vuoto.
properties.httpMethod network.http.method Mappato direttamente dal campo properties.httpMethod.
properties.httpStatus network.http.response_code Mappato direttamente dal campo properties.httpStatus, convertito in un numero intero.
properties.httpVersion network.application_protocol Imposta su "HTTP" se il campo properties.httpVersion contiene "HTTP".
properties.instance principal.hostname, principal.asset.hostname Utilizzato come valore per principal.hostname se properties.configuration.Name è vuoto.
properties.message metadata.description Mappato direttamente dal campo properties.message.
properties.operationName additional.fields[].key:"operationName", value.string_value Mappato direttamente dal campo properties.operationName.
properties.operationStatus security_result.category_details Mappato direttamente dal campo properties.operationStatus. Se il valore è "Success" o "InProgress", security_result.action è impostato su "ALLOW".
properties.originalHost principal.hostname, principal.asset.hostname Mappato direttamente dal campo properties.originalHost.
properties.originalRequestUriWithArgs additional.fields[].key:"originalRequestUriWithArgs", value.string_value Mappato direttamente dal campo properties.originalRequestUriWithArgs.
properties.receivedBytes network.received_bytes Mappato direttamente dal campo properties.receivedBytes, convertito in un numero intero non firmato.
properties.requestQuery additional.fields[].key:"requestQuery", value.string_value Mappato direttamente dal campo properties.requestQuery.
properties.requestUri target.url Mappato direttamente dal campo properties.requestUri.
properties.sentBytes network.sent_bytes Mappato direttamente dal campo properties.sentBytes, convertito in un numero intero non firmato.
properties.serverResponseLatency additional.fields[].key:"Server Response Latency", value.string_value Mappato direttamente dal campo properties.serverResponseLatency.
properties.serverRouted target.ip, target.asset.ip, target.port L'IP e la porta vengono estratti dal campo properties.serverRouted utilizzando un'espressione regolare.
properties.sslCipher network.tls.cipher Mappato direttamente dal campo properties.sslCipher.
properties.sslClientCertificateIssuerName network.tls.server.certificate.issuer Mappato direttamente dal campo properties.sslClientCertificateIssuerName.
properties.sslProtocol network.tls.version Mappato direttamente dal campo properties.sslProtocol.
properties.timeTaken additional.fields[].key:"timeTaken", value.string_value Mappato direttamente dal campo properties.timeTaken.
properties.transactionId network.session_id Mappato direttamente dal campo properties.transactionId.
properties.userAgent network.http.user_agent, network.http.parsed_user_agent Mappato direttamente dal campo properties.userAgent. Inoltre, il campo viene convertito in uno user-agent analizzato e mappato a network.http.parsed_user_agent.
properties.WAFEvaluationTime additional.fields[].key:"WAFEvaluationTime", value.string_value Mappato direttamente dal campo properties.WAFEvaluationTime.
properties.WAFMode additional.fields[].key:"WAFMode", value.string_value Mappato direttamente dal campo properties.WAFMode.
resourceId target.resource.id Mappato direttamente dal campo resourceId.
resourceid target.resource.product_object_id Mappato direttamente dal campo resourceid.
ruleName security_result.rule_name Mappato direttamente dal campo ruleName.
time/timeStamp metadata.event_timestamp, timestamp Analizzata come timestamp utilizzando il formato RFC 3339 o ISO8601. È preferibile utilizzare timeStamp, ma se non è presente, viene utilizzato time.timeStamp
(Parser Logic) metadata.event_type Imposta su "NETWORK_CONNECTION" se sono presenti sia il principale che la destinazione, su "STATUS_UPDATE" se è presente solo il principale e su "GENERIC_EVENT" in caso contrario.
(Parser Logic) metadata.product_name Imposta su "Azure Gateway".
(Parser Logic) metadata.vendor_name Imposta su "Microsoft".
(Parser Logic) has_principal Un flag booleano impostato su "true" se vengono estratte informazioni principali (nome host, IP o porta) e su "false" in caso contrario.
(Parser Logic) has_target Un flag booleano impostato su "true" se vengono estratte informazioni di destinazione (nome host, IP, porta, ID risorsa o URL) e su "false" in caso contrario.
(Parser Logic) disambiguation_key Aggiunta quando più eventi vengono estratti da una singola voce di log.

Modifiche

2024-04-19

  • È stato aggiunto il supporto per più log JSON degli eventi.

2023-12-22

  • "resourceid" è stato mappato a "target.resource.id".
  • "properties.operationStatus" è stato mappato a "security_result.category_details".
  • "properties.configuration.Name" è stato mappato a "principal.hostname".
  • "properties.message" è stato mappato a "metadata.description".
  • "properties.configuration.RemoteStie" è stato mappato a "target.hostname".
  • "level" è stato mappato a "security_result.severity_details".
  • "properties.configuration.Ikeversion" è stato mappato a "principal.resource.attribute.labels".
  • "properties.configuration.LocalTunnelEndpoint" è stato mappato a "principal.ip".
  • "properties.configuration.RemoteTunnelEndpoint" è stato mappato a "target.ip".
  • "properties.configuration.LocalSubnets", "properties.configuration.RemoteSubnets", "properties.configuration.VirtualNetworkRanges" e "properties.configuration.VirtualNetworkSubnets" sono stati mappati a "principal.resource.attribute.labels".
  • "properties.configuration.VIPAddress" è stato mappato a "principal.ip".
  • "properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress" è stato mappato a "targrt.ip".
  • "properties.configuration.BgpConfiguration.GatewayConfig.PeerType" e "properties.configuration.BgpConfiguration.GatewayConfig.Asn" sono stati mappati a "security_result.detection_fields".

2023-11-16

  • Parser appena creato.