0

我正在尝试开发一种方法来分解使用 CloudTrail 的用户/项目的 S3。CloudTrail 是否提供查看哪个 IAM 用户将特定对象上传到存储桶的功能?

更新

我打开了一个 CloudTrail 来监视对象级活动(对于所有 s3 存储桶,包括读取和写入活动),但是,当我尝试在上面的更新中列出“PutObject”事件时,它不起作用(即列表的事件出现空白)。

ct_client = boto3.client('cloudtrail')

response = ct_client.lookup_events(
    LookupAttributes=[
        {
            'AttributeKey': 'EventName',
            'AttributeValue': 'PutObject'
        }],
    StartTime=datetime(2018, 3, 1),
    EndTime=datetime.now(),
    MaxResults=50
)

更新 2

控制台中我的存储桶属性和 CloudTrail 的图像:

CloudTrail 设置

存储桶属性

4

2 回答 2

1

是的,您可以监控 IAM 用户使用 CloudTrail 将对象上传到 S3。CloudTrail 记录的信息量非常广泛。

此文档链接将为您介绍 CloudTrail S3 日志记录:

使用 AWS CloudTrail 记录 Amazon S3 API 调用

此文档链接将为您提供有关 CloudTrail 记录的事件的详细信息:

CloudTrail 日志事件参考

按照此文档链接为 S3 存储桶启用对象级别日志记录。这是查看诸如 PutObject 之类的 API 所必需的:

如何使用 AWS CloudTrail 数据事件为 S3 存储桶启用对象级日志记录?

CloudTrail 有一个 Python API。但是,您将希望直接处理存储在 S3 中的 CloudTrail 日志。

CloudTrail Python Boto3 SDK

我更喜欢使用 Athena 分析 CloudTrail 日志,这使得这个过程变得简单。

查询 AWS CloudTrail 日志

于 2018-09-11T17:51:11.197 回答
1

我不相信数据事件以与管理事件相同的方式可见。如果您在 AWS 控制台中查看事件历史记录,情况肯定是这样。

正如其他地方所建议的那样,在存储数据事件的 s3 位置上放置一个 Athena 表效果很好——这样的事情会告诉你是谁/什么上传了对象:

SELECT
    useridentity
,   json_extract_scalar(requestparameters,'$.bucketName')
,   json_extract_scalar(requestparameters,'$.key')
FROM cloudtrail_logs
WHERE eventname IN ('PutObject')
AND json_extract_scalar(requestparameters,'$.bucketName') = 'xxx'
AND json_extract_scalar(requestparameters,'$.key') = 'yyy';

cloudtrail_logs根据以下文档创建的位置: https : //docs.aws.amazon.com/athena/latest/ug/cloudtrail-logs.html

useridentity并不总是 IAM 用户 - 它可能是 AWS 服务、外部账户、以及假定的角色 - 您可以使用 .type 元素根据需要进行过滤或简单地提取所有元素。

根据 S3 中的对象数量/S3 中 cloudtrail_logs 的大小,您可能希望按日期细化 cloudtrail_logs 表的 s3 位置 - 例如:

s3://<BUCKETNAME>/AWSLogs/<ACCOUNTNUMBER>/CloudTrail/<REGION>/2018/08/17

如果您愿意,可以使用 boto3 执行 Athena 查询,将输出保存到 S3 位置,然后也使用 boto3 从 S3 中提取该数据。

于 2018-09-11T20:04:03.183 回答