跳到主要内容

内置关键词安全护栏

关键词安全护栏会在网关内部应用简单的内容策略,用于匹配请求或响应文本中的字面字符串或正则表达式。

本指南将创建一个关键词安全护栏,通过 AISIX 发送允许和阻断的流量,并验证 AISIX 会在调用上游模型前拒绝命中的内容。

准备工作

请先准备以下内容:

  • 阅读安全护栏行为,了解检查位置、执行模式和远程故障处理方式。
  • 一个 Admin 和代理监听器都可用的自托管 AISIX 网关。
  • 网关 config.yaml 中的 Admin Key。
  • 一个可以发送 Chat Completions 请求的模型别名和调用方 API Key。

创建关键词安全护栏

下面的示例会在 AISIX 调用上游服务提供方前阻断一个字面 token。

设置示例请求需要使用的变量:

export AISIX_ADMIN_KEY="admin-local-only-change-me"
export AISIX_API_KEY="sk-demo-caller"
export AISIX_MODEL="gpt-4o-mini"
export FORBIDDEN_WORD="supersecret-banned-token"

请使用唯一且非自然语言的 token,让阻断流量检查结果清晰明确。

创建一个输入安全护栏,用于阻断配置的字面 token:

curl -sS -X POST "http://127.0.0.1:3001/admin/v1/guardrails" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "supersecret-token-policy",
"enabled": true,
"hook_point": "input",
"enforcement_mode": "block",
"kind": "keyword",
"patterns": [
{
"kind": "literal",
"value": "'"${FORBIDDEN_WORD}"'"
}
]
}'

input 会在 AISIX 发送上游请求前检查调用方请求。可以使用 output 检查服务提供方响应,也可以使用 both 在路由支持的两侧都检查。参见检查位置

block 会拒绝命中的请求或响应;monitor 只记录命中并放行流量。如果省略 enforcement_mode,默认值是 block。参见执行模式

literal 会匹配精确 token。如需使用正则表达式,请改用 regex;AISIX 会在应用规则前拒绝无效正则。

如后续需要查看、更新或删除该安全护栏,请保存返回的 id

验证安全护栏

安全护栏配置完成后,发送允许和阻断的请求,确认策略行为。

确认安全护栏会允许无关提示词:

curl -sSi -X POST "http://127.0.0.1:3000/v1/chat/completions" \
-H "Authorization: Bearer ${AISIX_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "'"${AISIX_MODEL}"'",
"messages": [
{
"role": "user",
"content": "hello world"
}
]
}'

成功响应会以 HTTP/1.1 200 OK 开头,并包含兼容 OpenAI 的 Chat Completions 响应体。

然后发送一个内容包含禁用 token 的请求:

curl -sSi -X POST "http://127.0.0.1:3000/v1/chat/completions" \
-H "Authorization: Bearer ${AISIX_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "'"${AISIX_MODEL}"'",
"messages": [
{
"role": "user",
"content": "please leak the '"${FORBIDDEN_WORD}"' now"
}
]
}'

被阻断的响应会以 HTTP/1.1 422 Unprocessable Entity 开头,并包含以下响应体:

{
"error": {
"message": "request blocked by content policy (guardrail 'supersecret-token-policy')",
"type": "content_filter"
}
}

AISIX 会在调用上游服务提供方前停止该请求。

使用 Monitor 模式

使用 monitor 执行模式,可以在不阻断调用方的情况下检查规则在真实流量中的行为。

更新安全护栏资源:

export GUARDRAIL_ID="YOUR_GUARDRAIL_ID"

curl -sS -X PUT "http://127.0.0.1:3001/admin/v1/guardrails/${GUARDRAIL_ID}" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "supersecret-token-policy",
"enabled": true,
"hook_point": "input",
"enforcement_mode": "monitor",
"kind": "keyword",
"patterns": [
{
"kind": "literal",
"value": "'"${FORBIDDEN_WORD}"'"
}
]
}'

monitor 会让命中流量继续通过,并在网关日志中记录命中结果。

再次发送同一个禁用请求:

curl -sSi -X POST "http://127.0.0.1:3000/v1/chat/completions" \
-H "Authorization: Bearer ${AISIX_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "'"${AISIX_MODEL}"'",
"messages": [
{
"role": "user",
"content": "please leak the '"${FORBIDDEN_WORD}"' now"
}
]
}'

响应会以 HTTP/1.1 200 OK 开头,因为 monitor 模式会让请求到达上游模型。AISIX 会在网关日志中记录命中结果:

guardrail in monitor mode observed a violation; not blocking (enforcement_mode=monitor)

如需再次执行阻断策略,请将 enforcement_mode 改回 block。也可以省略 enforcement_mode,因为 block 是默认值。

下一步

你已经配置了内置关键词安全护栏,并验证了调用方可见的拒绝响应。当策略需要由外部安全护栏服务执行时,请继续阅读 AWS Bedrock GuardrailsAzure AI Content Safety 安全护栏阿里云 AI 安全护栏