处理敏感数据
OpenTelemetry 中处理敏感数据的最佳实践和指南
在实施 OpenTelemetry 时,至关重要的是要留意敏感数据的处理。遥测数据的收集始终存在意外捕获敏感或个人信息的风险,这些信息可能受到各种隐私法规和合规性要求的约束。
您的责任
OpenTelemetry 收集遥测数据,但它无法自行确定在您的特定上下文中哪些数据是敏感的。作为实施者,您有责任
- 确保遵守适用的隐私法律法规。
- 保护遥测数据中的敏感信息。
- 获取数据收集的必要同意。
- 实施适当的数据处理和存储实践。
此外,您还负责理解和审查您使用的任何仪器化库发出的遥测数据,因为这些库也可能收集和暴露敏感信息。
敏感数据注意事项
哪些数据是敏感的因情况而异。例如包括
- 个人身份信息 (PII)
- 身份验证凭据
- 会话令牌
- 财务信息
- 健康相关数据
- 用户行为数据
数据最小化
通过遥测收集潜在敏感数据时,请遵循 数据最小化 原则。这意味着
- 仅收集用于可观察性目的的数据。
- 除非绝对必要,否则避免收集个人信息。
- 考虑聚合或匿名数据是否可以达到相同的目的。
- 定期审查收集的属性以确保它们仍然是必需的。
保护敏感数据
如前一节所述,防止收集敏感数据的最佳方法是不要收集可能敏感的数据。但是,在某些情况下,您可能希望收集这些数据,或者可能无法完全控制正在收集的数据,并且需要在后期处理中对其进行抓取。以下建议可以帮助您。
OpenTelemetry Collector 提供了几个可以帮助管理敏感数据的处理器
attribute处理器:删除或修改特定属性。filter处理器:过滤掉包含敏感数据的整个 span 或 metrics。redaction处理器:删除不匹配允许属性列表的 span、log 和 metric 数据点属性。transform处理器:使用正则表达式转换数据。
删除和哈希用户信息
以下是 attribute 处理器配置,用于哈希 user.email 并从敏感的 user 信息中删除 user.full_name
processors:
attributes/example:
actions:
- key: user.email
action: hash
- key: user.full_name
action: delete
将 user.id 替换为 user.hash
以下是 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 processor 删除属性
最后,在安全最佳实践页面中关于 Collector 配置的 “擦除敏感数据” 部分可以找到一个使用 redaction processor 删除某些属性的示例。