动手实验 | 使用 Amazon Athena 查询 S3 中 CloudTrail 日志


  实验环境

1. 确保用户拥有 AmazonS3FullAccess 和 AmazonAthenaFullAccess 权限。
2. 创建专用 S3 存储桶(如 cloudtrail-logs-)用于存储 CloudTrail 日志;启用版本控制并配置生命周期策略,保留至少 90 天日志。
3. 登录 AWS CloudTrail 控制台,创建新跟踪(Trail)。
名称:athena-cloudtrail-demo
日志存储位置:选择上一步创建的 S3 存储桶。
启用多区域日志记录(可选,根据需求)。
等待 15 分钟,确保日志开始写入 S3。

  作业步骤

本次采用AWS Console界面完成作业。
注意:根据项目的具体情况,可以采用不同的实施方法。比如使用命令行(CLI)部署、代码部署 (CloudFomation、Terraform等)、以及其它开发语言(SDK)完成作业。

步骤一:在 Athena 中创建表
1. 进入 CloudTrail 控制台,导航至 Event history。
2. 点击 Run advanced queries in Amazon Athena,自动跳转至 Athena 控制台。
3. 选择存储日志的 S3 路径(如 s3://cloudtrail-logs-/AWSLogs//CloudTrail/)。
4. 点击 Create table,Athena 会自动生成表结构(基于 CloudTrail 的 JSON 格式)。

步骤二:执行查询分析
示例1,显示在特定时间段内发送 PUT 对象请求的所有请求者

SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime
FROM s3_access_logs_db.mybucket_logs
WHERE operation='REST.PUT.OBJECT'
AND timestamp
BETWEEN '2024/01/29'
AND '2024/01/30'
LIMIT 100;

示例2,显示在特定时间段内发送 GET 对象请求的所有请求者

SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime
FROM s3_access_logs_db.mybucket_logs
WHERE operation='REST.GET.OBJECT'
AND timestamp
BETWEEN '2024/01/29'
AND '2024/01/30'
LIMIT 100;

  结果验证

1. 检查返回的数据是否符合预期(如时间范围、事件类型)。
2. 使用 LIMIT 子句限制结果集大小,避免高额查询费用。
3. 在 Athena 控制台查看 Query history,监控扫描数据量及费用