ちょっと話題の記事

TrailDashでCloudTrailを可視化する

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

はじめに

皆さん、CloudTrail使ってますか?AWSアカウントのAPI呼び出しを記録しログとして保存するCloudTrailは、とりあえずデフォルトで有効にしても良いほど、監査証跡の観点で有用なサービスです。

しかしそのログはgz圧縮されたJSONファイルなので、正直人間の目でチェックするには厳しいものがあります。様々なパートナーベンダがCloudTrailを可視化するソリューションを提供していますが、商用プロダクトはなかなか簡単に試すことはできません。

そんな中、AWSのChief EvangelistであるJeff Barrのtweetで面白そうなものを知りました。

ということで、早速TrailDashを触ってみました!

やってみた

 TrailDashの仕組み

  • (1) ユーザーがAWS管理コンソールやスクリプトなどからAWS APIを操作します。
  • (2) CloudTrailはAWS APIの操作を検知し、S3にログファイルを保存します。合わせてSNSに通知します。
  • (3) SNSからSQSにQueue Messageを送ります。
  • (4) TrailDash(なんとDockerコンテナで動きます!)はSQSからQueue Messageを取得します。
  • (5) TrailDashはQueue MessageからS3上のログファイルのパスを確認し、ログファイルを取得します。
  • (6) TrailDashはElasticsearchとKibana3で動いています。取得したログファイルをElasticsearchに取り込み、Kibana3で表示します。

AWS_Simple_Icons_2_3_light_edition_pptx 2

CloudTrail + SNSの設定

CloudTrailを有効にします。その際にSNSと連携するように設定します。自動的にS3 BucketとSNS topicが作成されます。

CloudTrail_Management_Console

SQSの設定

AWS管理コンソールのSQS画面で、[Create New Queue]ボタンをクリックします。

SQS_Management_Console

[Create New Queue]画面で[Queue Name]を指定します。他の項目はデフォルト値で構いません。設定後[Create Queue]ボタンをクリックします。

SQS_Management_Console 2

作成されたQueueをクリックして選択し、[Subscribe Queue to SNS Topic]をクリックします。

SQS_Management_Console 3

[Subscribe to a Topic]画面で、CloudTrail設定時に作成したSNS Topicを指定します。設定後[Subscribe]ボタンをクリックします。

SQS_Management_Console 4

[Topic Subscription Result]画面が表示されるので[OK]ボタンをクリックします。

SQS_Management_Console 5

これでSQSの設定は完了です。

EC2の設定

EC2では、IAM Roleを設定します。今回はPowerUserAccessを持つIAM Roleを作成しました。実際には上記で作成したSQS QueueとCloudTrailが使っているS3のバケットへのアクセス権限があれば良いので、必要に応じて制限してください。

IAM_Management_Console

EC2をLaunchする時に、作成したIAM Roleを紐つけます。

EC2_Management_Console

TrailDashコンテナの実行

今回はAmazon LinuxでEC2をLaunchしていますが、実際にはDockerが動けばなんでも構いません。

Amazn LinuxがLaunchしたら、dockerをインストールしておきます。

$ sudo yum update
$ sudo yum install -y docker
$ sudo service docker start

ではTrailDashコンテナを起動します。リージョンとSQSのURLを指定してコンテナをrunさせます。

$ sudo docker run -i -d -p 7000:7000 \
    -e "AWS_REGION=ap-northeast-1" \
    -e "AWS_SQS_URL=https://YOUR_SQS_URL" \
    -e "DEBUG=1" \
    -v /home/traildash:/var/lib/elasticsearch/ \
    appliedtrust/traildash

以下のように7000/tcpがポートフォワードされた形で起動します。

$ sudo docker ps
CONTAINER ID        IMAGE                           COMMAND             CREATED             STATUS              PORTS                    NAMES
c46b323363ab        appliedtrust/traildash:latest   "/root/start"       3 seconds ago       Up 2 seconds        0.0.0.0:7000->7000/tcp   evil_cori

EC2の7000/tcpにWebブラウザでアクセスすると、以下のようにTrailDashの画面が表示されます!

Kibana_3_-_CloudTrail

さいごに

とても簡単にCloudTrailの可視化ができました。Dockerが動いて、かつS3とSQSにアクセスできれば良いので、もちろんオンプレミス環境でも、他のAWSアカウント上でも構いません。Kibanaなのでフィルタリングも可能です。これは便利ですね!