场景1
场景描述
某公司的日志,部分日志中可能有用户姓名、身份证号、银行卡号等敏感信息,为优化日志写入规范,需要对日志中的敏感数据进行检测和统计。
原始日志
[{"operation_time": "2025-04-12 15:32:01","user_info": "张三申请开通服务,身份证号 522301199201230123","operation_detail": "成交金额200元"},{"operation_time": "2025-04-12 15:32:01","user_info": "李四申请开通服务,身份证号 522301199201230123,银行卡号 6228880123456789123","operation_detail": "成交金额100元"},{"operation_time": "2025-04-12 15:32:01","user_info": "王五申请开通服务,身份证号 522***1992****0123,银行卡号 6228****2345****123","operation_detail": "成交金额500元"}]
场景分析
使用数据加工,从原始日志中,检测身份证号、银行卡号等敏感信息,发现敏感信息后,在该日志中新增一个字段 SENSITIVE_FLAGS,该字段用于填充发现的 敏感信息项,并将加工结果写入目标日志主题。后续,您可在目标日志主题中,使用 SQL 统计敏感信息的类型和个数。
DSL 加工函数
//scope=ALL_FIELDS 意为搜索整条日志中的所有字段//sample_ratio=1意为对所有的日志进行敏感信息检测,0.5代表对50%的日志进行检测sensitive_detection(scope="ALL_FIELDS", sample_ratio=1, discover_items="CHINA_IDCARD,DEBIT_CARD")
加工结果
[//第一条数据中只有身份证敏感项{"SENSITIVE_FLAGS":"CHINA_IDCARD","operation_detail":"成交金额200元","operation_time":"2025-04-12 15:32:01","user_info":"张三申请开通服务,身份证号 522301199201230123"},//第二条数据中有身份证、银行卡两种敏感项{"SENSITIVE_FLAGS":"CHINA_IDCARD,DEBIT_CARD","operation_detail":"成交金额100元","operation_time":"2025-04-12 15:32:01","user_info":"李四申请开通服务,身份证号 522301199201230123,银行卡号 6228880123456789123"},//第三条数据是安全的, 因此标记为SAFE{"SENSITIVE_FLAGS":"SAFE","operation_detail":"成交金额500元","operation_time":"2025-04-12 15:32:01","user_info":"王五申请开通服务,身份证号 522***1992****0123,银行卡号 6228****2345****123"}]
敏感项统计分析
selectcase whenSENSITIVE_FLAGS like '%CHINA_ID%'then '身份证个数'whenSENSITIVE_FLAGS like '%DEBIT_CARD%'then '银行卡个数' else 'other'end as type ,count(*) as "敏感项"group by type HAVING type != 'other'limit 10000
统计分析结果:

场景2
场景描述
某用户将日志采集到日志服务(Cloud Log Service,CLS),日志数据中含有用户 ID(dev@12345)、登录的 IP 地址(11.111.137.225)和手机号码(13912345678),用户想将这些敏感信息脱敏。
场景分析
该日志本身是一个结构化的日志,因此可以直接对字段进行脱敏处理。
原始日志
{"Id": "dev@12345","Ip": "11.111.137.225","phonenumber": "13912345678"}
DSL 加工函数
fields_set("Id",regex_replace(v("Id"),regex="\\d{3}", replace="***",count=0))fields_set("Id",regex_replace(v("Id"),regex="\\S{2}", replace="**",count=1))fields_set("phonenumber",regex_replace(v("phonenumber"),regex="(\\d{0,3})\\d{4}(\\d{4})", replace="$1****$2"))fields_set("Ip",regex_replace(v("Ip"),regex="(\\d+\\.)\\d+(\\.\\d+\\.\\d+)", replace="$1***$2",count=0))
DSL 加工函数详解
1. 对 Id 字段进行脱敏处理,结果为 dev@***45。
fields_set("Id",regex_replace(v("Id"),regex="\\d{3}", replace="***",count=0))
2. 对 Id 字段进行二次脱敏处理,结果为**v@***45。
fields_set("Id",regex_replace(v("Id"),regex="\\S{2}", replace="**",count=1))
3. 对 phonenumber 字段进行脱敏处理,将中间的4位数替换为****,结果为139****5678。
fields_set("phonenumber",regex_replace(v("phonenumber"),regex="(\\d{0,3})\\d{4}(\\d{4})", replace="$1****$2"))
4. 对 IP 字段进行脱敏处理,将第二段替换为***,结果为11.***.137.225。
fields_set("Ip",regex_replace(v("Ip"),regex="(\\d+\\.)\\d+(\\.\\d+\\.\\d+)", replace="$1***$2",count=0))
加工结果
{"Id":"**v@***45","Ip":"11.***.137.225","phonenumber":"139****5678"}