ちょっと話題の記事

SORACOM BeamでFluent Bitからセキュアにセンサーデータを転送する #soracom

2015.09.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。 長らくステルスモードだったIoTプラットフォームのスタートアップ、SORACOM, INCのサービスが発表されました。 早速試してみたレポートを2本と応用編としてSORACOM Beamの設定例を2本、同時公開します!

本エントリーでは、OSSのデータコレクタFluentdの組み込み版であるFluent BitからSORACOM Beamを経由させてTLS暗号化しつつ、AWS環境のFluentdサーバにデータを送信する構成をご紹介します。

構成の概要

ざっくり図にしたのが以下です。

beam01_2

Fluent Bitは、少ないリソース使用量で実行できる組み込み向けFluentdとして注目されています。Fluentdには元々インターネットを経由してセキュアにデータ転送を行うSecure Forward Pluginがあるのですが、Fluent Bitは未実装のため、IoTデバイスからクラウドへの直接転送がセキュリティ上難しいという課題がありました。BeamのTCP->TCPSへの変換を利用することで、暗号化しつつFluentdへのデータ転送を実現することができます。

AWSの構成

まずは、AWS側にFluentdサーバーを構築します。Secure ForwardにはTLS暗号化とユーザー認証機能がセットで有効化されるため、今回のようなTLS暗号化のみ行うのは設定に手間がかかりそうです。そこでELBをEC2の手前に置き、セキュアTCPでListenすることでTLS暗号化に対応します。ELBの作成画面で、以下のように設定します。

beam02

セキュアTCPのポート番号は任意ですが、Beamの設定を合わせるようにしましょう。また、Beamは自己署名証明書など無効なTLS通信は通さないので、有効なSSL証明書とELB EndpointへのDNS設定が必要です。

EC2ではtd-agent(Fluentdディストリビューション)をセットアップし、Fluentdサーバーを構築します。

$ curl -L https://td-toolbelt.herokuapp.com/sh/install-redhat-td-agent2.sh | sh
  :(略)
$ rpm -q td-agent
td-agent-2.2.1-0.el2015.x86_64

Fluent Bitから送信するレコードにはタグfluent_bitが付くので、td-agent.confに以下3行を追加し、td-agentを起動します。

/etc/td-agent/td-agent.conf

<match fluent_bit.**>
  type stdout
</match>
$ sudo service td-agent start

ELBとEC2のいずれも、TCP:24224での受信を許可するよう、セキュリティグループを設定しておきましょう。 これでAWS側はOKです。

Beamの構成

続いてBeamの構成です。Beamの中継設定はSIMグループに設定するため、あらかじめSORACOMユーザーコンソールで任意のグループ名でグループを作成しておきます。

beam03

作成したグループの設定画面を開き、[+] - [TCP → TCP/TCPSエントリポイント]を選択します。

beam04

任意の設定名を入力し、[プロトコル]を「TCP (over TLS)」、[ホスト名]にELB Endpointに設定したDNS名、[ポート番号]にELBに設定したSecure TCPのポート番号をそれぞれ入力します。Beam側のエントリポイントはこのあとFluent Bit実行時に指定するので控えておきましょう。

beam05

グループ設定は完了です。続いて、SIMをグループに追加します。メニューから[SIM管理]をクリックし、設定するSIMを選択、[操作] - [所属グループ変更]を選択します。

beam06

先ほど設定したグループを選択し、[グループ変更]をクリックすれば完了です。

beam07

IoTゲートウェイの構成

今回は別エントリーでAir SIMを設定したRaspberry Pi 2を利用します。Fluent Bitのドキュメントにあるように、apt-getで簡単にインストールできます。

$ wget -qO - http://apt.fluentbit.io/fluentbit.key | sudo apt-key add -
$ echo 'deb http://apt.fluentbit.io/raspbian wheezy main' | sudo tee -a /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get install fluentbit
$ fluent-bit --help
Usage: fluent-bit [OPTION]

Available Options
  -c  --config=FILE	specify an optional configuration file
  -f, --flush=SECONDS	flush timeout in seconds (default: 5)
  -i, --input=INPUT	set an input
  -o, --output=OUTPUT	set an output
  -V, --verbose		enable verbose mode
  -v, --version		show version number
  -h, --help		print this help

Inputs
  xbee                  XBee Device
  cpu                   CPU Usage
  mem                   Memory Usage
  kmsg                  Kernel Log Buffer
  serial                Serial input
  stdin                 Standard Input
  mqtt                  MQTT, listen for Publish messages

Outputs
  fluentd               Fluentd log collector
  stdout                Prints events to STDOUT
$

では、Beamのエントリポイントに向けてFluent Bitを実行します。今回はサンプルとしてCPU使用率を送信します。

$ fluent-bit -i cpu -o fluentd://beam.soracom.io:8023
Fluent-Bit v0.2.0
Copyright (C) Treasure Data

[2015/09/29 18:58:41] [ info] starting engine
�
[2015/09/29 18:58:45] [ info] Flush buf 98 bytes
[2015/09/29 18:58:50] [ info] Flush buf 119 bytes
[2015/09/29 18:58:55] [ info] Flush buf 119 bytes
  :

AWS側のtd-agentのログ(/var/log/td-agent/td-agent.log)を見てみると。。。

  :
2015-09-24 02:39:03 +0000 fluent_bit: {"cpu":0.75}
2015-09-24 02:39:04 +0000 fluent_bit: {"cpu":0.0}
2015-09-24 02:39:05 +0000 fluent_bit: {"cpu":0.25}
2015-09-24 02:39:06 +0000 fluent_bit: {"cpu":0.25}
2015-09-24 02:39:07 +0000 fluent_bit: {"cpu":0.5}

Beam経由でデータが受信できている様子が確認できました。

まとめ

SORACOM Beamを利用してTLS通信を行う例として、Fluent BitとFluentd間のTLS暗号化通信をご紹介しました。ELB側でセキュリティグループなどで接続先を絞れると、よりセキュアな構成になると思います。Beamの様々な活用方法を探していきましょう!

ちょっとだけ宣伝

クラスメソッドはソラコムのSPSインテグレーションパートナーとして参画し、本日9/30〜10/2に開催されるITpro EXPO 2015のソラコムブースに出展します。当日ソラコムブースシアターで行われるミニシアターに代表の横田と私大瀧が毎日登壇します!ぜひ遊びに来てください!SORACOMサービスについて技術話しましょう!

他のSORACOM記事はこちら