在金融数据工程体系中,数据安全不是可选项,而是监管红线。《个人信息保护法》《数据安全法》《金融数据安全数据安全分级指南》等法规,对银行、保险、证券公司处理客户敏感信息提出了明确要求。
监管框架下的数据分级
根据中国人民银行金融数据安全分级指南,金融数据分为五个安全级别:
| 级别 | 定义 | 典型数据 | 防护要求 |
|---|---|---|---|
| 5级 | 核心数据 | 核心系统密钥、根证书 | 最高物理隔离、国密加密-HSM |
| 4级 | 重要数据 | 客户身份证号、银行卡号、征信报告 | 加密存储、动态脱敏、访问审计 |
| 3级 | 内部数据 | 交易明细、资产负债数据 | 访问控制、操作留痕 |
| 2级 | 内部公开 | 产品目录、费率信息 | 访问权限管理 |
| 1级 | 公开数据 | 银行网点信息、公开报告 | 基本访问控制 |
4级敏感信息必须在数据采集入ODS层之前完成脱敏/加密。
脱敏 vs 加密
- 脱敏(Masking):不可逆,适合不需要还原真实值的场景。如哈希脱敏、截断脱敏、遮盖脱敏。
- 加密(Encryption):可逆,适合需要还原的场景。采用国密SM4、AES-256等算法。
- 令牌化(Tokenization):用无意义令牌替换敏感值,通过独立服务台还原。
全链路脱敏策略
1. 采集阶段:入仓即脱敏
import hashlib, re
def mask_id_card(id_card: str) -> str:
if not id_card or len(id_card) != 18:
return ""
return id_card[:3] + "*********" + id_card[-4:]
def hash_card_no(card_no: str) -> str:
return hashlib.sha256(card_no.encode()).hexdigest()
2. 存储阶段:列级加密 + TDE
Hive/Parquet存储中,对4级字段采用列级加密。同时配合 HDFS Transparent Encryption 实现"落盘即加密,读取时自动解密"。
3. 加工阶段:动态脱敏
由查询引擎层拦截 SQL,根据用户角色实时脱敏。Apache Ranger + Hive 插件可实现列级动态脱敏。
4. 共享与输出阶段:水印与审批
数据对外输出时植入隐形水印,便于泄露时追溯责任方。同时通过工单系统审批,数据样本必须经过K-Anonymity或L-Diversity匿名化处理。
密钥管理
银行级的密钥管理要求: 1. 密钥分层:根密钥(HSM)→ 主密钥 → 数据密钥 2. 密钥轮换:至少每季度轮换一次 3. 双人控制:接触密钥的人员需经过双人控制 4. 审计日志:所有加解密操作全量记录到不可篡改的日志中
总结
金融数据安全是"制度 + 技术 + 监控"三位一体的体系。在写每一行ETL代码时多问一句:"这条SQL处理的数据包含几级敏感信息?结果会不会写入没有加密的目录?"这三个问题的答案,决定了你的数据链路是资产还是负债。