Перейти к основному содержанию
Современные агенты устанавливают возможности на лету: навык из реестра, community MCP-сервер, плагин из URL. Каждый из них поставляет манифест, набор инструментов и набор запрашиваемых разрешений — и каждый является риском цепочки поставок в тот момент, когда агент его загружает. Навык, который тихо просит shell.exec и внешнюю сетевую область, — это ровно то, что должно быть проверено до запуска, а не обнаружено в инциденте. Управление Навыками (Skills) Firewall — это и есть такая проверка. Каждая устанавливаемая возможность регистрируется как запись в рамках рабочего пространства, сканируется детерминированным движком риска, получает полосу риска и режим применения, и — во время выполнения — этот режим накладывается поверх вердиктов правил firewall.

1. Что такое «навык» здесь

Запись навыка — это одна устанавливаемая возможность агента. Единая модель обобщает три вида, так что одна плоскость сканирования, оценки и подтверждения управляет всем, что агент устанавливает сам:
ВидЧто это
skillУпакованная возможность — манифест плюс набор инструментов и фрагмент системного промпта.
mcp_serverBring-your-own MCP-сервер, зарегистрированный как управляемый артефакт.
pluginРасширение в стиле плагина.
Каждая запись также имеет источникbuiltin, registry, private, byo_mcp или auto_detected — который питает оценку доверия.

2. Сканер

При регистрации (и по требованию) сканер выполняет набор детерминированных, не зависящих от внешнего проходов по манифесту и объявленным областям. Каждый проход выдаёт findings с серьёзностью info, warn или error:
ПроходФлагируетСерьёзность
prompt_injectionТекст манифеста, пытающийся переопределить инструкции (ignore previous instructions, you are now, ведущий system:…).warn
tool_creepИмена инструментов, которые манифест использует, но не объявил в allowed_tools.error
network_egressHTTP(S)-хосты в манифесте, не одобренные в сетевых областях навыка.warn
fs_write_unsafeФайловая область в режиме записи на пути вне /tmp (защищено от traversal).error
data_scopeЧувствительные области данных (pii, financial, customer).info
unsignedНавык registry без подписи.warn
Findings сворачиваются в вердикт сканирования: любой errorblocked; иначе любой warnflagged; иначе clean.

3. Оценка риска и полосы

Те же findings питают детерминированную оценку риска (0–100, аддитивную с потолками по категориям). Самые тяжёлые вкладчики — опасные возможности:
ВозможностьВес
Выполнение shell+30
Eval произвольного кода+30
Запись в файловую систему вне /tmp+25
Чтение секретов+25
Внешний сетевой egress+20
Findings tool-creep, prompt-injection, egress и data-scope добавляются сверху (каждый с потолком), неподписанный registry-навык добавляет +15, а митигации вычитают — подписанный навык это −10, манифест без error-findings −5. Оценка отображается в полосу:
ПолосаОценка
low0–25
medium26–50
high51–75
critical76–100
Эти веса закреплены тестом drift-guard — они не двигаются без намеренного изменения спецификации, так что полоса означает одно и то же во всех рабочих пространствах.

4. Режим применения

Полоса и вердикт вместе выводят режим применения — что firewall на самом деле делает, когда вызывается инструмент, принадлежащий этому навыку:
РежимЭффект во время выполнения
allowНавык не навязывает ничего своего; решают вердикты правил.
quarantineЭскалировать всё, что меньше deny, до pending_approval — инструменты навыка запускаются только после одобрения человеком.
blockПринудительно дать deny на инструментах навыка.
Вывод берёт более строгий из двух сигналов: полосу (low/medium → allow, high → quarantine, critical → block) и вердикт сканирования (blocked → block, flagged → quarantine). Одиночный error-finding, делающий вердикт blocked, поставит в карантин или заблокирует, даже когда числовая полоса low — осторожное направление. Оператор может задать режим явно; при пересканировании режим только когда-либо затягивается туже, никогда не ослабляя block или quarantine, которые вы установили.

5. Сигналы доверия

Два сигнала помимо статического сканирования информируют, как трактуется навык:
  • Подписанные издатели. Навык, несущий подпись от доверенного издателя, трактуется как более надёжный (митигация подписи понижает его оценку риска); неподписанный registry-навык штрафуется. Вы управляете тем, каким издателям доверяет ваше рабочее пространство.
  • Репутация ресурса. Положение навыка может корректироваться его живым поведением со временем — отказы и аномалии повышают его риск, чистые серии понижают — так что артефакт, который плохо ведёт себя в production, дрейфует к карантину, даже если его манифест отсканировался чисто.

6. Авто-детектированные возможности

Сканер запускается не только когда вы регистрируете что-то вручную. Когда агент устанавливает возможность сам и её инструменты впервые пересекают шлюз, Firewall авто-детектирует её (вне горячего пути, асинхронно), синтезирует манифест из того, что наблюдал, и прогоняет то же сканирование, оценку и вывод режима — с source = auto_detected.
Авто-детектированные возможности находятся в карантине до проверки. Всё авто-детектированное, что иначе разрешилось бы в allow, опускается до quarantinecritical остаётся block), пока человек это не проверит. Возможность, которую никто не одобрял, не получает бесплатного пропуска лишь потому, что отсканировалась безобидно — она запускается только после того, как вы на неё посмотрели.

7. Применение во время выполнения

Когда вызов инструмента достигает движка firewall, он атрибутируется навыку-владельцу, затем режим навыка накладывается поверх вердикта правила:
  1. Атрибуция. Вызов сопоставляется навыку по его объявленным allowed_tools, затем по префиксу пространства имён mcp_server, затем по применяющемуся наиболее ограничительному запасному варианту в масштабе рабочего пространства.
  2. Вердикт правила. Правила политики выполняются как обычно — и skill_name_glob правила позволяет ограничить правило конкретными навыками.
  3. Переопределение режимом. Навык block принудительно даёт deny; навык quarantine эскалирует всё, что меньше deny, до pending_approval; allow оставляет вердикт нетронутым.
Атрибуция навыка fail closed. Если инструмент не удаётся атрибутировать (ошибка БД без кэша или необъявленный инструмент под курируемым источником), вызов удерживается для проверки, а не разрешается. И режим навыка независим от shadow-режима — карантинный или заблокированный навык всё равно применяется, даже пока политика в shadow-развёртывании.

8. Жизненный цикл

  • RegisterPOST /skills валидирует и сканирует синхронно, возвращая навык плюс его findings и вердикт. Режим выводится (или ваш явный режим соблюдается).
  • Update — пересканирует новый манифест; режим затягивается туже при ухудшившемся сканировании, но никогда не ослабляет ваш хранимый block/quarantine.
  • RescanPOST /skills/:id/rescan перезапускает сканирование; если вердикт заново деградирует до flagged или blocked, он выдаёт событие firewall, так что дрейф появляется в вашей ленте.
  • Delete — soft-delete и освобождает слот имени для перерегистрации.

API-справочник

В рамках рабочего пространства; чтения списка открыты любому участнику (и редактируют поля, несущие секреты), всё остальное требует Developer+.
Метод и путьРольНазначение
GET /api/workspace/firewall/skillsMemberСписок навыков (отредактированный; фильтр по ?kind= и ?source=).
GET /api/workspace/firewall/skills/:idDeveloper+Полная запись навыка.
POST /api/workspace/firewall/skillsDeveloper+Регистрация + сканирование (409 при дублирующемся имени).
PUT /api/workspace/firewall/skills/:idDeveloper+Обновление + пересканирование.
POST /api/workspace/firewall/skills/:id/rescanDeveloper+Пересканирование; выдаёт событие при деградации.
DELETE /api/workspace/firewall/skills/:idDeveloper+Soft-delete.
Регистрация/обновление/пересканирование возвращает:
{
  "skill": { "id": 7, "name": "creepy", "risk_band": "high", "mode": "quarantine", "...": "..." },
  "findings": [
    { "kind": "tool_creep", "target": "shell.exec", "severity": "error" }
  ],
  "scan_verdict": "blocked"
}
Имена уникальны в рамках рабочего пространства через все виды — навык skill с именем github и mcp_server с именем github сталкиваются в одном рабочем пространстве. Выбирайте различимые имена для каждого артефакта.

FAQ

Правила шлюзуют вызовы инструментов по имени и аргументам. Навыки шлюзуют возможности, которые загружает агент — пакет, его манифест и запрашиваемые разрешения — до того, как запустится любой из его инструментов. Режим навыка затем накладывается поверх того, что решают правила, так что они компонуются: правило может allow http.fetch в целом, пока карантинный навык, владеющий им, всё равно удерживается.
Несколько вещей. Детектирование tool-creep флагирует инструменты, используемые, но не объявленные; авто-детектирование пересканирует из того, что реально пересекло шлюз, а не из заявленного манифеста; режим затягивается туже (а не свободнее) при пересканировании; репутация ресурса дрейфует плохо ведущий себя артефакт к карантину со временем; и атрибуция fail closed, когда инструмент не удаётся привязать к объявленному навыку.
Нет. Зарегистрируйте те, что хотите предварительно одобрить; остальные авто-детектируются при первом использовании и помещаются в карантин, пока вы их не проверите. Включите observe-режим, чтобы выявить всё, что устанавливает агент, не блокируя, затем затягивайте из реальных данных.

Смотрите также

Хотите глубже разобраться в безопасности агентов? Руководства «Защитите агентов — Zero Trust» встраивают эту функцию в рабочий процесс нулевого доверия.

Базовый уровень Secure Agents

Примените позицию нулевого доверия к каждой возможности агента одним переключателем.

Guardrails для агентов

Guardrails, созданные для автономных агентов, использующих инструменты.