Назад в блог

Ротация секретов для AI-агентов: как автоматизировать без даунтайма

Key sprawl 60 ключей из 5 провайдеров: как убрать секреты из кода, централизовать в Vault и настроить 48-часовую overlap-ротацию с runbook отзыва.

Иллюстрация к материалу: Ротация секретов для AI-агентов: как автоматизировать без даунтайма

Каждый новый LLM-провайдер в команде умножает ключи: 5 провайдеров × 3 среды × 4 команды = 60 секретов в .env, CI-переменных и мессенджерах. Ротация превращается в обход всех мест, отзыв — в панику. Централизация и автоматизация делают ротацию фоновой операцией, а не проектом.

Key sprawl: откуда 60 ключей

Ключ появляется быстрее процесса: разработчик скопировал при прототипе, закоммитил .env, прокинул в CI. Через месяц никто не помнит какие ключи ходят в прод-данные и кто их выдавал. Hardcoded секреты остаются в истории Git даже после удаления, а без ротации и аудита нельзя быстро локализовать инцидент — пять из шести разборов 2024–2026 упирались не в хранение, а в отсутствие мониторинга кто и как часто обращается к секретам.

Почему .env и base64 — не хранение

Kubernetes Secrets — base64, не шифрование. .env на ноутбуке — копия без TTL и без отзыва. Решение — единое хранилище с политиками и аудитом:

  • Vault — когда нужно единое хранилище, ACL, динамические секреты и аудит на организацию;
  • Sealed Secrets / ESO — когда нужен GitOps-старт в одном кластере с доставкой в namespace.

Практический стек 2026: Vault как источник правды + External Secrets Operator для доставки в Kubernetes + короткие TTL + аудит. Это баланс между безопасностью и скоростью.

Dynamic vs static: нечего ротировать vs ротировать

Сила Vault — динамические секреты: вместо ротации общего пароля каждому потребителю выдается уникальный credential с lease TTL (часы). Приложение запрашивает доступ к Postgres — Vault создает временного пользователя БД на 1 час, потом отзывает. Нет shared password, нет глобальной ротации, компрометация одного lease не бьет по остальным. Blast radius — часы.

Статика (API-ключи LLM, Stripe) остается: для них — KV v2 с версионированием и ротацией по расписанию. Но даже там TTL и overlap снижают риск.

48-часовой overlap: ротация без даунтайма

Безопасный паттерн:

T+0   Сгенерировать KEY_B рядом с KEY_A (оба валидны)
T+1h  Прогнать тестовые запросы на KEY_B
T+24h Переключить потребителей на KEY_B
T+48h Отозвать KEY_A

Два ключа валидны одновременно — zero-downtime гарантировано, кэшированные credentials в долгоживущих процессах успевают протухнуть, CI подхватывает новый ключ на следующем запуске. Если KEY_B проблемный — откат на KEY_A без простоя. Для AWS Secrets Manager это two-user ротация, для Azure KV — версионирование, для Vault KV v2 — версионированный секрет с мягким удалением.

Частота: SOC 2 / ISO 27001 — 90 дней, для LLM-ключей с платежными полномочиями — 30–60 дней.

Доставка: Vault Agent + ESO

  • Vault Agent как sidecar/init-container: аутентифицируется через Kubernetes auth (service account), проактивно перезапрашивает секреты при приближении lease expiry, рендерит в файл/env без хранения в Git.
  • ESO берет секреты из Vault/AWS SM/Azure KV и создает нативные Secrets в namespace. Облачные CSI-драйверы опрашивают по расписанию — есть окно с устаревшими кредами (минута-две после ротации), Vault Agent обновляет немедленно.

Интеграция с CI/CD — через AppRole / JWT/OIDC (GitHub Actions, GitLab CI), а не через долгоживущие переменные.

Runbook отзыва за 1 час

  1. Обнаружение — зафиксировать факт и затронутые системы.
  2. Изоляция — отозвать leases/токены, заблокировать сессии.
  3. Ротация — заменить все потенциально скомпрометированные секреты (overlap!).
  4. Проверка — убедиться что новые секреты применены (поды перезапросили).
  5. Разбор — найти корневую причину и закрыть в процессе.

Скорость важнее идеальной формулировки: чем быстрее отзыв и ротация, тем меньше ущерб. Проверьте сейчас: включен ли audit device на Vault и есть ли алерт на burst GetSecretValue в CloudTrail — если нет, у вас та же проблема что в пяти из шести кейсов.

Где Codenik

Codenik хранит и ротирует секреты централизованно: агент не знает токена downstream-системы, gateway подставляет scoped секрет на каждый tools/call и логирует применение. Ротация — одна операция в хранилище, а не обход ноутбуков: поменяли в Vault — все агенты получили новый при следующем вызове, отозвали lease — доступ закрылся везде мгновенно. Это убирает key sprawl из конфигов и делает отзыв фоновой операцией.

Короткий вывод

Секреты должны жить отдельно от агентов и ротироваться сами. Начните с инвентаризации и сканирования pre-commit, централизуйте в Vault, введите overlap-ротацию и протестируйте runbook отзыва. Тогда следующий ключ утечет на часы, а не на месяцы.

Источники и дальнейшее чтение