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