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


大柳です。

前回に引き続き、ファイル監査の設定を行います。
前回記事:EC2でファイル監査を設定する(auditd設定編)

後半の今回はCloudWatch Logsを設定し、特定のログが出たらメールに通知するよう設定を行います。

CloudWatch Logsの導入

CloudWatch Logsの導入手順を説明します。

IAMロールの設定

CloudWatch Logsを利用する前提条件として、インスタンスにCloudWatch Logsを使用できる権限を割り当てる必要があります。

既存のEC2インスタンスでCloudWatch Logsを使えるようにするには、①インスタンスのイメージからIAMロールを割り当てたインスタンスを新しく作るか、②IAMロールをアタッチする必要があります。

手順は以下を参照ください。

クイックスタート: 既存の Amazon EC2 インスタンスに CloudWatch Logs エージェントをインストールして設定する – Amazon CloudWatch ログ
http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/QuickStartEC2Instance.html
マネージメントコンソールからも、既存のEC2インスタンスにIAMロールを簡単にアタッチ、変更できるようになりました | Amazon Web Services ブログ
https://aws.amazon.com/jp/blogs/news/easily-replace-or-attach-an-iam-role-to-an-existing-ec2-instance-by-using-the-ec2-console/

エージェントのインストール

次にCloudWatch LogsのエージェントをEC2にインストールします。

以下コマンドで導入できます。

エージェントの設定

/etc/awslogs/awscli.confを編集して利用するリージョンを指定します。
今回はap-northeast-1(アジアパシフィック東京)を指定しました。

ログ監視設定の追加

次に /etc/awslogs/awslogs.conf を編集してauditdのログ対象に追加します。
auditログに出力される時刻の形式はUnix時刻形式のためCloudWatch Logsエージェントで対応できないので、datetime_formatは設定しません。

エージェントの起動

CloudWatch Logsエージェントを起動します。

ログ転送の確認

次に実際にログが転送されていることを確認します。
サービスから[CloudWatch]を選択します。

[ログ]タブを選択し、ロググループからファイル監査用に作成したロググループを選択します。

ログストリームを選択します。

ログが転送されていることを確認できました。ログのフィルタも可能です。ここでは file_audit を含むものだけを表示しています。

アラームの設定

次にファイル監査のログが出た場合のアラームをメールにて通知できるように設定を行います。

ロググループの画面に戻って、設定したいロググループのメトリクスフィルタ列を選択します。

[メトリクスフィルタの追加]を選択します。

フィルタパターンを設定します。
今回はアクセス権限のあるユーザ(root、uid=0)以外のユーザがアクセスし、ファイル監査ログ(key=file_audit)が出力された場合に検知する設定にします。

[](角カッコ)で囲った場合、スペース文字を区切りとしてログデータをカラムに分割します。
auditログの形式上、uidが15カラム目、keyが28カラム目にあたるので、uidが0以外の場合(つまりroot以外の場合)、keyがfile_auditの場合にフィルタでヒットする設定にしています。

フィルタパターンの設定については以下に記載があります。

フィルタとパターンの構文 – Amazon CloudWatch ログ
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html
下部のテキストエリアにサンプルログをペーストすれば、フィルタのテストもできます。
フィルタの設定と確認ができたら、[メトリクスの割り当て]を選択します。

次にフィルタの名前、メトリクスの情報を入力します。
[フィルタの作成]を選択するとフィルタが作成されます。

アラームの作成

引き続きアラームの設定を行います。[アラームの作成]を選択します。


アラームの名前と説明を入力し、閾値には以下のように設定します。
また、アクションとして通知したいメールアドレスを指定しました。

設定ができたら[アラームの作成]を選択するとアラーム設定は完了です。

アラーム発生時アクションの確認

実際に権限のないユーザがアクセスした場合にアラームがメール通知されることを確認します。
ec2-user(アクセス権限なし)で view ConfidentialInfo.txt を実行してファイルへのアクセスを試みます。

通知先のメールを確認すると以下のようにメール通知が届いていることが確認できました。

まとめ

Linuxのauditd機能とAWSのCloudWatch Logsを利用してファイル監査を行い、インシデント検知時にはメールで通知することができました。
CloudWatch Logsではアラームの発生は検知できますが、詳細なメッセージはマネージメントコンソールで確認する必要があります。また、auditログにはuidしか出ないので、ユーザ名をログからは確認することができません。検知時間もUnix時間で出力される課題もあります。
このあたりの課題はfluentdのようなログ収集基盤を利用して、時刻変換、ユーザID変換の仕組みを作ることで解消できそうですので、後日試してみたいと思います。

次回もお楽しみに。

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