使用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
作者:一名卑微的IT民工
出处:https://www.cnblogs.com/5201351
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个卑微的IT民工!
以上是关于使用python对AWS-CloudTrail-Json-日志文件key字段名称的提取的主要内容,如果未能解决你的问题,请参考以下文章
Python学习 Day17 Python对Mysql操作和使用ORM框架(SQLAlchemy)