Григорий Добряков

Howto · разбор

Разбор 18 GitHub · open source

Enterprise-бастион для кода: Claude работает над проектом без доступа к файлам и шеллу

Защитный слой между AI-агентом и кодовой базой предприятия. Claude разбирается в коде и решает задачу — но лишён штатных инструментов. Всё, что он хочет сделать, проходит через фильтрующего посредника и исполняется в изолированном контейнере; агент получает только результат.

CISO CTO Head of AI Architect

Проблема

Крупная организация не может дать AI-инструменту неконтролируемый доступ к исходному коду, секретам и инфраструктуре. Но при этом хочет, чтобы Claude разбирался в проекте и выполнял в нём реальную работу. Наивная схема даёт агенту штатные инструменты файлов и шелла — а это ровно тот доступ, который безопасность не согласует: ничто не мешает агенту прочитать секрет, записать за пределами задачи или запустить деструктивную команду.

Методология

Ограничивать агента не промптом, а архитектурой. Полностью убрать штатные инструменты и пропустить любое взаимодействие через фильтрующего посредника, который исполняет команды в песочнице.

  1. 1. Единица работы — «проект + задача». Есть каталог projects/ и каталог tasks/. Под каждую пару стартует выделенный Docker-контейнер, куда монтируется только этот проект в /workspace. Сессии не видят друг друга.
  2. 2. Claude без инструментов. Claude Code запускается с --tools "" — штатные чтение, запись файлов и запуск команд отключены. Сам по себе агент не может ни прочитать, ни изменить, ни выполнить ничего в системе.
  3. 3. Доступ только через MCP. Вместо штатных инструментов Claude обращается к MCP-серверу по HTTP (в продакшене — вынесенному за пределы проекта). Сервер привязан к сессии и работает с её контейнером. Доступные инструменты: ping, echo, secureBash.
  4. 4. Строгая фильтрация. Каждая команда перед исполнением проходит проверку (в продакшене — отдельной небольшой LLM-моделью, выступающей фильтром). Деструктивные и выходящие за рамки задачи действия отсекаются до запуска.
  5. 5. Изолированное исполнение. Прошедшая фильтр команда выполняется через docker exec внутри контейнера сессии, а не на хосте. Результат возвращается Claude.

Гарантии enterprise-уровня:

Контроль Как обеспечивается
Изоляция рабочих нагрузок Отдельный контейнер на каждую пару «проект+задача»; смонтирован только нужный проект; сессии изолированы
Наименьшие привилегии Нет штатных tools (--tools ""); единственный путь — MCP-сервер с ограниченным набором операций
Контроль периметра MCP-guard вынесен за пределы проекта; доступ к коду, секретам и инфраструктуре не передаётся агенту напрямую
Фильтрация операций Каждая команда проходит проверку (в продакшене — отдельной LLM); деструктивные действия отсекаются до исполнения
Аудируемость Все запросы к MCP логируются (logs/mcp.log, JSON Lines) — полный след для разбора и комплаенса
Отзыв доступа Реестр сессий (sessions.csv) и контейнеры, которые можно остановить/удалить в любой момент

Команда запуска Claude — обратите внимание, чего в ней нет:

# старт изолированной сессии под пару «проект+задача»
./scripts/start_session.py demo demo-001
#   → генерирует idp-<uuid>, запускает контейнер с projects/demo → /workspace
#   → добавляет запись в sessions.csv

# сборка и запуск команды Claude
eval "$(./scripts/claude_command.py demo demo-001)"

# сгенерированная команда выглядит так:
IDP_SESSION_ID=idp-aae519cd... \
  claude --append-system-prompt "..." \
         -p "Выясни, есть ли в этом проекте файл packages.json" \
         --tools ""
#   IDP_SESSION_ID       привязка к сессии; подставляется в URL MCP-сервера из .mcp.json
#   --append-system-prompt  добавляет правила guard'а из system-prompt.md
#   -p                   текст задачи из tasks/demo-001.md
#   --tools ""           отключает штатные tools; остаётся только MCP (secureBash, ...)

Артефакт

github.com/dobryakov/enterprise-code-bastion (Python, Docker, MCP-over-HTTP). Рабочий бастион: лаунчер сессий, сборщик команды, MCP-сервер с secureBash и CSV-реестр сессий — запускается, а не слайд.

Подпись серии

Где это ломается

Кому и зачем

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

Пустить AI-агентов к кодовой базе — безопасно?

Изоляция, наименьшие привилегии, фильтрация каждой операции и аудит для AI-над-кодом — с рабочим артефактом, а не презентацией политик.

Написать мне

Другие разборы

Серия инженерных разборов: реальная задача → методология → рабочий артефакт → честный разбор того, где это ломается.

К серии →