Безопасность 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:

bash
{
  "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 или в переменной окружения и доступен процессам, которые запускает агент. Поэтому:

  1. Заведите отдельный ключ только для Claude Code в кабинете. Полный ключ показывается один раз при создании.
  2. Задайте дневной и месячный лимит в $. Если агент зациклится или ключ утечёт, потолок сработает раньше, чем опустеет баланс. Превышение даёт 429 с кодом key_daily_limit_reached или key_monthly_limit_reached. Лимиты мягкие: запросы, начатые до достижения потолка, завершатся, поэтому закладывайте запас.
  3. Ограничьте allowed_models. Если вы переназначили слоты моделей Claude Code на claude-opus-5-5 и claude-sonnet-5-5, добавьте в список именно их. Лишняя модель в списке расширяет возможности злоумышленника, а недостающая даёт ошибку 403 model_not_allowed_for_key, когда Claude Code обратится к своему слоту.
  4. Храните ключ в пользовательской конфигурации, ~/.claude/settings.json, а не в файле проекта, который попадёт в репозиторий. Значения ANTHROPIC_BASE_URL=https://api.zukko.pro и ANTHROPIC_AUTH_TOKEN описаны в документации по Claude Code.
  5. Знайте, как отозвать ключ. Утёкший ключ удаляется в кабинете, остальные ключи аккаунта продолжают работать. Пошаговая инструкция — в статье Утёк 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.