对事件中的敏感数据进行脱敏
最安全的敏感值是永远不会进入事件管道的敏感值。从显式白名单构建结构化事件,而不是序列化请求、异常、模型响应或数据库对象,然后尝试删除危险键。
默认排除的数据
请勿记录 API 密钥、密码、会话 cookie、授权标头、Webhook 签名、付款详细信息、完整请求正文、数据库连接字符串或原始提示和完成。自由格式文本可以包含个人或机密数据,即使其字段名称看起来无害。
与电子邮件地址相比,更喜欢内部不透明标识符。用受控的 error_type 替换原始异常,并通过适当的访问和保留将完整的堆栈跟踪保留在诊断系统中。使用稳定的路由模板替换包含标识符或查询字符串的 URL。
在边界处应用控制
逐个字段创建事件对象:
const event = {
route_template: request.routeOptions.url,
method: request.method,
status_code: response.statusCode,
latency_ms: elapsedMs,
account_id: account.internalId,
};
await telemetry.log("api_request_completed", event);
当需要可重复使用的消毒剂时,请将其视为深度防御。测试嵌套对象、数组、备用大写和意外类型。合同之外的绑定字符串长度和拒绝字段。当原始值具有较小或可猜测的集合时,散列不是匿名化。
审查并回应
为每个大容量活动合同分配一个所有者。在启用生产排放之前检查开发中的样本行。添加新标识符时重新审视保留和访问需求。
如果发现敏感数据,请停止发出路径,识别受影响的表和时间范围,轮换任何暴露的机密,并在适当的情况下使用支持的删除工作流程。然后添加一个回归测试来练习实际的事件构造函数。