Dépannage des erreurs d'environnement d'exécution de la règle AccessControl

Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Consultez la documentation d'Apigee Edge.

IPDeniedAccess

Code d'erreur

accesscontrol.IPDeniedAccess

Corps de la réponse d'erreur

{
    "fault": {
        "faultstring": "Access Denied for client ip : client_IP",
        "detail": {
            "errorcode": "accesscontrol.IPDeniedAccess"
        }
    }
}

Exemple de message d'erreur

{
    "fault": {
        "faultstring": "Access Denied for client ip : 104.132.196.83",
        "detail": {
            "errorcode": "accesscontrol.IPDeniedAccess"
        }
    }
}

Cause

Cette erreur se produit si l'adresse IP du client ou toute adresse IP transmise dans le cadre de la requête API correspond à toute adresse IP spécifiée dans l'élément <SourceAddress> de l'élément <MatchRule> de la règle AccessControl. L'attribut action de l'élément <MatchRule> est défini sur DENY.

Par exemple, supposons que <SourceAddress> soit défini comme indiqué ci-dessous :

<SourceAddress mask="32">104.132.196.83</SourceAddress>

Si l'adresse IP ci-dessus correspond à l'adresse IP du système client (indiquée par la variable proxy.client.ip) ou à l'une des adresses IP transmises dans le cadre de la requête API, l'erreur se produit.

Diagnostic

  1. Identifiez la ou les adresses IP qui se sont vues refuser l'accès à une requête API spécifique. Vous trouverez ces informations dans l'élément faultstring de la réponse d'erreur.

    Par exemple, dans faultstring, l'adresse IP est 104.132.196.83:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. Examinez toutes les règles de contrôle d'accès AccessControl du proxy d'API défaillant et déterminez la règle spécifique où la ou les adresses IP spécifiées dans l'élément <SourceAddress> correspondent à la ou aux adresses IP identifiées dans faultstring (étape 1 ci-dessus).

    Par exemple, la règle suivante définit l'adresse IP <SourceAddress> comme 104.132.196.83,, qui correspond à ce qui se trouve dans faultstring :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <AccessControl async="false" continueOnError="false" enabled="true" name="Access-Control">
        <DisplayName>Access-Control</DisplayName>
        <Properties/>
        <IPRules noRuleMatchAction="ALLOW">
            <MatchRule action="DENY">
                <SourceAddress mask="32">104.132.196.83</SourceAddress>
            </MatchRule>
        </IPRules>
        </AccessControl>
    
  3. Déterminez la ou les adresses IP à partir desquelles la requête API a été effectuée. Pour ce faire, plusieurs possibilités s'offrent à vous :

    1. Utiliser l'interface utilisateur Trace

      1. Capturer la trace de la requête API défaillante.
      2. Sélectionner la règle de contrôle d'accès AccessControl spécifique qui a échoué dans le panneau de droite.
      3. Dans le volet Détails de la phase, vérifiez la valeur de la variable proxy.client.ip, comme indiqué dans la capture d'écran suivante d'un exemple de trace.

        Le volet &quot;Détails de la phase&quot; affiche l&#39;adresse IP à partir de laquelle la requête API a été effectuée.

      4. Si proxy.client.ip n'est pas répertorié, vérifiez la valeur des en-têtes de message "X-Forwarded-For" ou "True-Client-IP".

    2. Utiliser les rapports personnalisés

      Vous pouvez créer des rapports personnalisés pour déterminer si un code d'état 403 a été généré lors de l'exécution de la règle de contrôle des accès dans le proxy d'API, et déterminer l'adresse IP client. Ceci est particulièrement utile si le problème est survenu par le passé ou s'il est intermittent, et que vous ne parvenez pas à capturer la trace dans l'interface utilisateur.

      Pour savoir comment créer des rapports personnalisés, consultez l'article Créer et gérer des rapports personnalisés. Dans le rapport personnalisé, choisissez :

      1. Somme du trafic en tant que métrique, et

      2. Proxy, Code d'état de la réponse, Adresse IP du client proxy et X-Forwarded-For-IP en tant que dimensions.

      Cela devrait vous aider à déterminer l'adresse IP du client ou les adresses IP transmises ayant généré l'erreur.

  4. Si l'adresse IP du client (indiquée par la variable proxy.client.ip) ou une adresse IP transmise dans le cadre de la requête API correspond à la ou aux adresses IP spécifiées dans l'élément <SourceAddress> de l'élément <MatchRule> de la règle de contrôle d'accès AccessControl, où l'attribut action est défini sur DENY, alors il s'agit de la cause de l'erreur.

    Dans l'exemple ci-dessus, la valeur définie dans la variable de référence proxy.client.ip (comme illustrée à la capture d'écran de la trace ci-dessus) correspond à l'adresse IP définie dans l'élément <SourceAddress> de la règle de contrôle d'accès AccessControl, déclenchant ainsi la réponse d'erreur :

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
    

Solution

Si la règle de contrôle d'accès est conçue pour refuser l'accès aux requêtes API provenant des adresses IP spécifiques répertoriées dans faultstring, le message d'erreur est attendu. Dans ce cas, aucune autre action n'est requise.

Toutefois, si vous déterminez que la ou les adresses IP spécifiques peuvent être autorisées à accéder aux requêtes API pour le proxy d'API spécifique, modifiez la règle de contrôle d'accès AccessControl pour autoriser l'accès à cette ou à ces adresses IP. Vous pouvez également supprimer la règle de contrôle d'accès AccessControl du proxy d'API si vous ne souhaitez pas refuser l'accès à ces adresses IP.

Voici un exemple qui montre comment autoriser l'accès à une adresse IP spécifique 104.132.196.83 uniquement et refuser l'accès au reste :

<AccessControl name="ACL">
  <IPRules noRuleMatchAction = "DENY">
    <MatchRule action = "ALLOW">
      <SourceAddress mask="32">104.132.196.83</SourceAddress>
    </MatchRule>
  </IPRules>
</AccessControl>