Passer au contenu

Comment autoriser les requêtes provenant d'un bot bloqué par un groupe de règles de contrôle des bots AWS WAF ?

Lecture de 8 minute(s)
0

Je souhaite autoriser les requêtes provenant d'un bot légitime bloqué par un groupe de règles de contrôle des bots AWS WAF.

Résolution

Pour autoriser les requêtes provenant d'un bot légitime bloquées par un groupe de règles de contrôle des bots, procédez comme suit.

Remarque : Le groupe de règles de contrôle des bots AWS WAF utilise les adresses IP d'AWS WAF pour vérifier les bots. Certains bots vérifiés passent par un proxy ou un CDN qui ne conserve pas l'adresse IP du client lorsqu'il transmet les requêtes. Si votre bot est acheminé de cette façon, vous devez l'autoriser spécifiquement.

Identifier la règle de contrôle des bots qui bloque les requêtes provenant de vos journaux AWS WAF

Pour identifier la règle qui bloque la requête légitime du bot, analysez vos journaux AWS WAF. Utilisez une requête Amazon Athena ou Amazon CloudWatch Log Insights.

Utiliser une requête Athena pour analyser les journaux AWS WAF

Procédez comme suit :

  1. Utilisez la projection de partition pour créer une table pour les journaux AWS WAF dans Athena.
  2. Pour trouver les détails de la requête bloquée, exécutez la requête Athena suivante :
    WITH waf_data AS
    (SELECT from_unixtime(waf.timestamp / 1000) as time,
    waf.terminatingRuleId,
    waf.action,
    waf.httprequest.clientip as clientip,
    waf.httprequest.requestid as requestid,
    waf.httprequest.country as country,
    rulegroup.terminatingrule.ruleid as matchedRule,
    labels as Labels,
    map_agg(LOWER(f.name),
    f.value) AS kv
    FROM waf_logs waf,
    UNNEST(waf.httprequest.headers)
    AS t(f), UNNEST(waf.rulegrouplist) AS t(rulegroup)
    WHERE rulegroup.terminatingrule.ruleid IS NOT NULL
    GROUP BY 1, 2, 3, 4, 5, 6, 7,8)
    SELECT waf_data.time,
    waf_data.action,
    waf_data.terminatingRuleId,
    waf_data.matchedRule,
    waf_data.kv['user-agent'] as UserAgent,
    waf_data.kv['user-agent'] like 'pingdom%',
    waf_data.clientip,
    waf_data.country,
    waf_data.Labels
    FROM waf_data
    Where terminatingRuleId='AWS-AWSManagedRulesBotControlRuleSet'
    and time > now() - interval '3' day
    ORDER BY time
    DESC
    Remarque : Remplacez waf_logs par le nom de votre table, waf_data par le nom de votre base de données, time > now() - interval '3' day par votre plage de temps et pingdom% par le nom de votre bot.
    Par exemple, les requêtes Athena filtrent les enregistrements pour une plage de temps spécifiée, consultez la section Interroger les journaux AWS WAF.
  3. Consultez la colonne matchedRule pour identifier la règle qui bloque les requêtes légitimes des bots. Voici l'exemple de sortie de la requête Athena de l'étape 2 :
     : 1
    timestamp: 2024-04-10 15:11:18.000
    Action**:** BLOCK
    terminatingRuleId: AWS-AWSManagedRulesBotControlRuleSet
    matchedRule: CategoryMonitoring
    UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/61.0.3163.100 Chrome/61.0.3163.100 Safari/537.36 PingdomPageSpeed/1.0 (pingbot/2.0; +http://www.pingdom.com/)
    _col5: false
    clientip: 192.0.2.0
    country: US
    labels: [{name=awswaf:managed:token:absent}, {name=awswaf:managed:aws:bot-control:bot:name:pingdom}, {name=awswaf:managed:aws:bot-control:bot:unverified}, {name=awswaf:managed:aws:bot-control:bot:category:monitoring},{name=awswaf:managed:captcha:absent}, {name=awswaf:managed:aws:bot-control:signal:non_browser_user_agent}]
    Remarque : La sortie de la requête Athena apparaît sous forme de table.

Utiliser une requête CloudWatch Log Insights

Procédez comme suit :

  1. Ouvrez la console CloudWatch.

  2. Dans le volet de navigation, sélectionnez Journaux, puis Log Insights.

  3. Sous Log Insights, ouvrez la liste déroulante Critères de sélection.

  4. Choisissez un ou plusieurs groupes de journaux à interroger ou choisissez Parcourir les groupes de journaux.

  5. Sélectionnez votre groupe de journaux.

  6. (Facultatif) Choisissez une période pour votre requête.

  7. Collez la requête suivante dans l'éditeur de requêtes.

    fields @timestamp, @message
    | parse @message '{"name":"User-Agent","value":"*"}' as userAgent
    | filter @message like 'awswaf:managed:aws:bot-control'
    | parse @message '"labels":[*]' as Labels
    | parse @message '"httpRequest":{"clientIp":"*","country":"*"' as IP, Country
    | parse @message '"terminatingRule":{"ruleId":"*","action":"*"' as ruleID, action
    | filter action = "BLOCK"
    | display @timestamp, userAgent, IP, Country, ruleID, action, terminatingRuleId, Labels
    | sort by @timestamp DESC
    | limit 100
  8. (Facultatif) Pour rechercher un bot à partir d'une adresse IP spécifique, ajoutez le filtre suivant à la requête précédente :

    | filter IP = '10.0.0.0/8'

    Remarque : Remplacez 10.0.0.0/8 par votre adresse IP.

  9. (Facultatif) Pour rechercher un bot avec une valeur d'agent utilisateur spécifique, ajoutez le filtre suivant à la requête précédente :

    | filter userAgent like 'user-agent value'

    Remarque : Remplacez valeur user-agent par la valeur de votre agent utilisateur.

  10. Pour afficher l'intégralité du message du journal, développez les entrées du journal.

  11. Pour trouver la règle qui bloque les requêtes légitimes des bots, recherchez terminatingRuleId et ruleGroupList.x.terminatingRule.ruleId. Les étiquettes associées à ces champs indiquent la raison pour laquelle la requête a été bloquée. Dans l'exemple suivant, ruleGroupList.0.terminatingRule.ruleID est bloqué en raison de CategoryMonitoring :

httpSourceName                             ALB
labels.0.name                              awswaf:managed:token:absent
labels.1.name                              awswaf:managed:aws:bot-control:bot:name:pingdom
labels.2.name                              awswaf:managed:aws:bot-control:bot:unverified
labels.3.name                              awswaf:managed:aws:bot-control:bot:category:monitoring
labels.4.name                              awswaf:managed:captcha:absent
ruleGroupList.0.customerConfig.0.name      InspectionLevel
ruleGroupList.0.customerConfig.0.value     COMMON
ruleGroupList.0.customerConfig.1.name      EnableMachineLearning
ruleGroupList.0.customerConfig.1.value     null
ruleGroupList.0.ruleGroupId                AWS#AWSManagedRulesBotControlRuleSet
ruleGroupList.0.terminatingRule.action     BLOCK
ruleGroupList.0.terminatingRule.ruleId     CategoryMonitoring
terminatingRuleId                          AWS-AWSManagedRulesBotControlRuleSet
terminatingRuleType                        MANAGED_RULE_GROUP

Plusieurs étiquettes peuvent être associées à une requête. Aux fins de ces instructions, seules les requêtes relatives aux règles de blocage sont pertinentes.

Définir la règle de contrôle des bots qui bloque les requêtes à comptabiliser

Procédez comme suit :

  1. Ouvrez la console AWS WAF.
  2. Dans le volet de navigation, sélectionnez AWS WAF.
  3. Choisissez Packs de ressources et de protection.
  4. Trouvez votre pack de protection et choisissez Afficher et modifier à côté de Règles.
  5. Dans le volet droit, sélectionnez le groupe de règles AWSManagedRulesBotControlRuleSet.
  6. Dans la section Dérogations aux règles, modifiez l'action pour comptabiliser la règle bloquante.
  7. Choisissez Enregistrer la règle.

Remarque : AWS WAF vérifie et associe des étiquettes aux requêtes qui correspondent à la règle, mais ne les bloque pas.

Créer une règle personnalisée pour toutes les requêtes correspondantes, à l'exception du bot que vous souhaitez autoriser

Pour bloquer les requêtes illégitimes, créez une règle qui fait correspondre les étiquettes pour autoriser les requêtes présentant des caractéristiques spécifiques et bloque les autres requêtes. Exemple :

Name: name of the rule
 IF (Statement 1):the request contains the label
   AND
NOT
 IF (Statement 2):the request contains the label(enter the bot label you want to allow)
Then Action: Block

Remarque : Si la règle qui bloque comporte l’étiquette awswaf:managed:aws:bot-control:bot:category, le contrôle des bots associe une autre étiquette au nom du bot. Vous pouvez utiliser cette étiquette de nom de bot pour identifier les bots légitimes. Sinon, utilisez l'en-tête user-agent pour identifier les bots légitimes.

Pour créer une règle personnalisée, procédez comme suit :

  1. Ouvrez la console AWS WAF.
  2. Dans le volet de navigation, sélectionnez AWS WAF.
  3. Choisissez Packs de ressources et de protection.
  4. Trouvez votre pack de protection et choisissez Afficher et modifier à côté de Règles.
  5. Dans le volet droit, choisissez Ajouter des règles.
    Choisissez Règle personnalisée, puis sélectionnez Suivant.
    Choisissez à nouveau Règle personnalisée, puis sélectionnez Suivant.
  6. Définissez l'Action de la règle sur BLOQUER.
  7. Saisissez le Nom de votre règle.
  8. Dans S’il s’agit d’une requête, développez la liste déroulante et choisissez correspond à toutes les instructions (ET).
  9. Dans Instruction 1, procédez comme suit :
    Dans Inspecter, choisissez Inclut une étiquette.
    Dans Instruction, choisissez Étiquette.
    Dans Clé de correspondance, sélectionnez awswaf:managed:aws:bot-control:bot:category: category-name.
    Remarque : Remplacez category-name par le nom de votre catégorie de règle.
  10. Dans Instruction 2, procédez comme suit :
    Dans Inspecter, choisissez Inclut une étiquette. Dans Instruction, choisissez Étiquette.
    Dans Clé de correspondance, sélectionnez awswaf:managed:aws:bot-control:bot:name: bot-name.
    Remarque : Remplacez bot-name par le nom de votre bot.
    Développez Configuration de la règle, sous Instruction négative (NON), choisissez Passer les résultats de l’instruction en nombre négatif.
  11. Sélectionnez Créer une règle.
  12. Pour définir la priorité de la règle, cliquez sur Modifier l'ordre des règles dans le volet droit et faites glisser la règle sous la règle de contrôle des bots.
  13. Choisissez Enregistrer l'ordre des règles.

L'exemple suivant est une règle personnalisée qui utilise des étiquettes pour autoriser les bots à devenir des bots légitimes et bloque tous les autres bots :

{
  "Name": "expection-rule",
  "Priority": 2,
  "Statement": {
    "AndStatement": {
      "Statements": [
        {
          "LabelMatchStatement": {
            "Scope": "LABEL",
            "Key": "awswaf:managed:aws:bot-control:bot:category:monitoring"
          }
        },
        {
          "NotStatement": {
            "Statement": {
              "LabelMatchStatement": {
                "Scope": "LABEL",
                "Key": "awswaf:managed:aws:bot-control:bot:name:pingdom"
              }
            }
          }
        }
      ]
    }
  },
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "expection-rule"
  }
}

Vérifier qu'AWS WAF autorise le trafic de bots légitime

Pour vérifier qu'AWS WAF autorise le suivi légitime des bots, consultez à nouveau les journaux AWS WAF. Si le bot est toujours bloqué, répétez le processus précédent avec des règles supplémentaires. Parfois, plusieurs règles bloquent le trafic légitime. Dans ce cas, vous devez répéter le processus précédent à plusieurs reprises.

Informations connexes

Exemple de contrôle des bots : Autoriser un bot bloqué spécifique

Exemple de contrôle des bots : Créer une exception pour un agent utilisateur bloqué

Champs des journaux pour le trafic du pack de protection ou de l'ACL Web

Gestion du comportement du groupe de règles

AWS OFFICIELA mis à jour il y a 8 mois