← Эксплуатация
11 мин · средне · Урок 1 из 2

Управление секретами: 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: всё в одном репозитории, но секреты не в открытом виде.

Что выбирать

Часто комбинируют: статичные секреты через sops в git, динамичные и чувствительные через Vault.

Ротация и доступ

Два принципа делают секреты безопаснее.

Ротация — секреты регулярно меняют. Если токен утёк, короткий срок жизни ограничивает ущерб. Внешние хранилища умеют выдавать динамические секреты с автоистечением.

Минимум доступа — у каждого сервиса доступ только к своим секретам, не ко всем сразу. Тогда компрометация одного сервиса не открывает всё.

И сквозное правило: секреты не попадают ни в логи, ни в бэкапы в открытом виде, ни в переменные образа (docker history их покажет).

Что важно запомнить

Секреты нельзя держать в коде и git в открытом виде. Два подхода: внешнее хранилище (Vault, Lockbox) выдаёт секрет по токену в рантайме; шифрование файлов (sops, Ansible Vault) кладёт в git шифртекст, а ключ хранит отдельно.

Внешнее хранилище берут для динамики и множества сервисов. Шифрование файлов подходит, когда всё в git. Часто их комбинируют.

Ротация ограничивает ущерб от утечки, минимум доступа сужает её радиус. Секреты не попадают в логи, бэкапы и слои образа.

Бэкапы и секреты — две вещи, на которых держится безопасность прода. В следующем уроке разберём, что делать, когда что-то всё-таки сломалось: разбор инцидента и постмортем.

Прошли материал до конца? Отметьте урок пройденным.