1. 两族路由
控制台 —— 配置
/api/workspace/firewall/*。由你的会话 / 访问令牌(UserAuth)认证,
限定到你的活跃工作区。编写策略、读取事件、注册 MCP 服务器、解决审批。
每个动作都受角色门控。网关 —— 执行
/api/v1/firewall/*。由一个 firewall-gateway-scoped 密钥(一个设置了
is_firewall_gateway 的密钥)认证。这是你的智能体或 MCP 客户端在运行时
调用的机器对机器表面。一个普通中继密钥在这里会得到 403。控制台路由从不接受
sk-orca-… 中继密钥,网关路由从不接受会话令牌。把它们
弄混是首次接通防火墙时最常见的 401/403。唯一能用在 /v1/firewall/*
调用上的 sk-orca-… 密钥,是一个以 is_firewall_gateway 开启而铸造的密钥
——参见 范围、密钥与策略。2. 角色一览
控制台路由会解析你的工作区角色并据此门控。不携带工具调用来源(provenance) 的读取对任何成员开放;写入以及任何暴露工具调用参数的内容需要 Developer+。| 角色 | 能做什么 |
|---|---|
| Viewer / 成员 | 读取设置、策略、预设、已发现工具、simulate、异常。 |
| Developer+ | 以上全部,外加每一项写入、events/runs/trace 表面,以及 test dry-run。 |
| Admin+ | 额外地,在一个密钥上设置 is_firewall_gateway 标志并读取一个网关密钥的明文。 |
3. 从控制台配置一条策略
控制台路由是你编写和检视策略的方式。你在仪表板 UI 里配置一切——这些就是 它调用的同一批端点。策略与设置
| 方法与路径 | 角色 | 用途 |
|---|---|---|
GET /api/workspace/firewall/settings | Member | 观察模式 + 计数。 |
PUT /api/workspace/firewall/settings | Developer+ | 更新工作区防火墙设置。 |
GET /api/workspace/firewall/policies | Member | 列出策略。 |
GET /api/workspace/firewall/policies/:id | Member | 单条策略详情。 |
POST /api/workspace/firewall/policies | Developer+ | 创建一条策略。 |
PUT /api/workspace/firewall/policies | Developer+ | 更新一条策略。 |
DELETE /api/workspace/firewall/policies/:id | Developer+ | 删除一条策略。 |
POST /api/workspace/firewall/rules | Developer+ | 添加一条规则。 |
PUT /api/workspace/firewall/rules | Developer+ | 更新一条规则。 |
DELETE /api/workspace/firewall/rules/:id | Developer+ | 删除一条规则。 |
姿态、预设与沙箱
| 方法与路径 | 角色 | 用途 |
|---|---|---|
GET /api/workspace/firewall/presets | Member | 内置规则预设。 |
GET /api/workspace/firewall/templates | Member | 用例模板库。 |
POST /api/workspace/firewall/templates/apply | Developer+ | 应用一个模板 → 一条策略 + 它的规则。 |
POST /api/workspace/firewall/autonomy | Developer+ | 应用一个自治级别(tight / balanced / permissive)。 |
POST /api/workspace/firewall/autonomy/undo/:audit_id | Developer+ | 从审计快照一键撤销。 |
GET /api/workspace/firewall/simulate | Member | 某个级别会拦截什么(?level=)。 |
POST /api/workspace/firewall/test | Developer+ | 针对一个样本调用对一条策略做 dry-run。 |
可观测性
| 方法与路径 | 角色 | 用途 |
|---|---|---|
GET /api/workspace/firewall/discovered-tools | Member | 见过的工具,标记 covered / gap。 |
GET /api/workspace/firewall/events | Developer+ | 列出防火墙事件(可过滤)。 |
GET /api/workspace/firewall/events/by-request/:request_id | Developer+ | 一个请求的事件。 |
GET /api/workspace/firewall/events/aggregate | Developer+ | 运行 / 会话汇总。 |
GET /api/workspace/firewall/trace/by-run | Developer+ | 一次运行的 trace 节点(?run_id=)。 |
GET /api/workspace/firewall/anomalies | Member | 异常信息流。 |
POST /api/workspace/firewall/anomalies/snooze | Developer+ | 贪睡信息流(≤ 7 天)。 |
MCP 服务器
在单一受审计的网关后注册你的智能体所触达的 Model Context Protocol 服务器。 凭据加密存储并在读取时被脱敏。| 方法与路径 | 角色 | 用途 |
|---|---|---|
GET /api/workspace/firewall/mcp_servers | Member | 列出已注册的服务器。 |
GET /api/workspace/firewall/mcp_servers/:id | Member | 服务器详情。 |
POST /api/workspace/firewall/mcp_servers | Developer+ | 注册一个服务器(name 重复时返回 409)。 |
PUT /api/workspace/firewall/mcp_servers | Developer+ | 更新一个服务器。 |
DELETE /api/workspace/firewall/mcp_servers/:id | Developer+ | 移除一个服务器。 |
POST /api/workspace/firewall/mcp_servers/:id/probe | Developer+ | 可达性 + tools/list 握手。 |
name、一个 endpoint、一个 auth_mode
(none / bearer / oauth / basic),以及一个健康 status
(ok / degraded / down)。完整的生命周期与技能隔离,参见
防火墙 MCP。
4. 在网关上执行
这些运行在一个 firewall-gateway-scoped 密钥上,而非你的会话。它们就是你的 智能体循环或 MCP 客户端在运行时调用的对象。| 方法与路径 | 用途 |
|---|---|
POST /api/v1/firewall/evaluate | 对一次工具调用做派发前判定。 |
POST /api/v1/firewall/evaluate_plan | 对一个多步计划做执行前检查。 |
ANY /api/v1/firewall/mcp | 统一的 MCP 网关端点。 |
GET /api/v1/firewall/mcp_servers | 枚举工作区已注册的服务器。 |
GET /api/v1/firewall/approvals/:id | 轮询一次被挂起调用的审批状态。 |
POST /api/v1/firewall/approvals/:id/callback | HMAC 签名的审批回调。 |
一个具体例子:评估一次工具调用
在你的智能体派发一个工具之前,向网关请求一个判定。传入 firewall-gateway-scoped 密钥——而非你的中继sk-orca-… 密钥:
allow、audit、deny、sanitize 或 pending_approval。
在 deny 上你跳过该调用并向模型浮现原因;在 sanitize 上你转发网关交回的
清理后的参数(sanitize 只脱敏工具调用参数——绝不脱敏一个工具返回
的内容);在 pending_approval 上你进入下面的审批环路。
5. 审批握手(HITL)
一个pending_approval 判定为人工挂起这次调用。挂起期间的 HTTP 错误是
firewall_approval_pending。清除它是一个跨两族路由的三步环路:
一名审查者解决这次挂起
从控制台(
PATCH /api/workspace/firewall/approvals/:id,Developer+),
或者你自己的系统向 POST /api/v1/firewall/approvals/:id/callback 发出
一个 HMAC 签名的回调。该回调就地验证 HMAC——不接受其他任何认证。6. 一次拦截是什么样子
| 结果 | HTTP | 错误码 |
|---|---|---|
| 被拒绝的工具调用(inbound 执行面) | 400 | firewall_blocked |
| 经由 MCP 网关被拒绝 | 工具错误 | firewall deny: <reason> |
| 被挂起等待审批 | 400 | firewall_approval_pending |
firewall_blocked 被标记为 skip-retry——重新运行那个完全相同的调用
只会再次被拦,因此一个会重试的客户端应当退避而不是猛击。完整的错误码
列表在 错误码。
7. 相关参考
防护栏 API
内容策略的对等物——文本平面的
/api/guardrail/* 路由。判定词汇表
每一个判定,以及它对一次调用做什么。
Glob 与 JSONPath
tool_name_glob 和 args_match 背后的匹配语法。合规 API
合规包、签名报告、数据居住与擦除。
8. FAQ
为什么我的中继密钥在 /api/v1/firewall/evaluate 上得到 403?
为什么我的中继密钥在 /api/v1/firewall/evaluate 上得到 403?
网关路由需要一个 firewall-gateway-scoped 密钥——一个以
is_firewall_gateway 开启而铸造的密钥(一个 Admin+ 动作)。一个普通
中继密钥,即便有效,也会得到 403。为你的智能体运行时铸造一个专用的
网关密钥。一名 viewer 能读取防火墙事件吗?
一名 viewer 能读取防火墙事件吗?
不能。
events、events/aggregate 和 trace 路由是 Developer+,因为
这些记录携带工具调用参数来源。Viewer 可以读取设置、策略、预设、已发现
工具、simulate,以及异常信息流。我在哪里解决一次被挂起的审批——控制台还是网关?
我在哪里解决一次被挂起的审批——控制台还是网关?
都可以。人工在控制台里经由
PATCH /api/workspace/firewall/approvals/:id(Developer+)解决它,
或者你自己的系统向 POST /api/v1/firewall/approvals/:id/callback 发出
一个 HMAC 签名的决策。无论哪条路径解决了它,智能体都轮询
GET /api/v1/firewall/approvals/:id。sanitize 会清理一个工具返回的内容吗?
sanitize 会清理一个工具返回的内容吗?
不会。一个
sanitize 判定只脱敏工具调用参数——绝不脱敏一个工具
返回的内容。在 inbound 执行面上,此时还没有调用时参数,sanitize 会
升级为一次拦截。参见 防火墙规则。关于这些控制如何与防护栏以及网关其余部分组合,参见 保护 AI 智能体 和 防护栏 vs 防火墙。
