本記事に関して Joseph Chan からコメントもらいました!うれしいですね!
Cool post on Managing Raspberry Pi / IoT devices with #MSOMS (hint: use Bing/Google Translate to read!) https://t.co/8PtIcJn5f1
— Joseph Chan (@jochan_msft) 2015, 12月 20
こんにちは。今年も残すことあとわずかですね。実は先日しばやんからRaspberry Pi Zeroを譲ってもらいました。一足早いクリスマスプレゼントです。赤い鳥もサンタの帽子に見えてきます。ありがとう、しばやん!
さて、今回の Blog は Azure Advent Calendar 2015 に参加したものになっています。前日はのりじさんのデザインデータのバックアップ問題をAzure Backupで解決してみるでした。
2015年を振り返ってみると、デバイスとしては Raspberry Pi 2 や、Raspberry Pi Zero が出て世間を騒がせたり、3G/LTE ネットワークを含む IoT プラットフォームとしては SORACOM Air がサービス開始され世間を騒がせたり、Microsoft Azure では Event Hubs と Stream Analytics に感動したりと、IoT 周辺が面白い感じになってきました。今回は、そんな IoT デバイスのログ管理によるセキュリティ対策を考えてみようと思います。
Raspberry Pi と Syslog
Raspberry Pi の Linux は Raspbian が有名ですね。その Raspbian の rsyslog では、デフォルトでmicro SDのストレージにログが書かれるように設定されています。何回も書き込みが行われるので、micro SDが壊れないか心配です。また、書き込みが行われないようにログの出力を無効にするのはセキュリティ的もにやりたくありません。だけど、もしログを書き込んでいたとしても、あまりログを見ることはないのではないでしょうか?さらに複数のIoTデバイスのログの閲覧は大変ですよね。
そこで今回はOMSを使って、いつでも全てのRaspberry Piのログを確認できるようにします。インターネットサーバなどのセキュリティソリューションをIoTデバイスに対しても使ってみようと思います。
OMSとは
OMS (Microsoft Operations Management Suite)は、Azure、AWS、VMware そしてOpenStackなどの、あらゆるハイブリッド クラウド環境に置いている Windows Server、Linux Server を包括的に低コストで管理するソリューションです。これらのServerから取得する情報としては、以下のように大きく分けて2つあります。システム全体としては、Azure Backup や Azure Site Recovery、Automationなどと一緒に使うと効果的に管理できます。
ログに関しては、サーバからOMSのストレージに送信するため、複数サーバのログをまとめて管理し、横断的にセキュリティ観点の分析することが可能です。現段階で取得可能なログは、Windows Serverのイベントログ、Linux ServerのSyslog、Nagiosのアラート、Zabbixのアラートとなります。
パフォーマンスカウンタも取得することか可能です。Windows Serverの場合はすでに用意されているパフォーマンスカウンタの情報を取得すると想像できますが、Linuxに関してはOMIとSCXを使ってパフォーマンスカウンタとの取得とマッピングを行っているようです。
なお、多くの方が画像や映像で見ているOMSのダッシュボードは、Operational Insitesというサービスとなっており、Azure PortalからOMSを追加する際は、このOperational Insitesを選択します。それでは、実際に作ってみます。
Operational Insitesの作成と設定
それでは、OMSを利用してみます。Azure PortalからOperational Insiteを作成します。選択すると昔のポータルにジャンプします。
昔のポータルでワークスペースの名前と、サービスティアのプランを選択します。
昔のポータルでOperational Insitesのワークスペースが作成されたことを確認して、下の管理アイコンをクリックします。
ここからOMSになりました。まずはメールアドレスを教えます。
OMSのアカウントにメールアドレスを追加します。これにより、定期的に状態のレポートが送られてきたりします。
ようやくOMSにログインすることができます。OMSのリード・プログラム・マネージャの @jochan_msft のTwitterも表示されてますね!
最初は、ソリューションが選ばれていないのと、どのサーバとも接続していないので、まずは、その辺りの設定から始めます。大きな青色の四角のSettingsをクリックして設定を始めます。
設定を始めると、ソリューションの選択画面になります。今回はLog Serchだけでいいのですが、全部にチェックを入れました。現段階では、Windows Serverを使っている場合などは、セキュリティの問題などアラートが表示されます。
次は、サーバとの接続です。今回はLinuxを管理するので、Linuxエージェント(プレビュー)のダウンロードをクリックします。
ダウンロード先のGitHubが表示されました。
下のほうに行くとダウンロードのURLがあります。Linuxのコマンドでuname -mを実行したときに x86 か x86_64 と表示されるので、x86の場合は32bitを、x86_64の場合は64bitをダウンロードします。
Linux上でwgetやcurlを使うと便利ですね。ダウンロードしたファイルを実行するとインストールが完了します。
OMSの画面で確認すると、”1 SERVER CONNECTION” となっており、接続が成功したことがわかります。
次にDATAのタブに移り、取得するパフォーマンスカウンタの確認をします。
後は取得するSyslogの設定です。最後に、画面下のSAVEをクリックして完了です。
ログも送られてきていますね。
Raspberry PiをOMSに接続する
サーバに関しては上記の方法でOMSと接続しましたが、次はRaspberry PiをOMSに接続します。IoTデバイスと関係するサーバのログをまとめてOMSで管理します。
では、Raspberry PiにOMSエージェントを入れてみます。GitHubに用意されているインストーラーはx86かx86_64向けなので、そのまま利用することができません。GitHubには関係するソースコードがありますので、それを使ってインストールしていきます。OMSエージェントはFluentdを使用しているため、FluentdのプラグインとしてOMSに接続しているようです。サーバ向けのOMSインストーラは、RubyやFluentdを含んだパッケージになっていましたが、Raspberry Piでは、Raspberry Piでインストールできる普通のRubyとFluentdを使ってみます。以下のコマンドを実行するとインストールできますので参考にしてください。
# fluentdをインストール sudo aptitude install ruby-dev git make sudo gem install fluentd sudo fluent-gem install fluent-plugin-td # OMSエージェントのユーザ作成 sudo adduser omsagent # GitHubからOMSSエージェントの取得 git clone https://github.com/Microsoft/OMS-Agent-for-Linux.git # OMSエージェントのインストール:ディレクトリ関係作成 sudo mkdir -p /etc/opt/microsoft/omsagent/certs sudo mkdir -p /etc/opt/microsoft/omsagent/conf/omsagent.d sudo mkdir -p /etc/opt/microsoft/omsagent/sysconf sudo mkdir -p /etc/opt/microsoft/scx/conf sudo mkdir -p /opt/microsoft/omsagent/bin sudo mkdir -p /opt/microsoft/omsagent/plugins sudo mkdir -p /var/opt/microsoft/omsagent/tmp sudo mkdir -p /var/opt/microsoft/omsagent/run sudo mkdir -p /var/opt/microsoft/omsagent/log sudo mkdir -p /var/opt/microsoft/omsconfig/log sudo mkdir -p /var/opt/microsoft/omsconfig/run sudo chown omsagent:omsagent -R /var/opt/microsoft/omsconfig sudo chown omsagent:omsagent -R /var/opt/microsoft/omsagent sudo ln -s /usr /opt/microsoft/omsagent/ruby sudo ln -s /usr/local/bin/fluentd /opt/microsoft/omsagent/bin/omsagent # OMSエージェントのインストール:Syslog送信に必要なプログラムのコピー sudo cp OMS-Agent-for-Linux/installer/scripts/auth_key.rb /opt/microsoft/omsagent/bin/ sudo cp OMS-Agent-for-Linux/installer/scripts/omsadmin.sh /opt/microsoft/omsagent/bin/ sudo chmod u+x /opt/microsoft/omsagent/bin/omsadmin.sh sudo cp OMS-Agent-for-Linux/installer/scripts/service_control /opt/microsoft/omsagent/bin/ sudo cp OMS-Agent-for-Linux/installer/scripts/omsagent.ulinux /etc/init.d/omsagent sudo chmod u+x /etc/init.d/omsagent sudo cp -Rf OMS-Agent-for-Linux/source/code/plugins /opt/microsoft/omsagent/ # OMSエージェントのインストール:Syslog送信に必要な設定ファイルのコピー sudo cp OMS-Agent-for-Linux/installer/conf/omsagent.conf /etc/opt/microsoft/omsagent/conf/ sudo mv /etc/rsyslog.conf /etc/rsyslog.conf.default sudo cp OMS-Agent-for-Linux/installer/conf/rsyslog.conf /etc/ # OMSエージェントのインストール:インストール状態のファイル作成(SCXは今回インストールしていないので手動で作成) sudo echo "1.0.0-47 20151102 Developer_Build" > /tmp/installinfo.txt sudo echo `date +%Y-%m-%dT%H:%M:%S` >> /tmp/installinfo.txt sudo mv /tmp/installinfo.txt /etc/opt/microsoft/omsagent/sysconf/ sudo echo "OSName=Ubuntu" > /tmp/scx-release sudo echo "OSVersion=14.04" >> /tmp/scx-release sudo echo "OSFullName=Ubuntu 14.04 (x86_64)" >> /tmp/scx-release sudo echo "OSAlias=UniversalD" >> /tmp/scx-release sudo echo "OSManufacturer=Canonical Group Limited" >> /tmp/scx-release sudo mv /tmp/scx-release /etc/opt/microsoft/scx/conf/
ここまでインストールを進めたら、OMSと接続してキーを作ります。下記のコマンドにワークスペースIDとキーを入力して実行します。
# OMSエージェントのインストール:OMSとの接続キー作成 sudo /opt/microsoft/omsagent/bin/omsadmin.sh –w <workspace id> –s <key>
あとは、Syslogだけ取得するようにFluentdの設定を行います。
# OMSエージェントのインストール:Syslog送信向けに設定 sudo vi /etc/opt/microsoft/omsagent/conf/omsagent.conf
下記のように、不要なところを消して、入力と出力とフィルタを残した設定になります。
# This file is an example of what the config file pushed by the server should look like @include omsagent.d/*.conf # Heartbeat <source> type exec tag heartbeat.output command /opt/microsoft/omsagent/bin/omsadmin.sh -b > /dev/null format tsv keys severity,message run_interval 20m </source> <source> type syslog port 25224 bind 127.0.0.1 tag oms.syslog </source> <filter oms.syslog.**> type filter_syslog </filter> <match oms.**> type out_oms log_level debug </match>
標準のRubyとFluentdを使うため、起動時にプラグインのディレクトリとコンフィグファイルを指定するように起動スクリプトを少し変更します。
sudo vi /etc/init.d/omsagent
下記のSTART_QUALSを探して、プラグインとコンフィグファイルの指定をします。
START_QUALS="-d $PIDFILE --no-supervisor -o $LOGFILE"上記の行を下記のように-pと-cを追加します。
START_QUALS="-d $PIDFILE --no-supervisor -o $LOGFILE -p /opt/microsoft/omsagent/plugins -c /etc/opt/microsoft/omsagent/conf/omsagent.conf"
あとは、rsyslogとして取得するログの設定を変更します。
sudo vi /etc/rsyslog.conf
標準の設定でもよいのですが、下記のようにすると全てのSyslogを送信します。
*.* @127.0.0.1:25224
最後に、OMSエージェントを動かします。omsagentを先に起動してから、rsyslogを再起動します。
sudo service omsagent start sudo service rsyslog restart
さいごに
Raspberry PiでもOMSを使うことができるなんて最高ですね。IoTデバイスのログをOMSで検索したりできるので、どのようなアクセスが来ているかもすぐ確認することができます。また、サーバ側もあわせて横断的にログの検索ができるようになります。また、ログはRaspberry Piのストレージに保存されないので、もし侵入者がRaspberry Piにログインされたとしても自分の痕跡のログを削除することもできなくなります。
Linux版のOMSエージェントはプレビューですので、上記の内容は変わってしまうこともあるとも思いますが、是非Raspberry Piのインストーラーもリリースしてほしいです!Microsoft がFluentdを使っているのにも驚きました。変わりましたね!
次のAdvent Calenderは、とくがみさんですね、よろしくお願いします!