Wskazówki dotyczące ograniczania usługi Azure Key Vault

Ograniczanie przepustowości to proces, który inicjuje, który ogranicza liczbę współbieżnych wywołań do usługi platformy Azure, aby zapobiec nadmiernemu użyciu zasobów. Usługa Azure Key Vault (AKV) jest przeznaczona do obsługi dużej liczby żądań. Jeśli wystąpi przytłaczająca liczba żądań, ograniczanie żądań klienta pomaga zachować optymalną wydajność i niezawodność usługi AKV.

Limity ograniczania przepustowości różnią się w zależności od scenariusza. Jeśli na przykład wykonujesz dużą liczbę zapisów, możliwość ograniczania przepustowości jest większa niż w przypadku wykonywania samych operacji odczytu.

Jak usługa Key Vault obsługuje swoje limity?

Limity usług w usłudze Key Vault uniemożliwiają nieprawidłowe użycie zasobów i zapewniają jakość usług dla wszystkich klientów usługi Key Vault. Po przekroczeniu progu usługi usługa Key Vault ogranicza wszelkie dalsze żądania od tego klienta, zwraca kod stanu HTTP 429 (zbyt wiele żądań) i żądanie kończy się niepowodzeniem. Żądania, które zwracają błąd 429, nie są liczone do limitów ograniczania śledzonych przez usługę Key Vault.

Usługa Key Vault została pierwotnie zaprojektowana do przechowywania i pobierania wpisów tajnych w czasie wdrażania. Świat ewoluował, a usługa Key Vault jest używana w czasie wykonywania do przechowywania i pobierania wpisów tajnych, a często aplikacje i usługi chcą używać usługi Key Vault, takiej jak baza danych. Bieżące limity nie obsługują wysokich szybkości przepływności.

Usługa Key Vault została pierwotnie utworzona z limitami określonymi w limitach usługi Azure Key Vault. Aby zmaksymalizować współczynniki przepływności usługi Key Vault, poniżej przedstawiono zalecane wskazówki/najlepsze rozwiązania dotyczące maksymalizacji przepływności:

  1. Upewnij się, że masz ograniczenie przepustowości. Klient musi przestrzegać zasad wycofywania wykładniczego dla wersji 429 i upewnić się, że wykonujesz ponawianie prób zgodnie z poniższymi wskazówkami.
  2. Podziel ruch usługi Key Vault między wiele magazynów i różnych regionów. Użyj oddzielnego magazynu dla każdej domeny zabezpieczeń/dostępności. Jeśli masz pięć aplikacji, z których każda znajduje się w dwóch regionach, zalecamy 10 magazynów zawierających wpisy tajne unikatowe dla aplikacji i regionu. Limit obejmujący całą subskrypcję dla wszystkich typów transakcji wynosi pięć razy więcej niż limit pojedynczego magazynu kluczy. Na przykład transakcje HSM na subskrypcję są ograniczone do 5000 transakcji w ciągu 10 sekund na subskrypcję. Rozważ buforowanie wpisu tajnego w usłudze lub aplikacji, aby również zmniejszyć liczbę żądań ściągnąć bezpośrednio do magazynu kluczy i/lub obsłużyć ruch oparty na serii. Możesz również podzielić ruch między różne regiony, aby zminimalizować opóźnienia i użyć innej subskrypcji/magazynu. Nie wysyłaj więcej niż limit subskrypcji do usługi Key Vault w jednym regionie świadczenia usługi Azure.
  3. Buforuj wpisy tajne pobierane z usługi Azure Key Vault w pamięci i używaj ich ponownie z pamięci, jeśli to możliwe. Ponownie odczyt z usługi Azure Key Vault tylko wtedy, gdy buforowana kopia przestanie działać (np. dlatego, że została obracana w źródle).
  4. Usługa Key Vault została zaprojektowana pod kątem własnych wpisów tajnych usług. Jeśli przechowujesz wpisy tajne klientów (szczególnie w scenariuszach magazynu kluczy o wysokiej przepływności), rozważ umieszczenie kluczy w bazie danych lub koncie magazynu z szyfrowaniem i przechowywanie tylko klucza podstawowego w usłudze Azure Key Vault.
  5. Operacje szyfrowania, zawijania i weryfikowania kluczy publicznych można wykonywać bez dostępu do usługi Key Vault, co nie tylko zmniejsza ryzyko ograniczania przepustowości, ale także zwiększa niezawodność (o ile prawidłowo buforujesz materiał klucza publicznego).
  6. Jeśli używasz usługi Key Vault do przechowywania poświadczeń dla usługi, sprawdź, czy ta usługa obsługuje uwierzytelnianie firmy Microsoft Entra w celu bezpośredniego uwierzytelniania. Zmniejsza to obciążenie usługi Key Vault, zwiększa niezawodność i upraszcza kod, ponieważ usługa Key Vault może teraz używać tokenu Firmy Microsoft Entra. Wiele usług zostało przeniesionych do korzystania z uwierzytelniania Entra firmy Microsoft. Zobacz bieżącą listę w temacie Usługi, które obsługują tożsamości zarządzane dla zasobów platformy Azure.
  7. Rozważ rozłożenie obciążenia/wdrożenia w dłuższym okresie czasu, aby utrzymać się w ramach bieżących limitów rpS.
  8. Jeśli aplikacja składa się z wielu węzłów, które muszą odczytywać te same wpisy tajne, rozważ użycie wzorca fan-out, w którym jedna jednostka odczytuje wpis tajny z usługi Key Vault i wentylatory do wszystkich węzłów. Buforuj pobrane wpisy tajne tylko w pamięci.

Jak ograniczyć przepustowość aplikacji w odpowiedzi na limity usługi

Poniżej przedstawiono najlepsze rozwiązania , które należy zaimplementować, gdy usługa jest ograniczona:

  • Zmniejsz liczbę operacji na żądanie.
  • Zmniejsz częstotliwość żądań.
  • Unikaj natychmiastowych ponownych prób.
    • Wszystkie żądania są naliczane względem limitów użycia.

Podczas implementowania obsługi błędów aplikacji użyj kodu błędu HTTP 429, aby wykryć potrzebę ograniczania przepustowości po stronie klienta. Jeśli żądanie ponownie zakończy się niepowodzeniem z kodem błędu HTTP 429, nadal występuje limit usługi platformy Azure. Kontynuuj korzystanie z zalecanej metody ograniczania przepustowości po stronie klienta, ponów próbę żądania, dopóki nie powiedzie się.

Oto kod implementujący wycofywanie wykładnicze:

SecretClientOptions options = new SecretClientOptions()
    {
        Retry =
        {
            Delay= TimeSpan.FromSeconds(2),
            MaxDelay = TimeSpan.FromSeconds(16),
            MaxRetries = 5,
            Mode = RetryMode.Exponential
         }
    };
    var client = new SecretClient(new Uri("https://keyVaultName.vault.azure.net"), new DefaultAzureCredential(),options);
                                 
    //Retrieve Secret
    secret = client.GetSecret(secretName);

Użycie tego kodu w aplikacji języka C# klienta jest proste.

W przypadku kodu błędu HTTP 429 rozpocznij ograniczanie przepustowości klienta z użyciem odczekiwania wykładniczego:

  1. Poczekaj 1 sekundę i ponów żądanie
  2. Jeśli przepustowość jest nadal ograniczona, poczekaj 2 sekundy i ponów żądanie
  3. Jeśli przepustowość jest nadal ograniczona, poczekaj 4 sekundy i ponów żądanie
  4. Jeśli przepustowość jest nadal ograniczona, poczekaj 8 sekund i ponów żądanie
  5. Jeśli przepustowość jest nadal ograniczona, poczekaj 16 sekund i ponów żądanie

W tym momencie nie powinny już być zwracane kody odpowiedzi HTTP 429.

Zobacz też

Aby uzyskać dokładną orientację ograniczania przepustowości w chmurze firmy Microsoft, zobacz Wzorzec ograniczania przepustowości.