Безопасность Claude Code: чек-лист перед запуском агента в проекте
Агент читает файлы и запускает команды, поэтому настройки безопасности нужны до первого запуска. Чек-лист: разрешения, секреты, песочница, отдельный ключ с лимитом.
6 мин · · разработка · API-ключи
Claude Code читает файлы проекта, запускает команды и правит код. Это удобно, но означает, что агент действует с вашими правами на вашей машине. Безопасность Claude Code (Claude Code security) сводится к трём вопросам: что он может увидеть, что может выполнить и сколько денег может потратить. Ниже чек-лист, который стоит пройти до первого запуска в реальном проекте. Опираемся на документацию Anthropic (разделы Security, Permissions, Sandboxing) и документацию Zukko; возможности Claude Code меняются между версиями, поэтому названия параметров сверяйте с вашей версией.
1. Начните с режима, где агент спрашивает
По документации, в ручном режиме Claude Code стартует с правами только на чтение: когда ему нужно править файлы или запускать команды, он спрашивает, и вы выбираете, разрешить один раз или всегда. Набор безобидных команд вроде ls, cat и git status выполняется без вопросов.
Не снимайте это ограничение «чтобы не кликать» в первый же день. Сначала поработайте в обычном режиме и посмотрите, какие подтверждения вы нажимаете чаще всего: именно их имеет смысл превратить в точечные разрешения (пункт 3), а не отключать защиту целиком.
2. Режим yolo: где допустим, а где нет
Флаг --dangerously-skip-permissions (его в сообществе называют yolo) отключает запросы подтверждения. В документации Anthropic прямо сказано: использовать такой режим стоит только в изолированных средах, таких как контейнер или виртуальная машина, где Claude Code не сможет причинить ущерб. Практическое правило:
- на рабочем ноутбуке с ключами SSH, облачными учётными данными и доступом к продакшену режим yolo не включайте;
- в одноразовом контейнере с копией репозитория, без секретов и без доступа к сети продакшена он допустим;
- в CI запускайте агента в изолированном раннере с минимальными правами.
Если вы администрируете команду, в настройках есть параметр permissions.disableBypassPermissionsMode: значение "disable" запрещает этот режим. Удобнее всего задавать его в управляемых (managed) настройках, которые пользователь не может переопределить.
3. Разрешайте точечно, запрещайте явно
Правила разрешений описываются в settings.json. Порядок вычисления по документации такой: сначала deny, затем ask, затем allow, и первое совпадение решает исход. Разрешение не отменяет запрет. Пример для пользовательского ~/.claude/settings.json:
{
"permissions": {
"allow": [
"Bash(npm run lint)",
"Bash(npm run test *)"
],
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)"
]
}
}Разрешать стоит узкие, повторяющиеся и обратимые команды: линтер, тесты, git status. Не добавляйте широкие шаблоны вроде «любой Bash». Команды, которые меняют внешний мир (git push, деплой, curl с записью, rm), лучше оставить на подтверждении или запретить.
4. Закройте .env и секреты
Правила Read(./.env) и Read(./.env.*) из примера выше нужны затем, чтобы агент не читал файлы с секретами и не отправлял их содержимое модели. По документации, правила Read и Edit применяются к встроенным файловым инструментам и к файловым командам, которые Claude Code распознаёт в Bash (например cat, head, tail). Но это не герметичная граница: произвольная команда в оболочке способна добраться до файла иначе. Поэтому дополнительно:
- не храните боевые секреты в рабочем каталоге проекта, где работает агент;
- держите отдельные
.envдля разработки с тестовыми значениями; - не кладите секреты в
CLAUDE.mdи в сообщения агенту; - проверьте
git statusи.gitignore: файлы с секретами не должны попадать в коммиты, которые агент создаёт.
5. Включите песочницу для команд
В документации Anthropic описана встроенная песочница для Bash: операционная система ограничивает, какие файлы и сетевые домены доступны командам агента. Она включается командой /sandbox или параметром sandbox.enabled в настройках и по умолчанию выключена. Важные детали из документации:
- песочница охватывает только команды оболочки, а встроенные файловые инструменты работают по правилам разрешений;
- по умолчанию команды в песочнице пишут в рабочий каталог, но читают большую часть машины, включая каталоги вроде
~/.sshи~/.aws: для чтения чувствительных путей нужны отдельные ограничения (filesystem.denyReadи другие); - сетевые подключения проходят через прокси, список разрешённых доменов вначале пуст;
- на нативной Windows песочница недоступна, нужен WSL2.
6. Работайте в ветке и коммитьте часто
Откат дешевле предотвращения. Создайте отдельную ветку под задачу, делайте коммит перед крупными правками и просматривайте дифф перед слиянием. В самом Claude Code есть откат состояния (/rewind или двойное нажатие Esc), но он не заменяет git.
7. Не доверяйте чужому содержимому
Агент читает текст из файлов, README, веб-страниц и ответов MCP-серверов. Среди этого текста может оказаться инструкция, написанная атакующим (prompt injection). Меры предосторожности, которые советует документация: просматривайте команды перед подтверждением, не пересылайте агенту недоверенное содержимое напрямую, проверяйте изменения критичных файлов, для работы с внешними сервисами используйте изолированные среды.
Отдельно про MCP-серверы: подключайте только те, которым доверяете, и проверяйте файл .mcp.json в репозитории, который вы клонировали. Сервер из чужого репозитория выполняет код на вашей машине.
8. Отдельный ключ Zukko с лимитом
Здесь в игру вступает то, что специфично для шлюза. Ключ Claude Code лежит в ~/.claude/settings.json или в переменной окружения и доступен процессам, которые запускает агент. Поэтому:
- Заведите отдельный ключ только для Claude Code в кабинете. Полный ключ показывается один раз при создании.
- Задайте дневной и месячный лимит в $. Если агент зациклится или ключ утечёт, потолок сработает раньше, чем опустеет баланс. Превышение даёт 429 с кодом
key_daily_limit_reachedилиkey_monthly_limit_reached. Лимиты мягкие: запросы, начатые до достижения потолка, завершатся, поэтому закладывайте запас. - Ограничьте
allowed_models. Если вы переназначили слоты моделей Claude Code наclaude-opus-5-5иclaude-sonnet-5-5, добавьте в список именно их. Лишняя модель в списке расширяет возможности злоумышленника, а недостающая даёт ошибку 403model_not_allowed_for_key, когда Claude Code обратится к своему слоту. - Храните ключ в пользовательской конфигурации,
~/.claude/settings.json, а не в файле проекта, который попадёт в репозиторий. ЗначенияANTHROPIC_BASE_URL=https://api.zukko.proиANTHROPIC_AUTH_TOKENописаны в документации по Claude Code. - Знайте, как отозвать ключ. Утёкший ключ удаляется в кабинете, остальные ключи аккаунта продолжают работать. Пошаговая инструкция — в статье Утёк API-ключ: что делать.
Подробнее про лимиты и список моделей — в документации.
9. Продовый доступ: не давать совсем
Самое простое правило: у агента не должно быть путей к продакшену. Не запускайте его в сессии, где подключены боевые kubectl, psql или облачный CLI с правами администратора. Нужен доступ к данным для отладки? Создайте отдельного пользователя базы с правом только на чтение на копии данных. Деплой оставьте себе или пайплайну CI.
Короткий итог перед запуском
- Режим с подтверждениями включён, yolo только в изолированной среде.
- Узкие allow, явные deny на
.envи секреты. - Песочница включена, если платформа её поддерживает.
- Работа в ветке, коммиты перед крупными правками.
- Чужие репозитории и MCP-серверы проверены.
- Отдельный ключ Zukko с дневным лимитом и
allowed_models. - Нет продового доступа в среде агента.
Частые вопросы
Достаточно ли deny-правила на .env?
Это хорошая первая линия, но не единственная. Правило закрывает встроенные инструменты и распознаваемые файловые команды, а произвольная команда в оболочке может добраться до файла иначе. Дополните его песочницей и не храните боевые секреты рядом с проектом.
Можно ли использовать --dangerously-skip-permissions для автоматизации?
В изолированном контейнере или раннере без секретов и без доступа к продакшену это допустимо, как и сказано в документации Anthropic. На своём рабочем компьютере с ключами и доступом к инфраструктуре лучше этого не делать.
Чем лимит на ключе помогает с безопасностью?
Он ограничивает ущерб в деньгах, если агент зациклился или ключ попал не туда. Это не замена правам доступа к файлам, но последняя страховка. Лимит действует на ключ, а не на весь баланс.
Что делать, если ключ всё же утёк?
Удалите его в кабинете и создайте новый с лимитом. Посмотрите историю расходов в разделе «Использование», чтобы оценить, был ли чужой трафик.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Свой прокси к нейросети на Node.js: не показывать API-ключ во фронтендеНебольшой сервер на Express между вашим фронтендом и API нейросети: ключ остаётся на сервере, а модели, длина запроса и частота ограничены.
- DeepSeek API на Python: запросы, стриминг, JSON и обработка ошибокГотовый код для DeepSeek V4.1 Flash и V4 Pro на OpenAI SDK: запрос, стриминг, разбор JSON и аккуратная обработка ошибок.
- Gemini API на Python: запросы через OpenAI SDK и OpenAI-форматРабочий пример Gemini API на Python без отдельной библиотеки: меняем base_url в OpenAI SDK, добавляем стриминг и JSON и сравниваем с google-genai.
- Anthropic SDK для Python: base_url, ключ и первый запрос через шлюзОфициальный пакет anthropic для Python нужно только направить на другой адрес. Разбираем base_url, ключ, стриминг, подсчёт токенов, кэш и ошибки.