日志脱敏

最近更新时间:2025-07-01 16:21:52

我的收藏

场景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"
}
]

敏感项统计分析

select
case when
SENSITIVE_FLAGS like '%CHINA_ID%'
then '身份证个数'
when
SENSITIVE_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"}