Управление секретами — Примеры

Пример 1 — файл окружения, который уже в истории

Поиск по истории находит config/.env, закоммиченный восемь месяцев назад, до того как в репозитории появилось правило игнорирования. Удаление файла сегодня ничего не даёт. Воспроизвести то, что было закоммичено, — лёгкая половина. Покажите, что должно лежать в репозитории вместо этого, и прямо скажите, что ещё нужно сделать со значениями.

config/.env (закоммичен в 3f2a1c9, всё ещё в истории и в каждом клоне)
  DATABASE_URL=<value>
  STRIPE_KEY=<value>

Решение

config/.env.example            коммитится, читать безопасно
  DATABASE_URL=
  STRIPE_KEY=
.gitignore                     коммитится
  .env
Следующие шаги, по порядку:
  1. Ротируйте каждое значение из того коммита — выпустить, развернуть, отозвать
  2. Очищайте историю только если требуется, и заставьте всех переклонировать
  3. Ничего: значения публичны навсегда; считайте их такими

Шаблон называет настройки, чтобы новый разработчик знал, что предоставить, а настоящие значения подставляет во время выполнения хранилище секретов платформы. Запись игнорирования — ограждение против случайного git add ., а не контроль. Обычная ошибка — счесть работу сделанной, как только файл удалён и игнорируется: значение живёт в истории, в каждом форке и в кэше каждого зеркала, поэтому ротация почти всегда самое дешёвое из трёх вариантов.

Пример 2 — Ротация одного раскрытого ключа от начала до конца

У вас есть список раскрытых учётных данных, и первый всё ещё действителен, потому что команда решила «разобраться потом». Ротируйте его сейчас: замените значение, разверните, докажите, что старое мертво, и дайте замене владельца и срок жизни.

Находка: значение, закоммиченное в 3f2a1c9, — ключ, используемый сейчас в продакшене
Владелец: команда, которой принадлежит платёжный сервис

Решение

1. Выпустите замену в консоли провайдера и запишите её владельца и дату
2. Положите её в хранилище секретов платформы; разверните, чтобы сервис читал оттуда
3. Проверка: запрос с новым значением успешен
4. Проверка: запрос со старым значением возвращает ошибку авторизации
5. Отзовите старое значение у провайдера; запишите дату ротации и владельца

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