はじめに
CloudTrail→Elasticsearch Serviceへ投入する方法を調べてみると2つあるようなので、メモとしてまとめてみる。
1. CloudTrail→S3→Lambda→Elasticsearch Service
S3にgz形式で保存されてるファイルをLambdaで処理してElasticsearch Serviceに登録するパターン。
検索すればサンプルコードが見つかるが、Lambdaファンクションを1から作成する必要がある。
Lambda(NodeJS)ファンクション作成の参考
S3からElasticsearch Serviceに登録するLambdaのサンプルがawslabsのGithubで公開されている。
https://github.com/awslabs/amazon-elasticsearch-lambda-samples/blob/master/src/s3_lambda_es.js
上記をベースにして、gzファイルの解凍部分を下記サイトのコードを参考にすればOK。
Lambdaを使って、CloudTrailログをCloudSearchに入れて検索する
Lambdaの実行ロール設定
Elasticsearchのアクセスポリシーで全開放にしているなら特に気にしなくてもいいが、IAMやIPで制限している場合はLambda→Elasticsearch APIでアクセスできるように、Lambdaの実行ロールにes:*やes:ESHttpPostなどの許可を与えてあげる必要がある。
※未検証だが、Elasticsearch ServiceのアクセスポリシーにLambdaの実行ロールを追加でもいけるはず?
アクセスポリシーの設定についてやActionに設定できる値などは下記参照。
Creating and Configuring Amazon ES Domains
2. CloudTrail→CloudWatch Logs→Lambda→Elasticsearch Service
CloudTrailからCloudWatch Logsへ登録させ、それをLambdaで処理してElasticsearch Serviceに登録するパターン。
下記サイトに手順があるが、1.と異なり画面からポチポチやって設定することができる。
【運用】CloudTrailで取得した監査ログをElasticSearch Serviceで活用する【簡単設定】
簡単ですごく便利!!
これも結局はLambdaを使うので、作成されたコードやロール設定を見てみるといいと思う。
※こちらはElasticsearchへの登録にBulk APIを利用している
考察
画面から簡単に設定できるので、2.の構成で利用するのがとても簡単。
しかし、料金面でみると2.はS3とCloudWatch Logsの両方に保存してるので、その分お金かかる感じですね。
余談
次のLambdaのサポート言語は、Go言語 or Rubyのどっちがいい?というアンケートがあるらしいです。
私はRubyがいいなー。
We want to hear from you - what language do you think AWS Lambda should support next #Golang or #Ruby?
— Amazon Web Services (@awscloud) 2015, 10月 29