如何从我的 CloudFront 日志中删除敏感数据?

2 分钟阅读
0

默认情况下,Amazon CloudFront 标准日志会捕获敏感数据到其字段中。出于隐私考虑,我想删除这部分日志。

简短描述

**注意:**本文使用客户端 IP(c-ip)字段的示例。

默认情况下,CloudFront 日志将捕获 c-ip 作为其字段之一。有三种方法可以从日志中删除 c-ip

  • 触发 AWS Lambda 函数,此函数会删除传输到 Amazon Simple Storage Service(Amazon S3)中的日志上的字段。
  • 使用按特定间隔运行的 Amazon Elastic Compute Cloud(Amazon EC2)流程来删除该字段。
  • 使用 CloudFront 实时日志,并在将日志数据发送到 Amazon S3 之前删除敏感字段。

解决方法

触发 Lambda 函数

一种删除 c-ip 字段的方法是使用 Amazon S3 通知事件。当 CloudFront 将日志文件传输到 Amazon S3 存储桶时,配置您的存储桶以触发 Lambda 函数。

创建 Lambda 函数

1.    打开 AWS Lambda console(AWS Lambda 控制台)。

2.    在 Functions(函数)下,创建一个具有以下配置的新 Lambda 函数:

  • 使用来自 Amazon S3 事件的对象名称。
  • 从 S3 存储桶获取对象。

3.    删除 c-ip 列,或者将值替换为匿名数据。

**注意:**替换值以保持格式不变,以防其他应用程序进一步处理日志。

4.    保存日志并将其上传回 Amazon S3。

创建新事件

1.    在日志目标存储桶中,转到 Properties(属性)。

2.    在 Event notifications(事件通知)下,创建一个新事件。

3.    选择事件类型 Put 和目标 Lambda function(Lambda 函数)。

4.    选择在步骤 1 中创建的 Lambda 函数,然后选择 Save(保存)。

重要提示:要避免使用 Lambda 函数进行递归调用(无限循环),请执行以下操作:

  • 将您的 CloudFront 日志传输到初始暂存前缀。例如,“original”。
  • 仅在该前缀上触发 Amazon S3 事件。
  • 让 Lambda 函数将日志传输到其他前缀。例如,“processed”。

如果您将日志传输到相同的前缀,Lambda 函数会再次触发并创建递归调用。有关更多信息,请参阅避免使用 Amazon S3 和 AWS Lambda 进行递归调用

**注意:**要保持 Amazon S3 的低成本,请设置 Amazon S3 生命周期政策,使原始日志会在特定时间周期后过期。

使用 Amazon EC2 流程

使用 Amazon EventBridge 创建计划规则(cron),该规则可启动 EC2 实例并按计划重复处理日志文件。例如,每天一次。该流程结束后,停止 EC2 实例直到下一次重复,以节省成本。

1.    配置 EventBridge 和 Lambda,以便在给定时间启动 EC2 实例。有关更多信息,请参阅如何使用 Lambda 按固定间隔停止和启动 Amazon EC2 实例?

2.    在 EC2 实例上部署代码,该代码将在特定时间段内下载日志。例如,一整天。删除 c-ip 列以处理日志,或将列值替换为匿名数据。将处理过的日志上传回 S3 存储桶。

**可选:**将所有处理过的日志整合到一个文件中,以节省 Amazon S3 生命周期转换成本。如果您打算长时间存储日志,此流程会很有用。

使用 Kinesis Data Firehose

使用 CloudFront 实时日志选择要保存的字段。稍后,让 Amazon Kinesis Data Firehose 将日志数据发送到 Amazon S3。

配置 CloudFront 实时日志时,每条实时日志记录中包含的字段列表都可用。每条日志记录最多包含 40 个字段。您可以选择接收所有可用字段,也可以只接收必须监控和分析性能的字段。停用 c-ip 字段,将将其从您的日志中排除。

**注意:**由于使用了 Amazon Kinesis Data Streams,此选项可能导致成本较高。考虑其他两个选项(触发 Lambda 函数或使用 Amazon EC2 流程),以获得更加经济高效的解决方案。


AWS 官方
AWS 官方已更新 1 年前