CloudTrailのログをExcelで(あまり頑張らずに)解析してみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSチームのすずきです。

AWS APIへのアクセスログ機能を提供するCloudTrail、そのログはJSON形式、多数のgz圧縮ファイルとしてS3上に保存されるため、 人による視認性は芳しくありません。

今回、CloudTrailのログを簡単に解析する方法として、MS-Officeのエクセルを利用する方法について紹介させて頂きます。

準備

  • 「jq」コマンドの実行環境を準備します。
  • 解析対象とするCloudTrailのログは、awscliなどを利用して転送済とします。

    Amazon Linux AMI 2014.09環境での実行例

    sudo yum install jq
    
    S3_PATH="cm-XXXXX/AWSLogs/XXXXX/CloudTrail/ap-northeast-1/2014/XX/XX"
    
    WORK_DIR=/tmp/$$
    mkdir -p ${WORK_DIR}
    
    cd ${WORK_DIR}
    aws s3 ls s3://${S3_PATH}/
    aws s3 sync s3://${S3_PATH} ./
    

    TSVファイルの作成

    JSON形式のCloudTrailログファイルから、影響度が低いと思われる参照系の操作(Describe、List、Get)ログを除外し、タブ区切りのテキストに変換するスクリプトを用意しました。 こちらを実行します。

    #!/bin/sh 
    
    OUT_FILE='./out.tsv'
    
    echo 'eventTime|awsRegion|eventSource|eventName|userName|sourceIPAddress|userAgent|requestParameters|userIdentity' \
      | sed 's/|/\t/g' > ${OUT_FILE}
    
    find . -name "*.json.gz" | xargs gunzip -c \
      | jq '.Records[] | select(contains({eventName:"Describe"})|not) | select(contains({eventName:"List"})|not) | select(contains({eventName:"Get"})|not)' \
      | jq -r '"\(.eventTime)|\(.awsRegion)|\(.eventSource)|\(.eventName)|\(.userName)|\(.sourceIPAddress)|\(.userAgent)|\(.requestParameters)|\(.userIdentity)"' \
      | sed 's/|/\t/g' | sort -k 1,1 >> ${OUT_FILE}
    
    head -n 10 ${OUT_FILE}
    
    

    エクセルで開く

    作成されたTSVファイルは、scpなどを利用してエクセルが動作する端末にコピーし、タブ区切りのテキストファイルとして開きます。

    cloudtrail_tsv_excel

    まとめ

    小中規模のAWSアカウント、期間や対象を限定した利用であれば、CloudTrailのログをエクセルのフィルタ機能などを用いて、簡単に解析する事が可能でした。

    万一のセキュリティ事故が発生した際万全の対応をとるためにも、CloudTrail機能は有効化する事をお薦めします。

    参考リンク 新規アカウントでもこれ一発!CloudTrailを全リージョンで有効化するスクリプトを書いた