Управление секретами — Примеры
Пример 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. Отзовите старое значение у провайдера; запишите дату ротации и владельца
Ротация доказывает, что раскрытие закрыто, и проверка, что старое значение возвращает ошибку авторизации, — единственный шаг, который действительно это подтверждает. Хранение нового значения в хранилище секретов, а не в файле, мешает следующему клону унести его с собой. Шаг, который команды пропускают, — отзыв: без него старое значение остаётся действительным, и ротация ничего не изменила. Храните владельца и срок жизни рядом с секретом, чтобы следующая ротация была запланирована, а не обнаружена.