Problemy z ograniczaniem żądań i http 403 — problemy z dostępem zabronionym
Korzystając z artykułu z serii rozwiązywania problemów z usługą Azure API Management, jest to piąty scenariusz laboratorium. Upewnij się, że wykonano instrukcje konfiguracji laboratorium zgodnie z tym, aby ponownie utworzyć problem.
Oryginalna wersja produktu: usługa API Management
Oryginalny numer KB: 4464928
Symptomy
Interfejs API zasobów pobiera dane osobowe użytkownika, wpisy w mediach społecznościowych, komentarze i zdjęcia oraz wykorzystuje odpowiedź zwróconą dla projektu uczenia maszynowego. Dziwnie po kilku dniach korzystania z niego operacja GetPosts zaczęła zgłaszać błąd HTTP 403 — Zabronione , podczas gdy inne operacje działają prawidłowo zgodnie z oczekiwaniami.
{
"statusCode": 403,
"message": "Zabronione"
}
Oprócz powyższych wystąpi również błąd HTTP 429 — zbyt wiele żądań podczas wywoływania operacji GetComments dla każdego drugiego żądania. Problem zostanie automatycznie rozwiązany po upływie 10 sekund, jednak powtarza się po ponownym wywołaniu interfejsu API. Zachowanie nie jest obserwowane w przypadku innych operacji.
{
"statusCode": 429,
"message": "Przekroczono limit szybkości. Spróbuj ponownie w ciągu 5 sekund.
}
Kroki rozwiązywania problemów
Błąd HTTP 403 — Zabronione może być zgłoszony, gdy zaimplementowano jakiekolwiek zasady ograniczeń dostępu.
Sprawdź ślad inspektora usługi APIM i zwróć uwagę na istnienie zasad „ip-filter”, które filtrują (zezwalają/odrzucają) wywołania z określonych adresów IP i/lub zakresów adresów.
Aby sprawdzić zakres zasad "ip-filter", wybierz przycisk Oblicz obowiązujące zasady . Jeśli nie widzisz żadnych zasad ograniczeń dostępu wdrożonych w żadnym zakresie, następny krok weryfikacji powinien zostać wykonany na poziomie produktu, przechodząc do skojarzonego produktu, a następnie klikając opcję Zasady.
<inbound> <base /> <choose> <when condition="@(context.Operation.Name.Equals("GetPosts"))"> <ip-filter action="forbid"> <address-range from="0.0.0.0" to="255.255.255.255" /> </ip-filter> </when> </choose> </inbound>
W przypadku drugiego problemu (HTTP 429 — zbyt wiele żądań) wykonamy tę samą procedurę, sprawdzając ślad inspektora APIM i sprawdzając, czy istnieją jakieś zasady "rate-limit" lub "rate-limit-by-key" zaimplementowane w dowolnym zakresie.
Jeśli obliczysz obowiązujące zasady, należy zauważyć zasady ograniczeń dostępu (rate-limit-by-key) zaimplementowane w zakresie globalnym, tj. w obszarze "Przetwarzanie przychodzące" w opcji "Wszystkie interfejsy API".
<inbound> <choose> <when condition="@(context.Operation.Name.Equals("GetComments"))"> <rate-limit-by-key calls="1" renewal-period="10" increment-condition="@(context.Response.StatusCode == 200)" counter-key="@(context.Request.IpAddress)" /> </when> </choose> </inbound>
Przeczytaj więcej na temat zasad filtru ip i rate-limit-by-key w usłudze APIM.
Skontaktuj się z nami, aby uzyskać pomoc
Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.