Raccogliere i log del gateway applicazione di Azure
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
- Nella console Azure, cerca Storage accounts.
- Fai clic su Crea.
- 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.
- Fai clic su Review + create (Rivedi e crea).
- Controlla la panoramica dell'account e fai clic su Crea.
- Nella pagina Panoramica dell'account di archiviazione, seleziona il sottomenu Chiavi di accesso in Sicurezza e networking.
- Fai clic su Mostra accanto a key1 o key2.
- Fai clic su Copia negli appunti per copiare la chiave.
- Salva la chiave in una posizione sicura per utilizzarla in un secondo momento.
- Nella pagina Panoramica account di archiviazione, seleziona il sottomenu Endpoint in Impostazioni.
- Fai clic su Copia negli appunti per copiare l'URL dell'endpoint del servizio Blob. (ad esempio,
https://<storageaccountname>.blob.core.windows.net
) - Salva l'URL dell'endpoint in una posizione sicura per utilizzarlo in un secondo momento.
Come configurare Azure Application Gateway
- Accedi al portale di Azure.
- Vai al gruppo di risorse che ti interessa.
- Seleziona Application Gateway (viene visualizzata la finestra Application Gateway).
- Nella sezione Monitoraggio, seleziona Impostazioni di diagnostica > Attiva diagnostica.
- Seleziona Aggiungi impostazione diagnostica (la finestra Impostazioni diagnostiche mostra le impostazioni per i log diagnostici).
- Nella sezione Log, segui questi passaggi:
- Seleziona la casella di controllo ApplicationGatewayAccessLog.
- Seleziona la casella di controllo ApplicationGatewayFirewallLog.
- Per archiviare i log nell'account di archiviazione:
- Seleziona la casella di controllo Archivia in un account di archiviazione.
- Nell'elenco Abbonamento, seleziona un abbonamento esistente.
- 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:
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Nella pagina successiva, fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log di Azure Application Gateway).
- Seleziona Microsoft Azure Blob Storage come Tipo di origine.
- Seleziona Azure Application Gateway come Tipo di log.
- Fai clic su Avanti.
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>
)
- Sostituisci quanto segue:
- 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.
- URI di Azure: l'URL dell'endpoint blob.
Fai clic su Avanti.
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>
)
- Sostituisci quanto segue:
- 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. |