从 CloudTrail 日志中检索 RunInstances 事件的用户名

Retrieving Username from CloudTrail logs for RunInstances event

我们在 AWS 中有大量 EC2 实例 运行 大约 1 年。现在我们正在尝试根据我们启动实例时使用的用户名对未使用的实例执行清理 activity。

我尝试从 S3 Bucket 下载 cloudtrail 日志并尝试过滤用户名和 'RunInstances' 事件,以便我可以找到启动实例的用户以及实例详细信息。

以下是我用来将所有 cloudtrail 日志下载到一个文件夹中、解压缩它们并按 'RunInstances' 事件过滤实例并给出实例计数的脚本。

我需要帮助从每个带有 'RunInstances' 事件的日志中检索用户名并停止实例。

我的脚本:

#!bin/sh

s3url="s3://S3bucket/AWSCloudtrailLogs/<accountno>/CloudTrail/region/2016/" 

for (( i=1; i<=12; i++ ))
do
   for (( j=1; j<=31; j++ ))
   do
        if [[ $i -le 9 && $j -le 9 ]]
        then
           aws s3 cp $s3url/0$i/0$j/ ~/test/ --recursive
        elif [[ $i -le 9 && $j -ge 10 ]]
        then
           aws s3 cp $s3url/0$i/$j/ ~/test/ --recursive
        elif [[ $i -ge 10 && $j -le 9 ]]
        then
           aws s3 cp $s3url/$i/0$j/ ~/test/ --recursive
        elif [[ $i -ge 10 && $j -ge 10 ]]
        then
           aws s3 cp $s3url/$i/$j/ ~/test/ --recursive
        fi
   done
done

for v in `ls ~/test/` ; do gunzip $v ; done

for v in `ls ~/test/` ; do cat ~/test/$v | grep RunInstances >> ~/test/result.txt; done

grep -o 'RunInstances' ~/test/result.txt | wc -l

我是否可以不下载 zip 文件并直接从 s3 存储桶本身获取信息?因为这会花费很多时间,因为我们有超过 100 万个日志文件。

我需要一种方法来使用任何编程语言或脚本解决这个问题。

感谢您的支持。

directly get info from s3 bucket itself 是什么意思? S3 是存储资源而不是计算资源。您可以避免下载到磁盘文件。相反,您可以在内存中处理它而不保存到文件,但仍然必须下载它。

建议:

  • 不要下载全年所有地区的所有路线。这需要很长时间
  • 一次处理一个地区一个月的数据。对其他 months/regions
  • 重复此操作
  • 使用 Python/Boto3,它有许多方便的功能来处理跟踪日志并提取您想要的信息

我每天都这样做(只针对前一天的日志)但是我就是不能给出代码。

而不是下载所有 s3 日志然后查询它为什么不使用像雅典娜这样的东西!。这将节省您的时间并大大减少您的工作量。 Cloudtrail 确实提供了有关谁启动实例及其 sdk 可用的足够信息;您可以使用 boto3 编写一个 python 脚本,并可能每天为 运行 设置一个 cron 作业。