Короткий ответ
Секрет нужно считать скомпрометированным сразу после обнаружения независимо от признаков его использования — немедленно отозвать и перевыпустить, проверить журналы доступа за весь период экспозиции, а затем системно устранить причину: внедрить автоматическое сканирование секретов в pre-commit/CI и перейти на короткоживущие или динамически выдаваемые секреты там, где это возможно.
Как это работает подробнее
Простая замена одного утёкшего значения не устраняет корневую причину — важно восстановить таймлайн (когда закоммичено, когда обнаружено, был ли репозиторий форкнут или закэширован поисковиками/зеркалами, что продлевает экспозицию даже после удаления коммита из истории) и зафиксировать его в post-mortem без поиска «виноватого» как единственной меры.
- Компромисс. Полная автоматизация сканирования секретов и переход на динамические секреты существенно снижают риск повторения и ущерб от утечки, но требуют инвестиций в инфраструктуру и могут первое время создавать ложные срабатывания, замедляющие разработчиков; более лёгкие организационные меры (чек-листы, ревью) дешевле внедрить, но полагаются на человеческую внимательность и менее надёжны при росте команды. Выбор зависит от чувствительности конкретных секретов, размера команды и допустимого бюджета на доработку CI/CD.
Пример кода
commands.sh
$ git-secrets --scan HEAD~1..HEAD
HEAD~1..HEAD:config/prod.env:3: AWS_SECRET_ACCESS_KEY=AKIA************
[ERROR] Matched one or more prohibited patterns
# Если бы такая проверка стояла в pre-commit хуке или CI-джобе до push,
# коммит с секретом никогда бы не попал в удалённый репозиторийЧто использовать на практике
- Практика. Технические меры включают pre-commit хуки и CI-джобы, сканирующие diff на паттерны секретов до того как коммит попадёт в удалённый репозиторий, а также перевод особо чувствительных доступов на динамически выдаваемые краткоживущие учётные данные, при которых даже утечка имеет ограниченное окно действия. Организационно полезно добавить отдельный шаг ревью для изменений в файлах конфигурации/окружения.
Подводные камни
- Риск. Ограничиваются удалением файла новым коммитом, не понимая, что секрет остаётся в истории git и в форках/зеркалах, и не ротируют сам секрет; рассматривают инцидент как разовую случайность конкретного человека, не меняя процесс; не проверяют логи фактического использования скомпрометированного секрета, упуская возможную реальную эксплуатацию.