SINETStream ユーザガイド
Android版の設定クライアント
目次
1. 概要
2. システム構成
3. 利用方法
3.1 コンフィグサーバ側の準備
3.2 Android端末側の操作(事前準備)
3.2.1 コンフィグサーバからアクセストークンの取得
3.2.2 手元の鍵対の生成
3.2.3 公開鍵をコンフィグサーバに登録
3.3 Android端末側の操作(設定情報のダウンロード)
3.4 Android端末側の操作(ブローカとの通信)
4. まとめ
1. 概要
従来、Android版のSINETStream設定に関しては、
YAML形式の設定ファイルを規定の場所に配置する方式としていた。
しかし、この「Android端末で個別に設定ファイルを管理する」方式だと、 以下に示すような運用上の課題がある。
- パラメータ変更の度に設定ファイル内容を更新する必要がある[1]。
- 対応策1:手動でファイル編集する。
- 対応策2:ユーザアプリケーションが設定ファイルを自動生成して置き換える。
- SSL/TLS証明書や暗号化鍵など秘匿情報の扱いが煩雑となる。
- 規定の場所にパスワード付きで手動導入する必要がある。
- 失効時の入れ替え操作も同様。
- 複数台のAndroid端末で同様の作業をする場合に人海戦術となる。
- 作業が煩雑で間違いの元になる。
[1] 別紙チュートリアルで 紹介しているサンプルアプリケーションは
対応策2を採用している。
そこで、SINETStream設定情報や秘匿情報などを一元的に管理する設定サーバ(以降、コンフィグサーバと記述)を導入する。
システム管理者がコンフィグサーバ側で諸々の管理を実施する一方、個々のAndroid端末側はコンフィグサーバに接続するための接続情報だけを手元で管理する。
この「クライアント/サーバ」協調動作により、システム管理や運用上の負担を減らせるとともに、作業の効率化を図ることができる。
本書では、コンフィグサーバを利用するAndroid端末の設定クライアント動作について概説する。
2. システム構成
本書で扱う3つの機能要素(Android端末、ブローカ、コンフィグサーバ)を以下に示す。
Broker Android Device Config Server
+-----+ +-----------------------------------------+ +-----------+
| | | #--------------------+ #-------------+ | | #-------+ |
| ... | <=> | | User Application | | Web Browser | | <=> | |Server | |
| | | +--------------------+ +-------------+ | | |App | |
+-----+ +=========================================+ | +-------+ |
| | | | |
| +-------------+ +----------+ +--------+ | | [DB] |
| | SINETStream | | pub/priv | | access | | | |
| | Library | | keypair | | token | | +-----------+
| +-------------+ +----------+ +--------+ |
| | MQTT | |
| | Library | |
| +-------------+ Android System |
+-----------------------------------------+
〈判例〉
- Android端末
- ユーザアプリケーション
- Android版のSINETStreamライブラリ経由で
コンフィグサーバから設定情報を取得する。 - 必要に応じて
公開鍵/秘密鍵の対(以降、鍵対と表記)を作成する。 - 取得した設定情報を基に対向ブローカと接続し、MQTT通信を行う。
- Android版のSINETStreamライブラリ経由で
- ウェブブラウザ
- コンフィグサーバから
アクセストークンを手動で取得する。 - コンフィグサーバに秘匿情報を取得するための公開鍵を手動で登録する。
- コンフィグサーバから
- ユーザアプリケーション
- ブローカ
- Android端末とのMQTT通信の相手となる。
- コンフィグサーバ
- ウェブサービスとしてのUI/UXを提供し、
SINETStream設定情報などをデータベースに反映する。 - ユーザごとの
アクセストークンや秘匿情報を管理する。
- ウェブサービスとしてのUI/UXを提供し、
3. 利用方法
3.1 コンフィグサーバ側の準備
本章では、システム管理者がコンフィグサーバ側で実施すべき事項について述べる。
Management PC Config Server
+-----------------+ +-----------+
| #-------------+ | | #-------+ |
| | Web Browser |-------->|Server | |
| +-------------+ | | |App | |
+-----------------+ | +-------+ |
| | |
| [DB] |
| |
+-----------+
まずは管理端末上の適当なウェブブラウザでコンフィグサーバのURLに接続し、
指定のユーザアカウントでログインする。
当該ユーザアカウントに対して、以下の各項目を準備する。
- SINETStream設定の記述
- ウェブインタフェース操作により、
SINETStream設定情報の登録/編集/削除作業を実施する。 - 記法の詳細はAndroid版のSINETStream設定を参照のこと。
- ウェブインタフェース操作により、
- アクセストークンの管理
- ユーザから預かった公開鍵の登録
3.2 Android端末側の操作(事前準備)
3.2.1 コンフィグサーバからアクセストークンの取得
Android端末からコンフィグサーバに接続するためには、前述のアクセストークン(実体はJSONファイルauth.json)に記載された有効なアクセスキーが必要である。
Android Device Config Server
+-----------------------------------------+ +-----------+
| #-------------+ | | #-------+ |
| | Web Browser |<--------|Server | |
| +-------------+ | | |App | |
+==================================|======+ | +-------+ |
| V | | | |
| +--------+ | | [DB] |
| | access | | | |
| | token | | +-----------+
| +--------+ |
| |
| Android System |
+-----------------------------------------+
このため、作業対象のAndroid端末に何らかの方法で上記アクセストークンのファイルを配置する。
- 手法1:ネットワーク経由の導入
- Android端末上のウェブブラウザ(Google Chromeなど)で
コンフィグサーバに接続/ログインし、ウェブインタフェース操作でダウンロードする。 - Google Driveに配置した
アクセストークンファイルを手元にコピーする。
- Android端末上のウェブブラウザ(Google Chromeなど)で
- 手法2:ファイルコピーによる導入
- 外部記憶媒体(SDカード)に格納された
アクセストークンファイルを手元にコピーする。
- 外部記憶媒体(SDカード)に格納された
Android版のSINETStreamライブラリを
コンフィグサーバから設定情報を取得するよう指定して初期化すると、上記アクセストークンファイルを選択するよう利用者に促すダイアログが表示される。 ここで指定されたアクセストークンの記載内容を基に、コンフィグサーバへの接続処理が走ることになる。
3.2.2 手元の鍵対の生成
コンフィグサーバから取得を想定しているSINETStream設定情報で何らかの秘匿情報(ブローカとのSSL/TLS接続のための証明書など)を扱う場合に必要な手順である。
ブローカとの通信路をSSL/TLSで暗号化しないなど、秘匿情報を扱わない場合は本章の記述は飛ばして構わない。
Android Device
+-----------------------------------------+
| #--------------------+ |
| | User Application | |
| +--------------------+ |
+=====|===================================+
| | ...................... |
| | : Android Keystore : |
| V : : |
| +-------------+ : +----------+ : |
| | SINETStream |---->| pub/priv | : |
| | Library | : | keypair | : |
| +-------------+ : +----------+ : |
| :....................: |
| Android System |
+-----------------------------------------+
Android版のSINETStreamライブラリが用意するAPI関数により、
Androidシステムの秘匿領域(Android Keystore)内部に鍵対を作成する。
この鍵対は、エイリアス(利用者指定の任意文字列)で識別する。
注意
上記
Android Keystoreで管理される鍵対はアプリケーションごとに固有の領域が割り当てられる。すなわち他のアプリケーションと鍵対が干渉することはない。 同アプリケーションの削除と同時にAndroid Keystore内部も削除される。
3.2.3 公開鍵をコンフィグサーバに登録
本章の記述内容はAndroid端末とコンフィグサーバが協調動作する部分である。
前述の鍵対のうち公開鍵はコンフィグサーバに登録する必要がある。
ウェブインタフェースの操作により手動で登録する手段は用意されているが、
ここではAndroid版のSINETStreamライブラリが用意するAPI関数によりネットワーク経由でコンフィグサーバに公開鍵を登録する手法を紹介する。
Android Device Config Server
+-----------------------------------------+ +-----------+
| #--------------------+ | | #-------+ |
| | User Application | | | |Server | |
| +--------------------+ | | |App | |
+=====|===================================+ | +-------+ |
| | ...................... | | A | |
| | [token] : Android Keystore : | | | [DB] |
| V | : : | +---|-------+
| +-------------+ : +----------+ : | |
| | SINETStream |<----| pub/priv | : | |
| | Library | : | keypair | : | |
| +-------------+ : +----------+ : | |
| | :....................: | |
| | Android System | |
+--------|--------------------------------+ |
| |
+---------------( NETWORK )----------------+
ユーザ指定のエイリアスを基にAndroid Keystoreに格納した鍵対を抽出し、
その公開鍵を得る。
これとアクセストークンを引数として
Android版のSINETStreamライブラリ
の暗号鍵登録用のAPI関数に処理を依頼する。
同ライブラリは、REST-API経由でコンフィグサーバに公開鍵を登録する。
3.3 Android端末側の操作(設定情報のダウンロード)
本章の記述内容はAndroid端末とコンフィグサーバが協調動作する部分である。
Android Device Config Server
+-----------------------------------------+ +-----------+
| #--------------------+ | | #-------+ |
| | User Application | | | |Server | |
| +--------------------+ | | |App | |
+=====|===================================+ | +-------+ |
| | ...................... | | | | |
| | [token] : Memory : | | | [DB] |
| V | : : | +---|-------+
| +-------------+ : +------+ +------+ : | |
| | SINETStream |---> |config| |secert| : | |
| | Library | : |data | |data | : | |
| +-------------+ : +------+ +------+ : | |
| A :....................: | |
| | Android System | |
+--------|--------------------------------+ |
| |
+---------------( NETWORK )----------------+
アクセストークンを引数として
Android版のSINETStreamライブラリの初期化用の
API関数に処理を依頼する。
同ライブラリは、REST-API経由でコンフィグサーバからSINETStream設定情報
(SSL/TLS証明書のような秘密情報があればそれも)をダウンロードする。
ここで取得した内容はファイルに書き出すことなく、メモリ上で扱う。
設定項目に選択肢がある場合、利用者に指示を仰ぐためダイアログが表示される。
3.4 Android端末側の操作(ブローカとの通信)
コンフィグサーバから取得したSINETStream設定情報を基に対向ブローカと接続し、MQTT通信を行う。
Broker Android Device
+-----+ +-----------------------------------------+
| | | #--------------------+ |
| ... | | | User Application | |
| | | +--------------------+ |
+-----+ +=====|=====A=============================+
A | | | ...................... |
| | | | : Memory : |
| | V | : : |
| | +-------------+ : +------+ +------+ : |
| | | SINETStream |<----|config| |secert| : |
| | | Library | : |data | |data | : |
| | +-------------+ : +------+ +------+ : |
| | | MQTT | :....................: |
| | | Library | |
| | +-------------+ |
| | | Android System |
| +--------|--------------------------------+
| |
+---( NETWORK )---+
4. まとめ
Android版のSINETStreamライブラリが用意する
設定クライアント機能により、SINETStream設定情報などをダウンロードしてブローカに接続するまでの一連の操作内容を概説した。