deny、sanitize、[EMAIL]。本页是这些词的查找表:每一个意味着什么、
它对调用做什么,以及去哪里看完整的机制。在你编写规则或分诊事件信息流时,
把它开着。
两个控制平面产生两套词汇。防火墙 治理工具动作
并发出一个判定(verdict)。防护栏 筛查提示词
和响应文本并发出一个动作(action),外加在一次脱敏时一个类型化的
脱敏标签。它们从不共用一个词——一个防护栏从不说 deny,一个防火墙
从不说 mask。
这是一份参考索引,而非操作指南。关于每个控制背后的使用场景,参见
防护栏 vs 防火墙;关于
HTTP 错误体,参见 安全错误码。
1. 防火墙判定词汇表
一条防火墙规则(或策略的default_verdict)会把每一次工具调用解析为这六个
判定中恰好一个。引擎按优先级顺序遍历规则,首个匹配生效(first match
wins),如果没有任何东西匹配则回退到默认值。
allow —— 放行调用
allow —— 放行调用
调用进行到工具。仍作为一个防火墙事件被记录,因此它会出现在 Runs 和
事件信息流里。这是你对一个智能体被明确信任去使用的工具所想要的。
audit —— 放行,但记录以供审查
audit —— 放行,但记录以供审查
与
allow 相同的流量,但被标记为你想观察的东西。它是推荐的
default_verdict:观察一切,不拦截任何东西,直到你的规则被调优好。
balanced 自治级别把 PII Shield 防护栏作为 flag-only(audit)发布,
因此 PII 被记录而不挂起调用。deny —— 拦截调用
deny —— 拦截调用
调用永远到不了工具。在
inbound 执行面上这返回 HTTP 400
firewall_blocked;通过 MCP 网关它作为一个工具错误
(firewall deny: <reason>)回来,这样模型能反应而不是崩溃。标记为
skip-retry。不消耗模型 token。sanitize —— 脱敏参数,转发清理后的调用
sanitize —— 脱敏参数,转发清理后的调用
用一个
[redacted:<preset>] 令牌替换工具调用参数中匹配的子串
(密钥、PII),然后携带清理后的参数转发调用。它只脱敏参数——绝不脱敏
一个工具返回的内容。在 inbound 执行面上,此时还没有调用时参数,
sanitize 会升级为一个 deny。pending_approval —— 为人工挂起
pending_approval —— 为人工挂起
调用被入队以供审查,智能体得到一个携带审批 id 的已挂起响应
(HTTP 400
firewall_approval_pending)。一名审查者在控制台或经由
一个 HMAC webhook 回调解决它;智能体轮询该 id 并携带一次性审批头重新
提交一次。参见 人工审批。cap_cost —— 一旦运行超支就拒绝
cap_cost —— 一旦运行超支就拒绝
作为一条带逐规则分(cents)上限的规则编写。当智能体运行在预算内时它
解析为
allow,一旦累积花费越过上限就解析为 deny——因此一个事件显示
allow 或 deny,而不是字面词 cap_cost。失控循环的断路器。默认判定
default_verdict 只接受三个非交互式判定:
| 取值 | 当没有规则匹配时的含义 |
|---|---|
allow | 静默放行未覆盖的工具调用。 |
audit | 放行但记录——默认值。 |
deny | 拦截任何没有规则明确允许的内容(默认拒绝姿态)。 |
tight 自治级别设置 default_verdict: deny;balanced 和出厂默认值使用
audit。
2. 防护栏动作
一条防护栏规则触发五个动作之一。它们是判定的文本平面对等物——而一条 防护栏规则从不产生一个防火墙判定。| 动作 | 它做什么 | 配额 |
|---|---|---|
block | 用 HTTP 400 guardrail_blocked 拒绝整个请求。 | 无——输入拦截在计量之前触发;输出拦截退回。 |
mask | 把每个匹配脱敏为一个类型化标签(见 §3)并转发清理后的文本。 | 正常——调用照常进行。 |
flag | 仅记录。记录一条匹配;不改变流量的任何方面。 | 正常。 |
annotate | 非阻塞。给请求附加一条人类可读的备注(作为安全通知注入上游),不脱敏也不拦截文本。 | 正常。 |
spotlight | 非阻塞。把匹配到的(不可信)文本用分隔符包裹起来,并告诉模型把这个被分隔的区域当作数据、绝不当作指令——提示注入的 “spotlighting” 防御。 | 正常。 |
pii 规则可以用 entity_actions 对不同实体应用不同动作——从一条规则
里 mask 邮箱和电话,但对 credit_card 和 ssn 执行 block。键必须是规则上
启用的一个实体;值必须是 block / mask / flag / annotate。
3. 脱敏标签词汇表
在一个mask 动作上,每个匹配到的实体被就地替换为一个类型化标签——
[<UPPERCASE_ENTITY_NAME>]——这样模型(输入阶段)或调用方(输出阶段)就
看到数据的形状而非其值。脱敏在两个阶段上都运行,包括流式响应:一个
token 感知的流式扫描器会在匹配跨越分块边界的内容到达客户端之前对其脱敏。
| 实体 | 标签 |
|---|---|
email | [EMAIL] |
phone | [PHONE] |
credit_card | [CREDIT_CARD] |
ssn | [SSN] |
ip | [IP] |
iban | [IBAN] |
mac_address | [MAC_ADDRESS] |
jwt | [JWT] |
aws_access_key | [AWS_ACCESS_KEY] |
api_key_openai | [API_KEY_OPENAI] |
bitcoin_address | [BITCOIN_ADDRESS] |
| 实体 | 标签 | 区域 |
|---|---|---|
jp_mynumber | [JP_MYNUMBER] | 日本 |
kr_rrn | [KR_RRN] | 韩国 |
cn_resident_id | [CN_RESIDENT_ID] | 中国 |
自定义实体遵循同样的约定。一个名为
employee_id 的自定义实体脱敏为
[EMPLOYEE_ID],除非你设置一个显式的 mask_with 替换。每条规则最多 25 个
自定义实体,每个都是一个 RE2 正则,附一个可选的 luhn 校验和。参见
PII 检测。4. 一个完整示例
一次db.query 工具调用,从上读到下,触及两套词汇:
sanitize 清理了工具参数;防护栏 mask 清理了提示词文本;
[EMAIL] 标签就是模型在那个地址位置上看到的东西。同一个请求,三个不同的
层,三个出自本词汇表的词。
5. 你会与判定一同看到的姿态词
这些不是判定或动作,但它们决定一个判定究竟是否被执行——所以它们出现在 同样的事件和设置视图里。| 词 | 平面 | 含义 |
|---|---|---|
| 影子模式(Shadow mode) | 防火墙 | 逐策略标志。把每个执行性判定降级为 audit,原因前缀 [shadow] would …。 |
| 观察模式(Observe mode) | 防火墙 | 工作区设置。当没有策略解析出来时,放行调用但记录为一个覆盖缺口(Discovered tools)。 |
| 执行(Enforce) | 防火墙 | 影子模式关闭 + 附加了一条策略:判定生效。 |
| 故障开放(Fail-open) | 防护栏 | 高级规则(llm_judge、grounding、external)的默认值——一次超时被观察,请求继续。可逐规则翻转为 fail-closed。 |
| Log raw content | 防护栏 | 默认关闭。关闭时,一条匹配记录一条规则触发了,但不记录匹配的子串。 |
6. 每个词在哪里被定义
7. 延伸阅读
为什么这次被拦下了?
把一次被拒绝的调用追溯到拦下它的确切规则和判定。
执行模式
audit、shadow、observe 和 enforce 如何关联——以及如何安全地上线。
防护栏 vs 防火墙
哪个平面拥有哪个决策,以及一个请求为什么能同时穿过两者。
危险的工具调用
deny 和 sanitize 判定为之而生、要拦截的那个威胁。