Raccogliere i log di Azure Application Gateway
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
- Nella console di Azure, cerca Account di archiviazione.
- 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.
- 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.
- Fai clic su Review + create (Rivedi e crea).
- Esamina la panoramica dell'account e fai clic su Crea.
- Nella pagina Panoramica dell'account di archiviazione, seleziona il sottomenu Chiavi di accesso in Sicurezza + reti.
- Fai clic su Mostra accanto a chiave1 o chiave2.
- 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 dell'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 un luogo sicuro per utilizzarlo in un secondo momento.
Configura 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 la diagnostica.
- Seleziona Aggiungi impostazione di diagnostica (la finestra Impostazioni di diagnostica mostra le impostazioni per i log di diagnostica).
- 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 archiviazione, seleziona un account archiviazione esistente.
Configura un feed in Google SecOps per importare i log di Azure Application Gateway
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- 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 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 esempioinsights-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.
- 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.
- URI Azure: l'URL dell'endpoint blob.
Fai clic su Avanti.
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.