Diretrizes de limitação do Azure Key VaultAzure Key Vault throttling guidance

O Throttling é um processo que inicia que limita o número de chamadas simultâneas ao serviço Azure para evitar o uso excessivo de recursos.Throttling is a process you initiate that limits the number of concurrent calls to the Azure service to prevent overuse of resources. O Azure Key Vault (AKV) foi concebido para suportar um grande volume de pedidos.Azure Key Vault (AKV) is designed to handle a high volume of requests. Se ocorrer um número esmagador de pedidos, o estrangulamento dos pedidos do seu cliente ajuda a manter o melhor desempenho e fiabilidade do serviço AKV.If an overwhelming number of requests occurs, throttling your client's requests helps maintain optimal performance and reliability of the AKV service.

Os limites de estrangulamento variam em função do cenário.Throttling limits vary based on the scenario. Por exemplo, se estiver a executar um grande volume de escritas, a possibilidade de estrangulamento é maior do que se estiver apenas a executar leituras.For example, if you are performing a large volume of writes, the possibility for throttling is higher than if you are only performing reads.

Como é que o Key Vault lida com os seus limites?How does Key Vault handle its limits?

Os limites de serviço no Key Vault impedem o uso indevido de recursos e garantem a qualidade do serviço a todos os clientes da Key Vault.Service limits in Key Vault prevent misuse of resources and ensure quality of service for all of Key Vault's clients. Quando um limiar de serviço é ultrapassado, o Key Vault limita quaisquer outros pedidos desse cliente por um período de tempo, devolve o código de estado HTTP 429 (Demasiados pedidos) e o pedido falha.When a service threshold is exceeded, Key Vault limits any further requests from that client for a period of time, returns HTTP status code 429 (Too many requests), and the request fails. Pedidos falhados que devolvem uma contagem de 429 para os limites do acelerador seguidos por Key Vault.Failed requests that return a 429 count towards the throttle limits tracked by Key Vault.

Key Vault foi originalmente projetado para ser usado para armazenar e recuperar os seus segredos na hora de implantação.Key Vault was originally designed to be used to store and retrieve your secrets at deployment time. O mundo evoluiu, e o Key Vault está a ser usado em tempo de execução para armazenar e recuperar segredos, e muitas vezes aplicações e serviços querem usar o Key Vault como uma base de dados.The world has evolved, and Key Vault is being used at run-time to store and retrieve secrets, and often apps and services want to use Key Vault like a database. Os limites atuais não suportam taxas de produção elevadas.Current limits do not support high throughput rates.

O Key Vault foi originalmente criado com os limites especificados nos limites de serviço do Azure Key Vault.Key Vault was originally created with the limits specified in Azure Key Vault service limits. Para maximizar o seu Cofre-Chave através de taxas de put, aqui estão algumas diretrizes/melhores práticas recomendadas para maximizar o seu rendimento:To maximize your Key Vault through put rates, here are some recommended guidelines/best practices for maximizing your throughput:

  1. Certifique-se de que tem estrangulamento no lugar.Ensure you have throttling in place. O cliente deve honrar as políticas de back-off exponencial para 429's e garantir que está a fazer recauchutagem de acordo com as orientações abaixo.Client must honor exponential back-off policies for 429's and ensure you are doing retries as per the guidance below.
  2. Divida o seu tráfego key vault entre vários cofres e diferentes regiões.Divide your Key Vault traffic amongst multiple vaults and different regions. Utilize um cofre separado para cada domínio de segurança/disponibilidade.Use a separate vault for each security/availability domain. Se você tem cinco aplicativos, cada um em duas regiões, então recomendamos 10 cofres cada um contendo os segredos exclusivos para app e região.If you have five apps, each in two regions, then we recommend 10 vaults each containing the secrets unique to app and region. Um limite de subscrição para todos os tipos de transação é cinco vezes superior ao limite de cofre de chaves individual.A subscription-wide limit for all transaction types is five times the individual key vault limit. Por exemplo, as transações HSM-other por subscrição estão limitadas a 5.000 transações em 10 segundos por subscrição.For example, HSM-other transactions per subscription are limited to 5,000 transactions in 10 seconds per subscription. Considere caching o segredo dentro do seu serviço ou app para também reduzir o RPS diretamente para o cofre chave e/ou manusear o tráfego baseado em explosão.Consider caching the secret within your service or app to also reduce the RPS directly to key vault and/or handle burst based traffic. Também pode dividir o seu tráfego entre diferentes regiões para minimizar a latência e usar uma subscrição/cofre diferente.You can also divide your traffic amongst different regions to minimize latency and use a different subscription/vault. Não envie mais do que o limite de subscrição para o serviço Key Vault numa única região de Azure.Do not send more than the subscription limit to the Key Vault service in a single Azure region.
  3. Cache os segredos que você recupera do Cofre da Chave Azure na memória, e reutilizar da memória sempre que possível.Cache the secrets you retrieve from Azure Key Vault in memory, and reuse from memory whenever possible. Relê-lo do Azure Key Vault apenas quando a cópia em cache deixar de funcionar (por exemplo, porque foi rodada na fonte).Re-read from Azure Key Vault only when the cached copy stops working (e.g. because it got rotated at the source).
  4. O Key Vault foi concebido para os seus próprios segredos de serviços.Key Vault is designed for your own services secrets. Se estiver a armazenar os segredos dos seus clientes (especialmente para cenários de armazenamento de chaves de alto rendimento), considere colocar as chaves numa base de dados ou uma conta de armazenamento com encriptação e armazenar apenas a chave principal no Cofre da Chave Azure.If you are storing your customers' secrets (especially for high-throughput key storage scenarios), consider putting the keys in a database or storage account with encryption, and storing just the master key in Azure Key Vault.
  5. Criptografe, envolva e verifique se as operações de chave pública podem ser realizadas sem acesso ao Key Vault, o que não só reduz o risco de estrangulamento, como também melhora a fiabilidade (desde que cache corretamente o material chave público).Encrypt, wrap, and verify public-key operations can be performed with no access to Key Vault, which not only reduces risk of throttling, but also improves reliability (as long as you properly cache the public key material).
  6. Se utilizar o Key Vault para armazenar credenciais para um serviço, verifique se esse serviço suporta a autenticação AZure AD para autenticar diretamente.If you use Key Vault to store credentials for a service, check if that service supports Azure AD Authentication to authenticate directly. Isto reduz a carga no Key Vault, melhora a fiabilidade e simplifica o seu código, uma vez que o Key Vault pode agora utilizar o token AD Azure.This reduces the load on Key Vault, improves reliability and simplifies your code since Key Vault can now use the Azure AD token. Muitos serviços passaram a usar a Azure AD Auth. Consulte a lista atual dos Serviços que suportam identidades geridas para recursos Azure.Many services have moved to using Azure AD Auth. See the current list at Services that support managed identities for Azure resources.
  7. Considere espantosamente a sua carga/implantação durante um período de tempo mais longo para se manter abaixo dos limites atuais do RPS.Consider staggering your load/deployment over a longer period of time to stay under the current RPS limits.
  8. Se a sua aplicação compreende vários nós que precisam de ler os mesmos segredos, então considere usar um padrão de saída de ventilador, onde uma entidade lê o segredo de Key Vault, e os fãs para todos os nós.If your app comprises multiple nodes that need to read the same secret(s), then consider using a fan out pattern, where one entity reads the secret from Key Vault, and fans out to all nodes. Cache os segredos recuperados apenas na memória.Cache the retrieved secrets only in memory. Se descobrir que o acima ainda não satisfaz as suas necessidades, preencha a tabela abaixo e contacte-nos para determinar que capacidade adicional pode ser adicionada (por exemplo, colocado abaixo apenas para fins ilustrativos).If you find that the above still does not meet your needs, please fill out the below table and contact us to determine what additional capacity can be added (example put below for illustrative purposes only).
Nome do VaultVault name Região do CofreVault Region Tipo de objeto (Segredo, Chave ou Cert)Object type (Secret, Key, or Cert) Operação(s)*Operation(s)* Tipo chaveKey Type Comprimento ou curva da chaveKey Length or Curve Chave HSM?HSM key? RPS de estado estável necessárioSteady state RPS needed Pico RPS necessárioPeak RPS needed
https://mykeyvault.vault.azure.net/ ChaveKey AssinarSign ECEC P-256P-256 NoNo 200200 10001000

* Para obter uma lista completa de valores possíveis, consulte as operações do Azure Key Vault.* For a full list of possible values, see Azure Key Vault operations.

Se for aprovada a capacidade adicional, por favor, note o seguinte como resultado do aumento da capacidade:If additional capacity is approved, please note the following as result of the capacity increases:

  1. Alterações no modelo de consistência de dados.Data consistency model changes. Uma vez que um cofre é permitido listado com capacidade adicional de produção, o serviço Key Vault de consistência de dados altera alterações (necessária para atender RPS de volume mais elevado uma vez que o serviço de armazenamento Azure subjacente não consegue acompanhar).Once a vault is allow listed with additional throughput capacity, the Key Vault service data consistency guarantee changes (necessary to meet higher volume RPS since the underlying Azure Storage service cannot keep up). Em poucas palavras:In a nutshell:
  2. Sem permitir a listagem : O serviço Key Vault refletirá os resultados de uma operação de escrita (por exemplo.Without allow listing : The Key Vault service will reflect the results of a write operation (eg. SecretSet, CreateKey) imediatamente em chamadas subsequentes (por exemplo.SecretSet, CreateKey) immediately in subsequent calls (eg. SecretGet, KeySign).SecretGet, KeySign).
  3. Com a listagem de permitis : O serviço Key Vault refletirá os resultados de uma operação de escrita (por exemplo.With allow listing : The Key Vault service will reflect the results of a write operation (eg. SecretSet, CreateKey) dentro de 60 segundos em chamadas subsequentes (por exemplo.SecretSet, CreateKey) within 60 seconds in subsequent calls (eg. SecretGet, KeySign).SecretGet, KeySign).
  4. O código do cliente deve honrar a política de back-off para 429 retróscos.Client code must honor back-off policy for 429 retries. O código do cliente que chama o serviço Key Vault não deve re-tentar imediatamente os pedidos do Key Vault quando recebe um código de resposta 429.The client code calling the Key Vault service must not immediately retry Key Vault requests when it receives a 429 response code. A orientação de estrangulamento do Azure Key Vault publicada aqui recomenda a aplicação de backoff exponencial ao receber um código de resposta 429 Http.The Azure Key Vault throttling guidance published here recommends applying exponential backoff when receiving a 429 Http response code.

Se tiver um caso de negócio válido para limites de aceleração mais elevados, entre em contato conosco.If you have a valid business case for higher throttle limits, please contact us.

Como acelerar a sua app em resposta aos limites de serviçoHow to throttle your app in response to service limits

Seguem-se as melhores práticas que deve implementar quando o seu serviço é acelerado:The following are best practices you should implement when your service is throttled:

  • Reduza o número de operações por pedido.Reduce the number of operations per request.
  • Reduza a frequência dos pedidos.Reduce the frequency of requests.
  • Evite recauchutagens imediatas.Avoid immediate retries.
    • Todos os pedidos se acumulam contra os seus limites de utilização.All requests accrue against your usage limits.

Quando implementar o tratamento de erros da sua aplicação, utilize o código de erro HTTP 429 para detetar a necessidade de estrangulamento do lado do cliente.When you implement your app's error handling, use the HTTP error code 429 to detect the need for client-side throttling. Se o pedido falhar novamente com um código de erro HTTP 429, ainda encontra um limite de serviço Azure.If the request fails again with an HTTP 429 error code, you are still encountering an Azure service limit. Continue a utilizar o método de estrangulamento recomendado do lado do cliente, reformulando o pedido até que tenha sucesso.Continue to use the recommended client-side throttling method, retrying the request until it succeeds.

O código que implementa o backoff exponencial é mostrado abaixo.Code that implements exponential backoff is shown below.

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

A utilização deste código numa aplicação C# do cliente é simples.Using this code in a client C# application is straightforward.

No código de erro HTTP 429, comece a estrangular o seu cliente utilizando uma abordagem exponencial de backoff:On HTTP error code 429, begin throttling your client using an exponential backoff approach:

  1. Espere 1 segundo, redando o pedidoWait 1 second, retry request
  2. Se ainda estrangulado esperar 2 segundos, reda o pedido de novoIf still throttled wait 2 seconds, retry request
  3. Se ainda estrangulado esperar 4 segundos, reda o pedido de novoIf still throttled wait 4 seconds, retry request
  4. Se ainda estrangulado esperar 8 segundos, reda o pedido de novoIf still throttled wait 8 seconds, retry request
  5. Se ainda estrangulado esperar 16 segundos, reda o pedido de novoIf still throttled wait 16 seconds, retry request

Neste momento, não deverá receber códigos de resposta HTTP 429.At this point, you should not be getting HTTP 429 response codes.

Ver tambémSee also

Para uma orientação mais profunda de estrangulamento na Cloud microsoft, consulte o Padrão de Aceleração.For a deeper orientation of throttling on the Microsoft Cloud, see Throttling Pattern.