Raccogliere i log del gateway applicazione di Azure

Supportato in:

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

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Istanza Google SecOps
  • Accesso con privilegi a un abbonamento Azure
  • Un ambiente (tenant) Azure Application Gateway in Azure

Configura l'account di archiviazione di Azure

  1. Nella console Azure, cerca Storage accounts.
  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.
    • Rendimento: seleziona il rendimento (consigliato Standard).
    • Ridondanza: 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. Controlla 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 e networking.
  7. Fai clic su Mostra accanto a key1 o key2.
  8. Fai clic su Copia negli appunti per copiare la chiave.
  9. Salva la chiave in una posizione sicura per utilizzarla in un secondo momento.
  10. Nella pagina Panoramica 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 una posizione sicura per utilizzarlo in un secondo momento.

Come configurare 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 diagnostica.
  5. Seleziona Aggiungi impostazione diagnostica (la finestra Impostazioni diagnostiche mostra le impostazioni per i log diagnostici).
  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 di archiviazione, seleziona un account di archiviazione esistente.

Configurare i feed

Esistono due diversi punti di accesso per configurare i feed nella piattaforma Google SecOps:

  • Impostazioni SIEM > Feed
  • Hub dei contenuti > Pacchetti di contenuti

Configurare i feed da Impostazioni SIEM > Feed

Per configurare più feed per diversi tipi di log all'interno di questa famiglia di prodotti, consulta Configurare i feed per prodotto.

Per configurare un singolo feed:

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

    • URI di Azure: l'URL dell'endpoint blob.
      • ENDPOINT_URL/BLOB_NAME
        • Sostituisci quanto segue:
          • ENDPOINT_URL: l'URL dell'endpoint 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 di importazione.
    • Chiave condivisa: la chiave di accesso ad Azure Blob Storage.
    • Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
    • Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
  9. Fai clic su Avanti.

  10. Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.

Configurare i feed dall'hub dei contenuti

Specifica i valori per i seguenti campi:

  • URI di Azure: l'URL dell'endpoint blob.
    • ENDPOINT_URL/BLOB_NAME
      • Sostituisci quanto segue:
        • ENDPOINT_URL: l'URL dell'endpoint blob (https://<storageaccountname>.blob.core.windows.net)
        • BLOB_NAME: il nome del blob (ad esempio, insights-logs-<logname>)
  • URI è un: seleziona il TIPO DI URI in base alla configurazione del flusso di log (Singolo file | Directory | Directory che include sottodirectory).
  • Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze di importazione.
  • Chiave condivisa: la chiave di accesso ad Azure Blob Storage.

Opzioni avanzate

  • Nome feed: un valore precompilato che identifica il feed.
  • Tipo di origine: metodo utilizzato per raccogliere i log in Google SecOps.
  • Spazio dei nomi dell'asset: spazio dei nomi associato al feed.
  • Etichette di importazione: etichette applicate a tutti gli eventi di questo feed.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
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 dell'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 dell'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 dell'array properties.configuration.VirtualNetworkRanges quando operationName è "SetGatewayConfiguration".
properties.configuration.VirtualNetworkSubnets principal.resource.attribute.labels[].key:"virtual network subnets", value Stringa concatenata di indirizzi IP dell'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 "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 senza segno.
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 senza segno.
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 Analizzato come timestamp utilizzando il formato RFC 3339 o ISO8601. È preferibile timeStamp, ma time viene utilizzato se timeStamp non è presente.
(Parser Logic) metadata.event_type Impostato su "NETWORK_CONNECTION" se sono presenti sia l'entità che la destinazione, su "STATUS_UPDATE" se è presente solo l'entità 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 Aggiunto quando vengono estratti più eventi da una singola voce di log.