Harness Engineering(Agent 生产化工程)
围绕 Agent 构建可运行、可治理、可扩展生产系统的工程方法
AI 系统中敏感数据的识别、脱敏、加密与全生命周期防护体系
内容摘要
数据安全是指在 AI 系统的整个数据生命周期中,对敏感数据进行识别、分类、保护和监控的一套系统性工程实践。在 Agent 应用中,这个概念的覆盖面比传统 Web 应用更大——不仅涉及数据库和网络传输,还涉及 Prompt 输入、模型训练数据、上下文窗口中的 PII(Personally Identifiable Information,个人身份信息)泄露,以及 LLM 输出中的敏感信息残留。
数据安全是指在 AI 系统的整个数据生命周期中,对敏感数据进行识别、分类、保护和监控的一套系统性工程实践。在 Agent 应用中,这个概念的覆盖面比传统 Web 应用更大——不仅涉及数据库和网络传输,还涉及 Prompt 输入、模型训练数据、上下文窗口中的 PII(Personally Identifiable Information,个人身份信息)泄露,以及 LLM 输出中的敏感信息残留。
数据安全之所以在 AI 时代变得更加紧迫,原因有两层。第一层是传统风险放大:LLM 需要消费海量数据进行训练和推理,数据暴露面比传统应用大几个数量级。第二层是 AI 特有风险:Prompt 注入(Prompt Injection)可能诱导模型吐出训练数据中的隐私信息,模型本身可能"记住"并在推理时泄露训练集中的 PII,这些是传统数据安全体系没有覆盖的攻击面。
与传统"加个防火墙 + 数据库加密"的做法相比,AI 场景下的数据安全需要在三个新维度上扩展防护:输入侧(用户 Prompt 中的 PII 检测和过滤)、模型侧(训练数据脱敏、差分隐私、联邦学习)、输出侧(LLM 输出内容的敏感信息拦截)。这三个维度加上传统的存储和传输加密,构成了 AI 数据安全的完整防护面。
AI 系统的数据安全防护可以按"五层纵深防御"来理解:
| 防护层 | 作用 | 说明 |
|---|---|---|
| 识别层 | 发现敏感数据在哪里 | 自动扫描数据库、文件、Prompt 日志,标记 PII 和敏感字段 |
| 脱敏层 | 在不影响业务的前提下隐藏敏感信息 | 掩码、泛化、差分隐私、合成数据替换 |
| 加密层 | 即使数据被窃取也无法解读 | 字段级加密、传输层 TLS、密钥管理 |
| 访问控制层 | 限制谁能在什么条件下接触数据 | RBAC、最小权限、零信任验证 |
| 审计监控层 | 事后追溯和实时告警 | 操作日志、异常检测、合规报告 |
整个防护体系的起点。如果不知道哪些数据是敏感的,后续所有保护都是盲目的。识别层的工作包括:用正则表达式匹配结构化 PII(身份证号、手机号、银行卡号),用 NER(Named Entity Recognition,命名实体识别)模型检测非结构化文本中的人名、地址、医疗信息,以及用统计学方法(熵分析)发现高熵字段(如密码、密钥)。
在 AI 应用中,识别层还需要覆盖一个传统安全容易忽略的场景:Prompt 日志和模型输入输出中的 PII。用户可能在与 Agent 对话时无意间输入身份证号或病历信息,如果这些内容被原样写入日志或用于模型微调,就构成了隐私泄露。
脱敏的核心目标是在保留数据分析价值的前提下,消除个人身份的可识别性。四种主要方法:
| 脱敏方法 | 原始值 | 脱敏后 | 适用场景 |
|---|---|---|---|
| 掩码(Masking) | 13812345678 | 138****5678 | 展示、客服验证 |
| 泛化(Generalization) | 35岁 | 30-40岁 | 统计分析、报表 |
| 加密脱敏(Tokenization) | 110101199001011234 | TKN_8f3a2b | 需要可逆恢复的场景 |
| 差分隐私(Differential Privacy) | 精确统计值 | 加噪后统计值 | 模型训练、聚合查询 |
即使攻击者突破了前两层拿到了数据,加密确保数据无法被解读。加密分三个粒度:全磁盘加密(防设备被盗)、数据库透明加密 TDE(防数据库文件泄露)、字段级加密(只加密敏感字段,性能最优但实现最复杂)。传输层使用 TLS 1.3 加密,它比 TLS 1.2 减少了一次握手往返并移除了已知不安全的加密套件。
基于 RBAC(Role-Based Access Control,基于角色的访问控制)和最小权限原则,确保"只有被授权的人,在被授权的时间,访问被授权的数据"。在 AI 系统中,这一层还需要覆盖 Agent 本身的权限——一个有工具调用(Tool Use)能力的 Agent 不应该有权访问所有数据库表。
记录所有敏感数据访问操作,建立行为基线,检测异常(如凌晨 3 点批量导出用户表)。完整的审计日志是事件调查和合规证明的基础。
AI 系统的数据安全运转遵循一条"数据流过每一站都被检查和处理"的链路:
这条链路的关键设计原则是"纵深防御"(Defense in Depth)——任何单一防护层被突破,后续层仍然能提供保护。
整条链路有三个最容易被忽视的节点:
以下代码演示 AI 应用中数据安全的两个核心机制:PII 检测和自动脱敏。
# 基于 Python 3.10+ 标准库,无需额外安装
import re
from dataclasses import dataclass
from enum import Enum
from typing import List, Tuple
class SensitivityLevel(Enum):
"""数据敏感度等级"""
L1_PUBLIC = "公开"
L3_SENSITIVE = "敏感"
L4_HIGHLY_SENSITIVE = "高度敏感"
L5_TOP_SECRET = "绝密"
@dataclass
class PIIEntity:
"""检测到的 PII 实体"""
text: str # 原始文本
pii_type: str # PII 类型
position: Tuple[int, int] # 起止位置
level: SensitivityLevel # 敏感等级
class PIIDetector:
"""PII 检测引擎:正则 + 关键字双层扫描"""
PATTERNS = {
"身份证号": (
r'\b\d{17}[\dX]\b',
SensitivityLevel.L5_TOP_SECRET
),
"手机号": (
r'\b1[3-9]\d{9}\b',
SensitivityLevel.L4_HIGHLY_SENSITIVE
),
"邮箱": (
r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}',
SensitivityLevel.L3_SENSITIVE
),
"银行卡号": (
r'\b\d{16,19}\b',
SensitivityLevel.L5_TOP_SECRET
),
}
def detect(self, text: str) -> List[PIIEntity]:
"""扫描文本,返回所有检测到的 PII 实体"""
entities = []
for pii_type, (pattern, level) in self.PATTERNS.items():
for match in re.finditer(pattern, text):
entities.append(PIIEntity(
text=match.group(),
pii_type=pii_type,
position=(match.start(), match.end()),
level=level,
))
return entities
class PIIMasker:
"""PII 脱敏器:根据类型自动选择脱敏策略"""
MASK_RULES = {
"身份证号": lambda v: f"{v[:6]}********{v[-4:]}",
"手机号": lambda v: f"{v[:3]}****{v[-4:]}",
"邮箱": lambda v: f"{v[0]}***@{v.split('@')[1]}" if '@' in v else "***",
"银行卡号": lambda v: f"{v[:4]} **** **** {v[-4:]}",
}
def mask_text(self, text: str, entities: List[PIIEntity]) -> str:
"""将检测到的 PII 替换为脱敏值(从后向前替换避免索引偏移)"""
result = text
for entity in sorted(entities, key=lambda e: e.position[0], reverse=True):
rule = self.MASK_RULES.get(entity.pii_type)
if rule:
start, end = entity.position
result = result[:start] + rule(entity.text) + result[end:]
return result
# --- 模拟 Agent 应用中的 Input Guardrail ---
user_prompt = "帮我查一下张三的信息,身份证号110101199501011234,手机13912345678"
detector = PIIDetector()
masker = PIIMasker()
# 第一步:检测 PII
found = detector.detect(user_prompt)
for e in found:
print(f"[检测] {e.pii_type}({e.level.value}): {e.text}")
# 第二步:脱敏后再送入 LLM
safe_prompt = masker.mask_text(user_prompt, found)
print(f"\n原始输入: {user_prompt}")
print(f"脱敏输入: {safe_prompt}")
# 脱敏后的 safe_prompt 才会被传入 LLM,避免 PII 进入模型上下文
代码对应数据安全链路中"Input Guardrail"阶段的核心机制。PIIDetector 承担识别层职责,PIIMasker 承担脱敏层职责。生产环境中检测引擎通常会扩展为正则 + NER 模型 + LLM-Guard 等多级方案,脱敏策略也会根据敏感等级动态调整(L3 用掩码,L5 用加密令牌化)。
| 概念 | 与数据安全的区别 | 更适合关注的重点 |
|---|---|---|
| 信息安全(Information Security) | 信息安全是更大的范畴,包含网络安全、物理安全、人员安全等,数据安全只是其子集 | 组织整体安全治理体系 |
| 隐私保护(Privacy Protection) | 隐私保护关注"个人权利"(用户知情权、删除权),数据安全关注"技术防护手段" | 法律合规、用户权利保障 |
| 访问控制(Access Control) | 访问控制只是数据安全五层防护中的一层,不等于完整的数据安全 | 身份认证、权限管理 |
| AI 安全(AI Safety) | AI 安全的范围更广,包含对齐、幻觉、偏见等问题,数据安全只聚焦数据本身的保护 | 模型行为的安全性和可控性 |
核心区别:
| 常见误区 | 正确理解 |
|---|---|
| "数据库加了密就安全了" | 加密只是五层防护之一。如果密钥硬编码在源码中,或者应用层存在 SQL 注入漏洞,攻击者可以绕过加密直接读取明文数据。完整防护需要五层协同 |
| "脱敏后的数据可以随意分享" | 脱敏降低了风险但不等于零风险。"30-40岁 + 北京朝阳区 + 某罕见病"这样的准标识符组合仍可能定位到个人。脱敏数据同样需要访问控制 |
| "AI 应用的数据安全和传统应用一样处理就行" | AI 应用有三个新攻击面:Prompt 注入诱导模型泄露数据、训练数据中的 PII 被模型"记住"、Agent 工具调用可能越权访问数据。这些需要 Input/Output Guardrail 和模型层面的防护 |
| "合规 = 安全" | 通过合规审计只能证明满足了最低标准,不代表系统不会被攻破。OWASP LLM Top 10(2025 版)中的"敏感信息泄露"排在第六位,即使合规的系统也可能存在此类风险 |
参考答案:
AI 系统的数据暴露面远大于传统应用。除了数据库存储这一环节,还有至少三个位置存在敏感数据泄露风险:用户输入的 Prompt 可能包含 PII,LLM 的输出可能泄露训练数据中的隐私,Agent 的工具调用日志可能记录了敏感操作参数。数据库加密只保护了"静态数据",而 AI 系统中的数据在输入、处理、输出的每个环节都需要对应的防护措施(Input Guardrail、差分隐私训练、Output Guardrail 等)。
参考答案:
方案分三层:第一层是数据预处理,用 NER 模型识别病历中的患者姓名、身份证号、联系方式等直接标识符并进行脱敏(替换为合成值),同时对年龄、地址等准标识符进行泛化处理。第二层是训练过程保护,采用差分隐私(Differential Privacy)机制,在梯度更新时注入校准噪声,使模型无法"记住"单条训练样本。如果病历数据分散在多家医院,还可以用联邦学习(Federated Learning)方案,模型在各医院本地训练,只传递梯度聚合结果而非原始数据。第三层是训练后验证,用成员推理攻击(Membership Inference Attack)测试模型是否能判断某条病历是否在训练集中,确认隐私保护的有效性。
参考答案:
防护需要在四个层面展开。输入层:部署 Prompt Injection 检测器(如 LLM-Guard 或 NeMo Guardrails),识别并拦截试图绕过权限的恶意 Prompt。Agent 权限层:Agent 的数据库访问权限严格绑定到当前用户的 RBAC 角色,即使 Prompt 注入成功改变了 Agent 的"意图",底层 SQL 查询仍然受权限约束(参数化查询 + 行级安全策略)。输出层:LLM 的回答在返回用户前经过 Output Guardrail 检查,拦截包含其他用户 PII 或超出授权范围的数据。审计层:所有查询请求和 Agent 生成的 SQL 都写入审计日志,建立基线模型检测异常查询模式(如单用户短时间内查询大量不同用户的数据),触发告警和自动限流。
优先展示同分类且标签更接近的内容,方便继续串联学习。
围绕 Agent 构建可运行、可治理、可扩展生产系统的工程方法
通过缓存、模型路由、上下文压缩等手段降低 Agent 应用的 LLM 调用成本
系统化评估 Agent 多轮对话中连贯性、意图理解和上下文保持能力的测试方法体系。