數據脫敏可以有效地減少敏感數據在加工、傳輸、使用等環節中的暴露,降低敏感數據泄露的風險,保護用戶權益。本文介紹日志服務數據加工過程中常見的脫敏場景、對應的脫敏方法及示例。
背景信息
使用敏感數據包括手機號、銀行卡號、郵箱、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