Looker Blocksを使ってAWS CloudTrailのデータを5分で可視化してみた

見果てぬ夢を追いかけて
2020.07.17

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

奈良県でリモートワーク中の玉井です。

AWSユーザーならほとんどの方がチェックしているAWS CloudTrailの内容を可視化します。Looker Blocksがあるので、それを使います。

検証環境など

使用データ

CloudTrailの証跡ログが保存されているS3を参照します。S3のデータを分析するということは…そう、Lookerに設定するデータソースとしてはAmazon Athenaとなります。

使用するBlocks

事前準備

Athenaの準備

対象AWSアカウント上で下記をやっておきます。

AthenaをLookerに設定する

その他操作環境

  • Looker 7.10.19

やってみた

Projectを新規作成する

Starting PointでClone Public Git Repositoryを選びます。インポート元にリポジトリに、今回使うBlocksのリポジトリを使います。

Project作成に成功すると下記のようにLookMLファイルが展開されます。

LookMLをちょっとだけ修正する

自環境に合わせて修正します。

aws_athena_cloudtrail.model

Connection部分がサンプル表記になっているので、自環境のConnection名に変更します。

connection: "aws_optimizer"

cloudtrail_logs.view

sql_table_nameがサンプル表記になっているので、実際に分析したいAthenaのテーブル名に修正します。

view: cloudtrail_logs {
  sql_table_name: aws_optimizer.cloudtrail_logs ;;
...

cloudtrail_block.view

派生テーブル内のクエリのFROM句がサンプル表記になっているので、実際に分析したいAthenaのテーブル名に修正します(2箇所)。

view: user_login_facts {
  derived_table: {
    sql: select useridentity.username,
      count(*) as number_of_console_logins,
      sum(CASE WHEN errorcode = 'AccessDenied' THEN 1 ELSE 0 END) as failed_logins,
      sum(CASE WHEN errorcode = 'AccessDenied' THEN 0 ELSE 1 END) as successful_logins,
      min(eventtime) as first_login,
      max(eventtime) as latest_login
      from aws_optimizer.cloudtrail_logs
      where eventname = 'ConsoleLogin'
      GROUP BY 1
       ;;
  }
...
view: user_ip_facts {
  derived_table: {
    sql: SELECT
      useridentity.username,
      count(distinct sourceipaddress) as ip_addresses
      from aws_optimizer.cloudtrail_logs
      group by 1
      order by 2 desc
      limit 50
       ;;
  }
...

LookMLを本番ブランチにデプロイしてダッシュボードを確認する

一通り修正後、ダッシュボードができているかどうか確認します。

できてますね。

ダッシュボードを見てみる

このBlocksでは5つのダッシュボードが最初から備わっています。簡単にご紹介します。

General Operations

基本となるダッシュボードです。AWS内のイベントや、EC2のインスタンスタイプを変えたタイミング等が可視化されています。

このダッシュボードでAWS全体の仕様傾向を把握して、そこからポイント毎にドリルダウンしていって、改善やコスト削減につなげていきます。

Error Overview

AWSの運用中に発生したエラーについて、色々な切り口でまとまっています。頻繁なエラーや重大なエラー等を把握して、改善につなげましょう。

Console Login Overview

マネジメントコンソールへのアクセスに関するダッシュボードです。

不審なIPアドレスからのログイン、過度に負荷のかかるユーザーの発見、ログイン問題のトラブルシューティングなどに利用できます。

EC2 Security Group Modifications

EC2インスタンスの運用上の問題やセキュリティインシデントをレビューする場合、関連するセキュリティグループの変更を確認すると思いますが、それに使えるダッシュボードです。

このダッシュボードは、ネットワークインターフェースID、セキュリティグループ、およびアラーム発生のX時間前から始まる時間範囲をフィルタリングすることができ、最近の変更を把握することができます。怪しいセキュリティグループを指定したり、問題が起こっているEC2インスタンスのネットワークインターフェースDを指定したりできます。

また、EC2インスタンスのCPU使用率に対してCloudWatchアラームを設定している場合(一定以上高くなったら通知)、(もしアラームが通知されたら)まず最初に、インスタンスにさらなるトラフィックや負荷を生み出す可能性のあるセキュリティグループの変更(新しいセキュリティグループの追加や既存のセキュリティグループへのインバウンドルールの追加)があったかどうかを、このダッシュボードで確認できます。

Operational Account Activity

各ユーザーが何してるのかを把握するダッシュボードになっています。ダッシュボードというか、3つの表が並んでいます。

Top AWS Event Errors

一定時間内に繰り返し発生しているエラーがわかります。よくあるのが、S3のバケットポリシーが正しく設定されていなくて、S3関連のエラーが連発しているとかです。そういうのを発見して、AWSサービスを改善していきます。

Top IAM Users

イベント別のIAMユーザーとアクティビティを示しています。

各IAMユーザーによって開始されたアクティビティの合計と、それらのアクティビティのイベント名が表示されていますが、この表からドリルダウンしてアクティビティをフィルタリングし、既知のネットワーク外や時間外に発生したイベントのみを表示して、問題を分析します。

Root Activity

ルートアカウントによって開始されたイベントがわかります。これらがルートアカウント自体のアクティビティなのか、それともアクティビティを実行するためにAWSサービスによって呼び出されたのか(呼び出された場合はどのサービスか)を把握するために使います。

おわりに

Cloudtrailの監視はみなさんやっていると思うので、ぜひLookerを使って簡単に可視化してみてください。

参考

Athenaの動作確認でハマったときに役立った記事をご紹介しておきます。