Один неисправный или слишком активный клиент может занять все ресурсы кластера. Квота rate limit ограничивает число запросов в единицу времени, и лишние запросы получают ответ 429 Too Many Requests.

Цель

Ограничить частоту запросов к механизму секретов secret/ и убедиться, что превышение лимита приводит к ответу 429.

Предварительные требования

Для выполнения примера нужны:

  • Токен Stronghold с правами на sys/quotas/rate-limit/*.
  • Утилита curl.

Шаг 1. Создайте квоту

Создайте квоту на пять запросов в минуту для пути secret/:

d8 stronghold write sys/quotas/rate-limit/secret-limit path="secret/" rate=5 interval=60

Параметры квоты:

ПараметрНазначение
pathПуть, на который действует квота. Для пути монтирования квота охватывает все запросы к нему. Если параметр не указан, квота действует глобально
rateДопустимое число запросов за interval
intervalДлина интервала в секундах
block_intervalСколько секунд клиент блокируется после превышения лимита. По умолчанию блокировки нет
roleДля путей методов аутентификации: роль, на которую действует квота

Квота считается отдельно для каждого IP-адреса клиента.

Шаг 2. Проверьте, что лимит работает

Отправьте десять запросов подряд:

for i in $(seq 1 10); do
  curl -s -o /dev/null -w "%{http_code}\n" -H "X-Vault-Token: $STRONGHOLD_TOKEN" "$STRONGHOLD_ADDR/v1/secret/data/probe"
done | sort | uniq -c

Первые пять запросов проходят (ответ 404, так как секрета probe нет, или 200), остальные получают 429:

      5 404
      5 429

Квота не действует на запросы к другим путям, например к sys/health.

Шаг 3. Просмотрите и измените квоту

Выведите список квот, прочитайте параметры квоты и увеличьте лимит до 100 запросов в секунду:

d8 stronghold list sys/quotas/rate-limit
d8 stronghold read sys/quotas/rate-limit/secret-limit
d8 stronghold write sys/quotas/rate-limit/secret-limit path="secret/" rate=100 interval=1

После изменения квота действует сразу.

Проверка

Прочитайте текущий лимит квоты:

d8 stronghold read -field=rate sys/quotas/rate-limit/secret-limit

Команда возвращает 100.

Очистка

Удалите квоту:

d8 stronghold delete sys/quotas/rate-limit/secret-limit

Дополнительные ресурсы