安全护栏行为
安全护栏会在 AISIX 的请求路径中加入内容策略检查,帮助运维人员控制哪些内容可以到达上游模型、哪些响应可以返回给调用方,以及策略调优期间应该采用多严格的执行方式。
AISIX 支持两类安全护栏:
- 内置关键词安全护栏会在网关内部检查字面字符串或正则表达式。适用于不希望调用外部审核服务的本地阻断列表。
- 远程安全护栏会将提取出的内容发送到外部服务,再应用 AWS Bedrock Guardrails、Azure AI Content Safety 或阿里云 AI 安全护栏返回的判定结果。
无论安全护栏在 AISIX 内部执行,还是调用远程审核服务,请求路径上的行为都是一致的。两类安全护栏都使用相同的运行时控制项来定义检查位置、执行模式、作用范围和调用方响应行为。远程安全护栏还会使用外部服务故障处理设置。
检查位置
安全护栏的检查位置决定 AISIX 在哪里执行检查:
| 检查位置 | AISIX 检查内容 | 被阻断时的效果 |
|---|---|---|
input | AISIX 发送到服务提供方之前的调用方请求。 | 不会调用服务提供方。 |
output | AISIX 返回给调用方之前的响应内容。 | 调用方不会收到被阻断的响应。 |
both | 请求和响应内容。 | 在路由支持的两侧都应用同一个安全护栏。 |
输入安全护栏会在 AISIX 能够提取请求文本的代理路由上运行,包括 Chat Completions、Completions、Responses、Messages、Embeddings、图像生成、语音、重排序请求,以及原始服务提供方透传隧道。输出安全护栏会在 AISIX 能够扫描返回文本的路由上运行,包括 Chat Completions、Completions、Responses、Messages 和透传隧道。
在透传隧道上,AISIX 无法解析请求结构,因此会将完整请求体和响应体作为文本交给已附加的安全护栏扫描。任一侧命中都会返回 422,上游响应体不会继续转发。
安全护栏匹配
安全护栏的作用范围决定了它可以评估哪些请求。在自托管部署中,通过 Admin API 创建的安全护栏会应用到整个环境。AISIX Cloud 还可以将安全护栏限定到选定的模型别名、调用方 API Key 或团队。
当多个安全护栏同时适用于同一个请求时,AISIX 会把它们作为一条链路进行评估。任意一个安全护栏给出阻断判定,都会阻断请求或响应。
如果同一个安全护栏通过多个匹配的 Cloud 作用范围附加到请求链路中,AISIX 只保留一份该安全护栏。优先级最高的附加关系生效;当优先级相同时,作用范围越具体优先级越高,顺序为:调用方 API Key、团队、模型别名、环境。
执行模式
安全护栏的 enforcement_mode 决定 AISIX 在安全护栏检测到匹配内容后如何处理。
AISIX 支持两种执行模式:
block:拒绝命中的内容。如果省略enforcement_mode,这是默认行为。monitor:放行命中的内容,并记录命中结果。
在 block 模式下,输入侧命中会在调用服务提供方前停止请求,输出侧命中会阻止调用方收到响应。
在 monitor 模式下,调用方可见的响应不会发生变化。原本在 block 模式下会以 422 Unprocessable Entity 拒绝的请求,会返回正常的上游结果。AISIX 会在网关日志中以 info 级别记录命中:
guardrail in monitor mode observed a violation; not blocking (enforcement_mode=monitor)
日志行会包含安全护栏名称、命中的检查位置以及匹配原因。
处理远程安全护栏故障
会调用外部服务的安全护栏类型可能无法访问其后端服务。这适用于 AWS Bedrock Guardrails、Azure AI Content Safety 和阿里云 AI 安全护栏。
以下两个设置决定 AISIX 是放行未扫描流量,还是阻断流量:
| 设置 | 检查侧 | 默认值 | 当值为 true 时 | 当值为 false 时 |
|---|---|---|---|---|
fail_open | 输入侧 | true | 放行未扫描的请求。 | 阻断请求。 |
output_fail_open | 输出侧 | false | 放行未扫描的响应。 | 阻断响应。 |
Admin API 和控制面 payload 中可能仍会出现 mandatory 字段,以保持兼容性;但当前数据面执行 行为由这两个设置决定。不要依赖 mandatory 覆盖它们。内置关键词安全护栏在网关内部运行,不会调用后端,因此远程故障处理不适用于它们。
调用方响应与遥测
当安全护栏阻断兼容 OpenAI 或兼容 Anthropic 的代理请求时,AISIX 会返回 422,并使用对应代理协议的错误结构:
- 兼容 OpenAI 的路由使用
content_filter。 - 兼容 Anthropic 的非流式错误使用
invalid_request_error。 - 兼容 Anthropic 的流式响应会以 Anthropic SSE 错误帧暴露阻断结果。
MCP 安全护栏阻断会遵循 MCP 协议形态。AISIX 返回 HTTP 200 和 JSON-RPC 错误结构,MCP 客户端可以把该失败作为协议响应处理。参见 Headers and Error Codes。
远程安全护栏 fail-open 时不会阻断请求或响应。AISIX 会在 usage event 中记录绕过原因。对于 Chat Completions 流量,AISIX 还会递增安全护栏绕过指标。
下一步
当策略应该在 AISIX 内部执行时,请创建内置关键词安全护栏。当内容需要由外部审核服务评估时,请使用 AWS Bedrock Guardrails、Azure AI Content Safety 安全护栏 或阿里云 AI 安全护栏。