Comment analyser les journaux AWS WAF dans CloudWatch ?
Je stocke mes journaux AWS WAF dans Amazon CloudWatch. Je souhaite analyser et filtrer ces journaux.
Résolution
Pour analyser et filtrer des requêtes spécifiques sur les journaux dans CloudWatch, utilisez CloudWatch Logs Insights ou le générateur de requête CloudWatch.
Utiliser CloudWatch Log Insights pour analyser les journaux d'accès AWS WAF
Vous pouvez utiliser CloudWatch Log Insights depuis la console CloudWatch ou depuis l'onglet Log Insights dans AWS WAF.
Depuis AWS WAF
Procédez comme suit :
- Ouvrez la console AWS WAF.
- Dans le volet de navigation, sélectionnez AWS WAF, puis Listes ACL Web.
- Pour Région, sélectionnez la région AWS qui contient votre liste de contrôle d'accès Web (liste ACL Web).
Remarque : Si votre liste ACL Web est configurée pour Amazon CloudFront, sélectionnez Global. - Sélectionnez votre liste ACL Web.
- Dans le volet de navigation, sélectionnez Logs Insights.
- Sélectionnez les groupes de journaux que vous souhaitez interroger.
- Dans l'Éditeur de requête, saisissez votre requête. Utilisez la syntaxe de requête pour concevoir vos requêtes. Vous pouvez également sélectionner des requêtes dans la liste des Requêtes les plus fréquemment utilisées.
- Sélectionnez Exécuter la requête.
- Pour consulter vos résultats, dans le volet de navigation, sélectionnez Journaux.
Depuis CloudWatch
Procédez comme suit :
- Ouvrez la console CloudWatch.
- Dans le volet de navigation, sélectionnez Journaux, puis Log Insights.
- Pour Sélectionner un ou des groupes de journaux, sélectionnez un ou plusieurs groupes de journaux à interroger dans la liste déroulante. Vous pouvez également sélectionner Parcourir les groupes de journaux, puis sélectionner votre requête.
- (Facultatif) Choisissez une plage de temps pour la période que vous souhaitez interroger.
- Utilisez la syntaxe de requête pour concevoir vos requêtes.
- Pour consulter vos résultats, sélectionnez Exécuter la requête.
Vous pouvez utiliser les exemples de requêtes suivants pour filtrer des informations spécifiques grâce aux informations de CloudWatch Logs.
Principales adresses IP client
Pour compter les adresses IP des principaux clients qui accèdent à vos journaux, exécutez la requête suivante :
fields httpRequest.clientIp | stats count(*) as requestCount by httpRequest.clientIp | sort requestCount desc
Principaux pays
Pour compter les principaux pays qui accèdent à vos journaux, exécutez la requête suivante :
stats count(*) as RequestCount by httpRequest.country as Country | sort RequestCount desc
Principaux hôtes
Pour compter les meilleurs hôtes qui accèdent à vos journaux, exécutez la requête suivante :
parse @message /\{"name":"[Hh]ost\",\"value":\"(?[^"}]*)/ |stats count(*) as RequestCount by Host | sort RequestCount desc
Principales méthodes
Pour répertorier les principales méthodes qui accèdent à vos journaux, exécutez la requête suivante :
stats count(*)as RequestCount by httpRequest.httpMethod as Method | sort RequestCount desc
Principaux agents utilisateur
Pour compter les principaux agents utilisateur qui accèdent à vos journaux, exécutez la requête suivante :
parse @message /\{"name":"[Uu]ser\-[Aa]gent\",\"value\"\:\"(?[^"}]*)/ | stats count(*) as RequestCount by UserAgent | sort RequestCount desc
Principales règles de résiliation
Pour compter les principales règles de résiliation dans vos journaux, exécutez la requête suivante :
stats count(*) as RequestCount by terminatingRuleId | sort RequestCount desc
Filtrer les requêtes bloquées
Pour filtrer toutes les requêtes bloquées, ainsi que la règle de résiliation, le chemin URI et l’adresse IP client respectifs, exécutez la requête suivante :
fields @timestamp, httpRequest.clientIp as ClientIP, httpRequest.uri as URI, terminatingRuleId as rule | filter action = "BLOCK" | sort @timestamp desc
Filtrer par hôte
Pour filtrer vos journaux en fonction d'un hôte spécifique, exécutez la requête suivante :
fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.uri as URI | parse @message /\{"name":"[Hh]ost\",\"value":\"(?[^"}]*)/ | filter Host = "www.example.com"
Remarque : Remplacez www.example.com par le nom de votre hôte.
Filtrer sur une chaîne spécifique
Pour filtrer vos journaux selon une chaîne spécifique, exécutez la requête suivante :
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":\"(?[^"}])/ | parse @message /\{"name":"[Uu]ser\-[Aa]gent\",\"value\"\:\"(?[^"}])/ | filter @message like "{jndi:ldap" | sort action, URI desc
Remarque : Remplacez {jndi:ldap. par votre chaîne.
Filtrer sur les requêtes POST
Pour filtrer les requêtes POST, exécutez la requête suivante :
fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.httpMethod as Method, httpRequest.uri as URI | parse @message /\{"name":"[Uu]ser\-[Aa]gent\",\"value\"\:\"(?[^"}]*)/ | parse @message /\{"name":"[Hh]ost\",\"value":\"(?[^"}]*)/ | filter httpRequest.httpMethod ="POST" | display Rule, action, Country, ClientIP, Method, URI, Host, UserAgent | sort Rule, action desc
Filtrer par pays
Pour filtrer les requêtes qui ne proviennent pas d'un pays spécifique, exécutez la requête suivante :
fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.uri as URI | parse @message /\{"name":"[Hh]ost\",\"value":\"(?[^"}]*)/ | parse @message /\{"name":"[Uu]ser\-[Aa]gent\",\"value\"\:\"(?[^"}]*)/ | filter Country != "US" | sort Country, action desc
Remarque : Remplacez USA par le code pays que vous souhaitez filtrer.
Filtrer les requêtes bloquées par des règles fréquentielles
Pour filtrer vos journaux en fonction des requêtes bloquées par une règle fréquentielle, exécutez la requête suivante :
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
Scripts inter-site (XSS) ou injection SQL
Pour trouver des schémas qui provoquent une injection XSS ou SQL dans la règle de résiliation d'une règle personnalisée ou d'un groupe de règles gérées par AWS, exécutez cette requête. La requête renvoie des entrées avec un horodatage, l'adresse IP du client, le pays d'origine, les détails de la correspondance et l'ID de la requête :
fields @timestamp | parse @message ',"terminatingRuleMatchDetails":[*],' as terminatingRuleMatchData | filter (terminatingRuleMatchData like /XSS/ or terminatingRuleMatchData like /SQL/) | display @timestamp, httpRequest.clientIp, httpRequest.country, terminatingRuleMatchData, httpRequest.requestId
Filtrer les requêtes comptabilisées selon une règle spécifique dans un groupe de règles
Pour filtrer les entrées de journal pour les requêtes qui sont comptabilisées selon une règle spécifique dans un groupe de règles, puis résiliées par l'action par défaut, exécutez cette requête :
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
Remarque : Remplacez ruleId par votre ID de règle.
Filtrer les requêtes avec un CAPTCHA non valide
Pour filtrer les 100 principales requêtes avec un CAPTCHA non valide, exécutez la requête suivante. Cette requête renvoie l'heure à laquelle la requête a été effectuée, l'adresse IP, l'ID de la requête, le code de réponse et l'intégralité du message :
fields @timestamp, httpRequest.clientIp, httpRequest.requestId, captchaResponse.failureReason, @message |filter captchaResponse.failureReason ='TOKEN_MISSING' | sort @timestamp desc | limit 100
Remarque : Remplacez 100 par le nombre de requêtes que vous souhaitez filtrer.
Utiliser le générateur de requête CloudWatch pour analyser les journaux d'accès AWS WAF
Pour utiliser l'IA générative afin d'analyser vos journaux d'accès, exécutez le générateur de requête dans CloudWatch.
Contenus pertinents
- demandé il y a 2 anslg...
- demandé il y a 5 moislg...
- Réponse acceptéedemandé il y a un anlg...
- demandé il y a 7 moislg...
- Réponse acceptéedemandé il y a un moislg...
- AWS OFFICIELA mis à jour il y a 6 mois
- AWS OFFICIELA mis à jour il y a 3 ans
- AWS OFFICIELA mis à jour il y a 2 mois
- AWS OFFICIELA mis à jour il y a 6 mois