Alibaba Cloud AI Guardrails
Alibaba Cloud AI Guardrails 将审核策略保存在 AI Guardrails 控制台中,AISIX 通过 MultiModalGuard API 将策略判定应用到网关流量。请求可以在到达上游模型前检查,响应也可以在返回调用方前检查。每次调用还会显示在 AI Guardrails 控制台自身的记录中,便于在阿里云侧审计判定。
它与 Alibaba Cloud Content Moderation(aliyun_text_moderation、TextModerationPlus API)是不同的阿里云产品:两者需单独开通和计费,检测与阻断策略在各自的控制台配置,调用也只会出现在对应产品的控制台中。如果你在 AI Guardrails 控制台管理策略,或需要在一次调用中组合执行内容合规、提示词攻击检测和敏感数据处理,请使用本安全护栏。
本指南将创建一个 Alibaba Cloud AI Guardrails 资源,发送一个允许请求,并观察由控制台策略驱动的阻断和敏感数据脱敏。
准备工作
请先准备以下内容:
- 阅读安全护栏行为,了解钩子点、执行模式和远程故障处理方式。
- 以下配置路径之一:
- AISIX Cloud,其中包含环境、已接入的网关和具有写权限范围的 Admin Token。对于 On-Premises,请按照 AISIX Cloud 快速入门操作。如需申请混合云访问权限,请联系 API7。
- 加载声明式
resources.yaml文件的开源 AISIX 网关。
- 可以发送 Chat Completions 请求的模型别名和调用方 API Key。
- 已在账号中开通 Alibaba Cloud AI Guardrails 服务(商品
lvwang_guardrail_public_cn,按量付费)。如果未开通,每次调用都会以业务代码408失败,并在消息中指出该商品。 - 一个允许调用
MultiModalGuardAPI Action 的阿里云 AccessKey(RAM 权限yundun-greenweb:MultiModalGuard)。 - 已在 AI Guardrails 控制台启用检测和阻断策略。结果由控制台策略而非 AISIX 决定:设置为阻断的检查模块返回
block,设置为脱敏的模块返回mask,仅观察的模块返回watch(AISIX 会放行)。未启用的模块不会运行。例如,敏感数据脱敏需要启用敏感数据检查并选择脱敏动作;在此之前,此类请求会返回pass,且不含sensitiveData结果。 curl。AISIX Cloud 路径还会使用jq。
创建 Alibaba Cloud AI Guardrail
以下示例使用 pro 服务层级检查请求和响应。请选择一种配置路径,再使用通用验证步骤。
导出两种路径都会使用的网关和模型服务提供方参数:
# AISIX_PROXY 末尾不包含斜杠或端点路径。
# 本地快速入门使用 http://127.0.0.1:3000。
export AISIX_PROXY="YOUR_AISIX_GATEWAY_URL"
export AISIX_API_KEY="YOUR_CALLER_API_KEY"
export AISIX_MODEL="gpt-4o-mini"
export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ALIBABA_CLOUD_ACCESS_KEY_ID"
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ALIBABA_CLOUD_ACCESS_KEY_SECRET"
AISIX Cloud
导出控制平面连接参数:
# AISIX_CP 包含 /api,末尾不包含斜杠。
# 本地 On-Premises 快速入门使用 http://localhost:8080/api。
export AISIX_CP="YOUR_AISIX_CLOUD_ADMIN_API_BASE_URL"
export AISIX_TOKEN="YOUR_ADMIN_TOKEN"
export ENV_ID="YOUR_ENVIRONMENT_ID"
在环境中创建 Alibaba Cloud AI Guardrails 资源并获取其 ID:
export GUARDRAIL_ID=$(curl -sS -X POST "$AISIX_CP/environments/$ENV_ID/guardrails" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "aliyun-ai-guard",
"enabled": false,
"hook_point": "both",
"fail_open": false,
"kind": "aliyun_ai_guardrail",
"config": {
"region": "cn-shanghai",
"access_key_id": "'"${ALIBABA_CLOUD_ACCESS_KEY_ID}"'",
"access_key_secret": "'"${ALIBABA_CLOUD_ACCESS_KEY_SECRET}"'",
"output_fail_open": false,
"service_level": "pro",
"timeout_ms": 3000
}
}' | jq -r '.guardrail.id')
❶ both 同时检查调用方请求和模型响应。参见安全护栏检查位置。
❷ fail_open: false 表示当 Alibaba Cloud AI Guardrails 失败或超时时阻断请求。这是默认值。
❸ output_fail_open: false 表示阿里云服务中断时阻断未经扫描的模型输出。这是默认值。
❹ service_level 选择 API 层级:pro(默认值)调用 query_security_check_pro 和 response_security_check_pro;basic 调用 query_security_check 和 response_security_check。该值必须与账号中开通的层级一致。
❺ timeout_ms 限制 AISIX 等待安全护栏判定的最长时间。
AISIX 根据 region 推导端点(green-cip.<region>.aliyuncs.com)。只有需要覆盖该主机时,才在 config 中将 endpoint 设置为完整 URL。
无需配置本地风险阈值。AI Guardrails 控制台会根据已配置策略计算总体建议,AISIX 会遵循该建议。
将安全护栏附加到环境,使其应用到所有流量:
curl -sS -X POST "$AISIX_CP/environments/$ENV_ID/guardrails/$GUARDRAIL_ID/attachments" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"scope_type": "env"
}'
env Scope 不需要 scope_id,并覆盖环境中的所有请求。如需缩小执行范围,请将 scope_type 设置为 model、api_key 或 team,并通过 scope_id 传入资源 ID。
Attachment 存在后启用安全护栏:
curl -sS -X PATCH "$AISIX_CP/environments/$ENV_ID/guardrails/$GUARDRAIL_ID" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{"enabled": true}'
启用后的配置会自动投射到已接入的网关。
开源 AISIX 网关
在已定义示例模型和调用方 API Key 的资源文件中添加安全护栏。示例从 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET 读取凭证。已经运行的快速入门容器不会继承之后才在主机上导出的变量。
guardrails:
- name: aliyun-ai-guard
enabled: true
hook_point: both
fail_open: false
kind: aliyun_ai_guardrail
region: cn-shanghai
access_key_id: ${ALIBABA_CLOUD_ACCESS_KEY_ID}
access_key_secret: ${ALIBABA_CLOUD_ACCESS_KEY_SECRET}
output_fail_open: false
service_level: pro
timeout_ms: 3000
guardrail_attachments:
- guardrail_id: aliyun-ai-guard
scope_type: env
priority: 100
模型服务提供方字段直接位于安全护栏条目下,而不是 config 下。AISIX 根据 region 推导端点;只有网关需要使用其他完整 URL 时才设置 endpoint。
安全护栏只在 Attachment 指定的范围内生效:请添加 guardrail_attachments 条目引用它,否则它虽然会被加载,但不会检查任何流量。重新加载或重建网关前,请验证完整文件。扩展开源快速入门时,请按照重新加载资源文件操作,只在验证成功后重建容器,并传入额外凭证变量。
AISIX 如何应用建议
每个 MultiModalGuard 响应都包含由控制台策略基于所有检测维度(内容合规、提示词攻击、敏感数据等)计算的建议。AISIX 将其映射为网关判定:
| 建议 | AISIX 行为 |
|---|---|
pass | 请求或响应不经修改并继续处理。 |
watch | 内容不经修改并继续处理;检测详情会记录到网关日志。 |
block | AISIX 以 422 content_filter 拒绝请求(或在监控模式下记录本应阻断)。 |
mask | 当请求路径和流式模式支持替换时,AISIX 会改写内容;否则会阻断内容。参见敏感数据脱敏。 |
验证安全护栏
AISIX Cloud 投射是异步的。如果第一个请求尚未体现安全护栏,请等待网关应用最新修订后重试。收敛检查参见资源投射。
通过 AISIX 发送一个正常请求:
curl -sSi -X POST "$AISIX_PROXY/v1/chat/completions" \
-H "Authorization: Bearer ${AISIX_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "'"${AISIX_MODEL}"'",
"messages": [
{
"role": "user",
"content": "What is the capital of France?"
}
]
}'
成功响应以 HTTP/1.1 200 OK 开头,并返回兼容 OpenAI 的 Chat Completions 响应体。
为了让检查结果可重复,请使用控制台策略已配置为阻断的内容,例如启用提示词攻击策略时使用攻击探测内容,或使用合规策略会拒绝的内容。然后发送该内容:
curl -sSi -X POST "$AISIX_PROXY/v1/chat/completions" \
-H "Authorization: Bearer ${AISIX_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "'"${AISIX_MODEL}"'",
"messages": [
{
"role": "user",
"content": "YOUR_POLICY_VIOLATING_TEXT"
}
]
}'
被阻断的响应以 HTTP/1.1 422 Unprocessable Entity 开头,并包含兼容 OpenAI 的错误:
{
"error": {
"message": "request blocked by content policy (guardrail 'aliyun-ai-guard')",
"type": "content_filter"
}
}
该调用也会显示在 AI Guardrails 控制台的记录中,可查看同一判定在各检测维度上的详情。