当前位置: 首页 > 科技观察

Sentry企业级数据安全解决方案-中继PII和数据清理

时间:2023-03-13 03:47:04 科技观察

本文档描述了一种我们希望最终对用户隐藏的配置格式。此页面仍然存在的唯一原因是目前Relay接受此格式来代替正常的数据清理设置。以下文档探讨了中继使用和执行的高级数据清理配置的语法和语义。有时这也称为PII清理。一个基本示例假设您有一条异常消息,不幸的是它包含一个不应该存在的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用于匹配电子邮件地址。@creditcard:mask、@creditcard:replace和@creditcard:hash用于匹配信用卡号。@userpath:replace和@userpath:hash用于匹配本地路径(例如C:/Users/foo/)。@password:remove用于删除密码。在这种情况下,我们对字段的键进行模式匹配,无论它是否包含密码、凭据或类似字符串。@anything:remove、@anything:replace和@anything:hash用于删除、替换或散列任何值。它本质上等同于通配符正则表达式,但它匹配的不仅仅是字符串。编写自己的规则规则通常由两部分组成:规则类型描述要匹配的内容。有关详尽列表,请参阅PII规则类型。https://develop.sentry.dev/pii/types/规则编辑方法描述了如何处理匹配。有关列表,请参阅PII编辑方法。https://develop.sentry.dev/pii/methods/每个页面都带有示例。通过将这些示例粘贴到Piinguin的“PII配置”列并单击该字段以获取建议来尝试这些示例。https://getsentry.github.io/piinguin/交互式编辑解决此问题的最简单方法是,如果您已经从其中一个SDK获得了原始JSON负载。转到我们的PII配置编辑器Piinguin,然后:粘贴到原始事件中单击要消除的数据粘贴其他有效载荷,看看它们是否正常,如果需要,请转到步骤2。遍历配置后,将其粘贴回位于.relay/projects/.json中的项目配置例如:{"publicKeys":[{"publicKey":"___PUBLIC_KEY___","isEnabled":true}],"config":{"allowedDomains":["*"],"piiConfig":{"rules":{"device_id":{"type":"pattern","pattern":"d/[a-f0-9]{12}","re??daction":{"method":"hash"}}},"applications":{"freeform":["device_id"]}}}}PII规则类型模式{"rules":{"hash_device_id":{"type":"pattern","pattern":"d/[a-f0-9]{12}","re??daction":{"method":"hash"}}},"applications":{"$string":["hash_device_id"]}}imei:匹配IMEI或IMEISV。{"rules":{"hash_imei":{"type":"imei","re??daction":{"method":"hash"}}},"applications":{"$string":["hash_imei"]}}mac:匹配MAC地址。{"rules":{"hash_mac":{"type":"mac","re??daction":{"method":"hash"}}},"applications":{"$string":["hash_mac"]}}:ip匹配任何IP地址。{"rules":{"hash_ip":{"type":"ip","re??daction":{"method":"hash"}}},"applications":{"$string":["hash_ip"]}}creditcard:匹配信用卡号。{"rules":{"hash_cc":{"type":"creditcard","re??daction":{"method":"hash"}}},"applications":{"$string":["hash_cc"]}}userpath:匹配本地路径(例如C:/Users/foo/)。{"rules":{"hash_userpath":{"type":"userpath","re??daction":{"method":"hash"}}},"applications":{"$string":["hash_userpath"]}}anything:匹配任何值。这基本上等同于通配符正则表达式。例如,删除所有字符串:{"rules":{"remove_everything":{"type":"anything","re??daction":{"method":"remove"}}},"applications":{"$string":["remove_everything"]}}multiple:将多个规则合并为一个。这是一个析取(OR):有问题的字段必须只匹配一个规则才能匹配组合规则,而不是所有规则。{"rules":{"remove_ips_and_macs":{"type":"multiple","rules":["@ip","@mac"],"hide_rule":false,//Hidetheinnerruleswhenshowingwhichruleshavebeenapplied.Defaultstofalse."redaction":{"method":"remove"}}},"applications":{"$string":["remove_ips_and_macs"]}}alias:别名一个规则到另一个。这与多个相同,只是您只能包装一个规则。{"rules":{"remove_ips":{"type":"multiple","rule":"@ip","hide_rule":false,//Hidetheinnerrulewhenshowingwhichruleshavebeenapplied.Defaultstofalse."redaction":{"method":"remove"}}},"applications":{"$string":["remove_ips"]}}PII编辑方法remove:删除整个字段。中继可以选择将其设置为空或完全删除它。{"rules":{"remove_ip":{"type":"ip","re??daction":{"method":"remove"}}},"applications":{"$string":["remove_ip"]}}replace:用静态字符串替换键。{"rules":{"replace_ip":{"type":"ip","re??daction":{"method":"replace","text":[censored]"}}},"applications":{"$string":["replace_ip"]}}mask:将匹配字符串的每个字符替换为"masking"字符*。与replace相比,它保留了原始字符串的长度。{"rules":{"mask_ip":{"type":"ip","re??daction":{"method":"mask"}}},"applications":{"$string":["mask_ip"]}}hash:用自己的替换字符串散列版本。相同的字符串将产生相同的散列,因此,例如,如果您决定对用户ID进行散列而不是替换或删除它,您仍将准确获得受影响用户的计数。{"rules":{"hash_ip":{"type":"ip","re??daction":{"method":"hash"}}}"applications":{"$string":["mask_ip"]}}PII选择器选择器允许您将规则限制在事件的特定部分。这对于通过变量/字段名称无条件地从事件中删除某些数据很有用,而且对于对真实数据的规则进行保守测试也很有用。数据清理始终应用于原始事件负载。请记住,UI中的某些字段在JSON架构中的名称可能不同。查看事件时,应该始终有一个名为“JSON”的链接,可让您查看数据清理器看到的内容。例如,在UI中称为“附加数据”的内容在事件负载中称为extra。要删除名为foo的特定键,您可以这样写:[Remove][Anything]from[extra.foo]Anotherexample。Sentry知道两种错误消息:异常消息和顶级日志消息。以下是SDK发送的此类事件负载的示例(可从UI下载):{"logentry":{"formatted":"Failedtorolloutthedinglebop"},"exceptions":{"values":[{"type":"ZeroDivisionError","value":"integerdivisionormodulobyzero"}]}}由于“errormessage”取自异常值,而“message”取自logentry,我们必须编写以下内容以从事件中删除两者:[Remove][Anything]from[exception.value][Remove][Anything]from[logentry.formatted]布尔逻辑您可以使用布尔逻辑组合选择器。前缀为!反转选择器。foo匹配JSON键foo,而!foo匹配除foo之外的所有内容。使用&&构建连词(AND),例如:foo&&!extra.foo匹配键foo除非在extra中。使用||构建析取(OR),例如:foo||bar匹配foo或bar。通配符**匹配所有子路径,因此foo.**匹配foo中的所有JSON键。*匹配单个路径项,因此foo.*匹配foo下一级的所有JSON键。值类型使用以下内容按JSON类型选择子部分:$string匹配任何字符串值$number匹配任何整数或浮点值$datetime匹配表示时间戳的事件中的任何字段$array匹配任何JSON数组值$object匹配任何JSON对象使用以下方式选择模式的已知部分:$exception匹配{"exception":{"values":[...]}}中的单个异常实例$stacktrace匹配堆栈跟踪实例$frame匹配帧$request匹配事件$user的HTTP请求上下文匹配事件$logentry的用户上下文(也适用于消息属性)$thread匹配{"threads":{"values":[...]}}中的单个线程实例$breadcrumb匹配{"breadcrumbs":[...]}中的单个面包屑$span匹配跟踪跨度https://docs.sentry.io/product/sentry-basics/tracing/distributed-tracing/$sdk匹配{“sdk”中的SDK上下文示例:...}removeevent.user:[Remove][Anything]from[$user]removeallframelocals:[Remove][Anything]from[$frame.vars]escapeSpecialcharacters如果要匹配的对象key包含空格或者特殊字符,可以用引号转义:[Remove][Anything]from[extra.'myspecialvalue']这样匹配keymyspecial附加数据中的值。要在引号内转义'(单引号),请将其替换为''(双引号):[Remove][Anything]from[extra.'myspecial''value']这与附加数据special中的键my相同'值匹配。