Log delle risorse per Web application firewall di Azure

È possibile monitorare le risorse di Web Application Firewall usando i log. È possibile salvare le prestazioni, l'accesso e altri dati o utilizzarli da una risorsa a scopo di monitoraggio.

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Log di diagnostica

In Azure è possibile usare diversi tipi di log per gestire e risolvere i problemi dei gateway applicazione. Alcuni di questi log sono accessibili tramite il portale. Tutti i log possono essere estratti dall'archiviazione BLOB di Azure e visualizzati in strumenti diversi, ad esempio i log di Monitoraggio di Azure, Excel e Power BI. L'elenco seguente contiene altre informazioni sui diversi tipi di log:

  • Log attività: è possibile usare i log attività di Azure per visualizzare tutte le operazioni inviate alla sottoscrizione di Azure e il relativo stato. Le voci dei log attività vengono raccolte per impostazione predefinita e possono essere visualizzate nel portale di Azure.
  • Log di risorsa Accesso: è possibile usare questo log per visualizzare i modelli di accesso al gateway applicazione e analizzare informazioni importanti. I dati includono indirizzo IP del chiamante, URL richiesto, latenza della risposta, codice restituito, byte in ingresso e in uscita. Questo log contiene singoli record per ogni richiesta e associa la richiesta al gateway applicazione univoco che ha elaborato la richiesta. Le istanze univoche del gateway applicazione possono essere identificate dal valore instanceId della proprietà.
  • Log della risorsa Prestazioni: è possibile usare questo log per visualizzare le prestazioni delle istanze del gateway applicazione. Questo log acquisisce le informazioni sulle prestazioni di ogni istanza, inclusi il totale delle richieste servite, la velocità effettiva in byte, il totale delle richieste non riuscite e il numero delle istanze back-end integre e non integre. Il log delle prestazioni viene raccolto ogni 60 secondi. Il log delle prestazioni è disponibile solo per lo SKU v1. Per lo SKU v2, usare Metriche per i dati sulle prestazioni.
  • Log della risorsa Firewall: è possibile usare questo log per visualizzare le richieste registrate tramite la modalità di rilevamento o prevenzione di un gateway applicazione configurato con il web application firewall.

Nota

I log sono disponibili solo per le risorse distribuite nel modello di distribuzione di Azure Resource Manager. Non è possibile usare i log per le risorse nel modello di distribuzione classica. Per altre informazioni sui due modelli, vedere le informazioni sulla distribuzione di Resource Manager e la distribuzione classica.

Sono disponibili tre opzioni di archiviazione dei log:

  • Account di archiviazione: ideali quando i log vengono archiviati per un periodo più lungo ed esaminati quando necessario.
  • Hub eventi: ottima opzione per l'integrazione con altri strumenti di gestione delle informazioni di sicurezza e degli eventi (SEIM) per ricevere avvisi sulle risorse.
  • Log di Monitoraggio di Azure: i log di Monitoraggio di Azure sono ideali per il monitoraggio generale in tempo reale dell'applicazione o per l'analisi delle tendenze.

Abilitare la registrazione tramite PowerShell

Registrazione attività viene abilitata automaticamente per tutte le risorse di Resource Manager. È necessario abilitare la registrazione degli accessi e delle prestazioni per iniziare a raccogliere i dati disponibili tramite tali log. Per abilitare la registrazione, seguire questa procedura:

  1. Prendere nota dell'ID risorsa dell'account di archiviazione in cui vengono archiviati i dati dei log. Il valore ha il formato seguente: /subscriptions/<subscriptionId>/resourceGroups/<nome gruppo di risorse>/providers/Microsoft.Storage/storageAccounts/<nome account archiviazione>. È possibile usare qualsiasi account di archiviazione della sottoscrizione. Per trovare queste informazioni è possibile usare il portale di Azure.

    Portale: ID risorsa dell'account di archiviazione

  2. Prendere nota dell'ID risorsa del gateway applicazione per cui è abilitata la registrazione. Il valore ha il formato seguente: /subscriptions/<subscriptionId>/resourceGroups/<nome gruppo di risorse>/providers/Microsoft.Network/applicationGateways/<nome gateway applicazione>. Per trovare queste informazioni è possibile usare il portale.

    Portale: ID risorsa del gateway applicazione

  3. Abilitare la registrazione delle risorse usando il cmdlet di PowerShell seguente:

    Set-AzDiagnosticSetting  -ResourceId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Network/applicationGateways/<application gateway name> -StorageAccountId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name> -Enabled $true     
    

Suggerimento

I log attività non richiedono un account di archiviazione separato. Per l'uso del servizio di archiviazione per la registrazione degli accessi e delle prestazioni è previsto un addebito.

Abilitare la registrazione tramite il portale di Azure

  1. Nel portale di Azure, trovare la risorsa e selezionare Impostazioni di diagnostica.

    Per il gateway applicazione sono disponibili tre log:

    • Log di accesso
    • Log delle prestazioni
    • Log del firewall
  2. Selezionare Aggiungi impostazione di diagnostica.

  3. La pagina Impostazione di diagnostica fornisce le impostazioni per i log delle risorse. In questo esempio viene usato Log Analytics per archiviare i log. È anche possibile usare un hub eventi, un account di archiviazione o una soluzione partner per salvare i log delle risorse.

    Screenshot che mostra le impostazioni di diagnostica.

  4. Digitare un nome per le impostazioni, confermare e selezionare Salva.

Log attività

Azure genera il log attività per impostazione predefinita. I log vengono conservati per 90 giorni nell'archivio dei log eventi di Azure. Per altre informazioni sui log, leggere l'articolo Visualizzare eventi e log attività.

Log di accesso

Il log di accesso viene generato solo se è stato abilitato in ogni istanza del gateway applicazione, come descritto nei passaggi precedenti. I dati vengono archiviati nell'account di archiviazione specificato quando è stata abilitata la registrazione. Ogni accesso del gateway applicazione viene registrato in formato JSON, come illustrato nell'esempio seguente per v1:

Valore Descrizione
instanceId Istanza del gateway applicazione che ha gestito la richiesta.
clientIP IP di origine della richiesta.
clientPort Porta di origine della richiesta.
httpMethod Metodo HTTP usato dalla richiesta.
requestUri URI della richiesta ricevuta.
RequestQuery Indirizzato dal server: istanza del pool back-end inviata alla richiesta.
X-AzureApplicationGateway-LOG-ID: ID di correlazione usato per la richiesta. Può essere usato per risolvere i problemi di traffico nei server back-end.
SERVER-STATUS: codice di risposta HTTP ricevuto dal gateway applicazione dal back-end.
UserAgent Agente utente dell'intestazione della richiesta HTTP.
httpStatus Codice di stato HTTP restituito al client dal gateway applicazione.
httpVersion Versione HTTP della richiesta.
receivedBytes Dimensione del pacchetto ricevuto, espressa in byte.
sentBytes Dimensione del pacchetto inviato, espressa in byte.
timeTaken Periodo di tempo in millisecondi impiegato per l'elaborazione di una richiesta e l'invio della risposta. Questo valore corrisponde all'intervallo di tempo intercorso dal momento in cui il gateway applicazione riceve il primo byte di una richiesta HTTP al termine dell'operazione di invio della risposta. È importante notare che il campo Tempo impiegato include in genere il tempo della trasmissione in rete dei pacchetti di richiesta e risposta.
sslEnabled Indica se la comunicazione con i pool back-end ha usato TLS/SSL. I valori validi sono on e off.
host Nome host con cui la richiesta è stata inviata al server back-end. Se sottoposto a ovveride, il nome host back-end rifletterà tale sostituzione.
originalHost Nome host per il quale il gateway applicazione ha ricevuto la richiesta dal client.
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayAccess",
    "timestamp": "2017-04-26T19:27:38Z",
    "category": "ApplicationGatewayAccessLog",
    "properties": {
        "instanceId": "ApplicationGatewayRole_IN_0",
        "clientIP": "203.0.113.97",
        "clientPort": 46886,
        "httpMethod": "GET",
        "requestUri": "/phpmyadmin/scripts/setup.php",
        "requestQuery": "X-AzureApplicationGateway-CACHE-HIT=0&SERVER-ROUTED=10.4.0.4&X-AzureApplicationGateway-LOG-ID=aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e&SERVER-STATUS=404",
        "userAgent": "-",
        "httpStatus": 404,
        "httpVersion": "HTTP/1.0",
        "receivedBytes": 65,
        "sentBytes": 553,
        "timeTaken": 205,
        "sslEnabled": "off",
        "host": "www.contoso.com",
        "originalHost": "www.contoso.com"
    }
}

Per il gateway applicazione e WAF v2, i log mostrano altre informazioni:

Valore Descrizione
instanceId Istanza del gateway applicazione che ha gestito la richiesta.
clientIP IP di origine della richiesta.
clientPort Porta di origine della richiesta.
httpMethod Metodo HTTP usato dalla richiesta.
requestUri URI della richiesta ricevuta.
UserAgent Agente utente dell'intestazione della richiesta HTTP.
httpStatus Codice di stato HTTP restituito al client dal gateway applicazione.
httpVersion Versione HTTP della richiesta.
receivedBytes Dimensione del pacchetto ricevuto, espressa in byte.
sentBytes Dimensione del pacchetto inviato, espressa in byte.
timeTaken Periodo di tempo in millisecondi impiegato per l'elaborazione di una richiesta e l'invio della risposta. Questo valore corrisponde all'intervallo di tempo intercorso dal momento in cui il gateway applicazione riceve il primo byte di una richiesta HTTP al termine dell'operazione di invio della risposta. È importante notare che il campo Tempo impiegato include in genere il tempo della trasmissione in rete dei pacchetti di richiesta e risposta.
sslEnabled Indica se la comunicazione con i pool back-end ha usato TLS. I valori validi sono on e off.
sslCipher Suite di crittografia usata per la comunicazione TLS (se TLS è abilitato).
sslProtocol Protocollo TLS usato (se TLS è abilitato).
serverRouted Server back-end a cui il gateway applicazione indirizza la richiesta.
serverStatus Codice di stato HTTP del server back-end.
serverResponseLatency Latenza della risposta dal server back-end.
host Indirizzo indicato nell'intestazione host della richiesta.
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayAccess",
    "time": "2017-04-26T19:27:38Z",
    "category": "ApplicationGatewayAccessLog",
    "properties": {
        "instanceId": "appgw_1",
        "clientIP": "203.0.113.97",
        "clientPort": 46886,
        "httpMethod": "GET",
        "requestUri": "/phpmyadmin/scripts/setup.php",
        "userAgent": "-",
        "httpStatus": 404,
        "httpVersion": "HTTP/1.0",
        "receivedBytes": 65,
        "sentBytes": 553,
        "timeTaken": 205,
        "sslEnabled": "off",
        "sslCipher": "",
        "sslProtocol": "",
        "serverRouted": "104.41.114.59:80",
        "serverStatus": "200",
        "serverResponseLatency": "0.023",
        "host": "www.contoso.com",
    }
}

Log delle prestazioni

Il log delle prestazioni viene generato solo se è stato abilitato in ogni istanza del gateway applicazione, come descritto nei passaggi precedenti. I dati vengono archiviati nell'account di archiviazione specificato quando è stata abilitata la registrazione. I dati del log delle prestazioni vengono generati a intervalli di un minuto. È disponibile solo per lo SKU v1. Per lo SKU v2, usare Metriche per i dati sulle prestazioni. Vengono registrati i dati seguenti:

Valore Descrizione
instanceId Istanza del gateway applicazione per cui vengono generati i dati delle prestazioni. Per un gateway applicazione a più istanze viene visualizzata una riga per ogni istanza.
healthyHostCount Numero di host integri nel pool back-end.
unHealthyHostCount Numero di host non integri nel pool back-end.
requestCount Numero di richieste gestite.
latenza Latenza media in millisecondi delle richieste dall'istanza al back-end che gestisce le richieste.
failedRequestCount Numero di richieste non riuscite.
throughput Velocità effettiva media dall'ultimo log, misurata in byte al secondo.
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayPerformance",
    "time": "2016-04-09T00:00:00Z",
    "category": "ApplicationGatewayPerformanceLog",
    "properties":
    {
        "instanceId":"ApplicationGatewayRole_IN_1",
        "healthyHostCount":"4",
        "unHealthyHostCount":"0",
        "requestCount":"185",
        "latency":"0",
        "failedRequestCount":"0",
        "throughput":"119427"
    }
}

Nota

La latenza è calcolata dal momento in cui viene ricevuto il primo byte della richiesta HTTP al momento in cui viene inviato l'ultimo byte della risposta HTTP. Si tratta della somma del tempo di elaborazione del gateway applicazione, del costo di rete per il back-end e del tempo impiegato dal back-end per elaborare la richiesta.

Log del firewall

Il log del firewall viene generato solo se è stato abilitato in ogni gateway applicazione, come descritto nei passaggi precedenti. Questo log richiede anche che il web application firewall sia configurato in un gateway applicazione. I dati vengono archiviati nella destinazione specificata quando è stata abilitata la registrazione. Vengono registrati i dati seguenti:

Valore Descrizione
instanceId Istanza del gateway applicazione per cui vengono generati i dati del firewall. Per un gateway applicazione a più istanze viene visualizzata una riga per ogni istanza.
clientIp IP di origine della richiesta.
requestUri URL della richiesta ricevuta.
ruleSetType Tipo di set di regole. Il valore disponibile è OWASP.
ruleSetVersion Versione del set di regole usata. I valori disponibili sono 2.2.9 e 3.0.
ruleId ID regola dell'evento di attivazione.
messaggio Messaggio descrittivo dell'evento di attivazione. Altre informazioni sono disponibili nella sezione dei dettagli.
action Modalità criteri: Rilevamento
- Rilevato : questa è l'unica azione per WAF in modalità di rilevamento. Tutte le condizioni per una determinata regola sono state soddisfatte e la richiesta è stata registrata e quindi passata al back-end.

Modalità criteri: Prevenzione
- Consentita: tutte le condizioni sono state soddisfatte per una determinata regola e la richiesta è stata passata al back-end.
- Bloccato: tutte le condizioni sono state soddisfatte per una determinata regola e la richiesta è stata bloccata.
- Corrispondenza: una/più condizioni sono state soddisfatte per una determinata regola, ma la decisione di bloccare o superare la richiesta richiederà un'ulteriore valutazione e verrà valutata in base alla regola di assegnazione dei punteggi delle anomalie finale.

Modalità criteri: test JS
- JSChallengeIssued: rilasciato a causa di una richiesta mancante/non valida, risposta mancante.

Questo log viene creato quando un client richiede l'accesso a un'applicazione Web per la prima volta e non è stato testto in precedenza. Questo client riceve la pagina di test JS e procede per calcolare il test JS. Al termine del calcolo, al client viene concesso il cookie di validità.

- JSChallengePass: superato a causa di una risposta di richiesta valida.

Questo log viene creato quando un client risolve la richiesta JS e invia nuovamente la richiesta con la risposta corretta. In questo caso, Azure WAF convalida il cookie e continua a elaborare le regole rimanenti senza generare un'altra richiesta JS.

- JSChallengeValid: registrato/passthrough a causa di una richiesta valida

Questo log viene creato quando un client ha risolto un test in precedenza. In questo caso, Azure WAF registra la richiesta e procede per elaborare le regole rimanenti.

- JSChallengeBlock: bloccato

Questo log viene creato quando si verifica un errore di calcolo della richiesta JS.
sito Sito per cui è stato generato il log. Attualmente viene visualizzato solo Global poiché le regole sono globali.
dettagli Dettagli dell'evento di attivazione.
details.message Descrizione della regola.
details.data Dati specifici individuati nella richiesta corrispondente alla regola.
details.file File di configurazione che conteneva la regola.
details.line Numero di riga nel file di configurazione che ha attivato l'evento.
hostname Nome host o indirizzo IP del gateway applicazione.
transactionId ID univoco per una determinata transazione che consente di raggruppare più violazioni delle regole verificatesi nella stessa richiesta.
policyId ID univoco dei criteri firewall associati al gateway applicazione, al listener o al percorso.
policyScope Posizione del criterio: i valori possono essere "Global", "Listener" o "Location".
policyScopeName Nome dell'oggetto in cui viene applicato il criterio.
{
  "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
  "operationName": "ApplicationGatewayFirewall",
  "time": "2017-03-20T15:52:09.1494499Z",
  "category": "ApplicationGatewayFirewallLog",
  "properties": {
      "instanceId": "ApplicationGatewayRole_IN_0",
      "clientIp": "203.0.113.147",
      "requestUri": "/",
      "ruleSetType": "OWASP",
      "ruleSetVersion": "3.0",
      "ruleId": "920350",
      "ruleGroup": "920-PROTOCOL-ENFORCEMENT",
      "message": "Host header is a numeric IP address",
      "action": "Matched",
      "site": "Global",
      "details": {
        "message": "Warning. Pattern match \"^[\\\\d.:]+$\" at REQUEST_HEADERS:Host ....",
        "data": "127.0.0.1",
        "file": "rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf",
        "line": "791"
      },
      "hostname": "127.0.0.1",
      "transactionId": "16861477007022634343",
      "policyId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/drewRG/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/perListener",
      "policyScope": "Listener",
      "policyScopeName": "httpListener1"
    }
  }
}

Visualizzare e analizzare Log attività

È possibile visualizzare e analizzare i dati del log attività usando uno dei metodi seguenti:

  • Strumenti di Azure: recuperare le informazioni dal log attività con Azure PowerShell, l'interfaccia della riga di comando (CLI) di Azure, l'API REST di Azure o il portale di Azure. Le istruzioni dettagliate di ciascun metodo sono fornite nell'articolo Operazioni attività con Resource Manager.
  • Power BI: se non esiste ancora un account Power BI , è possibile crearne uno di prova gratuitamente. Usando le app modello di Power BI, è possibile analizzare i dati.

Visualizzare e analizzare i log di accesso, delle prestazioni e del firewall

I log di Monitoraggio di Azure consentono di raccogliere i file dei log contatori ed eventi dall'account di archiviazione BLOB. Include visualizzazioni e funzionalità di ricerca avanzate per analizzare i log.

È anche possibile connettersi all'account di archiviazione e recuperare le voci del log JSON per i log di accesso e delle prestazioni. Dopo avere scaricato i file JSON, è possibile convertirli in CSV e visualizzarli in Excel, PowerBI o un altro strumento di visualizzazione dei dati.

Suggerimento

Se si ha familiarità con Visual Studio e i concetti di base della modifica dei valori di costanti e variabili in C#, è possibile usare i convertitori di log disponibili in GitHub.

Analisi dei log di accesso con GoAccess

È stato pubblicato un modello di Resource Manager che installa ed esegue il diffuso analizzatore di log GoAccess per i log di accesso del gateway applicazione. GoAccess offre statistiche utili sul traffico HTTP, ad esempio il numero di visitatori unici, file richiesti, host, sistemi operativi, browser, codici di stato HTTP e altro ancora. Per altre informazioni, vedere il file Readme nella cartella del modello di Resource Manager in GitHub.

Passaggi successivi