12/19/2015

Raspberry Pi な IoT デバイスを OMS で管理してみる

 

本記事に関して Joseph Chan からコメントもらいました!うれしいですね!

 

 こんにちは。今年も残すことあとわずかですね。実は先日しばやんから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 デバイスのログ管理によるセキュリティ対策を考えてみようと思います。

2015

 

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 BackupAzure Site RecoveryAutomationなどと一緒に使うと効果的に管理できます。

 ログに関しては、サーバからOMSのストレージに送信するため、複数サーバのログをまとめて管理し、横断的にセキュリティ観点の分析することが可能です。現段階で取得可能なログは、Windows Serverのイベントログ、Linux ServerのSyslog、Nagiosのアラート、Zabbixのアラートとなります。

 パフォーマンスカウンタも取得することか可能です。Windows Serverの場合はすでに用意されているパフォーマンスカウンタの情報を取得すると想像できますが、Linuxに関してはOMIとSCXを使ってパフォーマンスカウンタとの取得とマッピングを行っているようです。

f01

 なお、多くの方が画像や映像で見ているOMSのダッシュボードは、Operational Insitesというサービスとなっており、Azure PortalからOMSを追加する際は、このOperational Insitesを選択します。それでは、実際に作ってみます。

Operational Insitesの作成と設定

 それでは、OMSを利用してみます。Azure PortalからOperational Insiteを作成します。選択すると昔のポータルにジャンプします。

01

 昔のポータルでワークスペースの名前と、サービスティアのプランを選択します。

02

 昔のポータルでOperational Insitesのワークスペースが作成されたことを確認して、下の管理アイコンをクリックします。

03

 ここからOMSになりました。まずはメールアドレスを教えます。

04

 OMSのアカウントにメールアドレスを追加します。これにより、定期的に状態のレポートが送られてきたりします。

05

 ようやくOMSにログインすることができます。OMSのリード・プログラム・マネージャの @jochan_msft のTwitterも表示されてますね!

最初は、ソリューションが選ばれていないのと、どのサーバとも接続していないので、まずは、その辺りの設定から始めます。大きな青色の四角のSettingsをクリックして設定を始めます。

07

 設定を始めると、ソリューションの選択画面になります。今回はLog Serchだけでいいのですが、全部にチェックを入れました。現段階では、Windows Serverを使っている場合などは、セキュリティの問題などアラートが表示されます。

09

 次は、サーバとの接続です。今回はLinuxを管理するので、Linuxエージェント(プレビュー)のダウンロードをクリックします。

11

ダウンロード先のGitHubが表示されました。

12

下のほうに行くとダウンロードのURLがあります。Linuxのコマンドでuname -mを実行したときに x86 か x86_64 と表示されるので、x86の場合は32bitを、x86_64の場合は64bitをダウンロードします。

12a

Linux上でwgetやcurlを使うと便利ですね。ダウンロードしたファイルを実行するとインストールが完了します。

13

OMSの画面で確認すると、”1 SERVER CONNECTION” となっており、接続が成功したことがわかります。

14

次にDATAのタブに移り、取得するパフォーマンスカウンタの確認をします。

15

後は取得するSyslogの設定です。最後に、画面下のSAVEをクリックして完了です。

17

ログも送られてきていますね。

18

 

Raspberry PiをOMSに接続する

 サーバに関しては上記の方法でOMSと接続しましたが、次はRaspberry PiをOMSに接続します。IoTデバイスと関係するサーバのログをまとめてOMSで管理します。

f02

 では、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は、とくがみさんですね、よろしくお願いします!