Безопасность
Управление секретами: подъём по лестнице зрелости
Читать про утечки секретов — не то же самое, что устранять одну. Начните с сервиса, у которого живая креда закоммичена в git, отнеситесь к этому как к реальному взлому и поднимайтесь по лестнице зрелости юнита ступень за ступенью — ротируя, централизуя, сканируя и сокращая время жизни — с фактами на каждом шаге.
Превратите ментальную модель юнита в воспроизводимый инженерный цикл: корректно устранить утечку, перенести секреты в manager с контролем доступа и аудитом, поставить на репозиторий сканер и дойти до динамических короткоживущих кред — доказывая работу каждой ступени.
Взять небольшой сервис с захардкоженной кредой БД (и/или третьей стороны), закоммиченной в историю git, и привести его к управляемой, сканируемой, least-privilege схеме с короткоживущими секретами — относясь к существующему коммиту как к реальной утечке и доказывая каждую ступень лестницы фактами.
- До/после утечки: секрет виден в истории git в начале и отсутствует в истории, а креда ротирована (старое значение доказуемо отвергается) в конце.
- Приложение аутентифицируется секретом, взятым из manager в рантайме, с показанной записью аудит-лога, называющей читателя — никакого секрета в репозитории, образе или отслеживаемом файле.
- Сканер блокирует повторно внесённый тестовый секрет на этапе коммита (вставьте вывод хука), а CI-скан проходит на очищенной истории.
- Динамическая креда доказуемо истекает: зафиксированная сессия, работающая внутри TTL и отвергаемая после, плюс один абзац, сопоставляющий каждый шаг со ступенью лестницы зрелости и объясняющий, почему он там.
- Добавьте envelope encryption для at-rest конфиг-блоба: зашифруйте локально data key, выданным KMS, храните только обёрнутый data key и покажите, что расшифровка работает, при этом KMS никогда не видит payload.
- Подключите автоматическую ротацию одного статического секрета (управляемая manager-ом задача/лямбда ротации) и докажите, что приложение подхватывает новое значение без простоя.
- Напишите одностраничный runbook инцидента: обнаружить утёкший ключ, сначала ротировать, проверить аудит/биллинг провайдера, вычистить историю, отсканировать и проверить — с точными командами для вашего стека.
- Добавьте CI-гейт, который роняет сборку, если какой-либо сервис всё ещё читает долгоживущий статический секрет там, где доступна динамическая креда, и задокументируйте политику.
Это цикл, который вы запустите на каждом реальном инциденте с секретами и миграции: считать закоммиченный секрет утёкшим и сначала ротировать, чистить историю только как гигиену, перенести значение в manager с контролем доступа и аудитом, поставить на репозиторий сканер, чтобы следующая ошибка не приземлилась, обеспечить least privilege и подняться до динамических короткоживущих кред, чей TTL ограничивает радиус поражения. Сделав это однажды на небольшом сервисе, с фактами на каждой ступени, вы превращаете продовую версию в мышечную память.