python - 如何将所有 cloudtrail 日志移动到一个集中位置
问题描述
我正在尝试将 CloudTrail 日志收集到我们的 SIEM 中。SIEM 供应商只能从单个文件夹收集来自 S3 的日志,但 Cloudtrail 每天都会创建一个文件夹。我需要创建一个 lambda 函数,用于查看何时将文件添加到这些子目录之一并将它们移动到同一位置:
我们现在拥有的示例:
Bucketname/CloudTrail/323232/ca-central/2019/06/02/files.json.gz
Bucketname/CloudTrail/323232/ca-central/2019/06/03/files.json.gz
Bucketname/CloudTrail/323232/ca-central/2019/06/04/files.json.gz
我们希望看到的示例:
Bucketname/CloudTrail/323232/ca-central/files1.json.gz
Bucketname/CloudTrail/323232/ca-central/files2.json.gz
Bucketname/CloudTrail/323232/ca-central/files3.json.gz
我曾尝试在网上寻找示例,但找不到任何匹配的内容。
解决方案
鉴于 CloudTrail 发送的每个 CloudTrail 事件文件都包含时间戳和 UUID,因此不太可能发生碰撞。
话虽如此,如果您愿意将所有数据(不分组日期)复制到一个文件夹中(还考虑到 S3 存储桶实际上可以无限扩展),那么您可以考虑执行以下操作:
- (a) 在您的 CloudTrail 存储桶上设置 S3 对象级别通知,这将在 CloudTrail 发送的每个新文件上将一条消息放入 SQS 队列。
- (b) 或者,您可以在 CloudTrail Trail 中配置一个 SNS 主题,CloudTrail 将在每次 CloudTrail 交付文件时放置一条消息,然后将该 SNS 主题连接到 SQS 队列。
- 使用 Lambda 函数连接 SQS 队列。
- Lambda 函数将从 SQS 队列(将包含新的 S3 文件路径)中读取事件,并将该文件复制(或移动?)到新文件夹中。
推荐阅读
- jquery - 悬停和聚焦需要一起
- c++ - switch 语句中的 Infile 流式传输
- javascript - 将参数传递给此函数不起作用?
- javascript - 如何使用 Angular(8) UI 在远程 linux 服务器上运行 shell 脚本?
- c++11 - 无法理解 C++ 映射语义
- jupyter-notebook - 如何在jupyter笔记本中将空格显示为点
- html - Django / Bootstrap 4 / 博客文章 || 如何获得响应式图像?
- sql - ORA-30076: 提取源的无效提取字段
- ccl - CCL 代码示例中的缓冲区以及 oneapi 工具包
- android - 再次刷卡后使用上一个按钮刷卡后如何管理订单?