使用DSL加工函数对LTS日志数据脱敏
数据脱敏可以有效地减少敏感数据在加工、传输、使用等环节中的暴露,降低敏感数据泄露的风险,保护用户权益。本文介绍日志服务数据加工过程中常见的脱敏场景、对应的脱敏方法及示例。
背景信息
使用敏感数据包括手机号、银行卡号、邮箱、IP地址、AK、身份证号、网址、订单号、字符串等场景中,您需要为敏感数据进行脱敏操作。在日志服务数据加工服务中,常见的脱敏方法有正则表达式替换(关键函数regex_replace)、Base64转码(关键函数base64_encoding)、MD5编码(关键函数md5_encoding)、str_translate映射(关键函数str_translate)等。更多信息,请参见正则表达式函数和编码解码函数。
场景1:手机号脱敏
日志中包含不希望被暴露的手机号,可采用正则表达式,运用regex_replace函数脱敏。参考如下示例:
- 原始日志
{ "iphone":"13900001234" }
- 加工规则
e_set( "sec_iphone", regex_replace(v("iphone"), r"(\d{0,3})\d{4}(\d{4})", replace=r"\1****\2"), )
- 加工结果
{ "sec_iphone": "139****1234", "iphone": 13900001234 }
场景2:银行卡信息脱敏
日志中包含银行卡或者信用卡信息,可采用正则表达式,运用regex_replace函数脱敏。
- 原始日志
{ "content":"bank number is 491648411333978312 and credit card number is 4916484113339780" }
- 加工规则
e_set( "bank_number", regex_replace( v("content"), r"([1-9]{1})(\d{14}|\d{13}|\d{11})(\d{4})", replace=r"****\3" ), )
- 加工结果
{ "bank_number": "bank number is ****8312 and credit card number is ****9780", "content": "bank number is 491648411333978312 and credit card number is 4916484113339780" }
场景3:邮箱地址脱敏
日志中包含邮箱信息,可采用正则表达式,运用regex_replace函数脱敏。
- 原始日志
{ "content":"email is username@example.com" }
- 加工规则
e_set( "email_encrypt", regex_replace( v("content"), r"[A-Za-z\d]+([-_.][A-Za-z\d]+)*(@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4})", replace=r"****\2", ), )
- 加工结果
{ "content": "email is username@example.com", "email_encrypt": "email is ****@example.com" }
场景4:AK脱敏
日志中包含AccessKey信息,可采用正则表达式,应用regex_replace函数。
- 原始日志
{ "content":"ak id is <testAccessKey ID> and ak key is <testAccessKey Secret>" }
- 加工规则
e_set( "akid_encrypt", regex_replace( v("content"), r"([a-zA-Z0-9]{4})(([a-zA-Z0-9]{26})|([a-zA-Z0-9]{12}))", replace=r"\1****", ), )
- 加工结果
{ "akid_encrypt": "ak id is jdhc**** and ak key is Jkde****", "content": "ak id is <testAccessKey ID> and ak key is <testAccessKey Secret>" }
场景5:IP地址脱敏
日志中包含IP地址信息,可同时运用regex_replace函数,对IP地址进行正则捕获后而脱敏。
- 原始日志
{ "content":"ip is 192.0.2.10" }
- 加工规则
e_set("ip_encrypt",regex_replace(v('content'), r"((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])", replace=r"****"))
- 加工结果
{ "content": "ip is 2.0.2.10", "ip_encrypt": "ip is ****" }
场景6:身份证脱敏
日志中包含身份证信息,可同时运用regex_replace函数,对身份证号进行正则捕获后而脱敏。
- 原始日志
content: Id card is 111222190002309999
- 加工规则
e_set( "id_encrypt", regex_replace(v("content"), r"\b\d{17}(\d|X)\b", replace=r"\1****") )
- 加工结果
{ "id_encrypt": "Id card is 9****", "content": "Id card is 111222190002309999" }
场景7:网址脱敏
对日志内容中的网址做脱敏处理,并且将脱敏的数据转成明文格式,可运用Base64编码解码函数,对网址进行转码。
- 原始日志
{ "content":"https://www.huaweicloud.com/" }
- 加工规则
e_set("base64_url",base64_encoding(v("content")))
- 加工结果
{ "base64_url": "aHR0cHM6Ly93d3cuaHVhd2VpY2xvdWQuY29tLw==", "content": "https://www.huaweicloud.com/" }
如果想对base64_url进行解码,可以使用base64_decoding(v("base64_url"))DSL语法规则。
场景8:订单号脱敏
对日志内容中的订单号做脱敏处理,同时不希望其他人能够解码,可运用MD5编码函数,对订单号进行编码。
- 原始日志
{ "orderId": "20210101123456" }
- 加工规则
e_set("md5_orderId",md5_encoding(v("orderId")))
- 加工结果
{ "orderId": 20210101123456, "md5_orderId": "9c0ab8e4d9f4eb6fbd5c508bbca05951" }
场景9:字符串脱敏
若希望日志中的关键字符串不被暴露,可通过str_translate函数制定映射规则,对关键字符或字符串进行映射脱敏。
- 原始日志
{ "content": "message level is info_" }
- 加工规则
e_set("data_translate", str_translate(v("content"),"aeiou","12345"))
- 加工结果
{ "data_translate": "m2ss1g2 l2v2l 3s 3nf4_", "content": "message level is info_" }