GH GambleHub

Менеджмент секретов

Менеджмент секретов

1) Зачем и что именно считаем «секретом»

Секрет — любой материал, раскрытие которого ведет к компрометации системы или данных: пароли, API-токены, OAuth/JWT private keys, SSH-ключи, сертификаты, ключи шифрования (KEK/DEK), ключи подписи вебхуков, DSN баз/кэшей, ключи поставщиков (платежки, провайдеры почты/SMS), cookie-соли/pepper, токены ботов/чатов, лицензии.
Секреты живут в коде, конфиге, окружении, контейнерных образах, CI/CD, Terraform/Ansible, логах/дампах — задача менеджмента секретов: учет → хранение → доставка → использование → ротация → отзыв → аудит → утилизация.

2) Принципы архитектуры

Централизация. Один доверенный слой (Vault/Cloud Secret Manager/KMS) для хранения, выдачи и аудита.
Наименьшие привилегии (PoLP). Доступ только нужным сервисам/ролям, на минимальный срок.
Короткая жизнь. Предпочтительны динамические/временные секреты с TTL/lease.
Crypto-agility. Возможность смены алгоритмов/длин ключей без простоя.
Отделение секретов от кода/образов. Ни паролей в репозиториях, ни в Docker-образах.
Наблюдаемость и аудит. Каждая операция выдачи/чтения секретов логируется и алертится.
Автоматическая ротация. Ротация — процесс в pipeline, а не ручная акция.

3) Типовые решения и роли компонентов

KMS/HSM. Корневое доверие, операции шифрования/обертки ключей (envelope).
Secret Manager/Vault. Хранилище версий секретов, ACL, аудит, динамические секреты (DB, cloud-IAM, PKI), шаблоны ротации.
PKI/CA. Выдача краткоживущих сертификатов mTLS/SSH/JWT-подписей.
Агент/sidecar. Доставка секретов в рантайм (файлы tmpfs, in-memory k/v, hot-reload).
CSI-драйверы/операторы. Интеграция с Kubernetes (Secret Store CSI Driver, cert-manager).
Слой шифрования в Git. SOPS/age, git-crypt (для инфраструктурного кода).

4) Классификация и политика

Разделите секреты по критичности (P0/P1/P2) и объему ущерба (tenant-scoped, environment-scoped, org-wide). Для каждого класса задайте:
  • TTL/lease и частоту ротации;
  • способ выдачи (динамика vs статик), формат, носитель;
  • политику доступа (кто/где/когда/зачем), требования к mTLS и взаимной аутентификации;
  • аудит (что логируем, сколько храним, кто ревьюит);
  • процедуры break-glass и отзыв.

5) Жизненный цикл секрета

1. Создание: через API Secret Manager с метаданными (owner, tags, scope).
2. Хранение: в зашифрованном виде (envelope: DEK обернут KEK из KMS/HSM).
3. Доставка: по запросу авторизованного субъекта (OIDC/JWT, SPIFFE/SVID, mTLS).
4. Использование: исключительно в памяти/в tmpfs; запрет логирования/дампов.
5. Ротация: по TTL или событию (компрометация); поддержка параллельных версий (N-1).
6. Отзыв/блокировка: немедленное истечение lease, дизабл аккаунта/ключа в целевой системе.
7. Утилизация: уничтожение версий/материала, четкая цепочка аудита.

6) Динамические секреты (рекомендуется по умолчанию)

Идея: секрет выдается на короткий срок и автоматически истекает. Примеры:
  • Учетные данные БД (Postgres/MySQL) с TTL 15–60 мин.
  • Временные ключи облаков (AWS/GCP/Azure) по роли сервиса.
  • SSH-сертификаты (срок 5–30 мин), X.509-сертификаты (час/день).
  • Временные JWT для подписи запросов, session-tickets брокеров.
  • Плюсы: минимальный blast radius, упрощенный отзыв (ничего не «останется» в мире).

7) Доставка секретов в рантайм

Kubernetes:
  • Secret Store CSI Driver → монтирование секретов из внешнего менеджера в pod как файлы (tmpfs).
  • Избегать Kubernetes Secret как единственный источник (base64 ≠ шифрование); при необходимости — включайте провайдер KMS для etcd.
  • Sidecar-агент (Vault Agent/Secrets Store) с авто-реневалом lease и hot-reload.
  • VM/Bare-metal: системный агент + mTLS к Vault/Secret Manager, кеш в памяти, минимальный TCB.
  • Serverless: интеграции облака с прозрачной подстановкой секретов как переменных окружения/файлов, но избегать долгоживущих envvars — предпочтительно файлы/в памяти.

Пример (Kubernetes + CSI, концептуально)

yaml apiVersion: v1 kind: Pod metadata: { name: app }
spec:
serviceAccountName: app-sa # is associated with a role in Secret Manager volumes:
- name: secrets csi:
driver: secrets-store. csi. k8s. io readOnly: true volumeAttributes:
secretProviderClass: app-spc containers:
- name: app volumeMounts:
- mountPath: /run/secrets name: secrets readOnly: true

8) Интеграции CI/CD и IaC

CI: воркеры получают краткоживущие токены по OIDC (Workload Identity). Запрет на «маскированные» секреты, попадающие в логи; шаг «скан утечек» (trufflehog/gitleaks).
CD: деплой забирает секреты в момент выкладки, не записывает их в артефакты.
IaC: Terraform хранит переменные в Secret Manager; состояние (state) шифруется и ограничено по доступу.
SOPS/age: для репо — хранить зашифрованные манифесты, ключи — под управлением KMS.

Пример (SOPS-фрагмент)

yaml apiVersion: v1 kind: Secret metadata: { name: app }
data:
PASSWORD: ENC[AES256_GCM,data:...,sops:...]
sops:
kms:
- arn: arn:aws:kms:...
encrypted_regex: '^(data    stringData)$'
version: '3. 8. 0'

9) Политики доступа и аутентификация рабочих нагрузок

Workload identity: SPIFFE/SPIRE, Kubernetes SA→OIDC→IAM-роль, mTLS.
Временные токены: короткие TTL, узкий scope.
ABAC/RBAC в Secret Manager: «кто может читать секрет X в среде Y» отделен от «кто может создавать/ротировать».
Многоарендность: отдельные namespaces/key-rings на арендатора; отдельные политики и отчетность.

10) Ротация, версии и совместимость

Разделяйте идентификатор секрета и его версии (`secret/app/db#v17`).
Поддерживайте две активные версии (N и N-1) для безостановочной ротации.
Ротация событийно: при увольнении, компрометации, смене провайдера, миграции алгоритмов.
Автоматизируйте: cron/бэкенд ротации в Vault/Secret Manager + webhook-триггеры перезапуска приложений/реневала.

Мини-рецепт «двухключевая» ротация вебхука

text
T0: we publish two secrets in the provider: current, next
T1: the application starts accepting signatures by both current and next
T2: external system switches signature to next
T3: we do next -> current, re-release new next

11) Хранение вне рантайма: резервные копии и артефакты

Никогда не попадать в артефакты (образы, архивы логов, дампы).
Бэкапы Secret Manager — шифровать, ключи хранения вне того же контура (separation of duties).
Метки и DLP-сканы: обнаружение секретов в S3/Blob/GCS, Git, артефактах CI.

12) Наблюдаемость, аудит и SLO

Метрики: число выдач/секрет/сервис, доля истекших lease, средний TTL, время ротации, время конвергенции (секунд/минут до «принятия» новой версии).
Аудит-логи: кто/что/когда/откуда/зачем; хранение отдельно, тоже шифрованно.
SLO: 99% выдач < 200 мс; 0 утечек в логах; 100% секретов имеют owner/TTL/теги; 100% критичных секретов — динамические или ротация ≤ 30 дней.
Алерты: секрет истекает < 7 дней (для статиков), всплеск отказов аутентификации к хранилищу, нет чтений секрета > N дней (мертвый), неожиданные гео/ASN источники.

13) Частые ошибки и как их избежать

Секреты в Git/образах. Используйте SOPS/age и сканеры; политикой запретить «голые» строки.
Envvars как долговременный носитель. Отдавайте предпочтение файлам tmpfs/in-memory; очищайте окружение при форках/дампах.
Одинаковые секреты для dev/stage/prod. Разделяйте по окружениям.
Долгоживущие статические пароли. Переходите на динамические/краткоживущие.
Единый мастер-ключ «на все». Делите по арендаторам/проектам/сервисам.
Нет hot-reload. Приложение требует рестарт → окна уязвимости при ротации.

14) Примеры интеграций (схематично)

Vault динамический доступ к Postgres

hcl
Vault: role -> issues the user to the database with TTL 30m and privileges only to the app path "database/creds/app-role" {
capabilities = ["read"]
}
Application requests/database/creds/app-role -> receives (user, pass, ttl)

JWT-подпись запросов (краткий срок)

Приватный ключ хранится в Secret Manager; сервис запрашивает краткоживущий signing-token и локальный агент подписывает payload (ключ не передается в приложение как строка).

SSH-сертификаты для админов

Выдача SSH-cert на 10 минут по SSO (OIDC), без распространения постоянных ключей.

15) Безопасность по краям

Логи/трейсы/метрики: санитайзеры, фильтры для известных ключей/паттернов; «секретные» поля — маскирование в APM.
Дампы/краш-репорты: вырубить по умолчанию; если нужны — шифровать и чистить.
Клиентские приложения/мобила: минимизировать оффлайн-секреты, использовать платформенные хранилища (Keychain/Keystore), привязка к устройству, TLS-pinning с аварийной раскаткой.

16) Комплаенс

PCI DSS: запрет хранения PAN/секретов без шифрования; строгий контроль доступа и ротации.
ISO 27001/SOC 2: требования к управлению активами, журналированию, контролю доступа, изменению конфигураций.
GDPR/локальные регуляторы: минимизация, доступ по необходимости, аудит.

17) Процессы и runbook

Ввод в эксплуатацию

1. Инвентаризация секретов (репозитории, CI, образы, runtime, бэкапы).
2. Классификация и теги (owner, environment, tenant, rotation-policy).
3. Выбор хранилища (Vault/Cloud SM) + интеграция с KMS/HSM.
4. Настройка выдачи по workload identity (OIDC/SPIRE).
5. Включение динамических секретов для БД/облаков/PKI.
6. Авто-ротация и hot-reload; алерты на экспирации.
7. Настройка сканеров утечек и Data Catalog/ДС.

Аварийные сценарии

Подозрение на утечку: стоп-лист доступа, немедленная ротация, отзывать сертификаты/ключи, перевыпуск токенов, включение повышенного аудита, RCA.
Недоступен Secret Manager: локальный кеш в памяти с малым TTL, деградация функций, ограничение новых соединений, ручные break-glass шаги.
Компрометация корневого ключа: регенерация key-hierarchy, rewrap всех DEK, проверка всех выдач за окно риска.

18) Чек-листы

Перед продом

  • Секреты удалены из кода/образов; включены сканеры утечек.
  • Для критичных секретов включены динамические механизмы.
  • Доставка через sidecar/CSI/tmpfs с hot-reload, без долговечных envvars.
  • Настроены IAM/ABAC политики, привязка к workload identity.
  • Авто-ротация и двойные версии (N, N-1) для совместимости.
  • Метрики/алерты/аудит включены; тесты деградации пройдены.

Эксплуатация

  • Ежемесячный отчет: владельцы, TTL, просроченные секреты, неиспользуемые.
  • Периодические ротации и пентесты путей утечки (логи, дампы, артефакты).
  • План crypto-agility и аварийная замена CA/корней.

19) FAQ

В: Достаточно ли Secret Manager без KMS?
О: Для базового уровня — да, но лучше использовать envelope-шифрование: KEK в KMS/HSM, секреты — обернуты. Это упрощает отзыв и комплаенс.

В: Что выбрать — статик или динамика?
О: По умолчанию — динамика. Статик оставляйте только там, где нет поддерживаемых провайдеров, и сжигайте TTL до дней/часов + автоматическую ротацию.

В: Как безопасно прокинуть секреты в микросервис?
О: Workload identity → mTLS к Secret Manager → sidecar/CSI → файлы в tmpfs + hot-reload. Без логов, без envvars «навсегда».

В: Можно ли хранить секреты в Kubernetes Secret?
О: Только при включенном шифровании etcd с KMS-провайдером и строгих политиках. Предпочитайте внешнее хранилище и CSI.

В: Как «крипто-стереть» доступ арендатора?
О: Отозвать/заблокировать его политики в Secret Manager, инвалидировать все leases, ротация/регенерация ключей; при использовании KMS — отключить unwrap соответствующих KEK.

Связанные материалы:
  • «Шифрование At Rest»
  • «Шифрование In Transit»
  • «Управление ключами и ротация»
  • «S2S-аутентификация»
  • «Подпись и верификация запросов»
Contact

Свяжитесь с нами

Обращайтесь по любым вопросам или за поддержкой.Мы всегда готовы помочь!

Telegram
@Gamble_GC
Начать интеграцию

Email — обязателен. Telegram или WhatsApp — по желанию.

Ваше имя необязательно
Email необязательно
Тема необязательно
Сообщение необязательно
Telegram необязательно
@
Если укажете Telegram — мы ответим и там, в дополнение к Email.
WhatsApp необязательно
Формат: +код страны и номер (например, +380XXXXXXXXX).

Нажимая кнопку, вы соглашаетесь на обработку данных.