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
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 to104.132.196.83:
"faultstring": "Access Denied for client ip : 104.132.196.83"
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 elemenciefaultstring
(patrz krok 1 powyżej).Na przykład w tej polityce adres IP
<SourceAddress>
jest zdefiniowany jako104.132.196.83,
, co odpowiada wartości w zasadachfaultstring
:<?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>
Określ adresy IP, z których wysłano żądanie interfejsu API. Możesz to zrobić na kilka sposobów:
Korzystanie z śledzenia interfejsu
- Przechwytywanie logu czasu związanego z nieudanym żądaniem do interfejsu API.
- W panelu po prawej stronie wybierz konkretną zasadę kontroli dostępu, w przypadku której wystąpił błąd.
Sprawdź wartość zmiennej
proxy.client.ip
, jak pokazano na zrzucie ekranu poniżej, który przedstawia przykładowy ślad.Jeśli
proxy.client.ip
nie jest widoczny, sprawdź wartość nagłówków wiadomości X-Forwarded-For lub True-Client-IP.
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:
Suma ruchu jako dane,
Proxy, Response Status Code, Proxy Client IP i X-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.
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 atrybutaction
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>