CloudWatchとinotifywaitでEC2 Linuxのファイル・ディレクトリを監視する

ファイルやディレクトリに対する予期せぬ操作や改ざんを防ぐために、特定のファイルやディレクトリ配下のファイルに対する更新(追加/変更/削除)操作を検知する方法は、一般的にとられます。
今回はEC2 Linuxのファイル・ディレクトリ監視をCloudWatchとinotifywaitを使って実現してみます。

ディレクトリ監視結果


inotify-toolsのインストール

inotifywaitとは、inotify-toolsに含まれる、ファイルに対する変更を検知するツールです。

inotify-toolsは下記コマンドでインストールできます。
inotify-toolsはAmazonLinuxの標準のyumリポジトリには登録されていません。
AmazonLinuxにもEPELのyumリポジトリが登録されていますが、デフォルトでenabled=0となっているので明示的にenablerepoする必要があります。

yum --enablerepo=epel install inotify-tools

awscliのセットアップ

情報をCloudWatchに送信するためにawscliを使うため、あらかじめセットアップしておきます。
下記コマンドで、アクセスキー、シークレットキー、リージョンを設定します。

aws configure

スクリプトの作成

下記のスクリプト例(dirmon.sh)では、/etc/ディレクトリを監視し、変更内容を/var/log/dirmon.logに出力しています。
また、併せて変更操作の回数を/tmp/dirmon_countに出力しています。

#!/bin/sh
/usr/bin/inotifywait -e create,delete,modify,move,attrib \
    -mrq /etc | while read line; do
    echo $line | tee -a /var/log/dirmon.log
    dirmon_count=`cat /tmp/dirmon_count`
    echo `expr $dirmon_count + 1` > /tmp/dirmon_count
done

一時ファイル/tmp/dirmon_countはあらかじめ作成して初期化しておきます。

echo 0 > /tmp/dirmon_count

では、このスクリプトを実行します。

./dirmon.sh

cronの設定

5分間隔で、/tmp/dirmon_count に記録された検知回数を、awscliを使ってCloudWatchに送信した後、/tmp/dirmon_countを初期化するように設定します。

crontab -e で下記の通り設定します。

*/5 * * * * aws cloudwatch put-metric-data --metric-name "etc" --value `cat /tmp/dirmon_count` --unit "Count" --namespace dirmon --dimensions InstanceId=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`; echo 0 > /tmp/dirmon_count

動作確認

では、/etc に test というファイルを作成してみます。

cd /etc
touch test

/var/log/dirmon/logには下記の通り出力されました。

/etc/ ATTRIB test

では、/etcに対する変更を断続的に繰り返した後、CloudWatchの画面を見てみましょう。

ディレクトリ監視結果

意図した通り監視できていることが確認できました。

  1. トラックバックはまだありません。

コメントを残す