4

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

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

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

有什么简单的方法可以监控 S3 存储桶以找出哪个用户删除了哪个文件?

8 月 19 日更新

按照沃尔特在下面的回答,我能够记录该DeleteObject事件。但是,我只能获取 . 的文件名 ( requestParameters.key ) PutObject,而不能获取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

4

2 回答 2

3

这是我的设置。

有关在控制台中设置 CloudTrail 的详细说明。设置 CloudTrail 时,请仔细检查这两个选项。

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

您正在向 CloudWatch Logs 发送事件 在此处输入图像描述

如果您对 S3 写入日志进行了更改,您可能需要等待一段时间。如果您现在还没有吃早餐、午餐、小吃或晚餐,那将是一个好时机。

如果您使用与我上面相同的默认 CloudWatch 日志组,此指向CloudWatch Insight Logs 的链接搜索应该适合您。

这是一个将显示所有 S3 DeleteObject 调用的查询。如果链接失效

  1. 转到 CloudWatch 控制台。
  2. 选择左侧的 Logs->Insights。
  3. 输入您在上面指定的“选择日志组”的值。
  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 个事件。

于 2019-08-16T13:28:01.153 回答
1

自 2021/04/12 起,CloudTrail 不会记录对象键或DeleteObjects调用路径。

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

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

于 2021-04-12T04:39:57.550 回答