Поделиться через


Руководство по регулированию Azure Key Vault

Регулирование — это процесс, который инициирует ограничение количества одновременных вызовов в службу Azure, чтобы предотвратить чрезмерное использование ресурсов. Azure Key Vault (AKV) предназначен для обработки большого объема запросов. Если происходит подавляющее количество запросов, регулирование запросов клиента помогает обеспечить оптимальную производительность и надежность службы AKV.

Ограничения скорости зависят от сценария. Например, при выполнении большого объема операций записи возможность регулирования будет более высокой по сравнению с ситуацией, когда выполняются только операции чтения.

Как Key Vault обрабатывает свои ограничения?

Ограничения служб в Key Vault предотвращают неправильное использование ресурсов и обеспечивают качество обслуживания для всех клиентов Key Vault. При превышении порогового значения службы Key Vault ограничивает все дальнейшие запросы от этого клиента, возвращает код состояния HTTP 429 (слишком много запросов), а запрос завершается ошибкой. Неудачные запросы, возвращающие 429, не учитываются в рамках допустимых лимитов, отслеживаемых Хранилищем ключей.

Key Vault изначально предназначен для хранения и извлечения секретов во время развертывания. В процессе развития технологий Key Vault все больше используется в ходе выполнения для хранения и извлечения секретов. Многие приложения и службы используют Key Vault подобно базе данных. Однако текущие ограничения службы не предназначены для поддержки таких сценариев высокой пропускной способности.

Key Vault изначально был создан с ограничениями, указанными в ограничениях службы Azure Key Vault. Чтобы максимально увеличить скорость пропускной способности Key Vault, ниже приведены некоторые рекомендации и передовые методы для ее увеличения.

  1. Убедитесь, что ограничение скорости установлено. Клиент должен учитывать экспоненциальные политики резервного копирования для 429-х и убедиться, что вы выполняете повторные попытки в отношении рекомендаций.
  2. Разделите трафик Key Vault между несколькими хранилищами и различными регионами. Используйте отдельное хранилище для каждого домена безопасности и доступности. Если у вас есть пять приложений, в каждом из двух регионов, мы рекомендуем 10 хранилищ, каждое из которых содержит секреты, уникальные для каждого приложения и региона. Ограничение на уровне подписки для всех типов транзакций составляет пять раз, чем ограничение отдельного хранилища ключей. Например, транзакции HSM-other для каждой подписки ограничены 5000 транзакций в 10 секунд на подписку. Рассмотрите возможность кэширования секрета в службе или приложении, чтобы также уменьшить количество RPS непосредственно в хранилище ключей и (или) обрабатывать всплески трафика. Вы также можете разделить трафик между различными регионами, чтобы свести к минимуму задержку и использовать другую подписку или хранилище. Не отправляйте больше подписки в службу Key Vault в одном регионе Azure.
  3. Кэшируйте секреты, полученные из Azure Key Vault в памяти, и повторное использование из памяти по возможности. Повторное чтение из Azure Key Vault только в том случае, если кэшированная копия перестает работать (например, из-за обновления на источнике).
  4. Key Vault предназначен для собственных секретов служб. Если вы храните секреты клиентов (особенно для сценариев хранилища ключей с высокой пропускной способностью), рекомендуется поместить ключи в базу данных или учетную запись хранения с шифрованием и сохранить только первичный ключ в Azure Key Vault.
  5. Для операций с открытым ключом, таких как шифрование, упаковка и проверка, эти операции выполняются локально без доступа к Key Vault путем кэширования материала открытого ключа. Этот подход не только снижает риск регулирования, но и повышает надежность приложения.
  6. Если вы используете Key Vault для хранения учетных данных для службы, проверьте, поддерживает ли эта служба проверку подлинности Microsoft Entra напрямую. Это снижает нагрузку на Key Vault, повышает надежность и упрощает код, так как Key Vault теперь может использовать токен Microsoft Entra. Многие службы теперь используют проверку подлинности Microsoft Entra. См. текущий список служб, поддерживающих управляемые удостоверения для ресурсов Azure.
  7. Рассмотрите возможность распределения нагрузки или развертывания на более длительный период времени, чтобы не превышать текущие ограничения RPS (запросов в секунду).
  8. Если ваше приложение состоит из нескольких узлов, которым нужно прочитать один или несколько одних и тех же секретов, рассмотрите возможность использования шаблона 'расщепление', при котором одна сущность считывает секрет из Key Vault и распределяет его по всем узлам. Кэшируйте извлеченные секреты только в памяти.

Как регулировать работу приложения в ответ на ограничения сервисов

Ниже приведены лучшие практики, которые следует реализовать при ограничении скорости вашей службы.

  • Сократите число операций на запрос.
  • Уменьшите частоту запросов.
  • Избегайте немедленных повторных попыток.
    • Все запросы начисляются в соответствии с ограничениями использования.

При реализации обработки ошибок приложения используйте код ошибки HTTP 429, чтобы определить необходимость регулирования на стороне клиента. Если запрос снова завершается ошибкой с кодом ошибки HTTP 429, вы по-прежнему сталкиваетесь с ограничением службы Azure. Продолжайте использовать рекомендуемый метод регулирования на стороне клиента, повторив запрос до тех пор, пока он не завершится успешно.

Ниже приведен код, реализующий экспоненциальную обратную передачу:

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

Использование этого кода в клиентском приложении C# просто.

При возврате кода ошибки HTTP 429 начните ограничение скорости клиента с помощью метода экспоненциального понижения.

  1. Подождите 1 с и повторите запрос
  2. Подождите 2 секунды, если всё ещё действует ограничение, и повторно выполните запрос.
  3. Если запрос по-прежнему не выполнен, подождите 4 с и повторите запрос
  4. Если запрос по-прежнему не выполнен, подождите 8 с и повторите запрос
  5. Если запрос по-прежнему не выполнен, подождите 16 с и повторите запрос

На этом этапе вы не должны получать коды ответа HTTP 429.

См. также

Более глубокая ориентация регулирования в Microsoft Cloud см. в разделе "Шаблон регулирования".