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

Что это такое

Управление секретами — это держание ключей API, паролей баз данных, ключей подписи и токенов вне репозитория, вне артефактов сборки и логов, с заданным сроком жизни, чтобы раскрытие было переживаемым. Артефакт — это документированный источник истины для секретов: хранилище секретов или конфигурация окружения, плюс процедура ротации.

Почему это важно

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

Ключевые идеи

Держите секреты вне репозитория по умолчанию

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

Коммитится:     .env.example        DATABASE_URL=
                                     STRIPE_KEY=
Игнорируется:   .env                (в .gitignore, не коммитится)
Выполняется:    хранилище секретов платформы подставляет реальные значения

Запись в .gitignore — это ограждение, а не контроль: она останавливает случайный git add ., и ничего больше.

Удаление файла не убирает секрет

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

1. Ротация: выпустить новый ключ, развернуть, отозвать старый
2. Очистка (если требуется): переписать историю И заставить всех соавторов переклонировать
3. Ни то ни другое: ключ публичен навсегда; считайте его таким

Дайте каждому секрету срок жизни и владельца

Статические, никогда не ротируемые учётные данные — те, что всплывают в старых резервных копиях. Предпочитайте короткоживущие токены от службы идентичности платформы, где она есть, и ротируйте остальные по расписанию.

Обнаружьте раньше, чем найдут за вас

Включите сканирование публичных репозиториев на стороне провайдера и проверку высокоэнтропийных строк перед коммитом. Секрет, отправленный в 10:00, обычно выгребают в течение минут.

Держите секреты вне логов и отчётов об ошибках

Самый частый канал утечки после репозитория — стек-трейс со строкой подключения или отладочный дамп окружения. Редактируйте конфигурацию в выводе ошибок.

Практика

Ищите в истории, а не только в рабочем дереве

Просмотрите всю историю git на предмет возможных шаблонов секретов и имён ваших секретных переменных.

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

Ротируйте одни раскрытые учётные данные от начала до конца

Возьмите один ключ из списка, выпустите замену, разверните её, убедитесь, что старый перестал работать, и отзовите его.

Готово, когда: старое значение возвращает ошибку авторизации, а новое загружается из хранилища секретов, а не из файла.

Частые ошибки

  • Коммит файла окружения — ключ опубликован для каждого с клоном; исправить: коммитьте только шаблон, а настоящий файл игнорируйте.
  • Удалить файл и счесть вопрос закрытым — значение остаётся в истории и в каждом клоне; исправить: ротируйте учётные данные.
  • Одни учётные данные на все окружения — утечка стенда раскрывает продакшен; исправить: разделяйте учётные данные по окружениям.
  • Нет ротации — ключ действителен годами и обнаруживается в резервной копии; исправить: короткие сроки жизни где возможно, ротация по расписанию иначе.
  • Секреты в логах или ошибках — утечка происходит после того, как все прочие контроли пройдены; исправить: редактируйте конфигурацию в выводе логов и ошибок.

Что читать дальше

  • Веб-безопасность (OWASP Top 10) (07-security/01-web-security-owasp-top-10) — классы недостатков, превращающие утёкшие учётные данные во вторжение.
  • Сканирование зависимостей (SCA) (07-security/04-dependency-scanning-sca) — другой путь, которым секреты и уязвимый код попадают в проект.
  • HTTPS и TLS (07-security/02-https-tls) — учётные данные, отправленные по сломанному каналу, раскрываются ещё до использования.
  • Управление пакетами (npm) (02-frontend/04-package-management-npm) — где живут токены публикации пакетов и как они утекают.