一、背景
S3存储桶的文件读写日志包括Server Access Log和CloudTrail两种方式。二者之间的差别可参考如下网址:
https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/logging-with-S3.html
在官方上描述非常详细,可看到CloudTrail采集的信息更加丰富,因此本文将介绍使用CloudTrail做分析。如下截图。

二、启用CloudTrail日志
CloudTrail日志可以从CloudTrail服务界面启动,也可以从S3存储桶界面跳转过去。本文截图描写从S3界面进入。
首先进入S3存储桶属性界面(第二个标签页)。如下截图。

将页面向下滚动后,来到CloudTrail界面,点击配置CloudTrail即可跳转。如下截图。

在CloudTrail界面,点击新建。如下截图。

在新建CloudTrail的界面上,输入名称,选择Create new S3 bucket
,并使用自动生成的名称。新生成的日志将保存在这个存储桶内。此存储桶名字将包含AWS账户ID(12位数字),用以区分。如下截图。

继续向下滚动屏幕。在加密位置,不要选中SSE-KMS
加密。在CloudWatch Log
位置不要启用,这样日志将仅保存到S3,不保存到CloudWatch。其他选项保持默认。如下截图。

在向导第二步,选择Event Type
事件类型是Management Event
和Data events
两个。其中第二个Data Event
默认是不选中的,这里需要开启。其他选项保持默认不变。如下截图。

继续向下滚动页面。选项保持不变。点击右下角创建按钮。如下截图。

在向导的最后一步,无须修改任何设置,点击创建。如下截图。

创建完毕,可以看到CloudTrail下多了一条记录。如下截图。

二、生成Athena表格并通过SQL查询日志
点击CloudTrail左侧的菜单折叠栏,展开菜单,点击第二项Event History
,从中已经可以看到对S3的操作日志了。点击创建。

选中上一步配置CloudTrail时候日志所在的S3存储桶,然后点击创建即可创建好Athena表格。如下截图。

如果此时Athena提示无法创建表缺少权限,那么一般是由于本账户的Lake Formation对数据管理权限不足造成的,Lake Formation需要指定数据管理员的身份(IAM Role或IAM User)。制定完成后,Athena即可创建完毕。
创建完毕后页面上方提示绿色的Athena创建完毕。如下截图。

三、使用Athena查询日志
进入Athena服务,运行查询程序。
如果之前没有进入过Athena服务,那么第一次运行Athena时候,会提示需要设置一个Athena Outout bucket for querying result。此时,需要点击右上角的Setting进入设置,然后选择一个存储桶,保存Athena查询结果。如下截图。

注意:Athena查询结果和Source不能放在同一个桶里,被查询的CloudTrail日志和Athena查询结果需要在不同的目录。
执行如下一段查询。请酌情替换from字段中的default
数据库名和表名cloudtrail_logs_aws_cloudtrail_logs_133129065110_36515686
,不同账号下生成的存储桶名称不一样。如果需要查询上传时间,请修改GetObject
为PutObject
SELECT
eventTime,
eventName,
eventSource,
sourceIpAddress,
userAgent,
json_extract_scalar(requestParameters, '$.bucketName') as bucketName,
json_extract_scalar(requestParameters, '$.key') as object,
userIdentity.arn as userArn
FROM
default.cloudtrail_logs_aws_cloudtrail_logs_133129065110_36515686
WHERE
eventName = 'GetObject'
AND eventTime BETWEEN '2021-07-09T00:00:00Z' and '2021-07-11T00:00:00Z'
由此可以看到查询结果。如下截图。

至此配置完成。
四、参考文档
参考文档: