Howto

EdgeLock SE050 を使用して AWS IoT Core へ接続する〜AWS IoT Device SDK v1 編〜 (Armadillo-IoT G4)

Howto で出来ること

NXP Semiconductors 製 EdgeLock SE050 (以下「EdgeLock SE050」) にプリインストールされた X.509 証明書を用いたデバイス認証によって単一のデバイスを AWS IoT Core に接続する。

Howto の概要

EdgeLock SE050

EdgeLock SE050 は IoT アプリケーション向けのセキュアエレメントです。様々なアルゴリズムに対応した暗号エンジン、セキュアストレージを搭載します。内部処理は秘密鍵を露出させることなくセキュアに暗号処理を行うことができます。外部インターフェースは I2C を採用します。また、EdgeLock SE050 はターンキーソリューションとして利用を開始してすぐにクラウドサービスなど PKI を基にしたサービスに接続することができます。チップ固有の X.509証明書などが事前にプロビジョニングされた状態で出荷されます。

AWS IoT Core

AWS IoT Core は IoT に特化した AWS のクラウドサービスです。 メッセージを各種 AWS サービスにルーティングするゲートウェイの役割はもちろん、接続時の相互認証やデバイス管理の役割を持ちます。AWS IoT Core は幅広い顧客の要件に応えることができることも大きな特徴です。通信プロトコルとして MQTT、HTTPS、MQTT over WSS、LoRaWAN などに対応し、デバイスの認証として X.509 証明書、AWS 認証情報、Amazon Cognito やカスタム認証トークンといった様々なデバイス認証情報を利用することができます。また、クラウドサービスサイドのプロビジョニング方法として X.509証明書や IAM ユーザー、クレーム証明書を選択することが可能です。AWS IoT Core に接続するアプリケーションを開発するためには AWS IoT Device SDK が AWS によって OSS として用意されています。C、C++、python、JAVA、JavaScript といった言語でデバイスアプリケーションを開発することができます。

セットアップ作業の流れと実運用について

以下に接続までの流れを示します。これらの作業はセットアップ時に一度だけ行います。セットアップが完了した後には Armadillo IoT ゲートウェイ G4 を AWS IoT Core に接続する IoT デバイスとして利用することができます。

  • 1.EdgeLock SE050 を有効にする
  • 2.IoT デバイスの準備をする
    • EdgeLock SE050 から証明書とリファレンスキーを取得する
    • AWS の Root CA 証明書を準備する
  • 3.AWS アカウント、IAM ユーザーを作る
  • 4.AWS IoT Core にプロビジョニングする
    • AWS IoT Thing をつくる
    • AWS IoT Policy をつくる
    • 証明書を登録する
    • 証明書に AWS IoT Thing と AWS IoT Policy をアタッチする
  • 5.AWS IoT Core に接続するために必要な情報
  • 6.デバイスアプリケーションを実行する

実運用には、デバイス上で「 EdgeLock SE050 から証明書を取得する」を事前に行っておいて、運用者 (もしくは開発者) に証明書とリファレンスキーを渡して 3. 以降のクラウド側の構築を行う分担が考えられます。証明書やリファレンスキーは EdgeLock SE050 チップと紐づくので漏洩が脆弱性につながるリスクは大きくありません。

EdgeLock SE050 を有効にする

以下を参考にセットアップ作業を行う前に EdgeLock SE050 の Deep Power-down を解除してください。

EdgeLock SE050 から証明書とリファレンスキーを取得する

AWS IoT Core に登録する X.509 証明書と、デバイス認証に利用するリファレンスキーを EdgeLock SE050 から取得します。 以下を参考にセットアップ作業を行う前にミドルウェアのインストールと取得作業をしてください。

AWS の Root CA 証明書を準備する

サーバー認証するために AWS の Root CA 証明書が必要です。Amazon Root CA 1の証明書をダウンロードしてください。

AWS アカウント、IAM ユーザーを作る

以下を参考に AWS アカウント、IAM ユーザーを作ってください。

AWS IoT Thing をつくる

AWS management console を利用してプロビジョニングを行います。AWS CLI を利用したプロビジョニングについて知りたい方は以下を参考にしてください。

AWS management console にログインして、IoT Core に移動します。

Manage から Things を選択します。

Create Things を押します。

Single Thing を選択して、次に進みます。

Thing の名前は任意、設定が完了したら次に進みます。

EdgeLock SE050 から取得した X.509 証明書は後から登録するのでここはスキップする。

Manage から Things を選択すると、作った Thing を確認できます。

AWS IoT Policy をつくる

Secure から Policies を選択する。

Create を押す。

任意の名前を入力して、Advanced mode を選択する。

ここでは以下の内容を入力する。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:*",
      "Resource": "*"
    }
  ]
}

Secure から Policies を選択して、作った Policy を確認できる。

証明書を登録する

Secure から Certificates を選択する。

Create を押す。

EdgeLock SE050 から取得した証明書を利用するために、Use my certificate を選択する。

次に進む。

EdgeLock SE050 から取得した証明書を選択する。

すぐに利用するので Activate をチェックして、証明書を登録する。

Secure から Certificates を選択して、先頭の行に登録した証明書を確認できる。

証明書に AWS IoT Policy と AWS IoT thing をアタッチする

Secure から Certificates を選択する。登録した証明書の行の右側にある横3点のメニューアイコン(・・・)を押す。 プルアップメニューが表示されるので、Attach Policy を選択する。

先ほど作った Policy を選択する。

次に、Policy のときと同様に Secure から Certificates を選択する。登録した証明書の行の右側にある横3点のメニューアイコン(・・・)を押す。 プルアップメニューが表示されるので、Attach thing を選択する。

先ほど作った thing を選択する。

AWS IoT Core に接続するために必要な情報

Device data endpoint を取得する

AWS IoT Core に接続する際に必要になります。

Settings に移動する。

Device data endpoint を取得する。

AWS IoT Core に接続するために必要な情報

以下は AWS IoT Core に接続するために、これまでの作業で入手した情報の一覧です。 今後はこの情報を基にAWS IoT Core に接続するアプリケーションを設定して接続してください。

  • EdgeLock SE050 から取得した証明書
  • EdgeLock SE050 から取得したリファレンスキー
  • Device data endpoint

以上で、AWS IoT Core 上の作業は終了です。 これ以降は AWS IoT Core へ接続するアプリケーションを動作させる方法について説明します。

デバイスアプリケーションを実行する

ここからは aws-iot-device-sdk-python を使って接続確認をしていきます。 aws-iot-device-sdk-python は AWS IoT Core に接続するための python 環境です。ここでは接続確認のために SDK 内に含まれるサンプルアプリ basicPubSub.py を利用します。

EdgeLock SE050 Plug&Trust MW のビルド済みパッケージをインストールした Alpine Linux コンテナ上に構築していきます。

準備

Python3 をインストールします。

[container ~]# apk add python3 py3-setuptools

Github からソースファイルを取得するために git をインストールします。

[container ~]# apk add git

aws-iot-device-sdk-python のインストール

GitHub からリポジトリをクローンします。

[container ~]# git clone https://github.com/aws/aws-iot-device-sdk-python.git

aws-iot-device-sdk-python をインストールします。

[container ~]# cd aws-iot-device-sdk-python
[container ~/aws-iot-device-sdk-python]# python3 setup.py install

デバイスアプリケーションの実行

以下のコマンドを実行してください。

[container ~]# cd aws-iot-device-sdk-python/samples/basicPubSub
[container ~/aws-(省略)...]# python3 basicPubSub.py \
    --rootCA "AmazonRootCA1.pem" \
    --endpoint "xxxxx.amazonaws.com" \
    --cert "/root/cert/device_cert.pem" \
    --key "/root/cert/key.pem" \
    -id "se050test_01" \
    --topic "se050test" \
    --port 443
argument description
--endpoint XXXXXXX.amazonaws.com。取得した Device data endpoint を入力してください。
--rootCA Amazon Root CA 1の証明書のパスを入力してください。
--cert EdgeLock SE050 から取得した証明書のパスを入力してください。
--key EdgeLock SE050 から取得したリファレンスキーのパスを入力してください。
--topic トピック名です。任意の名前を入力してください。
-id デバイスの ID となります。任意の ID を入力してください。
--port MQTT を利用するので、443、もしくは、8883 を入力してください。

以下はコンソール出力の例です。

2021-12-24 01:16:55,195 - AWSIoTPythonSDK.core.protocol.internal.clients - DEBUG - Initializing MQTT layer...
2021-12-24 01:16:55,196 - AWSIoTPythonSDK.core.protocol.internal.clients - DEBUG - Registering internal event callbacks to MQTT layer...
2021-12-24 01:16:55,196 - AWSIoTPythonSDK.core.protocol.mqtt_core - INFO - MqttCore initialized
2021-12-24 01:16:55,197 - AWSIoTPythonSDK.core.protocol.mqtt_core - INFO - Client id: se050test_01
2021-12-24 01:16:55,197 - AWSIoTPythonSDK.core.protocol.mqtt_core - INFO - Protocol version: MQTTv3.1.1
2021-12-24 01:16:55,197 - AWSIoTPythonSDK.core.protocol.mqtt_core - INFO - Authentication type: TLSv1.2 certificate based Mutual Auth.
: (省略)
Received a new message:
b'{"message": "Hello World!", "sequence": 0}'
from topic:
se050test
: (省略)
--------------

AWS IoT Core 上での確認

AWS IoT Core のテスト用クライアントで MQTT メッセージの受信を確認できます。

MQTT test client を選択する。

"#" を入力する。

アプリケーションの実行するとログが表示される。

参考

以下の手順を参考にしております。
- EdgeLock™ SE05x for secure connection to AWS IoT Core