数据脱敏可以有效地减少敏感数据在加工、传输、使用等环节中的暴露,降低敏感数据泄露的风险,保护用户权益。本文介绍日志服务数据加工(新版)过程中常见的脱敏场景、对应的脱敏方法及示例。
背景信息
常见脱敏场景包括手机号、银行卡号、邮箱、IP、AK、身份证号、网址、字符串等敏感信息脱敏。在SLS数据加工服务中,常见的脱敏方法是正则表达式函数regex_replace。
场景1:手机号脱敏
脱敏方法
日志中包含不希望被暴露的手机号,可采用正则表达式,运用
regex_replace
函数脱敏。子场景1:展示手机号的前三位和后四位,中间隐藏。
原始日志
message:{"data":{"receivePhoneNo":"yourPhoneNo"}}
SPL编排规则
* | extend message1 = regexp_replace(message, 'receivePhoneNo":\s*"([\+86]*1[3-9]{1}\d{1})\d{4}(\d{4,11})','receivePhoneNo":"\1****\2"')
加工结果
message1:{"data":{"receivePhoneNo":"138****5678""}}
子场景2:港澳地区展示手机号的前两位和后两位,中间隐藏。
原始日志
message:{"data":{"receivePhoneNo":"yourPhoneNo"}}
SPL编排规则
* | extend message1 = regexp_replace(message, 'receivePhoneNo":\s*"(5|6|7|8|9)(\d{1})(\d{4})(\d{2})\"','receivePhoneNo":"\1\2****\4"')
加工结果
message1:{"data":{"receivePhoneNo":"59****19"}}
子场景3:台湾地区展示手机号的前两位和后两位,中间隐藏。
原始日志
message:{"data":{"receivePhoneNo":"yourPhoneNo"}}
SPL编排规则
* | extend message1 = regexp_replace(message, 'receivePhoneNo":\s*"(0[2-9])(\d{5,6})(\d{2})\"','receivePhoneNo":"\1******\3"')
加工结果
message1:{"data":{"receivePhoneNo":"02******98"}}
场景2:银行卡信息脱敏
脱敏方法
日志中包含银行卡或者信用卡信息,可采用正则表达式,运用
regex_replace
函数脱敏。示例
原始日志
content: bank number is yourBankNo and credit card number is yourCreditCardNo
SPL编排规则
* | extend bank_number=regexp_replace(content, '([1-9]{1})(\d{11}|\d{13}|\d{14})(\d{4})', '****\3')
加工结果
bank_number: bank number is ****978312 and credit card number is ***9780
场景3:邮箱地址脱敏
脱敏方法
日志中包含邮箱信息,可采用正则表达式,运用
regex_replace
函数脱敏。子场景1:隐藏邮箱前缀。
原始日志
content: email is user@example.com
SPL规则编排
* | extend email_encrypt=regexp_replace(content, '[A-Za-z\d]+([-_.][A-Za-z\d]+)*(@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4})', '****\2')
处理后数据
email_encrypt: email is ****@example.com
子场景2:@前小于三个字符,后缀固定的邮箱脱敏。
原始日志
message:{"data":{"email":"tt@example.com","icon":"ee@2.png"}}
SPL规则编排
* | extend message1 = regexp_replace(message,'":\s*"([A-Za-z0-9._%+-]{1,2})(@\w+\.)(com|net|org)\"','":"\1**\2\3"')
处理后数据
message1:{"data":{"email":"tt**@example.com","icon":"ee@2.png"}}
子场景3:@前大于三个字符的邮箱脱敏。
原始日志
message:{"data":{"email":"user@example.com","icon":"esdse@2.png"}}
SPL规则编排
* | extend message1 = regexp_replace(message, 'email":\s*"([A-Za-z0-9._%+-]{3})([A-Za-z0-9._%+-]*)(@)(\w+\.\w+)"','email":"\1**\3\4"')
处理后数据
message1:{"data":{"email":"use**@example.com","icon":"esdse@2.png"}}
场景4:AK脱敏
脱敏方法
日志中包含AccessKey信息,可采用正则表达式,应用
regex_replace
函数。示例
原始日志
content: ak id is yourAccessKeyID and ak key is yourAccessKeySecret
SPL编排规则
* | extend akid_encrypt=regexp_replace(content, '([a-zA-Z0-9]{4})(([a-zA-Z0-9]{26})|([a-zA-Z0-9]{12}))', '\1****')
加工结果
akid_encrypt: ak id is LTAI**** and ak key is XQr1****
场景5:IP地址脱敏
脱敏方法
日志中包含IP地址信息,可采用正则表达式,应用
regex_replace
函数。示例
原始日志
content: ip is 192.168.1.1
SPL编排规则
* | extend ip_encrypt=regexp_replace(content, '(\w+\s+\w+\s+)\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}', '\1****')
加工结果
ip_encrypt: ip is ****
场景6:身份证脱敏
脱敏方法
日志中包含身份证信息,可采用正则表达式,应用
regex_replace
函数。子场景1:展示身份证前六位,后面隐藏。
原始日志
content: Id card is yourIdCardNo
SPL编排规则
* | extend id_encrypt=regexp_replace(content, '([\d]{4})[\d]{11}([\d]{2}[\d|Xx])', '\1****')
加工结果
id_encrypt: Id card is 110105****
子场景2:展示身份证前四位和后三位,中间隐藏。
原始日志
message:{"data":{"cardNumber":"yourIdCardNo","cardNumber":"yourPassportNo","receivePhoneNo":"yourPhoneNo"}}
SPL编排规则
* | extend message1 = regexp_replace(message, 'cardNumber":\s*"([\d]{4})[\d]{11}([\d]{2}[\d|Xx])\"','cardNumber":"\1****\2"')
加工结果
message1:{"data":{"cardNumber":"4101****234","cardNumber":"yourPassportNo","receivePhoneNo":"yourPhoneNo"}}
子场景3:展示护照首字母和最后三位数字,中间隐藏。
原始日志
message:{"data":{"cardNumber":"yourIdCardNo","cardNumber":"yourPassportNo","receivePhoneNo":"yourPhoneNo"}}
SPL编排规则
* | extend message1 = regexp_replace(message, 'cardNumber":\s*"([G|E|H|M|P|B|D])\d{6}(\d{3})\"','cardNumber":"\1****\2"')
加工结果
message1:{"data":{"cardNumber":"yourIdCardNo","cardNumber":"E****451","receivePhoneNo":"yourPhoneNo"}}
子场景4:展示港澳通行证第五位至第八位,前面隐藏。
原始日志
message:{"data":{"cardNumber":"yourCardNo","cardNumber":"yourPassportNo","receivePhoneNo":"yourPhoneNo"}}
SPL编排规则
* | extend message1 = regexp_replace(message, 'cardNumber":\s*"([\d]{4})([\d]{4})\"','cardNumber":"****\2"')
加工结果
message1:{"data":{"cardNumber":"****0902","cardNumber":"yourPassportNo","receivePhoneNo":"yourPhoneNo"}}
子场景5:仅展示前两位和后两位,中间隐藏。
原始日志
message:{"data":{"cardNumber":"yourCardNo","cardNumber":"yourPassportNo","receivePhoneNo":"yourPhoneNo"}}
SPL编排规则
* | extend message1 = regexp_replace(message, 'cardNumber":\s*"([A-Z])(\d{1})([\d]{6})([\d]{2})\"','cardNumber":"\1\2******\4"')
加工结果
message1:{"data":{"cardNumber":"yourCardNo","cardNumber":"E1******51","receivePhoneNo":"yourPhoneNo"}}
场景7:网址脱敏
脱敏方法
对日志内容中的网址做脱敏处理,可运用url_encode编码函数,对网址进行转码。
示例
原始日志
url: https://www.aliyun.com/sls?logstore
SPL编排规则
* | extend encode_url=url_encode(url)
加工结果
encode_url: https%3A%2F%2Fwww.aliyun.com%2Fsls%3Flogstore
场景8:订单号脱敏
脱敏方法
对日志内容中的订单号做脱敏处理,同时不希望其他人能够解码,可运用md5编码函数,对订单号进行编码。
示例
原始日志
orderId: 15121412314
加工规则
* | extend md5_orderId=to_hex(md5(to_utf8(orderId)))
加工结果
md5_orderId: 852751F9AA48303A5691B0D020E52A0A
场景9:姓名脱敏
脱敏方法
日志中包含姓名,可采用正则表达式,应用
regex_replace
函数。子场景1:三字姓名隐藏在中间。
原始日志
message:{"data":{"name":"卫小明"}}
SPL编排规则
* | extend message1 = regexp_replace(message, 'name":\s*"([\x{4e00}-\x{9fa5}])([\x{4e00}-\x{9fa5}])([\x{4e00}-\x{9fa5}])\"','name":"\1*\3"')
加工结果
message1:{"data":{"name":"卫*明"}}
子场景2:二字姓名仅展示末尾。
原始日志
message:{"data":{"name":"卫明"}}
SPL编排规则
* | extend message1 = regexp_replace(message, 'name":\s*"[\x{4e00}-\x{9fa5}]([\x{4e00}-\x{9fa5}])\"','name":"*\1"')
加工结果
message1:{"data":{"name":"*明"}}
子场景3:英文名字仅展示首字母。
原始日志
message:{"data":{"name":"Sam Alice"}}
SPL编排规则
* | extend message1 = regexp_replace(message, 'name":\s*"([a-zA-Z])[a-zA-Z]+\s+([a-zA-Z])[a-zA-Z]+','name":"\1**** \2****"')
加工结果
message1:{"data":{"name":"S**** A****""}}
场景10:家庭地址脱敏
脱敏方法
日志中包含地址信息,可采用正则表达式,应用
regex_replace
函数。示例
原始日志
message:{"data":{"address":"上海市徐汇区漕河泾开发区文景路90号"}}
SPL编排规则
* | extend message1 = regexp_replace(message, 'address":\s*"(.*(省|市|自治区|特别行政区|地区|县|区|市辖区))?(.*(区))(.*)\"','address":"\1\3**"')
加工结果
message1:{"data":{"address":"上海市徐汇区**"}}