Rozwiązywanie problemów z błędem zasad AccessControl w środowisku wykonawczym

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

IPDeniedAccess

Kod błędu

accesscontrol.IPDeniedAccess

Treść odpowiedzi na błąd

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

Przykładowy komunikat o błędzie

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

Przyczyna

Ten błąd występuje, gdy adres IP klienta lub dowolny adres IP przekazany w ramach żądania interfejsu API pasuje do dowolnego adresu IP określonego w elemencie <SourceAddress> w elemencie <MatchRule> w polityce kontroli dostępu, a atrybut action elementu <MatchRule> ma wartość DENY.

Załóżmy na przykład, że <SourceAddress> jest zdefiniowany w podany niżej sposób:

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

Jeśli powyższy adres IP jest zgodny z adresem IP systemu klienta (wskazanym przez zmienną proxy.client.ip) lub z dowolnym adresem IP przekazanym w ramach żądania interfejsu API, wystąpi błąd.

Diagnostyka

  1. Określ adresy IP, którym odmówiono dostępu do określonego żądania interfejsu API. Te informacje znajdziesz w elemencie faultstring odpowiedzi na błąd.

    Na przykład w tym faultstring adres IP to 104.132.196.83:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. Sprawdź wszystkie zasady kontroli dostępu w nieudanym interfejsie API Proxy i zidentyfikuj konkretną zasadę, w której adresy IP określone w elemencie <SourceAddress> pasują do adresów IP zidentyfikowanych w elemencie faultstring (patrz krok 1 powyżej).

    Na przykład w tej polityce adres IP <SourceAddress> jest zdefiniowany jako 104.132.196.83,, co odpowiada wartości w zasadach 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. Określ adresy IP, z których wysłano żądanie interfejsu API. Możesz to zrobić na kilka sposobów:

    1. Korzystanie z śledzenia interfejsu

      1. Przechwytywanie logu czasu związanego z nieudanym żądaniem do interfejsu API.
      2. W panelu po prawej stronie wybierz konkretną zasadę kontroli dostępu, w przypadku której wystąpił błąd.
      3. Sprawdź wartość zmiennej proxy.client.ip, jak pokazano na zrzucie ekranu poniżej, który przedstawia przykładowy ślad.

      4. Jeśli proxy.client.ip nie jest widoczny, sprawdź wartość nagłówków wiadomości X-Forwarded-For lub True-Client-IP.

    2. Korzystanie z raportów niestandardowych

      Możesz utworzyć raporty niestandardowe, aby określić, czy podczas wykonywania zasad kontroli dostępu w interfejsie API proxy został zwrócony kod stanu 403, a także ustalić adres IP klienta. Jest to szczególnie przydatne, jeśli problem wystąpił w przeszłości lub jest sporadyczny i nie możesz zarejestrować ścieżki w interfejsie.

      Aby dowiedzieć się, jak tworzyć raporty niestandardowe, zapoznaj się z artykułem Tworzenie raportów niestandardowych i zarządzanie nimi. W raporcie niestandardowym wybierz:

      1. Suma ruchu jako dane,

      2. Proxy, Response Status Code, Proxy Client IPX-Forwarded-For jako wymiary.

      Pomoże Ci to określić adres IP klienta lub zakres adresów IP, które doprowadziły do błędu.

  4. Jeśli adres IP klienta (wskazany przez zmienną proxy.client.ip) lub dowolny adres IP przekazywany w żądaniu do interfejsu API odpowiada adresom IP określonym w elemencie <SourceAddress> w elemencie <MatchRule> zasad kontroli dostępu, gdzie atrybut action ma wartość DENY, to właśnie jest przyczyną błędu.

    W powyższym przykładzie wartość ustawiona w zmiennej referencyjnej proxy.client.ip (jak widać na zrzucie ekranu z wykrywaniem powyżej) jest zgodna z adresem IP zdefiniowanym w elemencie <SourceAddress> w zasadach kontroli dostępu, co powoduje wywołanie odpowiedzi z błędem:

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

Rozdzielczość

Jeśli zasada kontroli dostępu ma odmawiać dostępu do żądań do interfejsu API pochodzących z konkretnych adresów IP wymienionych w zasadzie faultstring, powinien pojawić się komunikat o błędzie. W takim przypadku nie musisz nic więcej robić.

Jeśli jednak uznasz, że określone adresy IP mogą mieć dostęp do żądań interfejsu API dla konkretnego interfejsu API Proxy, zmodyfikuj zasady kontroli dostępu, aby zezwolić na dostęp do tych adresów IP. Jeśli nie chcesz odmówić dostępu do żadnych adresów IP, możesz usunąć zasadę kontroli dostępu z serwera proxy interfejsu API.

Oto przykład, jak zezwolić na dostęp tylko dla konkretnego adresu IP 104.132.196.83 i odmówić dostępu wszystkim innym:

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