Visualize CloudTrail with Traildash and Arukas

このブログが動いているサーバはDigitalOceanですが、terraformのbackendにS3やDynamoDBを使うなど、AWSのサービスも使っています。

必然的にIAMユーザを作成しアクセスキーを発行することになるので、CloudTrailでユーザの活動やAPIの使用状況を保存しています。

しかし、正直活用できていないです…。というのも、CloudTrailで保存されるログはjsonで、CloudTrail自身に特に可視化機能も同梱されていないのです。なのでログを取ってはみているものの見ることがないという…(良くない)。

そこで、何かいい感じの可視化ツールが無いか探してみたところ、Traildashというツールがありました。

今回はこのTraildashを使ってCloudTrailの可視化をしてみます。

Traildash has been retired

いきなりえーって感じですが、TraildashのREADMEにあるように、AWSがAmazon Elasticsearch Serviceを開始したのでElasticSearchとKibanaベースで作られているTraildashはもう開発は続けないよ!とのことです。

ただ、TraildashによってDockerイメージが用意されているので、開始するのが楽ちん!というわけであえてTraildashを使ってみます。

あとAmazon Elasticsearch Serviceを使うとEC2インスタンス費用がかかりますし。

Traildashのしくみ

CloudTrailはログを置くストレージとして、S3とは別にSNSへの発行ができます。

その仕組みを使って、SQSでそのSNSトピックをサブスクライブし、SQSにキューイングされたメッセージをTraildashがポーリングし、ElasticSearchに保存・Kibanaで可視化するというのがTraildashの主な仕組みなようです。

TraildashはDockerを使うことが推奨されており、コンテナを立ち上げればすぐ使うことができます。

Dockerが動いている環境ならどこでも動かすことができます。

まずはローカルで動かしてみる

まずはローカルのDockerでTraildashコンテナを立ち上げ利用してみます。

AWS側の準備

最初にSNS連携やSQSの設定をしていきます。

CloudTrailでSNS連携を有効にします。

SQSの作成、設定をします。

  • 名前以外はデフォルトでOK

IAMでTraildash用のユーザとアクセスキーを作成します。

  • TraildashからAWSのリソース(SQSとS3)にアクセスするため
  • ポリシーはSQSとS3のフルアクセス権を選択している
    • さらに最小限のポリシーにもできる。TraildashのREADMEのSetup Traildash in AWSの6.を参照

Traildashの準備

イメージを取得します。

docker pull appliedtrust/traildash

Data volumesのためのpathを作成します。

  • ElasticSearchのデータを永続化するための場所
mkdir ~/Desktop/traildash-test

Traildashを動かす

docker runします。AWSのアクセスキーなどの環境変数を渡します。

docker run -i -d -p 7000:7000 \
	-e "AWS_ACCESS_KEY_ID=XXX" \
	-e "AWS_SECRET_ACCESS_KEY=XXX" \
	-e "AWS_SQS_URL=https://XXX" \
	-e "AWS_REGION=XXX" \
	-e "DEBUG=1" \
	-v ~/Desktop/traildash-test:/var/lib/elasticsearch/ \
	appliedtrust/traildash

http://localhost:7000/にアクセス。

見れた!すげー!

うまく表示されないときは…

グラフが描画されずずっと読み込み中…

docker attach <traildashのコンテナID>すると、エラーなどが吐かれているのを見れます。

例えば以下のようなエラーなど。

Error dequeing from SQS: SQS ReceiveMessage error: The specified queue does not exist for this wsdl version.

私の場合、よく見たらAWS_SQS_URLに設定したURLをtypoしていた…。ほかにはアクセスキーが間違ってたとかリージョンが間違ってるとかがありそう。

各設定はあっているのにグラフがずっと読み込み中…

SQSにメッセージが無いとデータをS3から取ってこれないので、AWSコンソールにアクセスして適当な操作をすればメッセージがキューイングされ、Traildashにデータが入ると思います。

Arukasで動かす

Arukasで動かすぞ!!

前提として、ArukasではそもそもData volumesに対応していないのでので、**データの永続化はできません。**ので注意。

以下のようにArukasの設定をしていきます。

これだけ!!!

注意点

思った注意点。

  • ArukasはData volumesに対応していないので、ElasticSearchに貯めたデータを永続化できない
  • アクセス制限は無いので、URLを知っている人ならだれでもAWSのAPI使用履歴を見れてしまうので注意

感想

CloudTrailの可視化、面白い。監査が捗りそう。

業務で使う場合はAmazon Elasticsearch Serviceなどを使って安定した基盤で行う必要があるが、ちょっと遊んで見るくらいならTraildash + Arukasを使うと楽だし無料だし楽しい!

参考リンク