EC2でファイル監査を設定する(fluentd+CloudWatch Logs設定編)

Pocket

大柳です。

前回はLinuxのauditd機能とAWSのCloudWatch Logsを利用してファイル監査の仕組みを作ることができましたが、ログにユーザ名が出なかったり、タイムスタンプがUnix時間だったりと課題がありました。
前回記事:EC2でファイル監査を設定する(CloudWatch Logs設定編)

今回はさらにfluentdも組み合わせて、この課題を解消したいと思います。

ゴール

auditログをfluentdで取り込んで、タイムスタンプとユーザ名をPythonスクリプトで追加した後、CloudWatch Logsに出力させます。
やりたいことのイメージは以下のようなものです。

fluentdの導入

fluentdをインスタンスに導入します。
公式ワンライナーからインストール可能です。

fluentdとCloudWatch Logsを連携させるためのプラグインfluent-plugin-cloudwatch-logsも導入します。

fluentdは以下のコマンドで起動します。

Statusオプションを付けることで、稼働していることが確認できます。

fluentdの設定

fluentdの設定ファイルに以下の修正を行います。
実行ユーザのrootへの変更はauditログを読み込むために必要です。今回はrootとしていますがセキュリティ要件に応じてここは変えてください。

fluentdのログ操作設定

まずはaudit.logをそのままCloudWatch Logsに転送する設定を行ってみます。
td-agent.confに以下の設定を記述します。

sourceブロック内のtype tail指定はログへの出力内容を随時入力させる設定です。
pathで監視対象のログファイルを、tagでこのルールに対する名前を設定しています。
フォーマット変更は行わないため、format none指定としています。

matchブロック内ではaudit_logタグのついたものに対して、type cloudwatch_logsでCloudWatch Logsに連携させるようにしています。log_group_name、log_stream_nameでロググループ名、ログストリーム名を指定しています。

CloudWatch Logsへのログ出力確認

監査対象の操作を行ってから、CloudWatch Logsを確認すると、ログストリームが追加され、ログが連携されていることが確認できます。
なお、fluentd内部でメッセージはJSON形式で扱われるため、format none指定の場合でも{“message”:”メッセージ本文”}のJSON形式に変換されてCloudWatch Logsに出力されます。

まとめ

auditログをfluentd経由でCloudWatch Logsに連携できることが確認できました。
次回記事ではexec_filter Output Pluginを使ってログを加工してCloudWatch Logsに連携してみます。

次回もお楽しみに。

次回記事:EC2でファイル監査を設定する(fluentd exec_filter設定編)