shell.exec, редактирует файлы,
извлекает URL и загружает community-навыки — любое из этого может сделать
rm -rf на томе, прочитать .env или эксфильтрировать на хост
злоумышленника. Этот рецепт ограничивает эту поверхность с помощью
Firewall: запретить деструктивный shell, валидировать
аргументы вызовов, которые вы всё же разрешаете, огородить egress и удержать
действительно рискованные операции на человека. Ничто из этого не касается
кода вашего агента — политика живёт в шлюзе и применяется на следующем вызове.
Всё ниже настраивается в консоли (Firewall → Posture / Policies). Эти
маршруты управления используют вашу консольную сессию, а не ключ ретрансляции.
Только вызовы
/v1/*, которые делает ваш агент, несут ключ sk-orca-….
Редактирование политик требует роли Developer.1. Начните с наблюдения, а не блокировки — базис безопасного кодинг-агента
Не пишите правила вслепую. Дайте агенту его ключsk-orca-…, затем откройте
Firewall → Posture и примените уровень автономии balanced
(уровень автономии). В одной
транзакции это аудирует каждый вызов инструмента, флагирует PII и запрещает
деструктивный shell — так что худшее действие уже огорожено, пока вы изучаете
остальное поведение агента из реального трафика.
Дайте ему поработать, затем прочитайте Firewall → Discovered tools:
каждый инструмент, который видело рабочее пространство, помеченный
covered (применяется правило) или gap (ничего не применяется). Этот
список — черновик вашего allow-list. Когда лента выглядит правильно,
переходите к tight (default-deny) или создайте целевую политику ниже.
2. Запретите деструктивный shell — непереговариваемый пол
Единственное самое важное правило для кодинг-агента — никакого деструктивного shell. Уровни автономииbalanced и tight уже поставляют
это как пресет Block destructive shell, который материализует реальные,
редактируемые правила deny, покрывающие как имена инструментов
рабочего пространства напрямую (shell.*, bash, cmd.*, powershell.*,
exec.*), так и MCP-неймспейсные формы, которые выставляет зарегистрированный
сервер (*.shell.*, *.cmd.*, …).
Если вы предпочитаете ограничить это плотнее, чем «запретить весь shell»,
создайте одно правило, которое запрещает только деструктивные команды и
аудирует остальные. Правило сопоставляется по глобу имени инструмента плюс
опциональному предикату аргумента (JSONPath против аргументов вызова):
Запретить rm -rf, но разрешить другие shell-вызовы
Запретить rm -rf, но разрешить другие shell-вызовы
В Firewall → Policies добавьте правило выше вашего default:
- Глоб инструмента:
shell.exec - Args match (клауза JSONPath):
- Вердикт:
deny
eq, contains, regex, in,
cidr_match, gt, lt. Вызов, чей $.command совпадает с regex,
блокируется; всё остальное проваливается к следующему правилу.Как выглядит блокировка
Как выглядит блокировка
Запрещённый вызов на поверхности inbound возвращает HTTP 400 с
кодом ошибки
firewall_blocked и сообщением, называющим инструмент и
причину. Вызов, диспетчеризованный через MCP-шлюз, возвращается как
ошибка инструмента (firewall deny: …), так что модель может среагировать,
а не упасть. Блокировки inbound срабатывают до вышестоящего вызова модели,
так что они не стоят токенов модели.3. Валидируйте аргументы на инструментах, которые оставляете
Разрешить инструмент — не то же самое, что разрешить каждый его аргумент. Тот же предикат JSONPath, что ограничивает deny, позволяет вам ограничить форму разрешённого вызова — так чтоdb.query не может нести DROP, а
file.write не может выйти за пределы директории.
Заблокировать SQL DROP
Глоб
db.query, клауза
{"path":"$.sql","op":"regex","value":"(?i)\\bdrop\\b"}, вердикт
deny.Отредактировать секрет в аргументах
Вердикт
sanitize редактирует совпавшие подстроки из аргументов
вызова инструмента перед его пересылкой. Он никогда не касается того, что
инструмент возвращает; на поверхности inbound (где ещё нет аргументов
времени вызова) он эскалирует до блокировки.4. Контролируйте egress — огородите, куда агент может дотянуться
Кодинг-агент, который может извлекать URL, может быть направлен в SSRF (попадание в облачные метаданные или на внутренний хост10.x) или
использован для эксфильтрации. Уровень автономии tight поставляет пресет
SSRF, который запрещает fetch-образные имена инструментов (http_fetch,
web_search, fetch_url, request и их формы <server>.*) целиком.
Для контроля на уровне назначения создайте правило egress. Egress-правила
ограничивают по host или CIDR с записями allow / deny, вычисляемыми на
поверхности egress:
Ни один пресет не поставляет egress-правил на основе CIDR — пресет SSRF
сопоставляет fetch-образные имена инструментов. Deny-список host/CIDR выше —
тот, что вы пишете сами. См.
Остановите эксфильтрацию для полного
паттерна.
5. Удержите рискованные операции на человека (HITL)
Некоторые операции не должны быть авто-разрешены или авто-запрещены — деплой,git push, деструктивная миграция. Для них используйте вердикт
pending_approval. Вызов удерживается, агент получает ответ «held» с id
подтверждения, и ревьюер разрешает его вне основного канала:
- Создайте правило (например, глоб
deploy.*, вердиктpending_approval). - Удержанный вызов возвращает HTTP 400
firewall_approval_pendingс id подтверждения. - Ревьюер одобряет его из консоли (Developer+) или через подписанный HMAC вебхук-колбэк.
- Агент опрашивает подтверждение, затем повторно отправляет исходный вызов с
одноразовым заголовком
X-OrcaRouter-Firewall-Approval— и шлюз пропускает его этот один раз.
6. Управляйте навыками и MCP-серверами, которые он загружает
Кодинг-агенты подтягивают возможности во время выполнения — community-навыки, свои MCP-серверы. Firewall управляет обоими в шлюзе:- Навыки сканируются в полосу риска с режимом применения (
allow/quarantine/block). Автообнаруженный навык карантинируется — удерживается на подтверждение — пока ревьюер его не очистит. См. Навыки. - MCP-серверы, которые вы регистрируете, диспетчеризуют каждый
tools/callчерез шлюз, который вычисляет каждый на поверхностиmcpдо диспетча. Учётные данные хранятся зашифрованными; health-проба сообщаетok/degraded/down. См. MCP-серверы и Защитите MCP-агента.
7. Проверьте и наблюдайте
Прежде чем полагаться на политику, прогоните её вхолостую. Вкладка Test вычисляет образец вызова инструмента против текущей политики и показывает вердикт, совпавшее правило и причину — ничего не диспетчеризуется, ничего не сохраняется. После запуска в production Firewall → Events / Runs — это запись каждого вычисления, фильтруемая по вердикту, поверхности, инструменту и прогону, а лента аномалий флагирует всплески частоты/стоимости против обученного базиса рабочего пространства,retry_loop и никогда ранее не
виданные пути инструментов.
Резюме
Справочник Firewall
Полная плоскость политик — поверхности, вердикты, разрешение, автономия.
Правила Firewall
Язык сопоставления: глобы, клаузы аргументов, egress, последовательности.
Опасные вызовы инструментов
Угроза, от которой защищает этот рецепт.
Избыточная агентность
Почему сверх-привилегированные агенты — основной риск агента.
Рецепт автономного агента
Ограничьте полностью автономный цикл агента от начала до конца.
Остановите эксфильтрацию
Паттерны egress и «летальной триады» в глубину.
