Freigeben über


Anleitung zur Drosselung von Azure Key Vault

Die Einschränkung ist ein Prozess, den Sie initiieren, um die Anzahl der gleichzeitigen Aufrufe an den Azure-Dienst zu beschränken, um die Übernutzung von Ressourcen zu verhindern. Azure Key Vault (AKV) wurde entwickelt, um eine hohe Anzahl von Anforderungen zu verarbeiten. Wenn eine übermäßige Anzahl von Anfragen auftritt, hilft es, die Anfragen Ihres Clients zu drosseln, um die optimale Leistung und Zuverlässigkeit des AKV-Diensts aufrechtzuerhalten.

Die Grenzwerte für die Drosselung sind je nach Szenario unterschiedlich. So ist eine Drosselung beispielsweise wahrscheinlicher, wenn eine Vielzahl von Schreibvorgängen durchgeführt werden, als wenn nur Lesevorgänge durchgeführt werden.

Wie behandelt Key Vault seine Grenzen?

Dienstgrenzwerte in Key Vault verhindern Missbrauch von Ressourcen und stellen die Dienstqualität für alle Key Vault-Clients sicher. Wenn ein Dienstschwellenwert überschritten wird, schränkt Key Vault alle weiteren Anforderungen dieses Clients ein, gibt DEN HTTP-Statuscode 429 (Zu viele Anforderungen) zurück, und die Anforderung schlägt fehl. Anforderungen mit Fehlern, für die der Fehler 429 zurückgegeben wird, werden für den von Key Vault überwachten Drosselungsgrenzwert nicht mitgezählt.

Key Vault wurde ursprünglich entwickelt, um Ihre Geheimnisse während der Bereitstellung zu speichern und abzurufen. Da sich die Technologie weiterentwickelt hat, wird Key Vault zur Laufzeit zunehmend verwendet, um geheime Schlüssel zu speichern und abzurufen. Viele Anwendungen und Dienste verwenden Key Vault ähnlich einer Datenbank. Die aktuellen Dienstgrenzwerte sind jedoch nicht darauf ausgelegt, solche Szenarien mit hohem Durchsatz zu unterstützen.

Key Vault wurde ursprünglich mit den In Azure Key Vault-Dienstgrenzwerten angegebenen Grenzwerten erstellt. Um Ihre Key Vault-Durchsatzraten zu maximieren, folgen Sie hier einigen empfohlenen Richtlinien/bewährten Methoden für die Maximierung des Durchsatzes:

  1. Stellen Sie sicher, dass Drosselung vorhanden ist. Auf dem Client müssen Richtlinien für exponentielles Backoff für 429-Fehler berücksichtigt werden. Außerdem müssen Wiederholungsversuche entsprechend der Anleitung durchgeführt werden.
  2. Dividieren Sie Ihren Key Vault-Datenverkehr zwischen mehreren Tresoren und verschiedenen Regionen. Verwenden Sie einen separaten Tresor für jede Sicherheits-/Verfügbarkeitsdomäne. Wenn Sie über fünf Apps verfügen, empfehlen wir jeweils in zwei Regionen 10 Tresore, die die für App und Region eindeutigen Geheimschlüssel enthalten. Ein abonnementweites Limit für alle Transaktionstypen beträgt das Fünffache des Limits eines einzelnen Key Vaults. Beispielsweise sind HSM-andere Transaktionen pro Abonnement auf 5.000 Transaktionen in 10 Sekunden pro Abonnement beschränkt. Sie können das Geheimnis in dem Dienst oder der App zwischenspeichern, um auch die RPS direkt im Schlüsseltresor zu reduzieren oder Datenverkehr mit Stoßzeiten zu verarbeiten. Sie können Ihren Datenverkehr auch in verschiedene Regionen unterteilen, um die Latenz zu minimieren und ein anderes Abonnement/Tresor zu verwenden. Senden Sie nicht mehr als das Abonnementlimit an den Key Vault-Dienst in einer einzigen Azure-Region.
  3. Zwischenspeichern Sie die geheimen Schlüssel, die Sie aus Azure Key Vault im Arbeitsspeicher abrufen, und verwenden Sie sie nach Möglichkeit aus dem Speicher wieder. Lesen Sie aus Azure Key Vault nur dann erneut, wenn die zwischengespeicherte Kopie nicht mehr funktioniert (z. B. weil sie an der Quelle gedreht wurde).
  4. Key Vault wurde für Ihre eigenen Dienstgeheimnisse entwickelt. Wenn Sie die Geheimnisse Ihrer Kunden speichern (insbesondere für Speicherszenarien mit hohem Durchsatz), sollten Sie die Schlüssel in eine Datenbank oder ein Speicherkonto mit Verschlüsselung einfügen und nur den Primärschlüssel in Azure Key Vault speichern.
  5. Führen Sie für öffentliche Schlüsselvorgänge wie Verschlüsselung, Umhüllung und Überprüfung diese Vorgänge lokal aus, ohne Zugriff auf Key Vault, indem Sie das Material für öffentliche Schlüssel zwischenspeichern. Dieser Ansatz reduziert nicht nur das Risiko der Drosselung, sondern verbessert auch die Zuverlässigkeit Ihrer Anwendung.
  6. Wenn Sie Key Vault zum Speichern von Anmeldeinformationen für einen Dienst verwenden, überprüfen Sie, ob dieser Dienst die Microsoft Entra-Authentifizierung zur direkten Authentifizierung unterstützt. Dies reduziert die Auslastung von Key Vault, verbessert die Zuverlässigkeit und vereinfacht Ihren Code, da Key Vault jetzt das Microsoft Entra-Token verwenden kann. Viele Dienste verwenden jetzt die Microsoft Entra-Authentifizierung. Weitere Informationen finden Sie in der aktuellen Liste unter "Dienste", die verwaltete Identitäten für Azure-Ressourcen unterstützen.
  7. Erwägen Sie, Ihre Last oder Bereitstellung über einen längeren Zeitraum zu staffeln, um unter den aktuellen RPS-Grenzwerten zu bleiben.
  8. Wenn Ihre App mehrere Knoten umfasst, die ein oder mehrere gleiche Geheimnisse lesen müssen, sollten Sie ein Verteilermuster verwenden, bei dem eine Entität das Geheimnis aus dem Key Vault liest und es an alle Knoten verteilt. Zwischenspeichern der abgerufenen geheimen Schlüssel nur im Arbeitsspeicher.

So drosseln Sie Ihre App als Reaktion auf Dienstgrenzwerte

Im Folgenden sind bewährte Methoden aufgeführt, die Sie implementieren sollten, wenn Ihr Dienst gedrosselt wird:

  • Reduzieren Sie die Anzahl von Vorgängen pro Anforderung.
  • Verringern Sie die Häufigkeit von Anforderungen.
  • Vermeiden Sie schnelle Wiederholungsversuche.
    • Alle Anforderungen zählen zu Ihren Nutzungseinschränkungen.

Wenn Sie die Fehlerbehandlung Ihrer App implementieren, verwenden Sie den HTTP-Fehlercode 429, um die Notwendigkeit einer clientseitigen Drosselung zu erkennen. Wenn die Anforderung erneut mit einem HTTP 429-Fehlercode fehlschlägt, tritt weiterhin ein Azure-Dienstlimit auf. Verwenden Sie weiterhin die empfohlene clientseitige Drosselungsmethode, und wiederholen Sie die Anforderung, bis sie erfolgreich abgeschlossen wird.

Hier sehen Sie Code, der exponentielle Backoff implementiert:

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);

Die Verwendung dieses Codes in einer C#-Clientanwendung ist einfach.

Wenn der HTTP-Fehlercode 429 vorliegt, beginnen Sie die Drosselung Ihres Clients mithilfe eines exponentiellen Backoff-Konzepts:

  1. 1 Sekunde warten, Anforderung wiederholen
  2. Liegt weiterhin eine Drosselung vor: 2 Sekunden warten, Anforderung wiederholen
  3. Liegt weiterhin eine Drosselung vor: 4 Sekunden warten, Anforderung wiederholen
  4. Bei anhaltender Drosselung: Warten Sie 8 Sekunden, Anforderung wiederholen.
  5. Liegt weiterhin eine Drosselung vor: 16 Sekunden warten, Anforderung wiederholen

Nun sollte der HTTP-Antwortcode 429 nicht mehr angezeigt werden.

Siehe auch

Eine tiefergehende Ausrichtung der Drosselung in der Microsoft Cloud finden Sie unter Drosselungsmuster.