AWS CloudTrail 和 VPC Flow 日志 S3 归档技术

问题描述

遵循 AWS 推荐的最佳实践,我们将组织范围的 CloudTrail 和 VPC 流日志记录配置为记录到集中式日志存档帐户。由于 CloudTrail 和 VPC 流在多个区域是组织范围的,因此我们每天都会将大量新日志文件保存到 S3。这些文件中的大多数都非常小(几个 KB)。

当它们在 STANDARD 存储类中时,大量的小日志文件很好,因为您只需为总数据大小付费,而没有任何最小文件大小开销。但是,我们发现在 6 或 12 个月后对这些文件进行深度存档具有挑战性,因为除 STANDARD 之外的任何存储类别(例如 GLACIER)都有最小计费文件大小({{1} } 是 128,STANDARD-IA 没有最小大小,但为每个对象添加 40KB 元数据,等等)。

归档大量小型 S3 对象的最佳实践是什么?我可以使用 Lambda 下载多个文件,将它们重新捆绑成一个更大的文件,然后重新存储它,但这在计算时间和 GET/PUT 请求方面会非常昂贵。据我所知,S3 批量操作对此不提供支持。有什么建议吗?

解决方法

考虑使用 S3-utils concat 之类的工具。这不是 AWS 支持的工具,而是用于执行您需要的操作类型的开源工具。

您可能需要模式匹配语法,它允许您为每天的日志创建一个文件。

$ s3-utils concat my.bucket.name 'date-hierachy/(\d{4})/(\d{2})/(\d{2})/*.gz' 'flat-hierarchy/$1-$2-$3.gz'

这可以作为日常工作运行,因此每一天都被压缩到一个文件中。绝对建议在 Amazon 网络上的资源(即附加了 s3 网关端点的 VPC)中运行此程序,以提高文件传输性能并避免数据传出费用。