対象:
IoT Edge 1.5
重要
IoT Edge 1.5 LTS は、サポートされているリリースです。 IoT Edge 1.4 LTS は 2024 年 11 月 12 日に終了しました。 以前のリリースを使用している場合は、「Update IoT Edgeを参照してください。
透過的なゲートウェイ シナリオでは、ダウンストリーム デバイス (子デバイスとも呼ばれます) は、他のデバイスと同様にIoT Hubに ID を必要とします。 この記事では、ダウンストリーム デバイスを認証してIoT Hubするためのオプションと、ゲートウェイ接続を宣言する方法について説明します。
注
ダウンストリーム デバイスは、IoT Edge有効かどうかに関係なく、データをインターネットまたはゲートウェイ デバイスに直接送信します。 子デバイスには、入れ子になったトポロジ内のダウンストリーム デバイスまたはゲートウェイ デバイスを使用できます。
透過的なゲートウェイ接続を正常にセットアップするための 3 つの一般的な手順があります。 この記事では、2 番目の手順について説明します。
- ゲートウェイ デバイスをサーバーとして構成し、ダウンストリーム デバイスが安全に接続できるようにします。 ダウンストリーム デバイスからメッセージを受信するようにゲートウェイを設定し、適切な宛先にルーティングします。 これらの手順については、「透過的なゲートウェイとして機能するようにIoT Edge デバイスを構成するを参照してください。
- IoT Hubで認証できるように、ダウンストリーム デバイスのデバイス ID を作成します。 ゲートウェイ デバイスを介してメッセージを送信するようにダウンストリーム デバイスを構成します。
- ダウンストリーム デバイスをゲートウェイ デバイスに接続し、メッセージの送信を開始します。 これらの手順については、「ダウンストリーム デバイスを Azure IoT Edge ゲートウェイに接続するを参照してください。
ダウンストリーム デバイスは、対称キー (共有アクセス キーとも呼ばれます)、X.509 自己署名証明書、または X.509 証明機関 (CA) 署名証明書の 3 つの方法のいずれかを使用して、IoT Hubで認証できます。 認証手順は、IoT Hubを使用してIoT Edge以外のデバイスを設定する場合と似ていますが、ゲートウェイ関係を宣言するためのわずかな違いがあります。
Azure IoT Hub Device Provisioning Service (DPS) を使用したダウンストリーム デバイスの自動プロビジョニングはサポートされていません。
前提条件
透過的なゲートウェイとして機能するようにIoT Edge デバイスを構成するの手順を完了します。
X.509 認証を使用している場合は、ダウンストリーム デバイスの証明書を生成します。 透過的なゲートウェイの記事で使用したのと同じルート CA 証明書と証明書生成スクリプトがあることを確認します。
この記事では、いくつかの時点でゲートウェイ ホスト名を参照します。 ゲートウェイ ホスト名は、IoT Edge ゲートウェイ デバイスの構成ファイルの hostname パラメーターで設定されます。 ダウンストリーム デバイスの接続文字列にも使用されます。 ゲートウェイのホスト名は、ダウンストリーム デバイス上の DNS またはホスト ファイル エントリを使用して IP アドレスに解決する必要があります。
デバイスをIoT Hubに登録する
ダウンストリーム デバイスをIoT Hubで認証する方法を選択します。
Symmetric キー認証: IoT Hubは、ダウンストリーム デバイスに配置するキーを作成します。 デバイスが認証されると、IoT Hubは 2 つのキーが一致することを確認します。 対称キー認証を使用するために追加の証明書を作成する必要はありません。
開発またはテスト シナリオでゲートウェイをテストする場合、この方法のほうが早く始められます。
X.509 自己署名認証: デバイスの X.509 証明書からの拇印をIoT Hubと共有するため、拇印認証と呼ばれることもあります。
運用シナリオでは、デバイスに証明書認証をお勧めします。
X.509 CA 署名認証: ルート CA 証明書をIoT Hubにアップロードします。 デバイスが認証のために X.509 証明書を提示すると、IoT Hubは、同じルート CA 証明書によって署名された信頼チェーンに属していることを確認します。
運用シナリオでは、デバイスに証明書認証をお勧めします。
対称キーの認証
対称キー認証 (共有アクセス キー認証) は、IoT Hubで認証する最も簡単な方法です。 対称キー認証では、base64 キーが IoT Hub の IoT デバイス ID に関連付けられます。 そのキーを IoT アプリケーションに含めると、デバイスが IoT Hub に接続したときにそのキーを表示できるようになります。
Azure ポータル、Azure CLI、または Visual Studio Code 用 IoT 拡張機能のいずれかを使用して、IoT Hubに新しい IoT デバイスを追加します。 ダウンストリーム デバイスは、IoT Edge デバイスではなく、通常の IoT デバイスとしてIoT Hubで識別する必要があります。
新しいデバイス ID を作成するときに、次の情報を提供します。
デバイスの ID を作成します。
認証の種類として [対称キー] を選択します。
親デバイスの設定を選択し、このダウンストリーム デバイスが接続するIoT Edge ゲートウェイ デバイスを選択します。 親は後でいつでも変更できます。
Azure ポータルで対称キー承認を使用してデバイス ID を作成する方法に関するスクリーンショット。 注
親デバイスの設定は、以前は対称キーの認証を使用するダウンストリーム デバイス用の省略可能な手順でした。 ただし、IoT Edge バージョン 1.1.0 以降では、すべてのダウンストリーム デバイスを親デバイスに割り当てる必要があります。
環境変数 AuthenticationMode を値 CloudAndScope に設定することで、IoT Edge ハブを構成して前の動作に戻すことができます。
Azure CLI の
az iot hub device-identity create -n {iothub name} -d {new device ID} --device-scope {deviceScope of parent device}
ヒント
az iot hub device-identity list --hub-name {iothub name} を使うと、デバイス スコープを含むデバイス プロパティの一覧を表示できます。
次に、デバイスがゲートウェイ経由で接続することを認識できるように、connection stringを変更します。
X.509 自己署名認証
X.509 自己署名認証 (拇印認証とも呼ばれます) の場合、お使いのダウンストリーム デバイス上に配置する証明書を作成する必要があります。 これらの証明書には、認証のためにIoT Hubと共有する拇印が含まれます。
CA 証明書を使用して、ダウンストリーム デバイス用に 2 つのデバイス証明書 (プライマリとセカンダリ) を作成します。
X.509 証明書を作成する証明機関がない場合は、IoT Edgeデモ証明書スクリプトを使用して、ダウンストリーム デバイス証明書を
作成できます。 自己署名証明書を作成する手順に従います。 ゲートウェイ デバイスの証明書を生成した同じルート CA 証明書を使用します。 独自の証明書を作成する場合は、デバイス証明書のサブジェクト名が、Azure IoT Hubで IoT デバイスを登録するときに使用するデバイス ID に設定されていることを確認します。 この設定は認証に必要です。
各証明書から SHA1 フィンガープリント (IoT Hub インターフェイスの拇印と呼ばれます) を取得します。これは 40 の 16 進数の文字列です。 次の openssl コマンドを使用して、証明書を表示し、フィンガープリントを見つけます。
Windows:
openssl x509 -in <path to primary device certificate>.cert.pem -text -fingerprintLinux:
openssl x509 -in <path to primary device certificate>.cert.pem -text -fingerprint | sed 's/[:]//g'
このコマンドは 2 回実行します。1 回目はプライマリ証明書、2 回目はセカンダリ証明書に対して実行します。 自己署名 X.509 証明書を使用して新しい IoT デバイスを登録する場合は、両方の証明書のフィンガープリントを指定します。
Azure ポータルでIoT Hubに移動し、次の値を使用して新しい IoT デバイス ID を作成します。
- デバイス証明書のサブジェクト名と一致する [デバイス ID] を指定します。
- 認証の種類として [X.509 自己署名済み] を選択します。
- デバイスのプライマリとセカンダリの証明書からコピーした 16 進数の文字列を貼り付けます。
- 親デバイスの設定を選択し、このダウンストリーム デバイスが接続するIoT Edge ゲートウェイ デバイスを選択します。 親は後でいつでも変更できます。
プライマリとセカンダリの両方のデバイス証明書とそのキーを、ダウンストリーム デバイス上の任意の場所にコピーします。 また、ゲートウェイ デバイス証明書とダウンストリーム デバイス証明書の両方を生成した共有ルート CA 証明書のコピーを移動します。
これらの証明書ファイルは、IoT Hubに接続するダウンストリーム デバイス上のすべてのアプリケーションで参照します。 Azure Key Vault などのサービスまたは Secure コピー プロトコル などの関数を使用して、証明書ファイルを移動できます。
使用する言語に応じて、IoT アプリケーションで x.509 証明書が参照される方法を示すサンプルを確認してください。
- C#: x509 デバイス証明書とチェーン サンプル
- C: iotedge_downstream_device_sample.c
- Node.js: simple_sample_device_x509.js
- Java: SendEventX509。java
- Python: send_message_x509.py
Azure CLI の
az iot hub device-identity create -n {iothub name} -d {device ID} --device-scope {deviceScope of gateway device} --am x509_thumbprint --ptp {primary thumbprint} --stp {secondary thumbprint}
ヒント
az iot hub device-identity list --hub-name {iothub name} を使うと、デバイス スコープを含むデバイス プロパティの一覧を表示できます。
次に、デバイスがゲートウェイ経由で接続することを認識できるように、connection stringを変更します。
X.509 CA 署名認証
X.509 証明機関 (CA) の署名済み認証の場合は、ダウンストリーム デバイスの証明書に署名するために使用するルート CA 証明書がIoT Hubに登録されている必要があります。 ルート CA 証明書またはその中間証明書によって発行された証明書を使用するデバイスは、認証を許可されます。
X.509 CA 証明書を使用してIoT Hubで認証する方法の概要については、X.509 CA 証明書認証の確認を参照してください。
ダウンストリーム デバイスの X.509 CA 署名認証を設定するには、次の手順に従います。
ダウンストリーム デバイスの証明書に署名するために使用できる X.509 CA 証明書を取得します。 X.509 CA 署名認証を設定する方法の例については、次の シナリオ例を参照してください。
お使いのダウンストリーム デバイスに証明書チェーンを作成します。 詳細については、 下位 CA を作成する手順に従います。
IoT Hubに X.509 CA 証明書を登録します。 詳細については、
下位 CA 証明書をIoT Hub に登録します。デバイス証明書とキーをダウンストリーム デバイスにコピーします。 詳細については、「manage IoT Edge certificates」を参照してください。
X.509 CA 署名付き認証を使用するIoT Hubにデバイスを登録します。 詳細については、 デバイス ID の作成と管理に関するページを参照してください。
使用する言語に応じて、IoT アプリケーションで x.509 証明書が参照される方法を示すサンプルを確認してください。
- C#: x509 デバイス証明書とチェーン サンプル
- C: iotedge_downstream_device_sample.c
- Node.js: simple_sample_device_x509.js
- Java: SendEventX509。java
- Python: send_message_x509.py
connection stringの取得と変更
ポータルで IoT デバイス ID を作成した後、そのプライマリ キーまたはセカンダリ キーを取得します。 アプリケーションがIoT Hubと通信するために使用するconnection stringに、これらのキーのいずれかを追加します。 対称キー認証の場合、IoT Hubデバイスの詳細に完全なconnection stringが表示されます。 ゲートウェイ デバイス情報をconnection stringに追加します。
ダウンストリーム デバイスのconnection stringには、次の指定項目が必要です。
- デバイスが接続するIoT Hub:
Hostname=<Iot-Hub-Name>.azure-devices.net - ハブに登録されたデバイス ID:
DeviceID=<Device-ID> - 対称キーまたは X.509 証明書の認証方法。
- 対称キー認証の場合は、プライマリ キーまたはセカンダリ キーを入力します。
SharedAccessKey=<Key> - X.509 証明書認証の場合は、フラグを指定します。
x509=true
- 対称キー認証の場合は、プライマリ キーまたはセカンダリ キーを入力します。
- デバイスが接続するゲートウェイ デバイス。 IoT Edge ゲートウェイ デバイスの構成ファイルから hostname 値を入力します:
GatewayHostName=<Gateway-Hostname>
完全な「connection string」は次の例のようになります。
HostName=myiothub.azure-devices.net;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz;GatewayHostName=myGatewayDevice
または、X.509 証明書認証の場合:
HostName=myiothub.azure-devices.net;DeviceId=myDownstreamDevice;x509=true;GatewayHostName=myGatewayDevice
親子関係のため、ゲートウェイを接続ホストとして直接使用することで、connection stringを簡略化できます。 次に例を示します。
HostName=myGatewayDevice;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz
透過的なゲートウェイ シリーズの次の記事で、この変更されたconnection stringを使用します。
次のステップ
この時点で、IoT Edge デバイスがIoT Hubに登録され、透過的なゲートウェイとして設定されます。 また、ダウンストリーム デバイスがIoT Hubに登録され、そのゲートウェイ デバイスを指しています。
次に、ゲートウェイ デバイスを信頼し、安全に接続するようにダウンストリーム デバイスを設定します。 透過ゲートウェイ シリーズの次の記事に進みます。ダウンストリーム デバイスを Azure IoT Edge ゲートウェイに接続する。