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, jeśli adres IP klienta lub dowolny adres IP przekazany w ramach żądania do interfejsu API pasuje do dowolnego adresu IP określonego w elemencie <SourceAddress> w elemencie <MatchRule> zasady kontroli dostępu, a atrybut action elementu <MatchRule> jest ustawiony na DENY.

Załóżmy na przykład, że element <SourceAddress> jest zdefiniowany w ten sposób:

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

Jeśli powyższy adres IP pasuje do adresu IP systemu klienta (wskazywanego przez zmienną proxy.client.ip) lub do dowolnego adresu IP przekazanego w ramach żądania do interfejsu API, wystąpi błąd.

Diagnostyka

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

    Na przykład w tym elemencie 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 serwerze proxy interfejsu API i określ konkretną zasadę, w której adresy IP określone w elemencie <SourceAddress> pasują do adresów IP zidentyfikowanych w elemencie faultstring (krok 1 powyżej).

    Na przykład ta zasada definiuje adres IP <SourceAddress> jako 104.132.196.83,, który pasuje do elementu 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 do interfejsu API. Możesz to zrobić na kilka sposobów:

    1. Korzystanie ze śledzenia w interfejsie

      1. Zarejestruj ślad nieudanego żądania do interfejsu API.
      2. W panelu po prawej stronie wybierz konkretną zasadę kontroli dostępu, która się nie powiodła.
      3. Sprawdź wartość zmiennej proxy.client.ip, jak pokazano na tym zrzucie ekranu przykładowego śladu.

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

    2. Korzystanie z raportów niestandardowych

      Możesz tworzyć raporty niestandardowe, aby sprawdzić, czy podczas wykonywania zasady kontroli dostępu w serwerze proxy interfejsu API został zwrócony kod stanu 403, a także określić adres IP klienta. Jest to szczególnie przydatne, jeśli problem wystąpił w przeszłości lub jeśli występuje sporadycznie i nie możesz zarejestrować śladu w interfejsie.

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

      1. Suma wizyt jako dane,

      2. Serwer proxy, Kod stanu odpowiedzi, Adres IP klienta serwera proxy i X-Forwarded-For jako wymiary.

      Pomoże Ci to określić adres IP klienta lub adresy IP, które spowodowały błąd.

  4. Jeśli adres IP klienta (wskazywany przez zmienną proxy.client.ip) lub dowolny adres IP przekazany w ramach żądania do interfejsu API pasuje do adresów IP określonych w elemencie <SourceAddress> w elemencie <MatchRule> zasady kontroli dostępu, a atrybut action jest ustawiony na DENY, to jest to przyczyna błędu.

    W przykładzie powyżej wartość ustawiona w zmiennej odniesienia proxy.client.ip (widoczna na zrzucie ekranu śladu powyżej) pasuje do adresu IP zdefiniowanego w elemencie <SourceAddress> zasady kontroli dostępu, co powoduje wygenerowanie odpowiedzi na błąd:

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

Rozwiązanie

Jeśli zasada kontroli dostępu ma na celu odrzucanie żądań do interfejsu API pochodzących z określonych adresów IP wymienionych w elemencie faultstring, komunikat o błędzie jest oczekiwany. W takim przypadku nie trzeba podejmować żadnych dodatkowych działań.

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

Oto przykład, który pokazuje, jak zezwolić na dostęp tylko do konkretnego adresu IP 104.132.196.83 i odmówić dostępu do pozostałych:

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