Безопасность ИИ: секреты, файлы .env и права доступа для агентов-программистов

Модель угроз в одном абзаце

ИИ-агент для программирования запускает команды оболочки с вашими правами и читает ваши файлы в свой контекст. Всё, что он прочитал, — включая секреты, — дальше уходит в вывод инструментов, транскрипты сессий, снимки файловой системы, отладочные логи, общие ссылки и экспортированные сессии, а на бесплатных тарифах, возможно, и в обучение моделей. Поэтому безопасность с ИИ-ассистентами — это две дисциплины: не пускать секреты в контекст агента вообще и давать каждому агенту только те права, которые нужны его роли, как в материалах «Создание и развитие агентов» и «Три модели, один проект».

Как aredel разделяет секреты сегодня

В этом репозитории конфигурация без секретов уже отделена от настоящих секретов. Оба файла ниже намеренно хранятся в git; пароля рядом с ними нет:

container/tools/deploy/ ├── site.env ├── site.env.example ├── deploy-ftp.sh └── DEPLOY_FTP.md ~/.config/aredel/ └── ftp-creds.env

container/tools/deploy/site.env

~/.config/aredel/ftp-creds.env

Правила, которых держится эта схема, проверены в репозитории:

Что может пойти не так

Права доступа, которые ограничивают ущерб

Позиция «запрещено по умолчанию» для OpenCode, из рабочей конфигурации трио в корне этого репозитория. Сначала глобальные правила, потом исключения для ролей — побеждает последнее совпадение. Файл — opencode.jsonc в корне репозитория:

vi opencode.jsonc

{ "$schema": "https://opencode.ai/config.json", "permissions": [ { "action": "shell", "resource": "*", "effect": "ask" }, { "action": "shell", "resource": "git push *", "effect": "deny" }, { "action": "shell", "resource": "sudo *", "effect": "deny" }, { "action": "read", "resource": "*.env", "effect": "deny" }, { "action": "read", "resource": "*creds*", "effect": "deny" } ] }

Роли из «Четыре готовых агента», ужесточённые для секретов:

АгентЧитает .envПравкаОболочкаПочему
triage на бесплатной модели OpenCodedenydenydenyБесплатный тариф не должен касаться секретов вообще
builder на Lunadenyallowask, тесты разрешены заранееПишет код, ничего не деплоит и не читает creds
reviewer на Opus 5.5denydenydenyСудит диффы; находки упоминают работу с секретами, не цитируя значения

Вопросы о деплое идут к человеку, который запускает deploy-ftp.sh, а не к агенту с доступом к файлу creds. Командные запреты, которые проекты не могут переопределить, живут в policies, а не в permissions — например, глобальный запрет на tool.use shell:sudo *. Пересматривайте залипшие правила «Allow always» раз в квартал и удаляйте те, которые никто не может обосновать. Какие правила держат, какие нет и проверенный пример «до и после» — в материале «Deny-правила для OpenCode и Claude Code».

Гигиена секретов, которая переживает ИИ

Ловить утечки до коммита

Честный пробел: сегодня в этом репозитории нет pre-commit-хука, который ищет секреты, — php -l, PHPCS и проверки переносов строк смотрят код, а не учётные данные. Пока его нет, ручной барьер — это grep по проиндексированным изменениям на известные шаблоны перед каждым коммитом:

git diff --cached | grep -n -i "FTP_PASSWORD\|API_KEY\|BEGIN.*PRIVATE KEY" | grep -v "example\|TEMPLATE\|secret-here"

Проверяйте каждое совпадение вручную: заглушки в файлах *.example — это нормально, настоящие значения — нет. Надёжное решение — хук-сканер (gitleaks или аналог), добавленный в .pre-commit-config.yaml; он записан как последующая работа, а не как повод пропустить ручной grep сейчас.

Чек-лист рисков для этого репозитория

РискСостояние в aredelДействие
Секреты в отслеживаемых файлахРазделение сделано, скрипт деплоя предупреждаетДержать разделение; запускать grep по проиндексированным изменениям
Агент читает файл credsЗапрещено в корневой конфигурации для всех ролейПроверить через opencode debug config
Утечка через обучение на бесплатном тарифеTriage запрещает правки и оболочку, кроме навыка mapНикогда не отправлять задачи с creds на бесплатную модель
Промпт-инъекция через инструментыОболочка по умолчанию спрашиваетОставить ask; никогда не выбирать Allow always для оболочки
Поиск секретов перед коммитомОтсутствуетСейчас ручной grep, дальше хук-сканер
Ущерб от одного ключаCreds вне репозитория, одна задача деплояОтдельные ключи на каждую новую задачу

Официальные источники:

Автор статьи: Клавдия Кондакова

Изображение баннера