实施OpenTelemetry时,必须关注敏感数据的处理。采集遥测数据始终存在无意中收集敏感信息或个人信息的风险,而这些信息可能受到各种隐私法规与合规要求的约束。
你的责任
OpenTelemetry能够采集遥测数据,但它无法自行判断在你的具体场景中哪些数据属于敏感数据。作为实施者,你需要负责:
- 确保符合适用的隐私法律法规。
- 保护遥测数据中的敏感信息。
- 取得数据采集所需的同意。
- 采取恰当的数据处理和存储措施。
此外,你还需要理解和审查所用埋点库输出的遥测数据,因为这些库也可能收集并暴露敏感信息。
敏感数据的考量
哪些数据属于敏感数据,要视具体情况而定。例如:
- 个人身份信息(PII)
- 身份验证凭据
- 会话令牌
- 财务信息
- 健康相关数据
- 用户行为数据
数据最小化
通过遥测采集可能包含敏感内容的数据时,应遵循数据最小化原则。这意味着:
- 只采集服务于可观测性目的的数据。
- 除非绝对必要,否则避免采集个人信息。
- 考虑聚合或匿名化数据能否达到相同目的。
- 定期审查已采集的属性,确保它们仍有必要。
保护敏感数据
如上一节所述,防止采集敏感数据的最佳方式,是不采集可能敏感的数据。不过,有时你可能确实需要采集这些数据,或者无法完全控制采集内容,因此需要在后续处理过程中清除敏感数据。以下建议可以提供帮助。
OpenTelemetry Collector提供了几种有助于管理敏感数据的处理器:
attribute处理器:删除或修改特定属性。filter处理器:过滤掉包含敏感数据的整个Span或指标。redaction处理器:删除不在允许属性列表中的Span、日志和指标数据点属性。transform处理器:使用正则表达式转换数据。
删除用户信息并进行哈希处理
以下attribute处理器配置对敏感user信息中的user.email进行哈希处理,并删除user.full_name:
processors:
attributes/example:
actions:
- key: user.email
action: hash
- key: user.full_name
action: delete
用user.hash替换user.id
以下transform处理器配置可用于删除user.id,并将它替换为user.hash:
transform:
trace_statements:
- context: span
statements:
- set(attributes["user.hash"], SHA256(attributes["user.id"]))
- delete_key(attributes, "user.id")
对用户ID或姓名做哈希,可能达不到你需要的匿名化程度。如果输入空间很小且容易预测,例如数值型用户ID,那么在实践中可能反推出哈希所对应的输入。
截断IP地址
除了哈希,也可以截断数据,或者按共同的前缀或后缀分组。例如:
- 日期:只保留年份,或年份和月份,去掉具体日期。
- 电子邮件地址:去掉本地部分,只保留域名。
- IP地址:去掉IPv4的最后一个八位组,或IPv6的最后80个比特。
以下transform处理器配置去掉client.address属性中的最后一个八位组:
transform:
trace_statements:
- context: span
statements:
- replace_pattern(attributes["client.address"], "\\.\\d+$", ".0")
使用redaction处理器删除属性
最后,使用redaction处理器删除某些属性的示例,见Collector配置安全最佳实践页面的“清除敏感数据”一节。
原文:OpenTelemetry:处理敏感数据;作者:OpenTelemetry文档贡献者;日期:页面最后修改2026-01-14。原文及源码权利归原作者和相应权利人所有。
文档采用CC BY 4.0许可证。本文为中文翻译,保留原文配置示例。











暂无评论内容