Fehlerbehebung bei Laufzeitfehlern für AccessControl-Richtlinien

Sie sehen sich die Dokumentation zu Apigee Edge an.
Sehen Sie sich die Apigee X-Dokumentation an.
info

IPDeniedAccess

Fehlercode

accesscontrol.IPDeniedAccess

Fehlerantworttext

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

Beispiel für Fehlermeldung

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

Ursache

Dieser Fehler tritt auf, wenn die Client-IP-Adresse oder eine im Rahmen der API-Anfrage übergebene IP-Adresse mit allen IP-Adressen übereinstimmt, die im Element <SourceAddress> des Elements <MatchRule> der Zugriffssteuerungsrichtlinie angegeben ist und das Attribut action des Elements <MatchRule> ist auf DENY festgelegt.

Angenommen, <SourceAddress> ist so definiert:

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

Der Fehler tritt auf, wenn die oben angegebene IP-Adresse mit der IP-Adresse des Clientsystems (durch die Variable proxy.client.ip angegeben) oder einer der IP-Adressen übereinstimmt, die als Teil der API-Anfrage übergeben wurden.

Diagnose

  1. Identifizieren Sie die IP-Adressen, für die der Zugriff für eine bestimmte API-Anfrage verweigert wurde. Sie finden diese Informationen im Element faultstring der Fehlerantwort.

    Im folgenden faultstring ist die IP-Adresse beispielsweise 104.132.196.83:.

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. Prüfen Sie alle Zugriffssteuerungsrichtlinien im fehlgeschlagenen API-Proxy und ermitteln Sie die spezifische Richtlinie, bei der die im <SourceAddress>-Element angegebenen IP-Adressen den IP-Adressen entsprechen, die im faultstring angegeben sind (Schritt 1 oben).

    Die folgende Richtlinie definiert beispielsweise die <SourceAddress>-IP-Adresse als 104.132.196.83,, was mit dem Inhalt in faultstring übereinstimmt:

    <?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. Ermitteln Sie die IP-Adressen, von denen die API-Anfrage gesendet wurde. Dafür gibt es mehrere Möglichkeiten:

    1. UI-Trace verwenden

      1. Erfassen Sie den Trace für die fehlgeschlagene API-Anfrage.
      2. Wählen Sie im rechten Bereich die gewünschte Zugriffssteuerungsrichtlinie aus.
      3. Prüfen Sie den Wert der Variablen proxy.client.ip, wie im folgenden Screenshot eines Beispiel-Traces gezeigt.

      4. Wenn proxy.client.ip nicht aufgeführt ist, prüfen Sie den Wert des Nachrichtenheaders X-Forwarded-For oder True-Client-IP.

    2. Benutzerdefinierte Berichte verwenden

      Sie können benutzerdefinierte Berichte erstellen, um festzustellen, ob während der Ausführung der Zugriffssteuerungsrichtlinie innerhalb des API-Proxys ein 403-Statuscode ausgegeben wurde und wie die IP-Adresse des Clients lautet. Dies ist besonders hilfreich, wenn das Problem in der Vergangenheit aufgetreten ist oder wenn es sich um ein nur gelegentlich auftretendes Problem handelt und Sie den Trace nicht in der Benutzeroberfläche erfassen können.

      Informationen zum Erstellen benutzerdefinierter Berichte finden Sie unter Benutzerdefinierte Berichte erstellen und verwalten. Wählen Sie im benutzerdefinierten Bericht Folgendes aus:

      1. Summe der Zugriffe als Messwert und

      2. Proxy, Antwortstatuscode, Proxy-Client-IP und X-Forwarded-For als Dimensionen.

      So können Sie herausfinden, welche Client-IP- oder IP-Adressen weitergegeben wurden, die zum Fehler führten.

  4. Wenn die Client-IP-Adresse (durch die Variable proxy.client.ip angegeben) oder eine beliebige IP-Adresse, die als Teil der API-Anfrage übergeben wird, mit den IP-Adressen übereinstimmt, die im Element <SourceAddress> innerhalb des Elements <MatchRule> der Zugriffssteuerungsrichtlinie angegeben sind, wobei das Attribut action auf DENY gesetzt ist, dann ist dies die Fehlerursache.

    Im obigen Beispiel entspricht der in der Referenzvariable proxy.client.ip festgelegte Wert (wie im Screenshot des obigen Trace dargestellt) der IP-Adresse, die im Element <SourceAddress> der Zugriffssteuerungsrichtlinie definiert ist, wodurch die Fehlerantwort ausgegeben wird:

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

Lösung

Wenn die Zugriffssteuerungsrichtlinie den Zugriff auf API-Anfragen von den im faultstring aufgeführten IP-Adressen ablehnen soll, wird die Fehlermeldung erwartet. In diesem Fall sind keine weiteren Maßnahmen erforderlich.

Wenn Sie jedoch zu dem Schluss kommen, dass die entsprechenden IP-Adressen Zugriff auf die API-Anfragen für den jeweiligen API-Proxy erhalten können, ändern Sie die Zugriffssteuerungsrichtlinie so, dass der Zugriff auf diese IP-Adressen ermöglicht wird. Alternativ können Sie die Zugriffssteuerungsrichtlinie aus dem API-Proxy entfernen, wenn Sie den Zugriff auf eine oder mehrere IP-Adressen nicht verweigern möchten.

Das folgende Beispiel zeigt, wie Sie nur den Zugriff auf eine bestimmte IP-Adresse 104.132.196.83 gewähren und auf den Rest verweigern:

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