DeleteObject 的 AWS S3 日志?

AWS S3 log for DeleteObject?

如何使用 CloudTrail 或 CloudWatch 等 AWS 服务来检查哪个用户执行了事件 DeleteObject

我可以使用 S3 事件向 SNS 发送删除事件,以通知电子邮件地址特定文件已从 S3 存储桶中删除,但该消息不包含执行此操作的用户名.

我可以使用 CloudTrail 将与 S3 存储桶相关的所有事件记录到另一个存储桶,但我测试并记录了很多细节,只有事件 PutObject 而不是 DeleteObject.

是否有任何简单的方法来监控 S3 存储桶以找出哪个用户删除了哪个文件?

Upate 19 Aug

根据 Walt 在下面的回答,我能够记录 DeleteObject 事件。但是,我只能获取 PutObject 的文件名 (requestParameters.key ),而不能获取 DeleteObjects.

的文件名
| # | @timestamp | userIdentity.arn | eventName | requestParameters.key |
| - | ---------- | ---------------- | --------- | --------------------- |
| 1 | 2019-08-19T09:21:09.041-04:00 | arn:aws:iam::ID:user/me | DeleteObjects |
| 2 | 2019-08-19T09:18:35.704-04:00 | arn:aws:iam::ID:user/me | PutObject |test.txt |

看起来其他人也遇到了同样的问题,AWS 正在解决这个问题:https://forums.aws.amazon.com/thread.jspa?messageID=799831

这是我的设置。

Detail instructions on setting up CloudTrail in the console. 在设置 CloudTrail 时仔细检查这两个选项。

您正在记录 S3 写入。您可以对所有 S3 存储桶或只对您感兴趣的存储桶执行此操作。您也不需要启用读取日志记录来回答这个问题。

并且您正在向 CloudWatch Logs 发送事件

如果您更改了 S3 写入日志记录,您可能需要稍等片刻。如果您还没有吃过早餐、午餐、点心或晚餐,现在是个好时机。

如果您使用与我上面相同的默认 CloudWatch 日志组,此 link 至 CloudWatch Insight Logs search 应该适合您。

这是一个将向您显示所有 S3 DeleteObject 调用的查询。如果 link 不起作用

  1. 已进入 CloudWatch 控制台。
  2. Select 左侧的日志-> 见解。
  3. 输入您在上面指定的 "Select log group(s)" 的值。
  4. 在查询字段中输入此内容。
fields @timestamp, userIdentity.arn, eventName, requestParameters.bucketName, requestParameters.key
| filter eventSource == "s3.amazonaws.com"
| filter eventName == "DeleteObject"
| sort @timestamp desc
| limit 20

如果您在过去 30 分钟内有任何 CloudTrail S3 删除对象调用,将显示最后 20 个事件。

截至 2021 年 4 月 12 日,CloudTrail 不记录 DeleteObjects 个调用的对象键或路径。

如果您使用 S3 控制台删除对象,它总是调用 DeleteObjects

如果要访问对象键以进行删除,则需要使用 DeleteObject(减去 s)删除单个文件。这可以通过 AWS CLI (aws s3 rm s3://some-bucket/single-filename) 或直接 API 调用来完成。