本文档描述了一种我们希望最终对用户隐藏的配置格式。该页面仍然存在的唯一原因是当前 Relay 接受这种格式以替代常规数据清理设置。

以下文档探讨了 Relay 使用和执行的高级数据清理配置的语法和语义。有时,这也称为 PII 清理。

  • https://github.com/getsentry/relay
  • https://docs.sentry.io/product/data-management-settings/scrubbing/advanced-datascrubbing/
  • Scrub personally identifiable information (PII)
    • https://docs.sentry.io/product/relay/

一个基本的例子

假设您有一条异常消息,不幸的是,其中包含不应该存在的 IP 地址。你会写:

{"applications": {"$string": ["@ip:replace"]}
}

它读作 “替换所有字符串中的所有 IP 地址”,或 "将 @ip:replace 应用于所有 $string 字段"。

@ip:replace 称为规则,$string 称为选择器。

  • https://develop.sentry.dev/pii/selectors/

内置规则

默认存在以下规则:

  • @ip:replace@ip:hash 用于替换 IP 地址。
  • @imei:replace@imei:hash 用于替换 IMEI
  • @mac:replace@mac:mask@mac:hash 用于匹配 MAC 地址。
  • @email:mask@email:replace@email:hash 用于匹配 email 地址。
  • @creditcard:mask@creditcard:replace@creditcard:hash 用于匹配信用卡号码。
  • @userpath:replace@userpath:hash 用于匹配本地路径(例如 C:/Users/foo/)。
  • @password:remove 用于删除密码。在这种情况下,我们对字段的 key 进行 pattern 匹配,无论它是否包含 passwordcredentials 或类似的字符串。
  • @anything:remove@anything:replace@anything:hash 用于删除、替换或 hash 任何值。它本质上等同于通配符正则表达式,但它也比字符串匹配得多。

编写自己的规则

规则一般由两部分组成:

  • 规则类型 描述要匹配的内容。有关详尽列表,请参阅PII 规则类型。

    • https://develop.sentry.dev/pii/types/
  • 规则编辑方法 描述了如何处理匹配。有关列表,请参阅PII 编辑方法。
    • https://develop.sentry.dev/pii/methods/

每个页面都带有示例。
通过将这些示例粘贴到 Piinguin 的 “PII 配置” 列并单击字段以获取建议来尝试这些示例。

  • https://getsentry.github.io/piinguin/

交互式编辑

解决此问题的最简单方法是,如果您已经拥有来自某个 SDK 的原始 JSON payload
转到我们的 PII 配置编辑器 Piinguin,然后:

  1. 粘贴到原始事件中
  2. 点击你想要消除的数据
  3. 粘贴其他有效负载并查看它们是否正常,如有必要,请转到步骤 2

在对配置进行迭代后,将其粘贴回位于 .relay/projects/<PROJECT_ID>.json 的项目配置中

例如:

{"publicKeys": [{"publicKey": "___PUBLIC_KEY___","isEnabled": true}],"config": {"allowedDomains": ["*"],"piiConfig": {"rules": {"device_id": {"type": "pattern","pattern": "d/[a-f0-9]{12}","redaction": {"method": "hash"}}},"applications": {"freeform": ["device_id"]}}}
}

PII 规则类型

pattern

自定义 Perl 风格的正则表达式 (PCRE)。

{"rules": {"hash_device_id": {"type": "pattern","pattern": "d/[a-f0-9]{12}","redaction": {"method": "hash"}}},"applications": {"$string": ["hash_device_id"]}
}
imei

匹配 IMEI 或 IMEISV。

{"rules": {"hash_imei": {"type": "imei","redaction": {"method": "hash"}}},"applications": {"$string": ["hash_imei"]}
}
mac

匹配一个 MAC 地址。

{"rules": {"hash_mac": {"type": "mac","redaction": {"method": "hash"}}},"applications": {"$string": ["hash_mac"]}
}
ip

匹配任何 IP 地址。

{"rules": {"hash_ip": {"type": "ip","redaction": {"method": "hash"}}},"applications": {"$string": ["hash_ip"]}
}
creditcard

匹配信用卡号。

{"rules": {"hash_cc": {"type": "creditcard","redaction": {"method": "hash"}}},"applications": {"$string": ["hash_cc"]}
}
userpath

匹配本地路径(例如C:/Users/foo/)。

{"rules": {"hash_userpath": {"type": "userpath","redaction": {"method": "hash"}}},"applications": {"$string": ["hash_userpath"]}
}
anything

匹配任何值。这基本上等同于通配符正则表达式。

例如,要删除所有字符串:

{"rules": {"remove_everything": {"type": "anything","redaction": {"method": "remove"}}},"applications": {"$string": ["remove_everything"]}
}
multiple

将多个规则合二为一。这是一个析取 (OR):有问题的字段必须只匹配一个规则来匹配组合规则,而不是全部。

{"rules": {"remove_ips_and_macs": {"type": "multiple","rules": ["@ip","@mac"],"hide_rule": false,  // Hide the inner rules when showing which rules have been applied. Defaults to false."redaction": {"method": "remove"}}},"applications": {"$string": ["remove_ips_and_macs"]}
}
alias

别名一个规则到另一个。这与 multiple 相同,只是您只能包装一个规则。

{"rules": {"remove_ips": {"type": "multiple","rule": "@ip","hide_rule": false,  // Hide the inner rule when showing which rules have been applied. Defaults to false."redaction": {"method": "remove"}}},"applications": {"$string": ["remove_ips"]}
}

PII 编辑方法

remove

删除整个字段。Relay 可以选择将其设置为 null 或完全删除它。

{"rules": {"remove_ip": {"type": "ip","redaction": {"method": "remove"}}},"applications": {"$string": ["remove_ip"]}
}
replace

static string 替换 key

{"rules": {"replace_ip": {"type": "ip","redaction": {"method": "replace","text": [censored]"}}},"applications": {"$string": ["replace_ip"]}
}
### mask

"masking(掩码)" 字符 * 替换匹配字符串的每个字符。与 replace 相比,它保留了原始字符串的长度。

{"rules": {"mask_ip": {"type": "ip","redaction": {"method": "mask"}}},"applications": {"$string": ["mask_ip"]}
}
### hash

用它自己的 hash 版本替换字符串。相等的字符串将产生相同的 hash 值,因此,例如,如果您决定对用户 ID 进行散列处理而不是替换或删除它,您仍将获得受影响用户的准确计数。

{"rules": {"hash_ip": {"type": "ip","redaction": {"method": "hash"}}}"applications": {"$string": ["mask_ip"]}
}

PII 选择器

选择器允许您将规则限制在事件的某些部分。
这对于按变量/字段名称从事件中无条件删除某些数据很有用,但也可用于对真实数据进行保守的测试规则。

数据清理始终适用于原始事件负载。
请记住,UI 中的某些字段在 JSON schema 中的调用方式可能不同。
在查看事件时,应该始终存在一个名为 "JSON" 的链接,可让您查看数据清理器看到的内容。

例如,在 UI 中称为 "Additional Data" 的内容在事件负载中称为 extra。要删除名为 foo 的特定 key,您可以编写:

[Remove] [Anything] from [extra.foo]

另一个例子。Sentry 知道两种错误消息:异常消息顶级日志消息
以下是由 SDK 发送的此类事件负载(可从 UI 下载)的示例:

{"logentry": {"formatted": "Failed to roll out the dinglebop"},"exceptions": {"values": [{"type": "ZeroDivisionError","value": "integer division or modulo by zero"}]}
}

由于 "error message" 取自 exceptionvalue
而 "message" 取自 logentry,因此我们必须编写以下内容以将两者从事件中删除:

[Remove] [Anything] from [exception.value]
[Remove] [Anything] from [logentry.formatted]

布尔逻辑

您可以使用布尔逻辑组合选择器。

  • ! 为前缀来反转选择器。foo 匹配 JSON key foo,而 !foo 匹配除 foo 之外的所有内容。
  • 使用 && 构建连词 (AND),例如:foo && !extra.foo 以匹配 key foo,除非在 extra 内部。
  • 使用 || 构建析取 (OR),例如:foo || bar 匹配 foobar

通配符

  • ** 匹配所有子路径,因此 foo.** 匹配 foo 中的所有 JSON 键。
  • * 匹配单个路径项,因此 foo.* 匹配比 foo 低一级的所有 JSON 键。

值类型

使用以下内容按 JSON-type 选择子节:

  • $string 匹配任何字符串值
  • $number 匹配任何整数或浮点值
  • $datetime 匹配事件中代表时间戳的任何字段
  • $array 匹配任何 JSON 数组值
  • $object 匹配任何 JSON 对象

使用以下方法选择 schema 的已知部分:

  • $exception 匹配 {"exception": {"values": [...]}} 中的单个异常实例
  • $stacktrace 匹配一个堆栈跟踪实例
  • $frame 匹配一个帧
  • $request 匹配事件的 HTTP 请求上下文
  • $user 匹配事件的用户上下文
  • $logentry(也适用于 message 属性)
  • $thread 匹配 {"threads": {"values": [...]}} 中的单个线程实例
  • $breadcrumb 匹配 {"breadcrumbs": [...]} 中的单个面包屑
  • $span 匹配一个 trace span
    • https://docs.sentry.io/product/sentry-basics/tracing/distributed-tracing/
  • $sdk 匹配 {"sdk": ...} 中的 SDK 上下文

示例

  • 删除 event.user:

    [Remove] [Anything] from [$user]
  • 删除所有帧局部变量:

    [Remove] [Anything] from [$frame.vars]

转义特殊字符

如果要匹配的对象 key 包含空格或特殊字符,可以使用引号将其转义:

[Remove] [Anything] from [extra.'my special value']

这与 附加数据 中的 key my special value 相匹配。

要在引号内转义 '(单引号),请将其替换为 ''(两个引号):

[Remove] [Anything] from [extra.'my special '' value']

这与 附加数据 中的key my special ' value 值相匹配。

更多

  • Sentry 企业级数据安全解决方案 - Relay 入门
  • Sentry 企业级数据安全解决方案 - Relay 运行模式
  • Sentry 企业级数据安全解决方案 - Relay 配置选项
  • Sentry 企业级数据安全解决方案 - Relay 监控 & 指标收集
  • Sentry 企业级数据安全解决方案 - Relay 项目配置
  • Sentry 开发者贡献指南 - SDK 开发(性能监控:Sentry SDK API 演进)

Sentry 企业级数据安全解决方案 - Relay PII 和数据清理相关推荐

  1. Sentry 企业级数据安全解决方案 - Relay 操作指南

    内容整理自官方文档 本篇回顾了我们在自托管外部使用 Relay 时的操作指南,即在您的硬件上运行的 Relay 并将事件转发到 sentry.io. 系列 Sentry 企业级数据安全解决方案 - R ...

  2. 《Hadoop高级编程》之为Hadoop实现构建企业级安全解决方案

    本章内容提要 ●    理解企业级应用的安全顾虑 ●    理解Hadoop尚未为企业级应用提供的安全机制 ●    考察用于构建企业级安全解决方案的方法 第10章讨论了Hadoop安全性以及Hado ...

  3. 山石网科发布数据安全综合治理体系,覆盖数据全生命周期

    编辑 | 宋慧 出品 | CSDN 云计算 11月24日,在"从一维到多维 ,让数据安全有章可循--山石网科数据安全综合治理体系发布会"上,山石网科面向全行业推出<数据安全治 ...

  4. 华为云数据安全中心正式公测,8大核心数据安全能力守护你的数据

    摘要:数据是当今时代的金矿.政企用云数字化转型的同时,如何清晰透明地保护数据资产的安全? 数据是当今时代的金矿.政企用云数字化转型的同时,如何清晰透明地保护数据资产的安全? 近日,华为云安全首席技术官 ...

  5. Oracle数据安全解决方案(1)——透明数据加密TDE

    Oracle数据安全解决方案(1)--透明数据加密TDE 2009年09月23日 22:49:00 华仔爱技术 阅读数:7991 原文地址: http://www.oracle.com/technol ...

  6. 滴滴开源夜莺 Nightingale:企业级监控解决方案

    滴滴又双叒发布新开源项目啦! 夜莺(Nightingale),是滴滴基础平台联合滴滴云研发和开源的企业级监控解决方案,旨在满足云原生时代企业级的监控需求. Nightingale简介 据滴滴官方介绍, ...

  7. 华为云数据库mysql云灾备方案_华为云MySQL云灾备解决方案,为企业数据提供全方位的异地保护...

    华为云MySQL云灾备解决方案,为企业数据提供全方位的异地保护 2019年10月30日 17:30作者:黄页编辑:黄页 分享 随着数字化进程和企业上云的加快,越来越多企业数据库寻求高效稳定的云服务,数 ...

  8. 腾讯安全发布《数据安全解决方案白皮书》

    以下是<腾讯数据安全解决方案白皮书>全文: 第1章 导读 1.1  背景 近年来数据安全事件频出,尤其个人隐私信息保护是行业关注的热点话题,GDPR法案的推出进一步推动了全球数据安全相关的 ...

  9. 《SOA与REST:用REST构建企业级SOA解决方案》目录—导读

    献词 SOA与REST:用REST构建企业级SOA解决方案 谨以此书献给ChristophSchittko,他毫无顾忌的审阅评注使我们在本书书稿已经提交印刷之后仍然决定改变内容结构,而后续的变化极大地 ...

最新文章

  1. 选择python培训机构的关键考核五大因素,让你永不吃亏!
  2. 人机融合智能:人工智能3.0
  3. WPF and Silverlight 学习笔记(九):WPF布局管理之Canvas、InkCanvas
  4. 人脸识别入侵生活,但“刷脸”背后你的信息安全吗?
  5. ISCC2021 美人计
  6. 效能改进之项目例会导入实践 1
  7. include php 失效,为什么include(‘php:// input’)不起作用?
  8. 入门JavaScript?看懂这篇文章就够了!——Web前端系列学习笔记
  9. key value vue 输出_vue注意事项总结(一)
  10. DolphinPHP
  11. 【kafka】kafka DefaultRecordBatch. The older message format classes only support conversion from class
  12. python运维开发之第九天
  13. from injection shell sql to_FROM SQL INJECTION TO SHELL: POSTGRESQL EDITION
  14. 仿人机器人的跑步研究学习笔记2之什么是正逆运动学
  15. 十二进制转化为十进制
  16. 三哥新发现了比金星还厉害的飞行物
  17. Win10 关机显示程序没有响应
  18. android 身份认证技术,Android平台上基于人脸识别的身份认证系统的设计与实现
  19. 织梦++高级搜索php,织梦多条件筛选功能实现(dede联动搜索) - DeDecms
  20. 微信“戒烟”了!网友:我也戒

热门文章

  1. lol无限火力服务器卡顿,LOL无限火力无限彗星BUG是什么? 无限彗星超强卡BUG技巧Get起来...
  2. css3中的动画特效--跳动的篮球
  3. andorid pppoe拨号上网
  4. 小红书SEO之关键词排名优化详解【从入门到精通】
  5. php编辑菱形图案代码,打印菱形图案 (15 分)
  6. diy 服务器 支持 esxi,【我的技术我做主】IT屌丝DIY ESXI虚拟化服务器再度升级ESXI6.0...
  7. eclipse pull异常 Pulling 1 respository (The pull operation was canceled)
  8. Python解析页面国家码
  9. 求两个正整数的最大公约数和最小公倍数
  10. 查看aix服务器序列号,CentOS和AIX查看系统序列号