Wie analysiere ich AWS-WAF-Protokolle in CloudWatch?
Ich speichere meine AWS WAF-Protokolle in Amazon CloudWatch. Ich möchte diese Protokolle analysieren und filtern.
Lösung
Verwenden Sie CloudWatch Logs Insights oder den CloudWatch-Abfragegenerator, um bestimmte Protokollanforderungen in CloudWatch zu analysieren und zu filtern.
Verwenden Sie CloudWatch Logs Insights, um AWS WAF-Zugriffsprotokolle zu analysieren
Sie können CloudWatch Logs Insights von der CloudWatch-Konsole oder von der Registerkarte CloudWatch Logs Insights aus in der AWS WAF-Konsole verwenden.
Von AWS WAF
Führen Sie die folgenden Schritte aus:
- Öffnen Sie die AWS-WAF-Konsole.
- Wählen Sie im Navigationsbereich unter AWS WAF die Option Web-ACLs aus.
- Wählen Sie als Region die AWS-Region aus, die Ihre Web-Zugriffssteuerungsliste (Web-ACL) enthält.
Hinweis: Wenn Ihre Web-ACL für Amazon CloudFront eingerichtet ist, wählen Sie Global aus. - Wählen Sie Ihre Web-ACL aus.
- Navigieren Sie von den Registerkarten oben auf der Seite zu CloudWatch Logs Insights.
- Geben Sie im Abfrage-Editor Ihre Abfrage ein. Verwenden Sie die Abfragesyntax, um Ihre Abfragen zu entwerfen. Sie können auch Abfragen aus der Liste der am häufigsten verwendeten Abfragen auswählen.
- Wählen Sie Abfrage ausführen aus.
- Um die Ergebnisse anzuzeigen, wählen Sie im Navigationsbereich Protokolle aus.
Von CloudWatch
Führen Sie die folgenden Schritte aus:
- Öffnen Sie die CloudWatch-Konsole.
- Wählen Sie im Navigationsbereich unter Protokolle die Option Logs Insights aus.
- Wählen Sie für Protokollgruppe(n) auswählen eine oder mehrere Protokollgruppen, die abgefragt werden sollen, aus der Liste aus. Oder wählen Sie Protokollgruppen durchsuchen, und wählen Sie dann Ihre Abfrage aus.
- (Optional) Wählen Sie einen Zeitbereich für den Zeitraum, den Sie abfragen möchten.
- Verwenden Sie die Abfragesyntax, um Ihre Abfragen zu entwerfen.
- Um die Ergebnisse anzuzeigen, wählen Sie Abfrage ausführen.
Verwenden Sie die folgenden Beispielabfragen, um nach bestimmten Informationen zu filtern:
Die wichtigsten Client-IP-Adressen
Führen Sie die folgende Abfrage aus, um die IP-Adressen der wichtigsten Clients zu zählen, die Anforderungen an die geschützte Ressource stellen:
fields httpRequest.clientIp | stats count(*) as requestCount by httpRequest.clientIp | sort requestCount desc
Die wichtigsten Länder
Führen Sie die folgende Abfrage aus, um die wichtigsten Länder zu zählen, aus denen Anforderungen an die geschützte Ressource gesendet werden:
stats count(*) as RequestCount by httpRequest.country as Country | sort RequestCount desc
Die wichtigsten Hosts
Führen Sie die folgende Abfrage aus, um die wichtigsten Host-Header zu zählen, die Anforderungen an die geschützte Ressource stellen:
parse @message /\"name\":\"[Hh]ost\",\"value\":\"(?Host[^\"]*)\"/ | stats count(*) as RequestCount by Host | sort RequestCount desc
Die besten Methoden
Führen Sie die folgende Abfrage aus, um die wichtigsten HTTP-Methoden zu zählen, die für Anforderungen an die geschützte Ressource verwendet werden:
stats count(*)as RequestCount by httpRequest.httpMethod as Method | sort RequestCount desc
Die wichtigsten Benutzeragenten
Führen Sie die folgende Abfrage aus, um die wichtigsten Benutzeragenten zu zählen, die Anforderungen an die geschützte Ressource stellen:
parse @message /\"name\":\"[Uu]ser\-[Aa]gent\",\"value\":\"(?UserAgent[^\"]*)\"/ | stats count(*) as RequestCount by UserAgent | sort RequestCount desc
Die wichtigsten URI-Pfade
Führen Sie die folgende Abfrage aus, um die am häufigsten besuchten URI-Pfade auf den geschützten Ressourcen aufzulisten:
fields httpRequest.uri | stats count(*) as uriVisits by httpRequest.uri | sort uriVisits desc | limit 50
Die wichtigsten Beendigungsregeln
Führen Sie die folgende Abfrage aus, um die wichtigsten Beendigungsregeln in Ihren Protokollen zu zählen:
stats count(*) as RequestCount by terminatingRuleId | sort RequestCount desc
Blockierte Anforderungen filtern
Führen Sie die folgende Abfrage aus, um nach allen blockierten Anforderungen und deren Beendigungsregel, URI-Pfad und Client-IP-Adresse zu filtern:
fields @timestamp, httpRequest.clientIp as ClientIP, httpRequest.uri as URI, terminatingRuleId as rule | filter action = "BLOCK" | sort @timestamp desc
Nach Host filtern
Um Protokolle nach einem bestimmten Host-Header-Wert zu filtern, führen Sie die folgende Abfrage aus:
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"
**Hinweis:Ersetzen Sie ** durch den Namen Ihres Hosts.
Filter für einen bestimmten Benutzeragenten
Um Ihre Protokolle nach einem bestimmten Benutzeragenten zu filtern, führen Sie die folgende Abfrage aus:
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
**Hinweis:**Ersetzen Sie Postman durch Ihren Benutzeragenten.
POST-Anforderungen herausfiltern
Führen Sie die folgende Abfrage aus, um nach POST-Anforderungen zu filtern:
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
Nach Land filtern
Um Anforderungen herauszufiltern, die nicht aus einem bestimmten Land stammen, führen Sie die folgende Abfrage aus:
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
**Hinweis:**Ersetzen Sie US durch die Ländervorwahl, die Sie herausfiltern möchten.
Filteranforderungen, die durch ratenbasierte Regeln blockiert wurden
Führen Sie die folgende Abfrage aus, um nach Anforderungen zu filtern, die durch eine ratenbasierte Regel blockiert wurden:
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) oder SQL-Injection
Führen Sie die folgende Abfrage aus, um Muster zu finden, die XSS- oder SQL-Injection in der Beendigungsregel für eine benutzerdefinierte Regel oder eine Regelgruppe von AWS Managed Rules verursachen. Die Abfrage gibt Einträge mit einem Zeitstempel, einer Client-IP-Adresse, einem Ursprungsland, Übereinstimmungsdetails und der Anforderungs-ID zurück:
fields @timestamp | parse @message ',"terminatingRuleMatchDetails":[*],' as terminatingRuleMatchData | filter (terminatingRuleMatchData like /XSS/ or terminatingRuleMatchData like /SQL/) | display @timestamp, httpRequest.clientIp, httpRequest.country, terminatingRuleMatchData, httpRequest.requestId
Filteranforderungen, die nach einer bestimmten Regel in einer Regelgruppe gezählt wurden
Führen Sie die folgende Abfrage aus, um nach Anforderungen zu filtern, die nach einer bestimmten Regel in einer Regelgruppe gezählt und dann durch die Standardaktion beendet werden:
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
**Hinweis:**Ersetzen Sie ruleId durch Ihre Regel-ID.
Filtern Sie Anforderungen mit einem CAPTCHA, das nicht gültig ist
Führen Sie die folgende Abfrage aus, um nach den 100 häufigsten Anforderungen mit einem ungültigen CAPTCHA zu filtern. Diese Abfrage gibt den Zeitpunkt der Anforderung, die IP-Adresse, die Anforderungs-ID, den Antwortcode und die gesamte Nachricht zurück:
fields @timestamp, httpRequest.clientIp, httpRequest.requestId, captchaResponse.failureReason, @message | filter captchaResponse.failureReason ='TOKEN_MISSING' | sort @timestamp desc | limit 100
**Hinweis:**Ersetzen Sie 100 durch die Anzahl der Anforderungen, nach denen Sie filtern möchten.
Verwenden Sie den CloudWatch-Abfragegenerator, um die AWS WAF-Zugriffsprotokolle zu analysieren
Um die Zugriffsprotokolle mithilfe der generativen KI zu analysieren, führen Sie den Abfragegenerator in CloudWatch aus.
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Monaten
- AWS OFFICIALAktualisiert vor 7 Monaten
- AWS OFFICIALAktualisiert vor 7 Monaten
- AWS OFFICIALAktualisiert vor 4 Jahren