Как закрыть утечку ключей из ИИ-агента в коммиты: пошаговый разбор
Инструкция нужна, если ИИ-агент работает прямо в вашем репозитории: пишет код, запускает команды, делает коммиты. По разбору на Habr, агент Claude Code попадает с утечкой секретов в коммиты примерно вдвое чаще среднего, а штатный хук PreToolUse такие вызовы пропускает (источник: habr.com/ru/articles/1087300). Там же описан случай, когда правило из CLAUDE.md потерялось в длинной сессии и агент запустил платную серию запросов вопреки запрету. Достаточно одного проекта на git, доступа к настройкам агента и свободного вечера. Цель - ограничить агента кодом, а не вежливой просьбой в тексте.
Ниже - шаги. Каждый заканчивается проверяемым результатом: командой, которая что-то возвращает, или файлом, который можно открыть. Если шаг нельзя проверить - он не выполнен.
- Составьте инвентарь секретов. Выпишите все ключи, токены и пароли, к которым имеет доступ агент: платные API, репозитории, базы, хостинг, рассылки. Результат - таблица из двух колонок: сервис и где лежит ключ. Без неё непонятно, что защищать.
- Вынесите секреты из кода в переменные окружения. Результат - поиск по репозиторию по началу строк ключей не находит ничего в исходниках.
- Добавьте файл с секретами в .gitignore и проверьте, что он там есть. Результат - список игнорируемых файлов содержит имя вашего файла с секретами. Это защита от случайного добавления, а не от агента.
- Установите сканер секретов как хук на коммит: он должен запускаться до создания коммита и останавливать его, если находит строку, похожую на ключ. Результат - попытка закоммитить тестовую строку отклоняется с понятным сообщением.
- Перенесите запрет на уровень хука инструмента, а не текста. Это ключевой шаг: правило, записанное словами, живёт в контексте сессии и теряется в длинной - агент запустил платную серию запросов вопреки запрету (источник: habr.com/ru/articles/1087300). Настройте хук, который перехватывает вызов до исполнения и отклоняет конкретные аргументы: обращение к файлу с секретами, чтение переменных окружения, отправку содержимого наружу. Результат - правило привязано к аргументам вызова, а не к формулировке просьбы.
- Проверьте хук на живом сценарии, а не на бумаге: разбор прямо указывает, что штатный PreToolUse такие вызовы пропускает (источник: habr.com/ru/articles/1087300). Дайте агенту задачу, которая должна упереться в запрет. Результат - вы видели отказ своими глазами и знаете, как он выглядит в логе.
- Отдельным хуком ограничьте платные вызовы: лимит вызовов за сессию и запрет на массовые серии. Результат - при превышении порога вызов блокируется до вашего подтверждения, а не после счёта.
- Прогоните сканер по всей истории репозитория: секрет мог попасть в коммит до всех этих настроек. Результат - список коммитов с находками или подтверждение, что их нет.
- Ротируйте всё, что нашлось в истории: удаление строки из файла утечку не отменяет. Замените ключи в кабинете провайдера и обновите их в окружении. Результат - новые ключи работают, старые отозваны.
- Заведите видимый журнал вызовов агента: какой инструмент вызван, с какими аргументами, что вернулось, что заблокировано хуком. Результат - после сессии вы можете пересказать, что делал агент, не переспрашивая его.
- Сделайте постпроверку обязательной после больших прогонов: раз в день или после крупной задачи прогоняйте сканер по неотправленным изменениям. Результат - утечка ловится в момент появления, а не через месяц.
- Закрепите правило в регламенте: новый ключ - только через переменные окружения, только через ответственного, с записью в инвентарь. Результат - у каждого ключа есть владелец и понятная процедура замены.
Порядок важен: сначала инвентарь и вынос секретов, потом хуки, потом проверка истории. Иначе вы будете защищать неизвестный набор ключей, половина которых уже лежит в истории коммитов.
Считайте не вероятности, а последствия. Один пропущенный коммит с ключом - это конкретный список работ: отозвать ключ, выпустить новый, найти все места, где он прописан, проверить, что ничего не отвалилось. Именно эти часы закрывает хук, отклоняющий вызов до исполнения.
Обсудить внедрение ИИ-агентов в вашем бизнесе
Расскажите о задаче — посчитаем, сколько часов и денег сэкономит агент.
Обсудить внедрение →