使用boto3查询AWS CloudTrail以确定哪个IAM用户将文件上传到S3?

问题描述 投票:0回答:2

我正在尝试开发一种使用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 settings

Bucket Properties

python amazon-web-services amazon-s3 boto3 amazon-cloudtrail
2个回答
1
投票

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

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

Logging Amazon S3 API Calls by Using AWS CloudTrail

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

CloudTrail Log Event Reference

按照此文档链接启用S3存储桶的对象级别日志记录。这对于查看PutObject等API是必要的:

How Do I Enable Object-Level Logging for an S3 Bucket with AWS CloudTrail Data Events?

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

CloudTrail Python Boto3 SDK

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

Querying AWS CloudTrail Logs


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日志的大小,您可能希望按日期优化cloudtrail日志表的s3位置 - 例如:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.