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を使うと楽だし無料だし楽しい!