使用python对AWS-CloudTrail-Json-日志文件key字段名称的提取

发布时间 2023-06-20 20:01:03作者: 520_1351

关于AWS CloudTrail - 在Console界面,默认只能看到最近90天的数据

如果需要追踪更早的操作记录,得需要配置CloudTrail 日志 输出保存到s3

在s3上不同的region位于不同的目录,最后会将某一天的日志,存放到那一天的目录/文件夹中,

目录路径格式(部分)如:aws-account-xxx/CloudTrail/cn-north-1/2023/06/01/ 然后目录中的文件全部是.gz格式的压缩文件

于是解压后,就全部是json格式的文件了,json文件,内容只有一行,所以的内容都写在一行中,可以通过Records键得到一个包含所有的事件列表List

这里笔者是想要了解 每一个事件的key字段名称信息,需要知道,每个事件的key字段可能是不一样的,有多有少,但也有一些key字段是所有的事件都有的

于是这里,笔者写了如下脚本、通过多个CloudTrail日志文件,提取出所有的key字段名称,及共有通用的key字段名称,python代码如下:

#!/usr/bin/env python3 
#
# Author:QQ-5201351
#

import os
import json

def JsonFile2Dict(FileName):
    with open(FileName) as f:
        DictContent = json.load(f)
        return DictContent

CloudTrailAllKeys=[]
AllEventKeyLists=[]
CommonKey=[]

if __name__=="__main__":
    # 如下方式也会将指定目录下的目录条目也进行列出,os.listdir("xxx")返回的是一个字符串列表
    # 因此这里需要保存目录中全部都是json格式的文件,不要混入其他文件或者目录
    for file in os.listdir("aa"):
        CloudTrail=JsonFile2Dict("aa/"+file)
        for EventItem in CloudTrail["Records"]:
            for key in list(EventItem.keys()):
                if key not in CloudTrailAllKeys:
                    CloudTrailAllKeys.append(key)
            
            AllEventKeyLists.append(list(EventItem.keys()))

    for key in CloudTrailAllKeys:
        flag=False
        for EventKeyList in AllEventKeyLists:  
            if key not in EventKeyList:
                flag=True
                break
                
        if flag==True:
            break
        else:
            CommonKey.append(key)
    
    print(len(CloudTrailAllKeys),CloudTrailAllKeys)
    print(len(CommonKey),CommonKey)

代码的一些说明:

1、指定的目录中只能有CloudTrail的json格式的日志文件,不要混入其他文件或者目录,否则程序都会异常

2、使用到了break跳出两层的技巧

3、本代码只是为了实现功能,没有作太多的优化,如果文件太多,可能执行的时间会长一点

 

最后的执行结果(笔者只选用了3天多,共2689个文件做的测试),一共27个key 和 10个 Common key,如下:

27 ['eventVersion', 'userIdentity', 'eventTime', 'eventSource', 'eventName', 'awsRegion', 'sourceIPAddress', 'userAgent', 'requestParameters', 'responseElements', 'requestID', 'eventID', 'readOnly', 'resources', 'eventType', 'managementEvent', 'recipientAccountId', 'eventCategory', 'tlsDetails', 'additionalEventData', 'sharedEventID', 'vpcEndpointId', 'apiVersion', 'errorCode', 'errorMessage', 'serviceEventDetails', 'sessionCredentialFromConsole']

10 ['eventVersion', 'userIdentity', 'eventTime', 'eventSource', 'eventName', 'awsRegion', 'sourceIPAddress', 'userAgent', 'requestParameters', 'responseElements']

如果后续在实际工作中,有发现其他的,将会继续更新到另一篇文章中,链接如下:

《关于aws-CloudTrail-操作日志的解析-审计-说明》:https://www.cnblogs.com/5201351/p/17493086.html

 

 

 

尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/17494409.html