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の画面を見てみましょう。
意図した通り監視できていることが確認できました。
トラックバックはまだありません。