簡體   English   中英

使用boto3查詢AWS CloudTrail以確定哪個IAM用戶將文件上傳到S3?

[英]Using boto3 to query AWS CloudTrail to determine which IAM user uploaded a file to S3?

我正在嘗試開發一種通過使用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設置

鏟斗特性

是的,您可以監視使用CloudTrail將對象上傳到S3的IAM用戶。 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日志

我認為數據事件與管理事件不一樣可見。 如果您在AWS控制台中查看事件歷史記錄,肯定是這種情況。

如在其他地方建議的那樣,在存儲數據事件的s3位置上放置一個雅典娜表的效果很好-這樣的話就會告訴您對象的上傳者/對象:

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 : cloudtrail_logs

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提取數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM