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
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 to104.132.196.83:
"faultstring": "Access Denied for client ip : 104.132.196.83"
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 wfaultstring
(krok 1 powyżej).Na przykład ta zasada definiuje adres IP
<SourceAddress>
jako104.132.196.83,
, który pasuje do adresu w plikufaultstring
:<?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>
Ustal adresy IP, z których wysłano żądanie do interfejsu API. Można to zrobić na kilka sposobów:
Korzystanie z śledzenia UI
- 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 na zrzucie ekranu poniżej przykładowego logu czasu.Jeśli
proxy.client.ip
nie ma na liście, sprawdź wartość parametru Nagłówki wiadomości X-Forwarded-For lub True-Client-IP.
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:
sumy ruchu jako danych,
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.
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 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>