Microsoft Presidio 安全护栏
Presidio 安全护栏使用 Microsoft Presidio 检测和匿名化敏感数据。Presidio 是开源 PII 引擎,需要由你自行运行。AISIX 会为每个请求或响应调用 Presidio analyzer;检测到的实体可以被阻断,也可以按你选择的 operator 匿名化后继续转发。
与内置 pii 安全护栏相比,Presidio 增加了:
- NER/ML 实体:可识别正则难以表达的
PERSON、LOCATION、NRP等 Presidio 识别器实体。 - 匿名化 operator:可替换为实体占位符、用星号 mask、用 SHA-256 hash,或直接 redact 删除片段。
- 自托管部署:内容在你自己的网络内分析,不需要外部服务提供方 Key。
本指南将介绍如何在本地运行 Presidio,创建带有按实体动作配置的 Presidio 安全护栏,并验证匿名化和阻断行为。
前提条件
开始前请准备:
- 阅读安全护栏行为,了解 Hook 点和执行模式。
- Docker,用于运行 Presidio analyzer 和 anonymizer 容器。
- 一个可访问 Admin 和代理监听端的自托管 AISIX 网关。
- 网关
config.yaml中的 Admin Key。 - 一个可发送聊天补全请求的模型别名和调用方 API Key。
运行 Presidio
启动两个 Presidio 服务:
docker run -d --name presidio-analyzer -p 5002:3000 mcr.microsoft.com/presidio-analyzer:latest
docker run -d --name presidio-anonymizer -p 5001:3000 mcr.microsoft.com/presidio-anonymizer:latest
两个容器都必须能被网关访问。确认 analyzer 可响应:
curl -sS -X POST "http://127.0.0.1:5002/analyze" \\
-H "Content-Type: application/json" \\
-d '{ "text": "my email is alice@example.com", "language": "en" }'
响应会列出检测到的 EMAIL_ADDRESS 实体及其 offset 和 score。
创建 Presidio 安全护栏
设置示例请求使用的变量:
export AISIX_ADMIN_KEY="YOUR_ADMIN_KEY"
export AISIX_API_KEY="YOUR_CALLER_API_KEY"
export AISIX_MODEL="gpt-4o-mini"
创建一个同时作用于输入和输出的安全护栏:邮箱和人名匿名化,美国 SSN 阻断。
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": "presidio-pii-policy",
"enabled": true,
"hook_point": "both",
"fail_open": false,
"kind": "presidio",
"analyzer_url": "http://127.0.0.1:5002",
"anonymizer_url": "http://127.0.0.1:5001",
// 标注 1
"entities": [
{ "type": "EMAIL_ADDRESS" },
{ "type": "PERSON" },
{ "type": "US_SSN", "action": "block" }
],
"default_action": "mask",
// 标注 2
"operator": "replace",
"language": "en",
"score_threshold": 0.5
}'
❶ 每个条目指定一个 Presidio entity。没有单独设置 action 的条目使用 default_action:mask 表示匿名化后继续,block 表示以 422 拒绝。entities 为空时,会使用 Presidio 的完整识别器集合,并对所有命中应用 default_action。
❷ 控制被 mask 的实体如何改写:replace(默认)替换为 <ENTITY_TYPE>,mask 替换为 *,hash 替换为原值的 SHA-256 十六进制摘要,redact 删除该片段。
score_threshold 会丢弃置信度低于阈值的 analyzer 结果;省略时接受 analyzer 返回的所有结果。