全部产品
Search
文档中心

日志服务:使用mask函数进行数据脱敏

更新时间:Dec 04, 2025

阿里云日志服务(SLS)推出 mask 脱敏函数。相比传统正则脱敏方案的局限性,mask 函数在适用场景上更具优势,并结合典型场景展示其在敏感数据保护与合规要求中的价值。

使用限制

目前mask函数仅适用于数据加工(新版)写入处理器

脱敏方案概述

背景

随着AI时代交互数据的快速增长,个人隐私信息的安全保护成为企业合规经营的重要组成部分。GDPR、《数据安全法》、《个人信息保护法》等法律法规对企业处理敏感信息提出了严格要求。

正则脱敏

阿里云日志服务(SLS)提供了一套完善的数据脱敏体系,支持多种灵活的采集+脱敏Pipeline组合流程,以满足不同业务场景的需求。

  • LoongCollector端侧脱敏:

    • 通过在采集配置中配置数据脱敏插件,利用正则匹配实现对敏感字段的替换。

    • 通过SPL语句使用regexp_replace函数,在服务侧完成高性能脱敏处理。

  • LoongCollector/SDK + 写入处理器联合脱敏:

脱敏升级方案:mask函数

针对正则表达式脱敏存在的配置复杂、性能瓶颈和场景适配难等问题,SLS推出全新的mask脱敏函数,以提供更便捷、高效和智能的数据脱敏解决方案。

mask函数

函数语法

mask(field, varchar params)

参数说明

参数

说明

field

需要脱敏数据的原始字段名称。

param

该参数是JSON数组,可以定义一条或多条param参数规则

param参数规则

参数

是否必填

说明

mode

选择脱敏模式:

  • keyword:关键字匹配,智能识别任意文本中符合"key":"value"、'key':'value'或key=value等常见KV对格式的敏感信息。

  • buildin:内置规则匹配。

types

mode选择buildin 模式必填

内置规则列表:

  • CREDIT_CARD:匹配信用卡/借记卡号(16-19位数字,支持 Visa=4, MC=51-55/2221-2720, Amex=34/37, Discover=6011/65, UnionPay=62 支持当前几种格式)。

  • IP_ADDRESS:匹配 IPv4 地址(格式:xxx.xxx.xxx.xxx)。

  • EMAIL:匹配标准电子邮件地址。

    • 形态:local-part@domain.tld

    • 规则: local 支持字母数字、下划线、连字符和点;必须有且仅一个 @;domain 允许字母数字与连字符,必须包含点,末尾 TLD 至少 2 字符。

keys

mode选择keyword模式必填

定义需匹配的关键字列表,如 ["userName", "wallet"]

maskChar

用于脱敏的字符,默认为 *

keepPrefix

保留字段开头的字符数,例如 keepPrefix:3 保留前3位字符。

keepSuffix

保留字段结尾的字符数,例如 keepSuffix:3 保留后3位字符。

示例

示例1:交易数据脱敏

DeFi平台每日处理数万笔链上交易,每笔交易都会生成包含用户钱包地址、交易哈希、用户画像等敏感信息的详细日志。为了满足数据保护法规要求,同时保证业务分析和故障排查的需要,需要对交易确认日志中的钱包地址、地址信息、来源IP、手机号、交易哈希等敏感字段进行脱敏,保留前后各3位字符以便业务追溯。

  • 原始数据

    2025-08-20 18:04:40,998 INFO  blockchain-event-poller-3 [10.0.1.20] [com.service.listener.TransactionStatusListener:65] [TransactionStatusListener#handleSuccessfulTransaction]{"message":"On-chain transaction successfully confirmed","confirmationDetails":{"transactionHash":"0x2baf892e9a164b1979","status":"success","blockNumber":45101239,"gasUsed":189543,"effectiveGasPrice":"58.2 Gwei","userProfileSnapshot":{"wallet":"0x71C7656EC7a5f6d8A7C4","sourceIp":"203.0.113.55","phone":"19901012345","address":"上海市浦东新区文明路1000号","birthday":null}}}
  • SPL语句

    在数据处理器中使用以下SPL语句。

    *| extend content =  mask(content,'[
               {"mode":"keyword","keys":["wallet","address","sourceIp","phone","transactionHash"], "maskChar":"*","keepPrefix":3,"keepSuffix":3}
             ]')
  • 输出结果

    2025-08-20 18:04: 40, 998 INFO blockchain-event-poller-3 [10.0.1.20][com.service.listener.TransactionStatusListener: 65]][TransactionStatusListener#handleSuccessfulTransaction]{"message": "0n-chain transaction successfully confirmed", "confirmationDetails": {"transactionHash": "0×2**************979", "status": "success", "blockNumber": 45101239, "gasUsed": 189543, "effectiveGasPrice": "58.2 Gwei", "userProfileSnapshot": {"wallet": "0x7****************7C4", "sourceIp": "203******.55", "phone": "199*****345", "address": "上海市*********00号", "birthday": null}}}

示例2:Nginx日志中敏感URI参数脱敏实践

某电商平台的API网关每日处理数千万次请求,现需要对URI里的uid和token参数进行脱敏,保留前后各2位字符。

  • 原始数据

    这是一条典型的API访问日志URI,包含了用户身份信息和会话认证信息。

    http_protocol: HTTP/1.1
    remote_addrs: 127.0.0.1
    request_time:  5000
    status: 302
    time_local: 2025-08-19T18:52:03+08:00
    uri: "uid=user12345&token=bf81639a41d604&from=web"
    user_agent: Mozilla/5.0(Windows NT 5.2; WOW64))AppleWebKit/535.1(
    (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1
  • SPL语句

    在数据处理器中使用keyword模式,定位URI参数进行选择性脱敏。

    * | extend uri=mask(uri, '[
    {"mode": "keyword", "keys": ["uid", "loginIp", "token"],  "maskChar": "*", "keepPrefix": 2, "keepSuffix": 2}
    ]')
  • 输出结果

    http_protocol: HTTP/1.1
    remote_addrs: 127.0.0.1
    request_time:  5000
    status: 302
    time_local: 2025-08-19T18:52:03+08:00
    uri: uid=us*****45&token=bf**********04&from=web
    user_agent: Mozilla/5.0(Windows NT 5.2; WOW64))AppleWebKit/535.1(
    (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1