Come posso analizzare i log di AWS WAF in CloudWatch?
Archivo i miei log di AWS WAF in Amazon CloudWatch. Voglio analizzare e filtrare questi log.
Risoluzione
Per analizzare e filtrare richieste di log specifiche in CloudWatch, usa Approfondimenti di CloudWatch Logs o il generatore di query in CloudWatch.
Usa Approfondimenti di CloudWatch Logs per analizzare i log di accesso di AWS WAF
Puoi usare Approfondimenti di CloudWatch Logs dalla console CloudWatch o dalla scheda CloudWatch Logs Insights nella console AWS WAF.
Da AWS WAF
Completa i passaggi seguenti:
- Apri la console AWS WAF.
- Nel pannello di navigazione, in AWS WAF, scegli Web ACLs (ACL web).
- In Regione seleziona la regione AWS che contiene la tua lista di controllo degli accessi web (ACL web).
Nota: se l'ACL web è configurata per Amazon CloudFront, seleziona Globale. - Seleziona la tua ACL web.
- Dalle schede nella parte superiore della pagina, accedi a CloudWatch Logs Insights.
- In Query editor inserisci la query. Usa la sintassi delle query per progettare le tue query. Puoi anche selezionare query dall'elenco Most frequently used queries (Query utilizzate più spesso).
- Scegli Esegui una query.
- Per visualizzare i risultati, scegli Log nel pannello di navigazione.
Da CloudWatch
Completa i passaggi seguenti:
- Apri la console CloudWatch.
- Nel pannello di navigazione, in Log, scegli Logs Insights.
- In Seleziona uno o più i gruppi di log seleziona dall'elenco uno o più gruppi di log su cui eseguire la query. In alternativa, vai su Scegli i gruppi di log e seleziona la query.
- (Facoltativo) Scegli un intervallo di tempo per il periodo in cui desideri eseguire la query.
- Usa la sintassi delle query per progettare le tue query.
- Per visualizzare i risultati, scegli Esegui una query.
Per filtrare informazioni specifiche, utilizza le query di esempio seguenti:
Principali indirizzi IP dei client
Per contare i principali indirizzi IP dei client che effettuano richieste alla tua risorsa protetta, esegui questa query:
fields httpRequest.clientIp | stats count(*) as requestCount by httpRequest.clientIp | sort requestCount desc
Principali paesi
Per contare i principali paesi da cui vengono inviate le richieste alla tua risorsa protetta, esegui questa query:
stats count(*) as RequestCount by httpRequest.country as Country | sort RequestCount desc
Principali host
Per contare le intestazioni dei principali host che effettuano richieste alla tua risorsa protetta, esegui questa query:
parse @message /\"name\":\"[Hh]ost\",\"value\":\"(?Host[^\"]*)\"/ | stats count(*) as RequestCount by Host | sort RequestCount desc
Principali metodi
Per contare i principali metodi HTTP utilizzati per effettuare richieste alla tua risorsa protetta, esegui questa query:
stats count(*)as RequestCount by httpRequest.httpMethod as Method | sort RequestCount desc
Principali agenti utente
Per contare i principali agenti utente che effettuano richieste alla tua risorsa protetta, esegui questa query:
parse @message /\"name\":\"[Uu]ser\-[Aa]gent\",\"value\":\"(?UserAgent[^\"]*)\"/ | stats count(*) as RequestCount by UserAgent | sort RequestCount desc
Principali percorsi URI
Per elencare i percorsi URI più visitati sulle tue risorse protette, esegui questa query:
fields httpRequest.uri | stats count(*) as uriVisits by httpRequest.uri | sort uriVisits desc | limit 50
Principali regole di terminazione
Per contare le principali regole di terminazione nei tuoi log, esegui questa query:
stats count(*) as RequestCount by terminatingRuleId | sort RequestCount desc
Filtra richieste bloccate
Per filtrare tutte le richieste bloccate con le regole di terminazione, i percorsi URI e gli indirizzi IP dei client, esegui questa query:
fields @timestamp, httpRequest.clientIp as ClientIP, httpRequest.uri as URI, terminatingRuleId as rule | filter action = "BLOCK" | sort @timestamp desc
Filtra per host
Per filtrare i log in base a un valore di intestazione host specifico, esegui questa query:
fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.uri as URI | parse @message /\{"name":"[Hh]ost\",\"value":\"(?Host[^\"]*)\"/ | filter Host = "www.example.com"
Nota: sostituisci www.example.com con il nome del tuo host.
Filtra per un agente utente specifico
Per filtrare i log in base a un agente utente specifico, esegui questa query:
fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.httpMethod as Method,httpRequest.uri as URI | parse @message /\"name\":\"[Hh]ost\",\"value\":\"(?Host[^\"]*)\"/ | parse @message /\"name\":\"[Uu]ser\-[Aa]gent\",\"value\":\"(?UserAgent[^\"]*)\"/ | filter @message like "Postman" | display Rule, action, Country, ClientIP, Method, URI, Host, UserAgent | sort action, URI desc
Nota: sostituisci Postman con il tuo agente utente.
Filtra le richieste POST
Per filtrare le richieste POST, esegui questa query:
fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.httpMethod as Method, httpRequest.uri as URI | parse @message /\"name\":\"[Hh]ost\",\"value\":\"(?Host[^\"]*)\"/ | parse @message /\"name\":\"[Uu]ser\-[Aa]gent\",\"value\":\"(?UserAgent[^\"]*)\"/ | filter httpRequest.httpMethod ="POST" | display Rule, action, Country, ClientIP, Method, URI, Host, UserAgent | sort @timestamp desc
Filtra per paese
Per escludere tramite filtro le richieste che non provengono da un paese specifico, esegui questa query:
fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.uri as URI | parse @message /\"name\":\"[Hh]ost\",\"value\":\"(?Host[^\"]*)\"/ | parse @message /\"name\":\"[Uu]ser\-[Aa]gent\",\"value\":\"(?UserAgent[^\"]*)\"/ | filter Country != "US" | sort Country, action desc
Nota: sostituisci US con il prefisso internazionale che desideri escludere tramite filtro.
Filtra le richieste bloccate da regole basate sulla frequenza
Per filtrare le richieste bloccate da una regola basata sulla frequenza, esegui questa query:
fields @timestamp, httpRequest.clientIp as ClientIP, httpRequest.uri as URI, terminatingRuleId as rule, httpRequest.country as Country | filter action = "BLOCK" | filter terminatingRuleType = "RATE_BASED" | sort @timestamp desc
Cross-site scripting (XSS) o iniezione SQL
Per trovare modelli che causano XSS o iniezione SQL nella regola di terminazione per una regola personalizzata o un gruppo di regole gestite da AWS, esegui questa query. La query restituisce voci con timestamp, indirizzo IP del client, paese di origine, dettagli sulla corrispondenza e ID della richiesta:
fields @timestamp | parse @message ',"terminatingRuleMatchDetails":[*],' as terminatingRuleMatchData | filter (terminatingRuleMatchData like /XSS/ or terminatingRuleMatchData like /SQL/) | display @timestamp, httpRequest.clientIp, httpRequest.country, terminatingRuleMatchData, httpRequest.requestId
Filtra le richieste contate da una regola specifica in un gruppo di regole
Per filtrare le richieste contate da una regola specifica in un gruppo di regole e poi terminate dall'azione predefinita, esegui questa query:
fields @timestamp | filter (@message like 'excludedRules":[{"exclusionType":"EXCLUDED_AS_COUNT","ruleId":"NoUserAgent_HEADER"}]}' and @message like 'terminatingRuleId":"Default_Action"') | parse @message '"ruleId":*}]}' as ruleMatchDetails | display @timestamp, httpRequest.clientIp, httpRequest.country, ruleMatchDetails, httpRequest.requestId
Nota: sostituisci ruleId con l'ID della tua regola.
Filtra le richieste con un CAPTCHA non valido
Per filtrare le prime 100 richieste con un CAPTCHA non valido, esegui questa query. La query restituisce l'ora in cui è stata effettuata la richiesta, l'indirizzo IP, l'ID della richiesta, il codice di risposta e l'intero messaggio:
fields @timestamp, httpRequest.clientIp, httpRequest.requestId, captchaResponse.failureReason, @message | filter captchaResponse.failureReason ='TOKEN_MISSING' | sort @timestamp desc | limit 100
Nota: sostituisci 100 con il numero di richieste che desideri filtrare.
Usa il generatore di query in CloudWatch per analizzare i log di accesso di AWS WAF
Per usare l'IA generativa per analizzare i log degli accessi, esegui il generatore di query in CloudWatch.
Contenuto pertinente
- AWS UFFICIALEAggiornata 6 mesi fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 6 mesi fa
- AWS UFFICIALEAggiornata 8 mesi fa