CloudTrailの証跡配信エラーを検知する
CloudTrailの証跡配信エラーを検知する方法を調べました。
CloudTrailの証跡は配信失敗する可能性がある
AWS上で発生したイベントを記録してくれるCloudTrailは非常に便利なサービスで、証跡を作るだけでAWSで行ったログをS3などに出力することができます。
ただ、あまりに便利すぎて、安定してログを収集するための設定に考えが及ばないことがあります。
例えば、ログの配信が何かの理由で失敗してしまうとか...。
という訳で、CloudTrailの証跡の配信が失敗した時の検知方法を学んだので、共有できればと思います。
get-trail-status API
get-trail-status APIを使うと、対象のCloudTrail証跡のステータスを入手することが可能です。
docs.aws.amazon.com
例えば、cloudtrail-testという名前の証跡のステータスをAWS CLIで確認するには、下記のコマンドを使います。
aws cloudtrail get-trail-status --name cloudtrail-test
Outputとして、下記のようなJSONが返却されます。
#From https://docs.aws.amazon.com/cli/latest/reference/cloudtrail/get-trail-status.html { "LatestNotificationTime": 1454022144.869, "LatestNotificationAttemptSucceeded": "2016-01-28T23:02:24Z", "LatestDeliveryAttemptTime": "2016-01-28T23:02:24Z", "LatestDeliveryTime": 1454022144.869, "TimeLoggingStarted": "2015-11-06T18:36:38Z", "LatestDeliveryAttemptSucceeded": "2016-01-28T23:02:24Z", "IsLogging": true, "LatestCloudWatchLogsDeliveryTime": 1454022144.918, "StartLoggingTime": 1446834998.695, "StopLoggingTime": 1446834996.933, "LatestNotificationAttemptTime": "2016-01-28T23:02:24Z", "TimeLoggingStopped": "2015-11-06T18:36:36Z" }
加えて、配信エラーが発生すると、キーに"LatestDeliveryError"が追加されます。
LatestDeliveryError -> (string)
Displays any Amazon S3 error that CloudTrail encountered when attempting to deliver log files to the designated bucket. For more information see the topic Error Responses in the Amazon S3 API Reference.
こいつが使えそうです。
エラー発生時の挙動を確認する
今回はS3にログを送信し損ねた時の挙動に興味があるので、試して見たいと思います。
検知方法
CloudTrail statusを取得するにはAPIを叩かないといけないので、Lambdaにスクリプトを書いて定期実行するのが一番良いでしょう。
取得したJSONを標準出力しておくと、CloudWatchLogsに吐かれるので、フィルターで"LatestDeliveryError"などの文字列をメトリクス化してアラームで拾うと良いでしょう。
エラー中の証跡の行方とか、もうちょっと人間的な確認方法とか
実験すると、エラー中の証跡は、正常な配信が再開されると、対象の場所に吐き出されるようでした。
ちなみに、エラーの発生はコンソールからも確認できます。
AWS始めたばかりで、急にLambdaとかCloudWatchとかワシワシ設定するの辛い方は、とりあえずたまにコンソールを見るだけでもよさそうですね。