Квоты защищают Stronghold от перегрузки отдельными клиентами: ошибочно настроенное приложение, которое аутентифицируется на каждый запрос или бесконтрольно создаёт аренды, может снизить доступность всего кластера.
Stronghold поддерживает два типа квот:
- квоты ограничения частоты запросов (rate limit) — ограничивают число запросов в единицу времени;
- квоты количества аренд (lease count) — ограничивают число одновременно существующих аренд. Доступны в Stronghold EE.
Для управления квотами требуется токен с правами на пути sys/quotas/*.
Квоты ограничения частоты запросов
Квота применяется глобально, к пространству имён, к точке монтирования или к роли метода аутентификации. Параметры квоты описаны в справочнике API /sys/quotas/rate-limit/{name}:
| Параметр | Описание |
|---|---|
rate | Максимальное число запросов за интервал. Положительное число |
interval | Интервал, за который считается rate. По умолчанию 1s |
block_interval | Если задан, клиент, превысивший лимит, блокируется на указанное время |
path | Путь точки монтирования или пространства имён. Пустое значение — глобальная квота |
role | Роль метода аутентификации, к которой применяется квота. path при этом должен указывать на точку монтирования метода аутентификации с поддержкой ролей, без подпути |
При превышении квоты Stronghold возвращает HTTP-код 429.
Примеры
Глобальная квота на весь кластер:
d8 stronghold write sys/quotas/rate-limit/global rate=1000Квота на метод аутентификации AppRole — защита от шторма повторных входов:
d8 stronghold write sys/quotas/rate-limit/approle-login path=auth/approle rate=50 interval=1sКвота на отдельную роль с блокировкой нарушителя на минуту:
d8 stronghold write sys/quotas/rate-limit/ci-role path=auth/approle role=ci rate=10 interval=1s block_interval=60sКвота на точку монтирования механизма секретов:
d8 stronghold write sys/quotas/rate-limit/kv-apps path=secret/ rate=200Квота на пространство имён (Stronghold EE):
d8 stronghold write sys/quotas/rate-limit/team-a path=team-a/ rate=300Если для запроса подходят несколько квот, применяется наиболее специфичная: роль, затем путь внутри точки монтирования, затем точка монтирования, затем пространство имён, затем глобальная квота.
Просмотр и удаление
Чтобы получить список квот, прочитать квоту и удалить её, выполните команды:
d8 stronghold list sys/quotas/rate-limit
d8 stronghold read sys/quotas/rate-limit/approle-login
d8 stronghold delete sys/quotas/rate-limit/approle-loginОбщие настройки квот
Эндпоинт /sys/quotas/config задаёт общие параметры:
| Параметр | Описание |
|---|---|
rate_limit_exempt_paths | Пути, на которые не распространяются квоты ограничения частоты |
enable_rate_limit_audit_logging | Записывать в журнал аудита запросы, отклонённые из-за квоты |
enable_rate_limit_response_headers | Добавлять в ответы HTTP-заголовки с информацией о лимите |
По умолчанию из квот исключены пути sys/generate-recovery-token/attempt, sys/generate-recovery-token/update, sys/generate-root/attempt, sys/generate-root/update, sys/health, sys/seal-status и sys/unseal. Пример — добавить в этот список sys/metrics, включить заголовки ответов и аудит:
d8 stronghold write sys/quotas/config rate_limit_exempt_paths="sys/generate-recovery-token/attempt,sys/generate-recovery-token/update,sys/generate-root/attempt,sys/generate-root/update,sys/health,sys/seal-status,sys/unseal,sys/metrics" enable_rate_limit_response_headers=true enable_rate_limit_audit_logging=trueЗапись в sys/quotas/config заменяет сразу все три параметра: не указанный параметр сбрасывается (булевы — в false, список исключённых путей — в пустой, то есть исключений не остаётся, включая заданные по умолчанию). Всегда передавайте полный набор параметров; предварительно прочитайте текущие значения командой d8 stronghold read sys/quotas/config.
Квоты количества аренд
Квоты количества аренд ограничивают число одновременно существующих аренд на точке монтирования, в пространстве имён или для роли. При достижении лимита новые запросы, создающие аренды, отклоняются до истечения или отзыва существующих аренд. Квоты количества аренд доступны в Stronghold EE.
Квотами управляют через эндпоинты /sys/quotas/lease-count/{name}. Параметры квоты: path, role и max_leases.
Квота, которая ограничивает число аренд на точке монтирования database/ значением 5000:
d8 stronghold write sys/quotas/lease-count/db-creds path=database/ max_leases=5000Для точного подсчёта аренд по ролям не включайте параметр сервера imprecise_lease_role_tracking.
Подбор значений
- Соберите фактическую нагрузку по метрикам
stronghold_core_handle_requestиstronghold_expire_num_leasesза несколько недель. Метрики описаны в разделе «Мониторинг». - Установите лимиты с запасом относительно пиковых значений.
- Включите
enable_rate_limit_audit_loggingи проанализируйте отклонённые запросы. - Постепенно снижайте лимиты для клиентов с аномальной нагрузкой.