企业接入Gemini API必须嵌入可验证脱敏网关,确保姓名、身份证号、手机号等敏感字段不出内网、不落磁盘、不进模型上下文,严格遵循PIPL第40条及《生成式AI服务管理暂行办法》第12条;脱敏需按司法辖区映射策略,身份证号保留前6后4、手机号前3后4、邮箱掩码用户名段,并硬编码至网关策略表;须部署Cloud Run或Kong网关,支持JSON字段级动态脱敏、Base64水印注入与Redis缓存还原,且通过eBPF强制拦截出站流量,仅允许本地代理与内网审计通信。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

企业接入Gemini API时,用户输入的姓名、身份证号、手机号、合同条款等敏感字段一旦未经处理直传模型,将触发《个人信息保护法》第40条和《生成式AI服务管理暂行办法》第12条的合规红线。必须在API调用链路中嵌入可验证的数据脱敏网关,确保原始敏感信息不出内网、不落磁盘、不进模型上下文。
确定脱敏边界与策略映射
先确认哪些字段必须脱敏:PIPL定义的“个人信息”包含自然人姓名、出生日期、身份证号码、生物识别信息、住址、电话、电子邮箱、行踪轨迹等;GDPR对应“personal data”范围更广,需额外覆盖设备ID、IP地址、Cookie标识符。二者重合部分为强制脱敏项,非重合部分按客户所在司法辖区优先级执行。
脱敏方式不能统一用星号替换。身份证号须保留前6位+后4位(符合《金融行业数据安全分级指南》),手机号保留前3后4,邮箱仅掩码用户名段(如“a***@b.com”)。【所有掩码规则必须硬编码进网关策略表,禁止由前端或业务层动态拼接】
这一步不做策略映射,后续所有脱敏动作都会失效——比如把“客户电话”误判为普通文本字段,就可能原样传给Gemini模型。
部署轻量级策略网关(推荐Cloud Run)
方法一:基于Cloud Run + Cloud Functions构建无状态网关
① 在Google Cloud Console中创建新服务,运行时选Python 3.11,内存设为2GB(保障正则匹配与加密操作不OOM);
② 部署前,在main.py中注入预编译的敏感词正则对象(避免每次请求重复compile):
import re
PHONE_PATTERN = re.compile(r'(1[3-9]\d{9})', re.U)
IDCARD_PATTERN = re.compile(r'(\d{6})\d{8}(\d{4})', re.U)
EMAIL_PATTERN = re.compile(r'([^@]+)@(.+)', re.U)
③ 启用Cloud Secret Manager挂载脱敏密钥(用于后续加密脱敏结果的哈希校验),密钥名设为DESENSITIZE_SALT;
④ 设置环境变量ENABLE_DESENSITIZE=true,并绑定Service Account权限:roles/secretmanager.secretAccessor + roles/logging.logWriter。
方法二:复用现有API网关(如Apigee或自建Kong)
在请求路由阶段插入Lua插件,调用内置PCRE正则引擎执行掩码。注意:Kong 3.5+才支持UTF-8全字符集匹配,旧版本对中文姓名会漏匹配。
配置字段级动态脱敏规则
在网关配置文件中定义JSON Schema式规则,示例:
{
"sheetId": "1aBcDeFgHiJkLmNoPqRsTuVwXyZ",
"range": "Data!A1:C10",
"fields": [
{"column": "A", "type": "idcard", "mask": "full"},
{"column": "B", "type": "phone", "mask": "partial"},
{"column": "C", "type": "text", "mask": "none"}
]
}
字段类型必须与Gemini API的content.parts.text结构对齐——如果传入的是JSON数组而非纯文本,网关需先做JSON解析再逐字段脱敏,否则只对整个字符串做正则,会破坏结构。
这一步若跳过字段类型声明,网关将默认对全部内容启用宽松正则,导致“张三丰”被误判为身份证号前缀而错误脱敏。
注入审计水印与响应还原机制
脱敏后的数据进入Gemini模型前,必须注入不可见审计水印。使用Base64编码的UUIDv4作为水印标识,追加到prompt末尾,格式为:[WATERMARK:ZmYxMjNhYzQtZDQ1Ni00N2I3LWI5YTktZmYwMDAwMDAwMDBd。
收到Gemini响应后,网关立即提取该水印并查本地缓存(Redis键为watermark:{uuid}),还原原始敏感值。缓存TTL设为300秒,超时自动清除,防止长期驻留。
【水印必须是单向绑定且不可逆推原始数据,仅用于关联脱敏前后的上下文】
响应还原失败时,返回HTTP 502 Bad Gateway并记录error_code=DESENSITIZE_RESTORE_FAILED,禁止将原始敏感字段直接拼回响应体。
启用eBPF网络拦截强制本地化
在网关宿主机上部署eBPF程序,拦截所有出站连接:
执行命令:bpftool prog load ./deny_outbound.o /sys/fs/bpf/deny_outbound
加载后,任何未明确允许的域名(包括googleapis.com)均被DROP,仅放行localhost:8080(本地Gemini代理)和10.0.0.0/8(内网审计日志服务)。
这步操作不可跳过——否则脱敏后的数据仍可能通过模型内部调试接口、遥测上报或异常堆栈泄露。

















