4. 数据分类分级:敏感数据识别规则、内置分类器与自定义标签体系
数据分类分级,说白了就是搞清楚你手里到底有哪些敏感数据、它们长什么样、重要程度如何。我在很多混合云项目里见过这种情况:客户说“我们有数据安全”,结果一查,连数据字典都没建好。你想想看,连敌人长啥样都不知道,怎么防守?
这一节,我们把三个核心东西讲透:识别规则怎么写、内置分类器怎么用、自定义标签怎么搭。
4.1 敏感数据识别规则:正则之外还有啥?
识别规则是分类引擎的“眼睛”。最常见的做法就是正则表达式(Regex),比如身份证号18位、信用卡号16位。但光靠正则,坑很多。
举个例子: 一个字段看起来像身份证号,其实是员工编号人工录入的巧合——正则直接打标为PII,结果全员告警,运维烦死了。
我个人习惯把识别规则分成三层:
- 模式层: 正则、关键词、字典匹配。适合固定格式的数据。
- 上下文层: 看相邻列名、表名、注释。比如字段名叫 “user_id” 而且注释里有“身份证”,即便匹配上了,也要再验证。
- 行为层: 数据写的时间、频率、访问者角色。只靠一次扫描可能误报,加上行为特征才稳。
| 层级 | 方法 | 典型场景 | 误报率 |
|---|---|---|---|
| 模式层 | 正则、词典 | 信用卡号、邮箱、手机号 | 中~高 |
| 上下文层 | 列名/表名分析 | DB schema 注释匹配 | 低~中 |
| 行为层 | 访问模式、时间分布 | 日志中数据异常提取 | 低 |
小技巧: 我在做某个金融客户时,把正则 + 上下文两层叠加,PII 识别准确率从 72% 升到了 94%。你可以在 DSPM 规则引擎里配两层规则优先级——模式层先跑,上下文层只在候选结果上跑,性能也高。
4.2 内置分类器:PII / PHI / PCI 怎么开箱即用?
大多数 DSPM 平台都带了预置分类器。PII(个人身份信息)、PHI(医疗健康信息)、PCI(支付卡行业数据)是三大标配。为什么我用“开箱即用”这个词?因为真正的坑往往不在分类器本身,而在于你信了“开箱即用”。
我遇到过一家 SaaS 公司,直接启用 PCI 分类器,结果把内部测试的假卡号全检测出来了,告警量暴涨 300%。嗯,这里要注意——内置分类器通常包含多个变体:
- PCI: 主卡号(PAN)、CVV、有效期、磁条数据。其中 PAN 又分 Visa/MasterCard/Amex/Discover 等前缀校验。
- PII: 姓名、地址、电话、邮箱、身份证号(各国)、护照号、驾驶证。
- PHI: 病历号、诊断代码(ICD-10)、药物名称、保险计划号。
每个内置分类器背后都有一组识别规则和置信度阈值。我建议你:
- 先在透传模式(只记录不告警)下跑一周,看命中数据。
- 调整置信度阈值。比如 PAN 匹配默认为 0.8,但如果你业务中大量使用 16 位数字订单号,可以升到 0.95。
- 白名单那些明确的非敏感数据(如测试环境卡号、公开数据)。
# 示例:调低 PHI 分类器诊断代码的阈值
classification_rule "phi_diagnosis_code" {
type = "builtin"
classifier_name = "icd10"
confidence_threshold = 0.85 # 默认 0.9,实际项目中测试发现很多正确匹配落在 0.85~0.9 之间
action = "label:PHI"
}
4.3 自定义标签体系:别让分类变成“为分类而分类”
内置分类器够用吗?说实话,大部分企业不够。因为你独有的业务数据——比如客户等级、交易对手风险分、内部项目代号——平台根本不认识。这就得自己搭标签体系。
我个人习惯把标签体系设计成三层结构:
- 一级标签(数据域): 如“客户数据”“财务数据”“医疗数据”“员工数据”。粗粒度,方便权限管控基于域。
- 二级标签(敏感等级): 如“公开”“内部”“敏感”“高度敏感”“绝密”。推荐 5 级,不要超过 5 级,否则运维会疯。
- 三级标签(合规标识): 如“GDPR_Covered”“CCPA”“HIPAA”“PCI”。直接映射法规。
踩过的坑: 我曾经帮一家银行设计标签,业务部门非要 8 级敏感度,结果半年后没人记得每级含义,告警无人响应。后来硬改成 4 级 + 合规标签组合,反而清晰。
自定义标签怎么跟识别规则绑定?通常有两种方式:
| 绑定方式 | 描述 | 适用场景 |
|---|---|---|
| 基于规则的自动打标 | 扫描匹配到规则后直接赋值标签 | 格式固定的敏感字段(如身份证、卡号) |
| 基于样本的机器学习打标 | 提供少量正负样本,引擎学习后推广 | 非结构化文本、模糊语义(如合同条款) |
| 手动/审批打标 | 数据所有者人工标注,系统同步 | 高度不确定的业务数据 |
# 自定义标签定义示例(YAML 格式)
labels:
- domain: financial_trade
name: "交易对手风险等级"
levels: ["低", "中", "高", "极高"]
rules:
- pattern: "ISO 20022 报文头中的对方机构编码"
context_col_names: ["counterparty_id", "opponent_bic"]
confidence: 0.9
compliance_mapping: ["MiFID_II", "Dodd_Frank"]
4.4 动手:识别、分类、打标全套流程
讲这么多,不如看一张完整的流程。下图展示了数据从扫描到标签落库的全链路:
4.5 避坑指南
分类分级做到最后,最怕的是“分类了但没分级”。我见过一个团队,把所有数据都打上了“敏感”标签——等于没分。所以:
- 标签粒度要对齐业务模型, 别只凭技术文档定义。找业务方一起过标签草案。
- 周期性复审: 我建议每个季度重新扫描一次之前未匹配的数据。业务在变,数据含义也在变。
- 权重要分清: 敏感等级决定加密、审计;合规标识决定跨境、留存周期。别混在一起用。
我曾经遇到过: 一个客户把 HIPAA 标识和“敏感等级”挂在一起,导致所有 PHI 数据都被加了一把强加密,结果 BI 报表出不来,数据科学家直接抱怨。所以合规标识和敏感等级是两条线,分开维护。
好了,这一章的核心就这些。记住:识别规则是骨架,内置分类器是肌肉,自定义标签是神经——三者配合,数据分类分级才真正能落地。