Управление секретами: Vault и sops
Где держать пароли и ключи: проблема секретов в коде, внешние хранилища vs шифрование файлов, ротация.
Проблема: секреты повсюду
Секреты нужны почти любому сервису: пароль от базы, токен облака, приватный ключ, API-ключ платёжки. Соблазн положить их в код или в конфиг рядом велик, но это утечка: код лежит в git, копируется, форкается, попадает в логи сборки. Удалить секрет из истории git почти невозможно.
Управление секретами отвечает на вопрос: где их держать, чтобы доступ был у сервисов, а не у людей и репозиториев.
Два подхода
Есть два разных способа, их часто путают.
Внешнее хранилище секретов — отдельный сервис, который хранит секреты и выдаёт по запросу. Примеры: HashiCorp Vault, AWS Secrets Manager, Yandex Lockbox. Секрет живёт в сервисе, приложение берёт его в рантайме по токену:
секрет → [Vault] ← приложение запрашивает по токену при старте
В коде и в git секрета нет вообще, только адрес хранилища и право его запросить.
Про Vault стоит знать одну вещь помимо технической. В 2023 году HashiCorp сменила лицензию с открытой MPL на Business Source License (BSL), ограничивающую коммерческое использование. В ответ появился форк OpenBao под управлением Linux Foundation: та же архитектура и совместимый API. Если работаешь в компании, где юристы смотрят на лицензии, выбор между Vault и OpenBao всплывёт.
Шифрование файлов — секрет лежит в репозитории, но зашифрованным. Инструменты: sops, Ansible Vault. В git попадает шифртекст, расшифровать его можно только мастер-ключом, который хранят отдельно:
secrets.yaml (зашифрован) → в git
ключ расшифровки → только в CI / у админов
Это удобно для GitOps: всё в одном репозитории, но секреты не в открытом виде.
Что выбирать
- Динамичная инфраструктура, много сервисов, нужна выдача коротких токенов — внешнее хранилище (Vault).
- Небольшой проект, всё описано в git, хочется хранить рядом с кодом — шифрование файлов (sops).
Часто комбинируют: статичные секреты через sops в git, динамичные и чувствительные через Vault.
Ротация и доступ
Два принципа делают секреты безопаснее.
Ротация — секреты регулярно меняют. Если токен утёк, короткий срок жизни ограничивает ущерб. Внешние хранилища умеют выдавать динамические секреты с автоистечением.
Минимум доступа — у каждого сервиса доступ только к своим секретам, не ко всем сразу. Тогда компрометация одного сервиса не открывает всё.
И сквозное правило: секреты не попадают ни в логи, ни в бэкапы в открытом
виде, ни в переменные образа (docker history их покажет).
Что важно запомнить
Секреты нельзя держать в коде и git в открытом виде. Два подхода: внешнее хранилище (Vault, Lockbox) выдаёт секрет по токену в рантайме; шифрование файлов (sops, Ansible Vault) кладёт в git шифртекст, а ключ хранит отдельно.
Внешнее хранилище берут для динамики и множества сервисов. Шифрование файлов подходит, когда всё в git. Часто их комбинируют.
Ротация ограничивает ущерб от утечки, минимум доступа сужает её радиус. Секреты не попадают в логи, бэкапы и слои образа.
Бэкапы и секреты — две вещи, на которых держится безопасность прода. В следующем уроке разберём, что делать, когда что-то всё-таки сломалось: разбор инцидента и постмортем.
Прошли материал до конца? Отметьте урок пройденным.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут. Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства. Мой прогресс