跳转到主要内容
一个已注册的 MCP 服务器声明它想声明的任何工具——而一个智能体会 乐于调用其中的任何一个。安全的姿态是反过来的:决定你实际需要的 那张短工具列表,恰好允许那些,并拒绝其余的。那就是一个 允许列表(allow-list),而在 OrcaRouter 上你用在 mcp上 评估的 tool_name_glob 规则来构建它。 每一次穿过 MCP 网关tools/call 都在 到达真实服务器之前通过你的 防火墙策略 运行。所以这个允许列表不是建议性的——一次对你没有允许的工具的 调用永不派发。
策略编辑是一个控制台操作。/api/workspace/firewall/* 路由用你的 会话/访问令牌鉴权,不是一个中继 sk-orca-… 密钥。编写规则需要 Developer+ 角色;任何工作区成员(下至 Viewer)都可以读取 策略和已发现工具的信息流。

1. 为什么要为安全的 mcp 工具做默认拒绝的允许列表

一个拒绝列表——“拦截危险的工具”——在一个服务器添加一个新工具、 重命名一个,或你连接第二个服务器的那一刻就失效。危险工具的集合是 开放式的;你打算使用的集合是小而已知的。一个允许列表把默认翻转 过来,因此未知被拒绝,而不是被准入:
  • 新工具默认被拒绝。 一个在你连接之后长出一个 delete_repo 工具的服务器,在你把它添加到允许列表之前无法被调用。
  • 范围按服务器划分。 <server>.<tool> 命名空间让你能允许 github.create_issue,同时拒绝 github.* 下的其他一切。
  • 一个咽喉点。 同一条策略治理网关后面捆绑的服务器和每一个 BYO 服务器,因此有一个地方可以读取允许列表。
允许列表与 观察模式 天然配对:先把它 打开,让真实流量填充 已发现工具 信息流,然后把你看到的 工具提升为明确的 allow 规则,并把默认翻转为 deny。

2. 两个部件

一个允许列表是一个 default_verdict 加一组有序的规则。

default_verdict: deny

策略对任何没有规则匹配的 tools/call 的回退。把它设为 deny, 任何你没有明确允许的东西都被拦截。(它也接受 allowaudit——audit 是默认。)

allow 规则

每个工具(或每个 glob)一条规则。每条携带一个 tool_name_glob 和一个 allow 判定。一次匹配 glob 的 tools/call 解析为 allow 并派发;其余一切落到 deny 默认。
glob 对照带命名空间的工具名匹配——github.create_issueshell.exec* 匹配任何工具(少用它;一条带 * 的 allow 规则会 撤销整个允许列表)。一个前导的 <server>. 把 glob 限定到一个服务器。

3. 一个具体例子

你连接了一个 github 服务器,而你只想让智能体读取开启 issue ——绝不删除或管理任何东西。在控制台,打开 Firewall → Policies, 把策略的默认判定设为 deny,并添加两条 allow 规则:
顺序tool_name_glob判定
1github.create_issueallow
2github.list_issuesallow
那就是整个允许列表。默认在 deny
  • github.create_issue → 匹配规则 1 → allow,派发。
  • github.delete_repo → 什么也不匹配 → 默认 deny
一次被拒绝的 MCP 调用作为一个工具错误firewall deny: …)回到 模型——与任何失败工具返回的形态相同——因此智能体能适应而不是崩溃。 (在 inbound 面上,一次 deny 反而是一个带错误码 firewall_blockedHTTP 400。)
规则是有序的并自上而下评估。不要把一条宽泛的 tool_name_glob: github.* allow 放在你具体的 deny 规则之上—— 第一个匹配获胜,而那个通配符会准入你本想排除的那些工具。拿不准时, 保持允许列表狭窄,并依赖 deny 默认而不是通配符。

4. 用参数收紧

一个在允许列表上的工具名仍然可能被用坏参数调用。通过给规则添加 一个 args_match 子句(JSONPath + 一个像 eqcontainsregexincidr_match 的运算符),或者通过在 allow 之上叠加一条针对 特定参数形状的 deny 规则,来进一步收窄——例如,允许 github.create_issue 但在目标 repo 不在一个批准列表上时 deny 它。 完整的运算符集参见 防火墙规则参考
sanitize 在转发前脱敏一次工具调用的参数——它绝不触及一个工具 返回的东西。要修剪返回的内容,那是一个不同的控制;参见 净化工具输出

5. 安全地推出它

在生产中翻转一个整服务器的默认拒绝,你就有风险破坏一个悄悄依赖 某个你忘了的工具的智能体。两个设置给它降险:
一个按策略的标志,把执行判定降级为 audit。你的 deny 默认和 deny 规则记录 [shadow] would deny … 而不是拦截,因此你可以在 它咬人之前对照真实流量验证允许列表。在 执行模式 中阅读更多。
一个工作区设置,把每一次未覆盖的调用记录为 已发现工具 信息流中的一个缺口。 在你编写允许列表之前运行它,以确切了解你的智能体调用了哪些工具, 然后把每一个提升为一条明确的 allow 规则。
一旦 shadow 日志干净——没有一次合法的调用本会被拒绝——清除 shadow_mode,允许列表就执行。

6. 验证它有效

执行之后,确认被拒绝的工具确实被拒绝:
  • **Dry-run(试运行)**一次 tools/call 对照策略(Developer+),以 看到判定以及哪条规则——或默认——产生了它,而不发送真实流量。 传入一个工具名、面和样本参数;引擎评估它们并返回判定轨迹而不 记录一个事件。
  • 观察事件。 每一次被拦截的调用记录一个 Developer+ 可以在 控制台读取的防火墙事件; 审计事件 页涵盖该信息流及其字段。
不愿手工编写每条规则?tight 自治预设为你写一个默认拒绝的策略 (外加针对破坏性 shell 工具和 fetch 形状工具名的 deny 规则),然后 你再加回你需要的具体工具。关于每个自治级别安装什么,参见 执行模式

相关

连接一个 MCP 服务器

在你能允许列表它的工具之前注册一个服务器。

防火墙:MCP 服务器

网关的运行时行为和每次调用的判定。

防火墙规则参考

完整的规则 DSL——globs、args_match、egress、sanitize。

危险的工具调用

一个允许列表为遏制而生的威胁。

出站限制

治理一个被允许的工具可以触及哪里。

防护栏 vs. 防火墙

何时取用内容策略 vs. 工具策略。