一个端点,
所有模型。
Tare 是挡在你所有模型前面的一层 OpenAI 兼容网关 —— 我们的,和你自己带来的。一个 base URL、一把 key,每一个 token 都算得清。
数据保护(DLP)
这篇解决什么问题:在请求离开 Tare 之前扫一遍敏感内容,哪些要忽略、哪些脱敏、哪些 拦截、哪些只报警,由你逐类决定。
数据保护(DLP)管的是一组规则。每一次 chat completions、embeddings、图片生成、视频生成调用, 在离开 Tare 之前都会先扫一遍敏感内容:能冒充你身份的密钥,以及不该在没必要的情况下就到达模型 的个人信息。命中之后怎么处理,全由你决定。
直接打本地节点的调用在节点上扫,规则是同一套;节点为此需要什么,那一页有写。
账户级设置和按 key 设置
这两层要分开看:
- 账户级:控制台 Security 里的账户开关(开 / 关 / 跟随平台默认),以及
What counts as sensitive里你按类型的处理选择。这一层管整个账号。 - 按 key:单独挂在某一把 key 上的设置,会盖过账户级。只有带着这把 key 打 Tare 的调用才会 用到它。
多处设置都可能命中时的优先级是:内置默认 ← 平台默认 ← 推荐规则自己的 pin ← 你账户的选择 ← 按 key 单独设置,越靠后越优先。
直接打本地节点的调用没有 key,所以到你账户的选择为止,按 key 的设置不参与。
建议配置顺序
- 打开 Security。
- 先确认账户级开关:关闭、开启或跟随平台默认。
- 在 What counts as sensitive 中逐类确认处理方式。
- 对推荐规则先使用「只告诉我」,观察 7/30 天命中量。
- 确认影响面后,再把必要规则改成脱敏或拦截。
- 如需允许某些测试样例跳过检查,再为指定 key 配置 DLP skip。
四种处理方式
某种内容命中之后走哪一种,由你的设置决定,不写死在类型上。
| 动作 | 结果 | 适合场景 |
|---|---|---|
| 忽略 | 不处理 | 明确不敏感或误报较多 |
| 脱敏 | 替换成占位符后继续请求 | 邮箱、手机号等个人信息 |
| 拦截 | 请求失败,不发给上游 | 密钥、私钥、助记词等高风险内容 |
| 报警 | 请求原样转发,同时记录事件并通知 | 想先观察影响,不想改变流量 |
默认建议:先观察,再收紧。直接把大量规则改成拦截,可能会影响正常业务。
会检查什么
扫描的是整个请求体,不只固定几个字段:除了结构性字段(model、role、
type、id 这些)和二进制内容(图片/音频/视频的 base64 数据),每一个字符串值都是
候选。
密钥类(云凭据、私钥、平台令牌如 ghp_…/sk_live_…/xox…、
数据库连接串、加密钱包私钥与恢复词、认证令牌,以及仅凭变量名就能看出是密钥的值)在任何开启了
防护的 key 上默认就会检查。
个人信息(邮箱、手机号、身份证号、银行卡号、护照号,以及若干其他有固定格式的类型)默认走 脱敏,不拦截:调用照样放行,值被替换掉。
IP 地址和 MAC 地址默认关闭:日志、工单和客服对话里到处都是这两样,默认脱敏会把大量正常流量 改坏,换不来什么真实收益。
姓名/地点/机构名识别也默认关闭,原因不一样:它每次调用都要真的花 CPU 时间。你的流量需要就打开。
下图中的默认处理以开启 DLP 为前提;你可以按内容类型修改处理方式。
旧版身份证号、裸的护照号、裸的 9 位数字和其他个人信息一样默认脱敏。这里真正难的一步是 「认不认得出来」,不在「要不要检测」。一个裸的 9 位数字,或者一个没有校验位的 15 位老身份证 号,单看数字本身和普通数字没区别,所以只有旁边真的出现「身份证」「SSN」「passport」这类语境 词才会触发识别。
命中之后会怎样
- 拦截:调用被拒绝,返回
400,不计费,什么都不会发出去。错误信息会说明发现了 什么、大致在哪(字段、行号、一小段开头),外加命中位置前后各约 25 个字符的 上下文。命中的 内容本身、以及这段范围里恰好出现的其他敏感信息,都会被换成[TYPE_REDACTED]。 助记词、私钥、上下文相关密钥这几类连这点上下文都不给,错误信息只会说出类型。同一份证据也会 带进 Call Traces 的失败记录和审计事件里。 - 脱敏:命中的文本在请求继续之前被替换成占位符,比如
[EMAIL_REDACTED]。调用 正常计费,没有报错也没有特殊响应头,模型收到的就是脱敏后的版本。 - 报警:请求原样转发,调用在 Recent events 里记成「检测到」,并往你的告警通道发一条通知, 同一类内容在静默窗口内只发一次。
在控制台 Security → What counts as sensitive 里,每种内置类型都会列出平台建议什么、你 自己选什么(忽略 / 换成占位符 / 让请求失败 / 报警)。同一块里还有整个账户的开关(开、关、跟随 平台默认)。人名、地名、机构名默认不查,要在那里打开。
推荐规则
除了内置的这些,偶尔还会有新的检测规则发布到一份持续维护的共享清单里,比如刚发现的一种新密钥 格式。这些规则会不会真的作用到你的流量上,完全由你决定,有四个选项:
| 选项 | 效果 |
|---|---|
| 不启用 | 这些规则永远不会作用于你的流量 |
| 只告诉我(默认) | 照常运行并计数命中,但从不改动或拒绝请求,Security 页会显示「如果开了会怎样」 |
| 自动隐藏 | 命中会被脱敏,和内置的个人信息类型一样 |
| 直接拦截 | 把上限抬到 BLOCK,但只对本身就是按拦截发布的规则生效。一条按脱敏发布的规则仍然只会脱敏 |
新租户默认在只告诉我:在你自己选别的之前,你的流量不会有任何变化。
任何一条规则都可以单独指定选项,不受账号整体设置影响。Security 页上每一条规则都会显示「过去 7/30 天命中过你的流量多少次」,方便在真的打开强制生效之前先看看影响面有多大。
主动跳过某次检查
有时候看起来像密钥的内容其实真的不是(一份测试用的样例、一段已经确认安全的脱敏示例)。如果 这把 key 开了这个功能:
- 一个请求头,
X-DLP-Skip: all(或者逗号分隔的具体类型),跳过整个请求的检查。 只会被读一次,从不转发给上游。 - 一段内联标记,放在某条消息的最开头,
[[dlp:skip:<secret>]](或者[[dlp:skip:<secret>:EMAIL,PHONE_CN]]指定具体类型),只跳过这一条消息的检查。 这个 secret 从控制台生成一次、只显示这一次;标记里的 secret 对不上时会被当成普通文本照常 扫描,不会被静默放行。标记本身会在模型看到之前被剥除。
默认跳过只免除脱敏,不免除拦截。即使这把 key 开了跳过,真正的密钥照样会被拦下,除非这把 key 被专门配置成连拦截也一起跳过。打开那个选项是实打实地降低防护:任何能设置请求头或标记的 人,都能借此把真实密钥不受检查地推过去。
用接口配置这些
只认登录会话。任何 API key(含母钥)来调都是 403:
| 方法 | 路径 | 做什么 |
|---|---|---|
GET/PUT | /v1/dlp/policy | 读或改采纳策略:pack 模式、上限、各类型的动作 |
GET | /v1/dlp/pack | 分页、可筛选地列出推荐规则 |
GET | /v1/dlp/pack/summary | 每条规则最近 N 天会命中你多少次调用 |
PUT/DELETE | /v1/dlp/pack/{ruleKey}/pin | 把某条规则单独钉在一个选择上,或取消钉住 |
POST | /v1/dlp/pack/{ruleKey}/feedback | 反馈某条规则判得不对或太吵 |
GET | /v1/dlp/notices | 最近的采纳相关通知 |
GET/PUT | /v1/dlp/keys/{keyId}/skip | 读或改某把 key 的跳过设置 |
POST/DELETE | /v1/dlp/keys/{keyId}/skip/secret | 生成或清空这把 key 的跳过口令。明文口令只在这次响应里出现,之后拿不到 |
Security 页那个概览数字(多少把 key 开了防护)来自 GET /v1/api-keys/dlp-summary,
直接给出汇总值,不用逐把 key 拉一遍再数。
扫描来不及跑完时
超大或刻意构造的输入可能让某条规则超时。响应取决于超时的是哪一半:
- 如果是可选的姓名/地点/机构名识别跑不完,这一部分会被跳过,其余检查照常生效;这只是某次调用 少了一层增强能力,不构成让它失败的理由。
- 如果是必须跑的规则(内置的,或者被单独指定了选项的推荐规则)跑不完,整次调用会被拦截,不 计费,错误信息会请你缩短输入。一条规则跑不完就放行,等于给了一种绕过它的办法:把超时当成 「默认没问题」,防护本身就形同虚设。
相邻但不在这里的两个控制
DLP 是内容层面的防护,看的是一次调用里面有什么。还有两个相关的控制不在这一节,各自记在对应 功能自己的文档里:
下一步
- 看一次调用留下了什么记录:读 Call Traces。
- 让命中内容触发通知:读 告警。
- 了解节点上的同一套规则:读 本地节点。