Recuperare i log del gateway applicazione di Azure
Questo documento spiega come raccogliere i log di Azure Application Gateway configurando un feed di 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 un luogo sicuro 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 Storage account, 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 > Aggiungi nuovo
- Hub dei contenuti > Pacchetti di contenuti > Inizia
Come configurare il feed del gateway applicativo Azure
- Fai clic sul pacchetto Azure Platform.
- Individua il tipo di log Azure Application Gateway e fai clic su Aggiungi nuovo feed.
Specifica i valori per i seguenti campi:
- Tipo di origine: Microsoft Azure Blob Storage V2.
- 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:
- Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze di importazione.
- Età massima dei file: include i file modificati nell'ultimo numero di giorni. Il valore predefinito è 180 giorni.
- Chiave condivisa: la chiave condivisa (una stringa casuale di 512 bit con codifica Base64) utilizzata per accedere alle risorse Azure.
Opzioni avanzate
- Nome feed: un valore precompilato che identifica il feed.
- Spazio dei nomi dell'asset: spazio dei nomi associato al feed.
- Etichette di importazione: etichette applicate a tutti gli eventi di questo feed.
Fai clic su Crea feed.
Per ulteriori informazioni sulla configurazione di più feed per diversi tipi di log all'interno di questa famiglia di prodotti, consulta Configurare i feed per prodotto.
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 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 "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. |