数据脱敏可以有效地减少敏感数据在加工、传输、使用等环节中的暴露,降低敏感数据泄露的风险,保护用户权益。本文介绍日志服务数据加工过程中常见的脱敏场景、对应的脱敏方法及示例。
背景信息
使用敏感数据包括手机号、银行卡号、邮箱、IP地址、AK、身份证号网址、订单号、字符串等场景中,您需要为敏感数据进行脱敏操作。在日志服务数据加工服务中,常见的脱敏方法有正则表达式替换(关键函数regex_replace)、Base64转码(关键函数base64_encoding)、MD5编码(关键函数md5_encoding)、str_translate映射(关键函数str_translate)、GROK捕获(关键函数grok)等。更多信息,请参见正则表达式函数、GROK函数和编码解码函数。
场景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"), )
- 加工结果
iphone: 13900001234 sec_iphone: 139****1234
- 原始日志
场景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" ), )
- 加工结果
content: bank number is 491648411333978312 and credit card number is 4916484113339780 bank_number: bank number is ****8312 and credit card number is ****9780
- 原始日志
场景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****", ), )
- 加工结果
content: ak id is <testAccessKey ID> and ak key is <testAccessKey Secret> akid_encrypt: ak id is rDhc**** and ak key is XQr1****
- 原始日志
场景5:IP地址脱敏
- 脱敏方法
日志中包含IP地址信息,可同时运用regex_replace函数和grok函数,对IP地址进行正则捕获后而脱敏。
- 示例
- 原始日志
content: ip is 192.0.2.10
- 加工规则
e_set("ip_encrypt",regex_replace(v('content'), grok('(%{IP})'), replace=r"****"))
- 加工结果
content: ip is 192.0.2.10 ip_encrypt: ip is ****
- 原始日志
场景6:身份证脱敏
- 脱敏方法
日志中包含身份证信息,可同时运用regex_replace函数和grok函数,对身份证号进行正则捕获后而脱敏。
- 示例
- 原始日志
content: Id card is 111222190002309999
- 加工规则
e_set( "id_encrypt", regex_replace(v("content"), grok("(%{CHINAID})"), replace=r"\1****") )
- 加工结果
content: Id card is 111222190002309999 id_encrypt: Id card is 111222****
- 原始日志
场景7:网址脱敏
- 脱敏方法
对日志内容中的网址做脱敏处理,并且将脱敏的数据转成明文格式,可运用Base64编码解码函数,对网址进行转码。
- 示例
- 原始日志
url: https://www.aliyun.com/sls?logstore
- 加工规则
e_set("base64_url",base64_encoding(v("url")))
- 加工结果
url: https://www.aliyun.com/sls?logstore base64_url: aHR0cHM6Ly93d3cuYWxpeXVuLmNvbS9zbHM/bG9nc3RvcmU=
说明 如果想对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函数制订映射规则,对关键字符或字符串进行映射脱敏。
- 示例
- 原始日志
data: message level is info_
- 加工规则
e_set("data_translate", str_translate(v("data"),"aeiou","12345"))
- 加工结果
data: message level is info data_translate: m2ss1g2 l2v2l 3s 3nf4
- 原始日志