首页 > 编程语言 >使用python对AWS-CloudTrail-Json-日志文件key字段名称的提取

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

时间:2023-06-20 20:12:30浏览次数:62  
标签:文件 CloudTrail python CloudTrailAllKeys AWS 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

 

标签:文件,CloudTrail,python,CloudTrailAllKeys,AWS,key,日志,目录
From: https://www.cnblogs.com/5201351/p/17494409.html

相关文章

  • Python asyncio 库源码分析
    Pythonasyncio库源码分析前言本着「路漫漫其修远兮,吾将上下而求索」的精神。终于要开始深入研究Python中asyncio的源码实现啦。本文章可能篇幅较长,因为是逐行分析asyncio的实现,也需要读者具有一定的asyncio编码经验和功底,推荐刚开始踏上Python异步编程之旅的朋......
  • Python 列表生成式(转载)
    Python列表生成式列表生成式列表生成式即ListComprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式如何生成[1,2,3,4,5,6,7,8,9,10]列表?>>>list(range(1,11))[1,2,3,4,5,6,7,8,9,10]如何生成[1x1,2x2,3x3,...,10x10]......
  • Python 函数
    Python函数一、Python函数之定义函数在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:然后,在缩进块中编写函数体,函数的返回值用return语句返回。1、定义一个函数defmyfirst():print("Helloworld!")myfirst()#输出结果Hellow......
  • Python 迭代器和生成器
    Python迭代器和生成器1、迭代器迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退,迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于......
  • 【python】logging日志打印重复输出冗余日志
    https://blog.csdn.net/Moonlight_16/article/details/123334339?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4-123334339-blog-96309743.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source=......
  • Python工具箱系列(三十六)
    基于Docker的数据库开发环境前文介绍了sqlite/mysql/mssql等数据库系统在ubuntu的安装与部署过程,相对是比较复杂的,需要耐心等待下载以及排除各种故障,对于开发人员来说是不太友好。在某些情况下,开发人员要测试在多个数据库环境下软件的正确性,需要部署多个数据库,为此可以使用Docker技......
  • 超级详细的python爬虫
    演示一个虎扑体育网站-NBA球员新手的话需要安装两个模块requests和lxmlrequests的作用:就是爬虫模块不断向浏览器发送请求lxml的作用:模块可以利用XPath规则语法,来快速的定位HTML\XML文档中特定元素以及获取节点信息1.mportrequests2.fromlxmlimportetree3.ur......
  • Python 强制杀死运行中的多进程脚本
    本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!Python强制杀死运行中的多进程脚本,实现完全停止环境win10Pytho3.9获取当前脚本的进程id#获取当前进程......
  • requests爬虫实践之安居客二手房屋数据(python实现)
    1.先从安居客官网上淘到如下数据(详细方法可见博主爬取爱彼迎那篇博客):2.源码(警告:若频繁爬取安居客官网数据,将被要求入网验证…)importrequestsfrombs4importBeautifulSoupheaders={'user-agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,l......
  • Python开发系列课程(2) - 语言元素
    语言元素指令和程序计算机的硬件系统通常由五大部件构成,包括:运算器、控制器、存储器、输入设备和输出设备。其中,运算器和控制器放在一起就是我们通常所说的中央处理器,它的功能是执行各种运算和控制指令以及处理计算机软件中的数据。我们通常所说的程序实际上就是指令的集合,我们写程......