Секреты — pre-commit, detect-secrets и .env-гигиена
Три слоя защиты от утечки ключей при работе с агентами — правила для агента, git-хук и порядок действий, если токен всё-таки утёк.
Агент с доступом к файлам и git — это новый класс риска: он может закоммитить ваш токен быстрее, чем вы заметите. У меня защита стоит в три слоя, и сработать должен любой из них.
Слой 1: правила для агента
В постоянных инструкциях агента — жёсткий запрет выводить содержимое .env-файлов. Никаких cat .env, никакого чтения файла целиком «для проверки». Проверить, что ключ установлен — можно, посчитав строки по маске. Увидеть значение — нельзя. Плюс список файлов, которые никогда не попадают в коммит: session-файлы мессенджеров, ключи, credentials.
Этот слой самый хрупкий — правила агент может неверно понять. Поэтому он не единственный.
Слой 2: железный хук
Pre-commit с detect-secrets работает на уровне git и не зависит от того, что там агент подумал. Любой коммит сканируется на паттерны секретов: длинные строки после token=, base64-подобные куски, известные форматы ключей. Нашёл — коммит заблокирован.
Настройка на десять минут, срабатывает годами. Из всех слоёв этот — самый дешёвый по усилиям на единицу пользы.
Слой 3: порядок действий при утечке
Самое важное знание — что делать, когда предыдущие слои не сработали. Правило одно, и оно неприятное: утёкший ключ отзывается немедленно, всегда.
Переписывание истории git не спасает: секрет остаётся в форках, кешах и у любого, кто успел склонировать. «Репозиторий же приватный» — тоже не спасает: приватный сегодня — случайно публичный завтра. Единственный настоящий фикс — новый ключ. Всё остальное — уборка следов, которую делают после отзыва, а не вместо.
Мелочь напоследок
Значения секретов не должны попадать и в логи. Мой гейтвей для Telegram, например, печатает «ключ найден», но никогда — сам ключ. Звучит очевидно; проверьте свои скрипты — почти у всех где-нибудь да логируется лишнее.
ПРИМЕНИТЬ У СЕБЯ
Хотите разобрать, как это ложится на вашу задачу? Напишите — обычно пары сообщений хватает, чтобы понять, есть ли смысл двигаться дальше.
Telegram @bosswor