0

約 1 年間、AWS で多数の EC2 インスタンスを実行しています。現在、インスタンスを起動した際に使用したユーザー名に基づいて、未使用のインスタンスのクリーンアップ アクティビティを実行しようとしています。

S3 バケットから cloudtrail ログをダウンロードして、ユーザー名と「RunInstances」イベントをフィルタリングして、インスタンスを起動したユーザーとインスタンスの詳細を見つけられるようにしました。

以下は、すべての cloudtrail ログを 1 つのフォルダーにダウンロードし、それらを解凍して、「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 万を超えるログ ファイルがあるため、これには多くの時間がかかるためです。

プログラミング言語またはスクリプトでこれを理解する方法が必要です。

ご協力ありがとうございました。

4

2 に答える 2

1

とはどういう意味directly get info from s3 bucket itselfですか? S3 はストレージ リソースであり、コンピューティング リソースではありません。ディスク ファイルへのダウンロードを回避できます。代わりに、ファイルに保存せずにメモリ内で処理できますが、ダウンロードする必要があります。

提案:

  • 1 年を通してすべての地域のすべての証跡をダウンロードしないでください。めっちゃ時間かかります
  • 一度に地域の 1 か月分のデータを処理します。他の月/地域についても繰り返します
  • 証跡ログを処理し、必要な情報を抽出するための多くの便利な機能を備えた Python/Boto3 を使用します。

私はこれを毎日行っています(前日のログのみ)が、コードを提供できません。

于 2016-08-24T14:42:54.183 に答える