处理敏感数据

OpenTelemetry 中处理敏感数据的最佳实践和指南

在实施 OpenTelemetry 时,至关重要的是要留意敏感数据的处理。遥测数据的收集始终存在意外捕获敏感或个人信息的风险,这些信息可能受到各种隐私法规和合规性要求的约束。

您的责任

OpenTelemetry 收集遥测数据,但它无法自行确定在您的特定上下文中哪些数据是敏感的。作为实施者,您有责任

  • 确保遵守适用的隐私法律法规。
  • 保护遥测数据中的敏感信息。
  • 获取数据收集的必要同意。
  • 实施适当的数据处理和存储实践。

此外,您还负责理解和审查您使用的任何仪器化库发出的遥测数据,因为这些库也可能收集和暴露敏感信息。

敏感数据注意事项

哪些数据是敏感的因情况而异。例如包括

  • 个人身份信息 (PII)
  • 身份验证凭据
  • 会话令牌
  • 财务信息
  • 健康相关数据
  • 用户行为数据

数据最小化

通过遥测收集潜在敏感数据时,请遵循 数据最小化 原则。这意味着

  • 仅收集用于可观察性目的的数据。
  • 除非绝对必要,否则避免收集个人信息。
  • 考虑聚合或匿名数据是否可以达到相同的目的。
  • 定期审查收集的属性以确保它们仍然是必需的。

保护敏感数据

如前一节所述,防止收集敏感数据的最佳方法是不要收集可能敏感的数据。但是,在某些情况下,您可能希望收集这些数据,或者可能无法完全控制正在收集的数据,并且需要在后期处理中对其进行抓取。以下建议可以帮助您。

OpenTelemetry Collector 提供了几个可以帮助管理敏感数据的处理器

删除和哈希用户信息

以下是 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")

截断 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 删除某些属性的示例。