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

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

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 żądaniu 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> 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 ten adres IP pasuje do adresu IP systemu klienta (na który wskazuje zmienna proxy.client.ip) lub do dowolnego z adresów IP przekazywanych w żądaniu do interfejsu API, błąd wystąpi.

Diagnostyka

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

    Na przykład w następującym adresie 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 na nieprawidłowym serwerze proxy API i ustal konkretną zasadę, w przypadku której adresy IP określone w elemencie <SourceAddress> odpowiadają adresom IP określonym w faultstring (krok 1 powyżej).

    Na przykład ta zasada definiuje adres IP <SourceAddress> jako 104.132.196.83,, który pasuje do adresu w pliku 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. Ustal adresy IP, z których wysłano żądanie do interfejsu API. Można to zrobić na kilka sposobów:

    1. Korzystanie z śledzenia UI

      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 na zrzucie ekranu poniżej przykładowego logu czasu.

      4. Jeśli proxy.client.ip nie ma na liście, sprawdź wartość parametru Nagłówki wiadomości X-Forwarded-For lub True-Client-IP.

    2. Korzystanie z raportów niestandardowych

      Możesz tworzyć raporty niestandardowe, aby określić, czy podczas wykonywania zasady kontroli dostępu w interfejsie API został zgłoszony 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 jest przejściowy i nie możesz zarejestrować logu czasu w interfejsie.

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

      1. sumy ruchu jako danych,

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

      To powinno pomóc w ustaleniu adresów IP klienta lub adresów IP przekazanych, 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 przykładzie powyżej wartość ustawiona w zmiennej referencyjnej proxy.client.ip (jak widać na zrzucie ekranu powyżej) jest zgodna z adresem IP zdefiniowanym w elemencie <SourceAddress> zasady kontroli dostępu, co powoduje wyświetlenie odpowiedzi błędu:

    "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 stwierdzisz, że konkretne adresy IP mogą mieć dostęp do żądań do interfejsu API dla określonego serwera proxy interfejsu API, zmień zasady kontroli dostępu, aby zezwolić na dostęp do tych adresów IP. Jeśli nie chcesz odmawiać dostępu do żadnego adresu IP, możesz też usunąć zasadę kontroli dostępu z serwera proxy interfejsu API.

Oto przykład, który pokazuje, jak zezwolić na dostęp tylko do określonego adresu IP 104.132.196.83 i odmówić dostępu w przypadku reszty adresu:

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