http_fetch、web_search 或任何打开一个出站连接的工具
时,目的地是你最需要治理的部分。一个能触及 169.254.169.254 的困惑或被
劫持的智能体会读取你的云凭据;一个能向攻击者主机 POST 的智能体会外泄你的
数据。智能体 egress 控制治理那个目的地——你在防火墙的 egress 执行面
上编写一条 host/CIDR 白名单/黑名单规则,把它绑定到一个密钥,网关就会在
调用发出之前检查一个智能体工具报告的每一个出站目的地。
这是一个聚焦的用例页面。关于完整的规则语法和判定语义参见
规则 schema 与
判定;关于 egress 在其他执行点中的位置
参见 执行面。
1. egress 执行面上的智能体 egress 控制
在防火墙的四个 执行面 中,egress 是那个
看到一个工具报告的出站网络目的地的执行面——一个主机、一个 IP 字面量,
或一个 CIDR。一条钉在 stage: egress 上的规则匹配那个目的地,而非工具名
或它的参数,这使它成为 SSRF 与数据外泄的控制:它回答这个智能体能触及
哪里,独立于哪个工具做了触及。
Egress 是目的地限定,而非工具拦截。要彻底阻止一个工具存在,在 inbound
执行面上按名称拒绝它(拦截工具)。
Egress 控制假定该工具可能正当地抓取——它只是约束抓取到哪里。
2. 一个示例:拒绝 SSRF 目的地
标准的 egress 规则拒绝云元数据端点和私有 RFC-1918 范围——一个 fetch 形态 工具永远不应该触及的目的地。在你的工作区控制台中,打开一条 策略 并添加一条stage 为 egress、
判定为 deny、带有一个 egress 列表的规则:
egress_json 是一个携带 host/CIDR 列表的 JSON 编码字符串——解码后是
{"deny": [...], "allow": [...]}。每个条目以一个 CIDR、一个 IP
字面量或一个大小写不敏感的主机名进行匹配。对于一个 deny 判定,
deny 列表是范围内集合(该规则拦截的目的地),而 allow 列表从其中划出
例外——所以上面那条规则拦截那四个范围,但即便 api.openai.com 曾解析进
其中之一也放它通过。当一个目的地是一个主机名而非一个字面 IP,且你的列表
携带 IP/CIDR 条目时,该名称会被尽力解析并对其地址重新检查,所以
metadata.internal 仍会匹配一个 169.254.0.0/16 拒绝,即便它没被按名称
列出。
3. 你来编写 CIDR 规则——没有任何预设附带它们
tight 自治级别 及其 block_ssrf_egress
预设确实附带的,是一组针对 fetch 形态工具名的拒绝——http_fetch、
web_search、fetch_url、request,外加它们的 <server>.<tool> MCP
变体。那是一种直接的姿态:它直接拒绝那些 egress 形态的工具,而非限定它们
能触及哪里。当一个智能体根本无权做网络调用时使用它;当它确实抓取但只
从一个批准的主机集合抓取时,使用一条目的地规则(§2)。
| 做法 | 它约束什么 | 编写者 |
|---|---|---|
tight SSRF 预设 | Fetch 形态工具名(拒绝它们) | 内置 |
| Egress CIDR/host 规则 | 一次 fetch 可能触及的目的地 | 你 |
4. 一次被拦截的 egress 是什么样
当一个目的地匹配一条执行性 egress 规则时,该调用在离开网关之前被拒绝,而 该评估被记录为一个执行面为egress、判定为 deny 的防火墙事件。在
影子模式 下,该拒绝被降级为 audit,
原因前缀为 [shadow] would …,所以你能在执行之前对照真实流量准确衡量一条
规则本来会拦截哪些目的地。
一个格式不正确或无条目的 egress 列表被保守对待:一条执行性
deny 规则
仍然设门(一个笔误不能静默地让它停止拦截),但一条带有损坏列表的 allow
规则不会触发——否则一个键入错误的白名单会变成全部允许并遮蔽一个默认
拒绝。新规则在保存时被验证(该列表必须声明至少一个 allow 或 deny 条目),
所以这只保护遗留行。5. 从真实流量编写,然后上线
看到你实际触及的目的地
看到你实际触及的目的地
在依赖一个判定之前 dry-run 它
在依赖一个判定之前 dry-run 它
控制台 Test 标签对一个样本
tool_name + 执行面(+ 可选参数)
dry-run 一条策略,并返回判定、匹配到的规则和原因——不派发任何内容。它
确认一次调用解析到哪条规则;要对照真实目的地确认你的 CIDR/host
计算,使用下面的影子模式(Test 载荷不携带一个目的地,所以 egress 列表
匹配在实时 egress 流量上被检验)。参见
测试规则。6. 绑定策略以及谁能编辑它
一条策略在某个密钥解析到它之前什么都不做。在控制台中通过在 密钥 上设置firewall_policy_id 来
绑定,或将该策略设为工作区默认。解析是:密钥绑定的策略(当它存在且已启用
时),否则工作区默认值。
所有 egress 规则配置都在控制台中于你的会话下运行
(/api/workspace/firewall/*):
| 操作 | 角色 |
|---|---|
| 读取策略、预设、discovered tools、自治 Simulate | Member |
| 创建 / 编辑 / 删除 egress 规则和策略 | Developer+ |
Dry-run Test 端点(POST /test) | Developer+ |
| 读取事件日志和运行汇总 | Developer+ |
相关
数据外泄
egress 控制应对的威胁。
执行面
四个执行面,以及 egress 的位置。
判定
deny、audit 和 allow 在线上做什么。
拦截工具
按名称而非按目的地拒绝一个 fetch 工具。
危险工具调用
更广的风险类别。
防火墙参考
完整的规则 + 匹配参考,包括 egress 列表。
