数据脱敏

数据脱敏可以有效地减少敏感数据在加工、传输、使用等环节中的暴露,降低敏感数据泄露的风险,保护用户权益。本文介绍日志服务数据加工过程中常见的脱敏场景、对应的脱敏方法及示例。

背景信息

使用敏感数据包括手机号、银行卡号、邮箱、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