
Разбор · Опубликовали 08.10.2026
Хранение секретов защищает кодовую базу только вместе с контролем того, что попадает в контекст агента
Ключи вне Git всё ещё могут попасть к ИИ-агенту через команды. Что ограничить в окружении и выводе инструментов и как принять эту работу у исполнителя.
Текст собран вместе с машиной агентов под надзором инженера, который ведёт vibecoding.ru · факты проверены 8 октября 2026
Ключи вне Git всё ещё попадают к ИИ-агенту через вывод команд. Ограничивать нужно окружение запуска и ответ инструмента.
13 июля 2026 секрет оказался в транскрипте нашей машины при чистом Git. На этом случае разберём, что ИТ-директору заказать и по чему принять.
Не хотите разбираться сами? Внедряем ИИ в ваш бизнес: задачи без лимита, одна цена в месяц, отмена в любой момент.
1. Ключ вне Git всё ещё может попасть в контекст агента.
Чистый Git показывает историю кода. Он не отвечает на вопрос, какие значения увидела модель. Контекст включает текст, который вернули инструменты.
Команда может напечатать ключ вместе с настройками. Модель прочитает его как обычный текст, даже если файл с ключом никогда не добавляли в Git.
Цена утечки зависит от прав ключа. Тестовый сервис и доступ к данным клиентов требуют разных ограничений. Место хранения не уменьшает выданные права.
Три проверки отвечают на разные вопросы.
OWASP и документация Python, проверены 8 октября 2026. Разделение проверок наше.
2. Окружение задачи ограничивает доступ процесса к секретам.
Дочерний процесс может унаследовать лишние ключи. Инструмент получает рабочие переменные терминала, из которого запустили агента.
В Python переданный набор env заменяет унаследованный. Для проверки кода можно выдать только нужные переменные. Перенос ключа из файла в переменную это не решает.
Очистка переменных не закрывает файлы и профили авторизации. Их доступность ограничивают отдельно. Оболочка и утилиты не должны подгружать рабочие ключи обратно.
Окружение задают списком разрешённого.
Документация Python и Anthropic о разрешениях, проверена 8 октября 2026. Список задаёт требования к настройке, не результат проведённого аудита.
3. Контроль вывода нужен до передачи результата модели.
Успешный запуск тоже способен напечатать ключ. Ошибка может выдать его в диагностике. Проверяют оба потока: stdout и stderr.
Инструмент может возвращать выбранные поля. Агенту для проверки настройки хватает имени параметра и статуса «задан». Значение секрета ему не требуется.
Письменные правила для агентов объясняют запрет, исполнение закрепляют в инструменте. Просьба не учитывать ключ после вывода не отменяет попадания текста в контекст.
Значение ключа не вписывают и в саму команду. Фильтр вывода не скроет секрет, который агент уже отправил в аргументе инструмента.
Агенту возвращают результат действия без значений секретов.
Наш случай 13 июля 2026, документация Python, проверена 8 октября. Формат ответа предложен редакцией; это не кадр реального вывода.
4. Утечку в транскрипт исправляют отзывом ключа.
Ключ в контексте уже пересёк границу. Удалить строку из окна недостаточно. OWASP рекомендует отзывать потенциально скомпрометированные секреты.
Новый ключ применяют во всех использующих его местах и проверяют результат. Ошибка замены способна оставить процессы на старом доступе или без доступа вообще.
За ротацию нужен назначенный ответственный. Ответственность за ошибки агента не исчезает, когда команду предложила модель. Даты ниже из нашей машины.
Поломки изменили запуск процесса и проверку ответа.
13.07
Утилита напечатала переменные при выпуске. Секрет попал в транскрипт при чистом Git. Ключ заменили; печать значений убрали. После замены проверили применение нового доступа: добавление переменной не всегда срабатывало.
18.07
Ревью обнаружило, что ответчик на письма получал лишние секреты и доступ к файлу с ними. Недоверенный текст мог выманить значение в ответ. Процессу очистили окружение, файл с секретами вынесли из рабочей папки; перед отправкой добавили проверку ответа на значения секретов.
Записи машины от 13 и 18 июля 2026, сверены 8 октября. Во втором случае обнаружена возможность утечки, не доказанная отправка ключа.
Это опыт разработки vibecoding.ru; своего клиентского кейса по этой настройке у нас нет. Открытая машина нашего сайта показывает роль инженера.
Инженер ведёт машину агентов, пишет правила и принимает работу. После поломки меняют запуск или проверку. Указание без ограничения инструмента оставляет путь к ключу.
5. Пробный запуск показывает, что попадает в контекст.
Начните с искусственной метки без доступа. Исполнитель помещает её в тестовое окружение вместо ключа. Это способ приёмки; нового эксперимента мы не проводили.
Проверяют успех, ошибку и отладку. След метки ищут в выводе, транскрипте и доступных агенту файлах. Один чистый запуск не доказывает, что остальные команды устроены так же.
Запишите это в задачу с критерием приёмки. Нужны список разрешённого окружения и образцы ответа модели. Формулировка «настроить безопасное хранение» не задаёт результата.
Приёмка фиксирует запуск, ответ и повторяемую проверку.
Предложенный нами порядок приёмки, 8 октября 2026. Проверка не использует боевые ключи и не подменяет аудит всех прав агента.
6. При покупке разработки ограничение доступа принимают вместе с проверкой.
Результат задачи виден в работе инструмента. Ключи вынесены, процесс ограничен, вывод проверен. Руководитель принимает эти результаты вместе.
Для постоянных правок подписка на агентную разработку «Один проект» стоит 250 000 ₽ в месяц. Цена проверена 8 октября 2026.
Ограничение окружения и вывода можно поставить отдельной задачей. Следующий шаг: обсудить запуск агентов. Разовую правку может выполнить и ваша команда.
Что и как мы проверяли
| Факт | Что известно | Проверено |
|---|---|---|
| Наши истории | Записи 13 и 18 июля 2026 сверены с исходными журналами. В первом случае значение попало в транскрипт, во втором ревью обнаружило возможность утечки. Это опыт машины vibecoding.ru, клиентского кейса нет | 2026-10-08 |
| Окружение и вывод | Официальная документация Python, subprocess: переданный env заменяет унаследованное окружение; stdout и stderr можно захватывать раздельно | 2026-10-08 |
| Жизненный цикл ключа | OWASP Secrets Management Cheat Sheet: минимальные права, обращение с секретами в логах и отзыв потенциально скомпрометированных значений | 2026-10-08 |
| Ограничения агента | Документация Anthropic о безопасности и разрешениях: недоверенный текст способен повлиять на инструкции; разрешения инструментов и ограничения файловой системы дополняют друг друга | 2026-10-08 |
| Публичные страницы | Живые /open и /services прочитаны в день сдачи. Цена «Один проект» 250 000 ₽/мес относится к месячной разработке. Кадр /open снят 4 октября, его содержание сверено 8 октября | 2026-10-08 |
| Предлагаемая приёмка | Таблица с искусственной меткой задаёт работу исполнителю. Нового эксперимента с окружением и полного аудита безопасности в этом разборе не проводили | 2026-10-08 |
7. Частые вопросы
Что называют секретами в разработке?+
Пароли, токены и ключи, которые дают доступ к сервисам или данным. Название переменной само по себе не секрет; её значение может открывать доступ. Копировать значение в задачу или ответ агента не нужно.
Что такое система хранения секретов?+
Сервис, который хранит значения и управляет их выдачей. После выдачи процессу ключ может оказаться в тексте команды или логе, поэтому отдельно ограничивают использование и вывод.
Достаточно ли .env и .gitignore?+
.gitignore не запрещает процессу читать файл и не удаляет уже записанное из истории Git. У агента и его инструментов отдельно ограничивают доступ к файлу и окружению.
Достаточно ли маскировать ключи в выводе?+
Это дополнительная проверка. Она не отменяет лишний доступ процесса к секретам. Формат результата лучше выбирать заранее; маскирование известных значений способно пропустить изменённое представление.
Можно ли выключить весь вывод команд?+
Тогда агент лишится диагностики. Ему возвращают выбранный результат и очищенное описание ошибки. Подавить печать значений и потерять все сообщения о сбое не одно и то же.
Можно ли проверить настройку без боевого ключа?+
Да. Для пробного запуска используют искусственную метку без прав доступа. Такая проверка показывает, проходит ли конкретный путь, и повторяется для используемых инструментов и режимов.
Источники
- Python, документация subprocess: окружение и потоки вывода — официальная документация
- OWASP, Secrets Management Cheat Sheet: права, логи, отзыв секретов — рекомендации безопасности
- Anthropic, безопасность Claude Code: недоверенный вход — официальная документация
- Anthropic, разрешения Claude Code и ограничения среды запуска — официальная документация
- Git, документация gitignore: исключение незаписанных файлов — официальная документация
- Машина vibecoding.ru: открытое устройство работы; даты историй сверены по рабочим записям июля 2026 — наш опыт
- Агентная разработка для компании: условия «Один проект» — наш сервис
Запомнить
- Ключ вне Git ещё может попасть в контекст. Проверьте путь через команды.
- Выдавайте процессу окружение задачи и закройте другие источники ключей.
- Передавайте модели выбранный результат, проверяйте ошибки и отладку.
- Попавший в транскрипт ключ отзовите, новый доступ проверьте после применения.
- Принимайте настройку на тестовой метке; повторяйте проверку при правке инструмента.