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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用python对AWS-CloudTrail-Json-日志文件key字段名称的提取相关的知识,希望对你有一定的参考价值。

关于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

 

以上是关于使用python对AWS-CloudTrail-Json-日志文件key字段名称的提取的主要内容,如果未能解决你的问题,请参考以下文章

使用python对oracle进行简单性能测试

python中文分词,使用结巴分词对python进行分词

使用 python + ldap 对活动目录进行身份验证

Python学习 Day17 Python对Mysql操作和使用ORM框架(SQLAlchemy)

接口自动化测试Python_使用python对excel进行操作

接口自动化测试Python_使用python对Json进行操作