1. Зачем защищать MCP-агента
Направьте агента на пять MCP-серверов напрямую — и у вас пять границ доверия, пять хранилищ учётных данных и ноль общего журнала аудита.tools/call,
который читает запись клиента, и тот, что запускает shell-команду, выглядят
для модели идентично, а community-сервер может тихо запросить shell.exec и
внешнюю сетевую область при первой же загрузке.
Решение — сделать OrcaRouter единственной узловой точкой, которую пересекает
каждый вызов. Чтобы защитить трафик MCP-агента от начала до конца, вы
маршрутизируете весь MCP-диспетч через MCP-шлюз
Firewall, так что каждый tools/call вычисляется политикой до того, как
достигнет реального сервера, — с оценкой навыков по риску, управлением egress
и зашифрованными в покое учётными данными.
Это рецепт — он сшивает существующие функции в один конкретный проход
защиты. Для полного справочника следуйте по ссылкам в
Firewall, MCP-серверы и
Навыки.
2. Начните с базиса Secure Agents
Прежде чем писать что-либо своё, задайте позицию. В консоли откройте Firewall → Posture и примените уровень автономииbalanced
(уровень автономии, роль
Developer). В одной транзакции это аудирует вызовы инструментов и флагирует
PII, запрещая при этом самые деструктивные действия — вы наблюдаете, прежде
чем широко применять, с отменой в один клик.
Когда ленты Events и Runs выглядят
правильно, переходите к tight: default-deny, запрет деструктивного
shell, запрет SSRF-образного egress, плюс применяются guardrails PII Shield и
Secrets Blocker. Этот единственный переключатель — пол, на котором строится
этот рецепт.
3. Маршрутизируйте каждый tools/call через один MCP-шлюз
Зарегистрируйте каждый MCP-сервер один раз; шлюз агрегирует их инструменты под единым соединением (неймспейс<server>.<tool>) и проводит каждый
tools/call через движок firewall.
Зарегистрируйте сервер из консоли (или REST API, Developer+):
github.create_issue и shell.exec появляются бок о бок под одним
соединением, и каждый диспетч вычисляется до запуска. Заблокированный вызов
возвращается модели как ошибка инструмента (firewall deny: …), а не
падение транспорта, так что агент может адаптироваться.
Прежде чем писать правила против инструментов сервера, прозондируйте
(probe) его, чтобы обнаружить их имена и схемы:
4. Карантинируйте навыки, которые подтягивает агент
MCP-шлюз управляет вызовами; управление навыками управляет возможностями, которые загружает агент. Каждый устанавливаемый навык, свой MCP-сервер или плагин сканируется в полосу риска и режим применения, который накладывается поверх каждого вердикта правила:| Режим | Эффект во время выполнения |
|---|---|
allow | Решают вердикты правил; навык не добавляет ничего. |
quarantine | Всё, что меньше deny, удерживается на pending_approval. |
block | Инструменты навыка принудительно запрещаются. |
5. Запретите SSRF-образный egress
Скомпрометированный или сбитый с толку MCP-инструмент, дотягивающийся до облачных метаданных или интранет-хоста, — это классический путь эксфильтрации. Его покрывают два слоя. Во-первых, шлюз валидирует каждый удалённый MCP-endpoint и его разрешённый dial-IP против SSRF-политики при регистрации и на каждом хопе диспетча — интранет-диапазоны и адрес облачных метаданных отклоняются, перепроверяются, чтобы победить DNS rebinding. Это встроено; вы это не настраиваете. Во-вторых, уровень автономииtight поставляет egress-пресет SSRF,
который запрещает fetch-образные имена инструментов — http_fetch,
web_search, fetch_url, request и их неймспейсные формы <server>.* —
так что инструмент, чья вся работа — «иди извлеки этот URL», останавливается
до дозвона.
Чтобы управлять тем, куда инструменты могут дотягиваться по назначению,
создайте собственное правило egress с deny-списком host/CIDR — это
поверхность для закрепления исходящей досягаемости:
Ни один пресет не поставляет CIDR egress-правил — пресет SSRF сопоставляет
имена инструментов, а не назначения. Напишите deny-список host/CIDR сами,
когда нужен контроль на уровне назначения. См.
egress-списки и
остановите эксфильтрацию.
6. Держите учётные данные серверов зашифрованными
auth_json каждого MCP-сервера шифруется в покое и маскируется при чтении;
шлюз внедряет учётные данные во время диспетча, так что они никогда не
достигают модели или клиента. Поддерживаемые значения auth_mode:
bearer
bearer
{ "token": "…" } — статический bearer-токен, отправляемый как
Authorization: Bearer.oauth
oauth
{ "client_id": "…", "client_secret": "…", "token_url": "…" } — OAuth
client-credentials; шлюз получает и обновляет токен.basic
basic
{ "username": "…", "password": "…" } — HTTP Basic auth.none
none
"" — неаутентифицированный сервер. По умолчанию.status сервера (ok / degraded / down) из
последней пробы
говорит вам, достижим ли он, прежде чем вы на него положитесь.
7. Добавьте контентный guardrail на запросе
Firewall управляет действиями; сочетайте его с Guardrail, чтобы текст, проходящий через вашего MCP-агента, тоже проверялся. Пресет Secrets Blocker ловит учётные данные в запросе до того, как их увидит модель — или любой инструмент, а PII Shield маскирует идентификаторы на входе. Оба включаются с уровнем автономииtight, или привяжите именованный guardrail к ключу ретрансляции агента
через guardrail_id.
8. Проверьте и наблюдайте
Убедитесь, что политика делает то, что вы ожидаете, прежде чем доверять ей, затем следите за лентами:Протестировать вызов инструмента
Прогоните образец
tools/call против вашей политики вхолостую и
посмотрите вердикт, совпавшее правило и причину — ничего не
диспетчеризуется, ничего не логируется.Discovered tools
Каждый инструмент, который видело рабочее пространство, помеченный covered
или gap — пишите правила прямо из реального MCP-трафика.
Events & Runs
Каждый диспетч, его вердикт и поверхность, на которую он попал, свёрнутые
по прогону агента.
Лента аномалий
Всплески частоты/стоимости, циклы повторов и новые пути инструментов
против обученного базиса.
9. Куда дальше
Отравление MCP-инструментов
Модель угроз за карантином и MCP-шлюзом.
Избыточная агентность
Почему default-deny и HITL важны для автономного использования инструментов.
Рецепт автономного агента
Защитите высокоавтономного агента от начала до конца.
Остановите эксфильтрацию
Ограничьте исходящий egress в глубину.
