Діліться конфіденційною інформацією з Cellar. Кінцеве шифрування, завжди безкоштовно. Реєстрація не потрібна.

Обмеження Швидкості

INFO

Обмеження швидкості доступне в Cellar API v3.4.0+

Cellar включає вбудоване обмеження швидкості для захисту вашого розгортання від зловживань, вичерпання ресурсів та атак типу “відмова в обслуговуванні”. Обмеження швидкості увімкнено за замовчуванням та використовує алгоритм ковзаючого вікна на основі Redis.

Огляд

Обмеження швидкості обмежує кількість запитів API, які клієнт може зробити протягом часового вікна. Коли клієнт перевищує свій ліміт, Cellar повертає HTTP 429 (Too Many Requests) з інформацією про те, коли можна повторити спробу.

Основні функції:

  • Рівневий підхід: Різні ліміти для операцій різної вартості
  • Відстеження за клієнтом: Ліміти застосовуються per IP-адресі (підтримує X-Forwarded-For)
  • Ковзаюче вікно: Плавне обмеження швидкості без дозволів на стрибок
  • Стандартні заголовки: Заголовки обмеження швидкості відповідають RFC на всіх відповідях
  • Відкритий збій: Дозволяє запити, якщо Redis недоступний (реєструє попередження)
  • Готовність до виробництва: Увімкнено за замовчуванням

Рівні Обмеження Швидкості

Cellar застосовує різні ліміти на основі вартості операцій:

Рівень 1: Дорогі Операції (300 запитів/хвилину)

Кінцеві точки:

  • POST /api/v1/secret - Створити секрет (v1)
  • POST /api/v2/secret - Створити секрет (v2)
  • POST /api/v1/secret/:id/access - Доступ до вмісту секрету (v1)
  • POST /api/v2/secret/:id/access - Доступ до вмісту секрету (v2)

Обґрунтування: Ці операції включають криптографію (шифрування/дешифрування). Ліміт за замовчуванням 300 запитів/хвилину (5 запитів/секунду) відповідає стандартам REST API професійного рівня, залишаючись консервативним відносно можливостей базової криптографічної бекенд-системи. Цей ліміт запобігає зловживанням, дозволяючи нормальні шаблони використання командою та сплески активності.

Рівень 2: Помірні Операції (600 запитів/хвилину)

Кінцеві точки:

  • GET /api/v1/secret/:id - Отримати метадані секрету (v1)
  • GET /api/v2/secret/:id - Отримати метадані секрету (v2)
  • DELETE /api/v1/secret/:id - Видалити секрет (v1)
  • DELETE /api/v2/secret/:id - Видалити секрет (v2)

Обґрунтування: Ці операції запитують або змінюють сховище даних, але не включають криптографію. Вони менш дорогі, ніж Рівень 1, але все ще вимагають доступу до бекенду. Множник 2x відносно Рівня 1 дозволяє типові робочі процеси інтерфейсу, такі як отримати метадані → дешифрувати → видалити, без досягнення лімітів швидкості.

Рівень 3: Легкі Операції (1,200 запитів/хвилину)

Кінцеві точки:

  • GET /api/v2/config - Запит лімітів конфігурації

Обґрунтування: Ця кінцева точка повертає кешовані значення конфігурації без бекенд-операцій. Вищий ліміт дозволяє API-клієнтам часто запитувати ліміти перед надсиланням без турботи про обмеження швидкості.

Перевірка Здоров’я: Моніторинг (1,200 запитів/хвилину)

Кінцеві точки:

  • GET /health-check - Кінцева точка перевірки здоров’я

Обґрунтування: Системи моніторингу потребують частих перевірок здоров’я. Дуже високий ліміт запобігає хибним негативним результатам у моніторингу без створення ризику зловживання, оскільки перевірки здоров’я виконують мінімальну роботу.

Заголовки HTTP Відповідей

Cellar включає стандартні заголовки обмеження швидкості на всіх відповідях:

На Всіх Відповідях (200, 201, 400, 404, тощо):

  • X-RateLimit-Limit: 300 - Максимальна кількість запитів дозволена у вікні для цього рівня кінцевої точки
  • X-RateLimit-Remaining: 287 - Запити, що залишилися в поточному вікні
  • X-RateLimit-Reset: 1736705220 - Unix timestamp коли вікно скидається

На 429 Too Many Requests:

  • Всі заголовки вище (з X-RateLimit-Remaining: 0)
  • Retry-After: 42 - Секунди до скидання обмеження швидкості

Приклад:

HTTP/1.1 429 Too Many Requests
Content-Type: application/json
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1736705220
Retry-After: 42

{
  "error": "rate limit exceeded"
}

Конфігурація

Обмеження швидкості налаштовується через змінні середовища. Див. Довідник Конфігурації - Поточна Версія для повних налаштувань обмеження швидкості та значень за замовчуванням.

Поведінка та Крайні Випадки

Ідентифікація Клієнта

  • Обмеження швидкості застосовуються per IP-адресі клієнта
  • Підтримує заголовок X-Forwarded-For для клієнтів за проксі/балансувальниками навантаження
  • Використовує лівий IP у ланцюжку X-Forwarded-For (оригінальний клієнт)

Алгоритм Ковзаючого Вікна

  • Використовує ковзаюче вікно на основі Redis (не фіксоване вікно)
  • Плавне обмеження швидкості без дозволів на стрибок
  • Приклад: 10 запитів/хвилину означає 10 запитів у будь-який 60-секундний період

Redis Недоступний

  • Поведінка відкритого збою: Дозволяє запити продовжуватися
  • Реєструє попередження: “Rate limiter failed, allowing request”
  • Запобігає каскадним збоям (обмежувач швидкості не вимикає додаток)
  • Моніторте журнали для проблем з підключенням до Redis

Розподілені Розгортання

  • Обмеження швидкості спільні для всіх екземплярів API (на основі Redis)
  • Кілька екземплярів Cellar API спільно використовують ті самі лічильники обмеження швидкості
  • Послідовна поведінка незалежно від того, який екземпляр обробляє запит

Налаштування Лімітів

Ліміти за замовчуванням відповідають стандартам REST API професійного рівня та підходять для більшості розгортань, включаючи організації середнього розміру. Розгляньте налаштування, якщо:

Збільшити ліміти коли:

  • Обслуговування багатьох легітимних користувачів із спільних IP (корпоративний NAT, VPN-шлюзи)
  • Запуск автоматизованих робочих процесів, які створюють/отримують доступ до багатьох секретів
  • Підтримка шаблонів використання великих підприємств
  • Тестування продуктивності або навантаження

Зменшити ліміти коли:

  • Стикаючись із постійним зловживанням або атакою
  • Запуск на інфраструктурі з обмеженими ресурсами
  • Експлуатація публічного демо або безкоштовного рівня обслуговування
  • Застосування суворих політик використання

Моніторинг та Усунення Несправностей

Журнали

Порушення обмеження швидкості реєструються на рівні INFO:

Rate limit exceeded for client 192.168.1.100 on tier tier1

Метрики

Моніторте ці шаблони:

  • Часті відповіді 429 від легітимних користувачів → збільшити ліміти
  • Високі порушення обмеження швидкості → потенційне зловживання або неправильно налаштований клієнт
  • Попередження обмежувача швидкості → проблеми з підключенням до Redis

Поширені Проблеми

“Rate limit exceeded” для легітимних користувачів:

  • Перевірте, чи користувачі за спільним NAT/проксі
  • Перегляньте конфігурацію X-Forwarded-For
  • Розгляньте збільшення лімітів для відповідних рівнів

Обмеження швидкості не працює:

  • Перевірте RATE_LIMIT_ENABLED=true
  • Перевірте підключення до Redis
  • Переконайтеся, що Redis спільний для всіх екземплярів API

Хибні позитивні результати від моніторингу:

  • Збільшіть RATE_LIMIT_HEALTH_CHECK_REQUESTS_PER_WINDOW
  • Налаштуйте моніторинг для поваги до заголовка Retry-After

Міркування Безпеки

Що Захищає Обмеження Швидкості

  • Атаки грубої сили: Обмежує спроби вгадування ID секретів
  • Вичерпання ресурсів: Запобігає вичерпанню CPU/пам’яті через крипто-операції
  • Автоматизоване зловживання: Сповільнює автоматизоване створення/доступ до секретів
  • Контроль витрат: Обмежує криптографічні операції (актуально для виставлення рахунків за використання KMS)

Що Не Захищає Обмеження Швидкості

  • Розподілені атаки: Один зловмисник з багатьма IP може перевищити ліміти
  • Скомпрометовані секрети: Обмеження швидкості не запобігає доступу з дійсним посиланням
  • Вразливості додатка: Не є заміною належним заходам безпеки

Додаткові Ресурси