TrailDashでCloudTrailを可視化する
はじめに
皆さん、CloudTrail使ってますか?AWSアカウントのAPI呼び出しを記録しログとして保存するCloudTrailは、とりあえずデフォルトで有効にしても良いほど、監査証跡の観点で有用なサービスです。
しかしそのログはgz圧縮されたJSONファイルなので、正直人間の目でチェックするには厳しいものがあります。様々なパートナーベンダがCloudTrailを可視化するソリューションを提供していますが、商用プロダクトはなかなか簡単に試すことはできません。
そんな中、AWSのChief EvangelistであるJeff Barrのtweetで面白そうなものを知りました。
Traildash is an #AWS Cloudtrail dashboard - http://t.co/58fjvreh9v - nice work, @AppliedTrust ! pic.twitter.com/7eWncrfmbw
— Jeff Barr (@jeffbarr) March 20, 2015
ということで、早速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で表示します。
CloudTrail + SNSの設定
CloudTrailを有効にします。その際にSNSと連携するように設定します。自動的にS3 BucketとSNS topicが作成されます。
SQSの設定
AWS管理コンソールのSQS画面で、[Create New Queue]ボタンをクリックします。
[Create New Queue]画面で[Queue Name]を指定します。他の項目はデフォルト値で構いません。設定後[Create Queue]ボタンをクリックします。
作成されたQueueをクリックして選択し、[Subscribe Queue to SNS Topic]をクリックします。
[Subscribe to a Topic]画面で、CloudTrail設定時に作成したSNS Topicを指定します。設定後[Subscribe]ボタンをクリックします。
[Topic Subscription Result]画面が表示されるので[OK]ボタンをクリックします。
これでSQSの設定は完了です。
EC2の設定
EC2では、IAM Roleを設定します。今回はPowerUserAccessを持つIAM Roleを作成しました。実際には上記で作成したSQS QueueとCloudTrailが使っているS3のバケットへのアクセス権限があれば良いので、必要に応じて制限してください。
EC2をLaunchする時に、作成したIAM Roleを紐つけます。
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の画面が表示されます!
さいごに
とても簡単にCloudTrailの可視化ができました。Dockerが動いて、かつS3とSQSにアクセスできれば良いので、もちろんオンプレミス環境でも、他のAWSアカウント上でも構いません。Kibanaなのでフィルタリングも可能です。これは便利ですね!