Zaawansowane ograniczanie żądań za pomocą usługi Azure API Management

DOTYCZY: Wszystkie warstwy usługi API Management

Ograniczanie żądań przychodzących jest kluczową rolą usługi Azure API Management. Kontrolując szybkość żądań lub łączną liczbę żądań/przesyłanych danych, usługa API Management umożliwia dostawcom interfejsów API ochronę swoich interfejsów API przed nadużyciami i tworzenie wartości dla różnych warstw produktów interfejsu API.

Limity szybkości i limity przydziału

Limity szybkości i przydziału są używane do różnych celów.

Limity szybkości

Limity szybkości są zwykle używane do ochrony przed krótkimi i intensywnymi skokami wolumenu. Jeśli na przykład wiesz, że usługa zaplecza ma wąskie gardło w bazie danych z dużą ilością wywołań, możesz ustawić rate-limit-by-key zasady, aby nie zezwalały na duże wywołania przy użyciu tego ustawienia.

Uwaga

Ze względu na rozproszony charakter architektury ograniczania przepustowości ograniczanie szybkości nigdy nie jest całkowicie dokładne. Różnica między skonfigurowaną a rzeczywistą liczbą dozwolonych żądań różni się w zależności od liczby i szybkości żądań, opóźnienia wewnętrznej baza danych i innych czynników.

Normy sprzedaży

Limity przydziału są zwykle używane do kontrolowania stawek wywołań w dłuższym okresie czasu. Na przykład mogą ustawić łączną liczbę wywołań, które dany subskrybent może wykonać w ciągu danego miesiąca. W przypadku zarabiania na interfejsie API limity przydziału można również ustawić inaczej w przypadku subskrypcji opartych na warstwach. Przykładowo, subskrypcja w warstwie Podstawowa może umożliwiać wykonanie nie więcej niż 10 000 wywołań miesięcznie, ale w warstwie Premium może to być nawet 100 000 000 wywołań każdego miesiąca.

W usłudze Azure API Management limity szybkości są zwykle propagowane szybciej w węzłach w celu ochrony przed skokami. Z kolei informacje o limitach przydziału użycia są używane w dłuższej perspektywie, dlatego jej implementacja jest inna.

Uwaga

Po ponownym uruchomieniu bazowych zasobów obliczeniowych na platformie usługi usługa API Management może nadal obsługiwać żądania przez krótki okres po osiągnięciu limitu przydziału.

Ograniczanie oparte na produktach

Możliwości ograniczania szybkości, które są ograniczone do określonej subskrypcji, są przydatne dla dostawcy interfejsu API w celu zastosowania limitów dla deweloperów, którzy zarejestrowali się w celu korzystania z interfejsu API. Nie pomaga to jednak na przykład w ograniczaniu poszczególnych użytkowników końcowych interfejsu API. Istnieje możliwość, aby jeden użytkownik aplikacji dewelopera korzystał z całego limitu przydziału, a następnie uniemożliwiał innym klientom dewelopera korzystanie z aplikacji. Ponadto kilku klientów, którzy mogą wygenerować dużą liczbę żądań, może ograniczyć dostęp do okazjonalnych użytkowników.

Niestandardowe ograniczanie oparte na kluczach

Uwaga

Zasady rate-limit-by-key i quota-by-key nie są dostępne w warstwie Zużycie usługi Azure API Management. Zasady quota-by-key nie są również obecnie dostępne w warstwach v2.

Zasady rate-limit-by-key i quota-by-key zapewniają bardziej elastyczne rozwiązanie do kontroli ruchu. Te zasady umożliwiają definiowanie wyrażeń w celu zidentyfikowania kluczy używanych do śledzenia użycia ruchu. Sposób działania jest najłatwiejszy zilustrowany przykładem.

Ograniczanie adresów IP

Poniższe zasady ograniczają jeden adres IP klienta do tylko 10 wywołań co minutę, z łącznie 1000 000 wywołań i 10 000 kilobajtów przepustowości miesięcznie.

<rate-limit-by-key  calls="10"
          renewal-period="60"
          counter-key="@(context.Request.IpAddress)" />

<quota-by-key calls="1000000"
          bandwidth="10000"
          renewal-period="2629800"
          counter-key="@(context.Request.IpAddress)" />

Jeśli wszyscy klienci w Internecie używali unikatowego adresu IP, może to być skuteczny sposób ograniczania użycia przez użytkownika. Istnieje jednak prawdopodobieństwo, że wielu użytkowników współużytkuje jeden publiczny adres IP ze względu na dostęp do Internetu za pośrednictwem urządzenia NAT. Mimo to w przypadku interfejsów API, które zezwalają na nieuwierzytelniony dostęp IpAddress , najlepszym rozwiązaniem może być.

Ograniczanie tożsamości użytkownika

Jeśli użytkownik końcowy jest uwierzytelniony, można wygenerować klucz ograniczania na podstawie informacji, które jednoznacznie identyfikują tego użytkownika.

<rate-limit-by-key calls="10"
    renewal-period="60"
    counter-key="@(context.Request.Headers.GetValueOrDefault("Authorization","").AsJwt()?.Subject)" />

W tym przykładzie pokazano, jak wyodrębnić nagłówek Autoryzacja, przekonwertować go na JWT obiekt i użyć tematu tokenu, aby zidentyfikować użytkownika i użyć go jako klucza ograniczania szybkości. Jeśli tożsamość użytkownika jest przechowywana w elemecie JWT jako jedno z innych oświadczeń, ta wartość może być używana w jego miejscu.

Połączone zasady

Mimo że zasady ograniczania przepustowości oparte na użytkownikach zapewniają większą kontrolę niż zasady ograniczania oparte na subskrypcji, nadal istnieje wartość łącząca obie możliwości. Ograniczanie przepustowości według klucza subskrypcji produktu (Ograniczanie liczby wywołań według subskrypcji i Ustawianie limitu przydziału użycia według subskrypcji) to doskonały sposób na zarabianie na interfejsie API przez naliczanie opłat na podstawie poziomów użycia. Bardziej szczegółowa kontrola możliwości ograniczania przepustowości przez użytkownika jest uzupełnieniem i uniemożliwia zachowanie jednego użytkownika z obniżoną wydajnością innego użytkownika.

Ograniczanie przepływności sterowane przez klienta

Po zdefiniowaniu klucza ograniczania przy użyciu wyrażenia zasad jest to dostawca interfejsu API, który wybiera sposób ograniczania przepustowości. Deweloper może jednak chcieć kontrolować sposób ograniczania szybkości własnych klientów. Może to być włączone przez dostawcę interfejsu API przez wprowadzenie niestandardowego nagłówka, aby umożliwić aplikacji klienckiej dewelopera komunikowanie klucza z interfejsem API.

<rate-limit-by-key calls="100"
          renewal-period="60"
          counter-key="@(request.Headers.GetValueOrDefault("Rate-Key",""))"/>

Dzięki temu aplikacja kliencka dewelopera może wybrać sposób tworzenia klucza ograniczania szybkości. Deweloperzy klienta mogą tworzyć własne warstwy stawki, przydzielając zestawy kluczy użytkownikom i obracając użycie klucza.

Podsumowanie

Usługa Azure API Management zapewnia ograniczanie limitu przydziału i szybkości w celu ochrony i zwiększenia wartości usługi interfejsu API. Nowe zasady ograniczania przepustowości z niestandardowymi regułami określania zakresu umożliwiają bardziej szczegółową kontrolę nad tymi zasadami, aby umożliwić klientom tworzenie jeszcze lepszych aplikacji. W przykładach w tym artykule pokazano użycie tych nowych zasad przez ograniczanie szybkości produkcji kluczy z adresami IP klienta, tożsamością użytkownika i wygenerowanymi wartościami klienta. Istnieje jednak wiele innych części komunikatu, których można użyć, takich jak agent użytkownika, fragmenty ścieżki adresu URL, rozmiar komunikatu.

Następne kroki

Przekaż nam swoją opinię jako problem z usługą GitHub dla tego tematu. Dobrze byłoby usłyszeć o innych potencjalnych wartościach kluczy, które były logicznym wyborem w Twoich scenariuszach.