Howto で出来ること
NXP Semiconductors 製 EdgeLock SE050 (以下「EdgeLock SE050」) にプリインストールされた X.509 証明書を用いたデバイス認証によって単一のデバイスを Azure IoT Hub に接続する。
Howto の概要
- Armadillo-IoT ゲートウェイ G4 向けの Howto
- Microsoft Azure Portal を利用してデバイスをプロビジョニングします
- 登録する証明書は EdgeLock SE050 にプリインストールされた X.509 証明書を利用します
- Azure Iot Hub DPS を利用して Azure Iot Hub にデバイスをプロビジョニングします
- EdgeLock SE050 を利用して Azure Iot Hub の接続認証を行い、message を送信します
- SDK は azure-iot-sdk-python を利用します
EdgeLock SE050
EdgeLock SE050 は IoT アプリケーション向けのセキュアエレメントです。様々なアルゴリズムに対応した暗号エンジン、セキュアストレージを搭載します。内部処理は秘密鍵を露出させることなくセキュアに暗号処理を行うことができます。外部インターフェースは I2C を採用して GlobalPlatform が規定する Secure Channel Protocol 03 に準拠し、バスレベル暗号化 (AES)、ホストとカードの相互認証 (CMAC ベース) を行うことも可能です。また、SEdgeLock E050 はターンキーソリューションとして利用を開始してすぐにクラウドサービスなど PKI を基にしたサービスに接続することができます。チップ固有の X.509証明書などが事前にプロビジョニングされた状態で出荷されます。
Azure IoT Hub
Azure IoT Hub は IoT デバイスの接続や管理を行うことができる Microsoft のクラウドサービスです。Azure IoT Hub だけでも IoT デバイス認証は可能ですが、本 Hotwo では、Azure IoT Hub Device Provisioning Service (以下「Azure IoT Hub DPS」という) を経由して Azure Iot Hub への接続を試みます。Azure IoT Hub DPS は Azure IoT Hub のヘルパーサービスです。Azure IoT Hub へのプロビジョニングを代行します。ゼロタッチプロビジョンニングと呼ばれる、工場などで事前にセットアップを行っておくことで、それ以降のプロビジョニング作業が不要となる仕組みを用意しています。また、小規模から大規模までスケールする IoT デバイス群のプロビジョンニングに対応が可能です。
セットアップ作業の流れと実運用について
以下に接続までの流れを示します。これらの作業はセットアップ時に一度だけ行います。セットアップが完了した後には Armadillo-IoT ゲートウェイ G4 を Azure IoT Hub に接続する IoT デバイスとして利用することができます。
- 1.EdgeLock SE050 を有効にする
- 2.IoT デバイスの準備をする
- EdgeLock SE050 から証明書を取得する
- 3.Microsoft Azure アカウントを作る
- 4.Azure IoT Hub にプロビジョニングする
- Azure IoT Hub を作成する
- Azure IoT Hub DPS を作成する
- 証明書を登録する
- 5.Azure IoT Hub に接続するために必要な情報を取得する
- 6.デバイスアプリケーションを実行する
実運用には、デバイス上で「EdgeLock SE050 から証明書を取得する」を事前に行っておいて、運用者 (もしくは開発者) に証明書とリファレンスキーを渡して 3. 以降のクラウド側の構築を行う分担が考えられます。証明書やリファレンスキーは EdgeLock SE050 チップと紐づくので漏洩が脆弱性につながるリスクは大きくありません。
EdgeLock SE050 を有効にする
以下を参考にセットアップ作業を行う前に EdgeLock SE050 の Deep Power-down を解除してください。
EdgeLock SE050 から証明書を取得する
Azure IoT Hub DPS に登録する X.509 証明書と、デバイス認証に利用するリファレンスキーを EdgeLock SE050 から取得します。 以下を参考にセットアップ作業を行う前にミドルウェアのインストールと取得作業をしてください。
Microsoft Azure アカウントを作る
すでに Microsoft Azure を購読済みであれば次の節に移動してください。ここでは無料の試行用のアカウントを利用します。
1, 2 https://www.azure.com へ移動してフリーのアカウントを作ります。
Azure にサインインしてください。アカウントがなければアカウントを作ってください。
3 ~ 5 入力して、6 次に進んでください。
7 入力して、8 次に進んでください。
9 入力に問題がなければ Azure アカウントを作成します。
Azure IoT Hub を作成する
1, 2 Microsoft Azure Portal に接続してリソースを作ります。
3, 4 Azure IoT Hub を作ります。
5 ~ 8 入力してください。
9 入力してください。
10 入力してください。
11 入力に問題がなければ Azure IoT Hub をつくります。 以下、非表示とあるのはセキュリティ目的のためあえて表示していない項目です。
Azure IoT Hub DPS を作成する
1, 2 Microsoft Azure Portal に接続してリソースを作ります。Azure IoT Hub を作ってからこの作業を行ってください。
3, 4 Azure IoT Hub DPS を作ります。
5 ~ 8 入力してください。
9 入力してください。
10 入力に問題がなければ Azure IoT Hub DPS をつくります。
Home に移動すると上記で作成した Azure IoT Hub DPS のリンクが増えています。作成した Azure IoT Hub DPS へ移動してください。 移動すると以下のようなページが表示されます。
ID Scope は Azure IoT Hub へ接続する際に必要な情報です。後ほど利用するのでメモしてください。
Azure IoT HuB DPS に証明書を登録する
EdgeLock SE050 から取得した証明書を Azure IoT Hub DPS に登録してデバイス認証に利用します。 Home から Azure IoT Hub DPS へ移動してください。
1, 2 ここでは IoT デバイス個別に証明書を登録する Indivisual enroll を利用します。
3 ~ 8 取得した証明書をロードしてください。また、Azure IoT Hub とリンクする設定 (2つ下の画像)を行ってから、保存してください。 6.IoT edge device を有効にすると Azure IoT Edge サービスに対応したデバイスとして登録ができます。Azure IoT Edge サービスに接続する場合は有効にしてください。
Azure IoT Edge サービスに接続するデバイスを登録する場合は有効にしてください
7-1, 7-2 enroll を保存する前に Azure IoT Hub と Azure IoT Hub DPS を関連付けます。
Azure IoT Hub に接続するために必要な情報を取得する
以下は Azure IoT Hub に接続するために、これまでの作業で入手した情報の一覧です。 今後はこの情報を基に Azure IoT Hub に接続するアプリケーションを設定して接続してください。
- EdgeLock SE050 から取得した証明書
- EdgeLock SE050 から取得したリファレンスキー
- ID SCOPE
以上で、Azure IoT Hub, Azure IoT Hub DPS 上の作業は終了です。 これ以降はAzure IoT Hub へ接続するアプリケーションを動作させる方法について説明します。
デバイスアプリケーションを実行する
ここからは azure-iot-sdk-python を使って接続確認をしていきます。 azure-iot-sdk-python は Azure IoT Hub に接続するための python 環境です。 ここでは接続確認のために SDK 内に含まれるサンプルアプリ provision_x509.py を利用します。
EdgeLock SE050 Plug&Trust MW のビルド済みパッケージをインストールした Alpine Linux コンテナ上に構築していきます。
準備
Python3 をインストールします。
[container ~]# apk add python3 py3-setuptools
Github からソースファイルを取得するために git をインストールします。
[container ~]# apk add git
azure-iot-sdk-python のインストール
GitHub からリポジトリをクローンします。
[container ~]# git clone https://github.com/Azure/azure-iot-sdk-python.git
azure-iot-sdk-python をインストールします。
[container ~]# cd azure-iot-sdk-python/azure-iot-device
[container ~/azure-iot-sdk-python/azure-iot-device]# python3 setup.py install
設定
デモアプリケーションには環境変数でパラメータを渡す必要があります。
接続先のエンドポイントは通常は以下のリンクで固定です。
[container ~]# export PROVISIONING_HOST=global.azure-devices-provisioning.net
以下は設定の例です。各自の環境に合わせて設定値を入力してください。
[container ~]# export PROVISIONING_IDSCOPE=0ne00123456
[container ~]# export DPS_X509_REGISTRATION_ID=Python-device-01
[container ~]# export X509_CERT_FILE=key.pem
[container ~]# export X509_KEY_FILE=device_cert.pem
[container ~]# export PASS_PHRASE=
env | description |
---|---|
PROVISIONING_IDSCOPE | 0neXXXXXXX。Azure IoT Hub DPS のトップページに表示されている情報です。Azure IoT Hub DPS を一意に識別するために使用されます。 |
DPS_X509_REGISTRATION_ID | 任意の名前をつけてください。 |
X509_CERT_FILE | EdgeLock SE050 から取得したリファレンスキーを入力してください。 |
X509_KEY_FILE | EdgeLock SE050 から取得した証明書を入力してください。 |
PASS_PHRASE | 証明書のパスフレーズ。本 Howto の手順ではパスワードは付加していません。必要であれば各自付加してこちらにパスフレーズを入力してください。 |
デバイスアプリケーションの実行
以下のコマンドを実行してください。
[container ~]# cd azure-iot-sdk-python/azure-iot-device/samples/async-hub-scenarios
[container ~/azure-(省略)...]# python3 provision_x509.py
以下はコンソール出力の例です。
ssse-flw: EmbSe_Init(): Entry
App :INFO :Using PortName='/dev/i2c-2:0x48' (ENV: EX_SSS_BOOT_SSS_PORT=/dev/i2
c-2:0x48)
sss :INFO :atr (Len=35)
00 A0 00 00 03 96 04 03 E8 00 FE 02 0B 03 E8 08
01 00 00 00 00 64 00 00 0A 4A 43 4F 50 34 20 41
54 50 4F
sss :WARN :Communication channel is Plain.
sss :WARN :!!!Not recommended for production use.!!!
ssse-flw: Version: 1.0.5
ssse-flw: EmbSe_Init(): Exit
Will send telemetry from the provisioned device
sending message #1
sending message #2
sending message #3
sending message #4
sending message #5
sending message #6
sending message #7
sending message #8
sending message #9
sending message #10
done sending message #1
done sending message #2
done sending message #3
done sending message #4
done sending message #5
done sending message #6
done sending message #7
done sending message #8
done sending message #9
done sending message #10
Azure IoT Hub の確認
Azure IoT Hub をみるとデバイスが登録されたことが確認できます。 以下は Azure IoT Edge サービスに接続可能な IoT Edge Device を登録した例です。Azure IoT Edge サービスに接続しないデバイスは 1つ上の Devices で確認できます。
参考
以下の手順を参考にしております。