Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
IPDeniedAccess
Kod błędu
accesscontrol.IPDeniedAccess
Treść odpowiedzi o błędzie
{ "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 interfejsu API pasuje do dowolnego adresu IP określonego w elemencie <SourceAddress>
w elemencie <MatchRule>
zasad kontroli dostępu, a atrybut action
elementu <MatchRule>
ma wartość DENY
.
Załóżmy na przykład, że <SourceAddress>
jest zdefiniowany w następujący sposób:
<SourceAddress mask="32">104.132.196.83</SourceAddress>
Błąd wystąpi, jeśli powyższy adres IP odpowiada adresowi IP systemu klienta (wskazanego przez zmienną proxy.client.ip
) lub dowolnym z adresów IP przekazanych w żądaniu do interfejsu API.
Diagnostyka
Zidentyfikuj adresy IP, dla których określone żądanie do interfejsu API nie uzyskało dostępu. Te informacje znajdziesz w elemencie
faultstring
odpowiedzi o błędzie.Na przykład w:
faultstring
adres IP to104.132.196.83:
"faultstring": "Access Denied for client ip : 104.132.196.83"
Sprawdź wszystkie zasady kontroli dostępu w błędnym serwerze proxy interfejsu API i określ, gdzie 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 odpowiada zawartości wfaultstring
:<?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 wykonano żądanie do interfejsu API. Może się to odbywać na kilka sposobów:
Korzystanie z logu czasu w interfejsie użytkownika
- Zarejestruj log czasu nieudanego żądania do interfejsu API.
- W panelu po prawej stronie wybierz zasadę kontroli dostępu, której nie udało się zweryfikować.
Sprawdź wartość zmiennej
proxy.client.ip
zgodnie z tym zrzutem ekranu przedstawiającym przykładowy log czasu.Jeśli
proxy.client.ip
nie ma na liście, sprawdź wartość nagłówków wiadomości X-Forwarded-For lub True-Client-IP.
Korzystanie z raportów niestandardowych
Możesz tworzyć raporty niestandardowe, aby ustalić, czy podczas wykonywania zasady kontroli dostępu w ramach serwera proxy interfejsu API został zgłoszony kod stanu 403, a także określić adres IP klienta. Jest to szczególnie przydatne, jeśli problem występował w przeszłości lub występuje sporadycznie i nie możesz przechwycić 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:
Suma ruchu jako dane,
Serwer proxy, Kod stanu odpowiedzi, Adres IP klienta serwera proxy i X-Forwarded-For jako wymiary.
Powinno to pomóc Ci określić przekazane adresy IP klienta, które spowodowały błąd.
Jeśli adres IP klienta (wskazany przez zmienną
proxy.client.ip
) lub dowolny adres IP przekazany w żądaniu interfejsu API pasuje do adresów IP określonych w elemencie<SourceAddress>
w elemencie<MatchRule>
zasad kontroli dostępu, gdzie atrybutaction
ma wartośćDENY
, to jest przyczyną błędu.W powyższym przykładzie wartość ustawiona w referencyjnej zmiennej
proxy.client.ip
(jak widać na zrzucie ekranu powyżej) odpowiada adresowi IP określonemu w elemencie<SourceAddress>
zasady kontroli dostępu, wywołując odpowiedź o błędzie:"faultstring": "Access Denied for client ip : 104.132.196.83"
Rozdzielczość
Jeśli zasada kontroli dostępu ma blokować dostęp do żądań do interfejsu API pochodzących z konkretnych adresów IP wymienionych w zasadzie faultstring
, komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz nic robić.
Jeśli jednak ustalisz, że konkretne adresy IP mogą mieć dostęp do żądań do interfejsu API dla określonego serwera proxy interfejsu API, a następnie zmodyfikuj zasady kontroli dostępu, aby zezwolić na dostęp do tych adresów. Jeśli nie chcesz blokować dostępu do żadnych adresów IP, możesz usunąć zasadę kontroli dostępu z serwera proxy interfejsu API.
Oto przykład, który pokazuje, jak zezwolić na dostęp tylko dla określonego adresu IP 104.132.196.83
i odmówić go pozostałym adresom:
<AccessControl name="ACL">
<IPRules noRuleMatchAction = "DENY">
<MatchRule action = "ALLOW">
<SourceAddress mask="32">104.132.196.83</SourceAddress>
</MatchRule>
</IPRules>
</AccessControl>