次の方法で共有


ダウンストリーム デバイスを Azure IoT Edge ゲートウェイに接続する

適用対象:IoT Edge 1.5 のチェックマーク IoT Edge 1.5

重要

IoT Edge 1.5 LTS は、サポートされているリリースです。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日をもってサポートが終了しています。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。

この記事では、ダウンストリーム デバイスと IoT Edge 透過的ゲートウェイの間に信頼できる接続を設定する手順について説明 します。 透過的なゲートウェイ シナリオでは、1 つ以上のデバイスが、IoT Hub への接続を維持する単一のゲートウェイ デバイスを介してメッセージを送信します。 この記事では、 ゲートウェイIoT Edge ゲートウェイ という用語は、透過的なゲートウェイとして構成された IoT Edge デバイスを意味します。

ダウンストリーム デバイスは、インターネットまたはゲートウェイ デバイス (IoT Edge 対応かどうか) に直接データを送信します。 子デバイスには、入れ子になったトポロジ内のダウンストリーム デバイスまたはゲートウェイ デバイスを使用できます。

透過的なゲートウェイ接続は、3 つの手順で設定します。 この記事では、3 番目の手順について説明します。

  1. ダウンストリーム デバイスが安全にゲートウェイ デバイスに接続できるように、ゲートウェイ デバイスをサーバーとして構成します。 ダウンストリーム デバイスからメッセージを受信し、適切な宛先にルーティングするようにゲートウェイを設定します。 その手順については、「透過的なゲートウェイとして機能するように IoT Edge デバイスを構成する」を参照してください。

  2. IoT Hub で認証できるように、ダウンストリーム デバイスのデバイス ID を作成します。 ゲートウェイ デバイスを介してメッセージを送信するようにダウンストリーム デバイスを構成します。 その手順については、「Azure IoT Hub に対するダウンストリーム デバイスの認証を行う」を参照してください。

  3. ダウンストリーム デバイスをゲートウェイ デバイスに接続し、メッセージの送信を開始します。

この記事では、次のようなダウンストリーム デバイス接続コンポーネントについて説明します。

  • トランスポート層セキュリティ (TLS) と証明書の基礎
  • 異なるオペレーティング システム間で動作し、証明書を異なる方法で処理する TLS ライブラリ

デバイスがゲートウェイにメッセージを送信できるように、お好みの言語で Azure IoT サンプルを確認します。

前提条件

ダウンストリーム デバイスを準備するには、次の情報を取得します。

  • ダウンストリーム デバイス

    このデバイスは、Azure IoT Hub で作成された ID を持つ任意のアプリケーションまたはプラットフォームにすることができます。 多くの場合、アプリケーションは Azure IoT デバイス SDK を使用します。 ダウンストリーム デバイスは、IoT Edge ゲートウェイ デバイスで実行されているアプリケーションでもかまいません。

    この記事では後で、 IoT デバイスをダウンストリーム デバイスとして接続する方法について説明します。 IoT Edge デバイスをダウンストリーム デバイスとして使用する場合は、Azure IoT Edge デバイスを接続して階層 (入れ子になったエッジ) を作成する方法に関するページを参照してください。

  • ルート CA 証明書ファイル

    このファイルは、「 透過的なゲートウェイとして機能するように IoT Edge デバイスを構成する」で Edge CA 証明書を生成するために使用され、ダウンストリーム デバイスで使用できます。

    ダウンストリーム デバイスでは、この証明書を使用してゲートウェイ デバイスの ID を確認します。 この信頼された証明書は、ゲートウェイ デバイスへのトランスポート層セキュリティ (TLS) 接続です。 使用方法の詳細については、「 ルート CA 証明書を指定する」を参照してください。

  • ゲートウェイ デバイスを指す変更された接続文字列。

    接続文字列を変更する方法については、「 ダウンストリーム デバイスを Azure IoT Hub に対して認証する」を参照してください。

IoT Hub に登録されている IoT デバイスでは、モジュール ツインを使用して、1 つのデバイス上のさまざまなプロセス、ハードウェア、または機能を分離できます。 IoT Edge ゲートウェイは、対称キー認証を使用したダウンストリーム モジュール接続をサポートしますが、X.509 証明書認証はサポートしていません。

TLS と証明書の基礎について

ダウンストリーム デバイスを IoT Edge に安全に接続することは、インターネット経由の他のセキュリティで保護されたクライアントおよびサーバー通信に似ています。 クライアントとサーバーの間では、トランスポート層セキュリティ (TLS) を使用してインターネット上での安全な通信が行われます。 TLS では、証明書と呼ばれる標準的な 公開キー 基盤 (PKI) コンストラクトが使用されます。 TLS は、2 つのエンドポイントのセキュリティ保護に関連する多くのトピックを網羅した詳細な仕様です。 このセクションでは、デバイスを IoT Edge ゲートウェイに安全に接続するために必要な概念について説明します。

クライアントがサーバーに接続すると、サーバーはサーバー証明書チェーンと呼ばれる証明書の チェーンを提示します。 証明書チェーンには、通常、ルート証明機関 (CA) 証明書、1 つ以上の中間 CA 証明書、およびサーバーの証明書があります。 クライアントは、サーバー証明書チェーン全体を暗号で検証することで、サーバーを信頼します。 このプロセスは、 サーバー チェーン検証と呼ばれます。 また、クライアントは、所有証明と呼ばれる、サーバー証明書の秘密キーを持っているという 証明をサーバーに求めます。 一緒に、サーバー チェーンの検証と所有証明は 、サーバー認証と呼ばれます。 サーバー証明書チェーンを検証するには、クライアントがサーバーの証明書を発行するために使用するルート CA 証明書のコピーが必要です。 Web サイトに接続する場合、ブラウザーには共通の CA 証明書が事前に構成されているため、クライアント プロセスはシームレスです。

デバイスが Azure IoT Hub に接続するとき、デバイスがクライアントであり、IoT Hub クラウド サービスがサーバーです。 IoT Hub クラウド サービスでは、 Baltimore CyberTrust Root と呼ばれるルート CA 証明書が使用されます。これは一般に公開されており、広く使用されています。 IoT Hub CA 証明書はほとんどのデバイスに既にインストールされているため、多くの TLS 実装 (OpenSSL、Schannel、LibreSSL) では、サーバー証明書の検証中に自動的に使用されます。 ただし、IoT Hub に接続するデバイスでは、IoT Edge ゲートウェイに接続するときに問題が発生する可能性があります。

デバイスが IoT Edge ゲートウェイに接続するときは、ダウンストリーム デバイスがクライアントで、ゲートウェイ デバイスがサーバーです。 Azure IoT Edge を使用すると、必要に応じてゲートウェイ証明書チェーンを構築できます。 Baltimore などのパブリック CA 証明書、または自己署名 (または社内) ルート CA 証明書を使用できます。 多くの場合、パブリック CA 証明書にはコストがかかるため、通常は運用シナリオで使用されます。 開発とテストに適しているのは自己署名 CA 証明書です。 デモ証明書は、自己署名ルート CA 証明書です。

IoT Edge ゲートウェイに自己署名ルート CA 証明書を使用する場合は、それをインストールするか、ゲートウェイに接続するすべてのダウンストリーム デバイスに提供する必要があります。

ゲートウェイ証明書のセットアップのスクリーンショット。

IoT Edge 証明書と運用環境への影響の詳細については、 IoT Edge 証明書の使用状況の詳細を参照してください。

ルート CA 証明書を指定する

ゲートウェイ デバイスの証明書を検証するために、ダウンストリーム デバイスには、ルート CA 証明書の独自のコピーが必要です。 IoT Edge Git リポジトリのスクリプトを使用してテスト証明書を作成する場合、ルート CA 証明書は azure-iot-test-only.root.ca.cert.pem と呼ばれます。

まだ行っていない場合は、この証明書ファイルをダウンストリーム デバイス上の任意のディレクトリに移動します。 オペレーティング システムの証明書ストアに CA 証明書をインストールするか、Azure IoT SDK を使用するアプリケーション内の証明書を参照して、ファイルを移動します。

Azure Key Vault などのサービスまたはセキュリティで保護されたコピー プロトコルなどのツールを使用して、証明書ファイルを移動します。

OS に証明書をインストールする

ルート CA 証明書をダウンストリーム デバイスにコピーした後、ゲートウェイに接続するアプリケーションが証明書にアクセスできることを確認します。

ほとんどのアプリケーションで使用できるように、オペレーティング システムの証明書ストアにルート CA 証明書をインストールします。 Node.jsなどの一部のアプリケーションでは、OS 証明書ストアを使用せず、代わりに Node ランタイムの内部証明書ストアを使用します。 オペレーティング システム レベルで証明書をインストールできない場合は、「 Azure IoT SDK での証明書の使用 」セクションに進んでください。

Ubuntu または Windows にルート CA 証明書をインストールします。

次のコマンドを使用して、Ubuntu ホストに CA 証明書をインストールします。 この例では、前提条件の記事の azure-iot-test-only.root.ca.cert.pem 証明書を使用し、ダウンストリーム デバイス上の場所に証明書をコピーしていることを前提としています。

sudo cp <file path>/azure-iot-test-only.root.ca.cert.pem /usr/local/share/ca-certificates/azure-iot-test-only.root.ca.cert.pem.crt
sudo update-ca-certificates

完了すると、 /etc/ssl/certs で証明書の更新が表示されます。1 が追加され、0 が削除されました。完了 メッセージ。

証明書で Azure IoT SDK を使用する

Azure IoT SDK から IoT Edge デバイスに接続する方法について、簡単なサンプル アプリケーションを使用して説明します。 サンプルの目標は、デバイス クライアントを接続し、デバイス テレメトリ メッセージをゲートウェイに送信し、接続を閉じて終了することです。

アプリケーション レベルのサンプルを使用する前に、次の項目を準備してください。

  • ゲートウェイ デバイスをポイントするように変更したダウンストリーム デバイスの IoT Hub 接続文字列。

  • ダウンストリーム デバイスを IoT Hub に対して認証するために必要な証明書。 詳細については、「Azure IoT Hub に対するダウンストリーム デバイスの認証を行う」を参照してください。

  • コピーしてダウンストリーム デバイス上の任意の場所に保存したルート CA 証明書への完全なパス。

    (例: <file path>/azure-iot-test-only.root.ca.cert.pem)。

これで、選択した言語のサンプルで証明書を使用する準備ができました。

このセクションでは、Azure IoT Node.js デバイス クライアントを IoT Edge ゲートウェイに接続するサンプル アプリケーションを示します。 Node.js アプリケーションの場合は、ここに示すように、アプリケーション レベルでルート CA 証明書をインストールする必要があります。 Node.js アプリケーションでは、システムの証明書ストアは使用されません。

  1. edge_downstream_device.js のサンプルを Node.js 用 Azure IoT device SDK サンプル リポジトリから入手します。
  2. readme.md ファイルを読み、サンプルを実行するための前提として必要なものがすべて揃っていることを確認します。
  3. edge_downstream_device.js ファイル内の connectionString 変数と edge_ca_cert_path 変数を更新します。
  4. お使いのデバイス上でサンプルを実行する方法を示す手順については、SDK ドキュメントを参照してください。

実行するサンプルについて理解するために、次のコード スニペットを参照してください。このコードは、クライアント SDK によって証明書ファイルを読み取り、読み取った証明書ファイルを使用してセキュリティで保護された TLS 接続を確立する方法を示しています。

// Provide the Azure IoT device client via setOptions with the X509
// Edge root CA certificate that was used to setup the Edge runtime
var options = {
    ca : fs.readFileSync(edge_ca_cert_path, 'utf-8'),
};

ゲートウェイ接続をテストする

ダウンストリーム デバイスで次のサンプル コマンドを実行して、ゲートウェイ デバイスに接続できることをテストします。

openssl s_client -connect mygateway.contoso.com:8883 -CAfile <CERTDIR>/certs/azure-iot-test-only.root.ca.cert.pem -showcerts

このコマンドは、MQTTS (ポート 8883) 経由の接続を確認します。 別のプロトコルを使用する場合は、AMQPS (5671) または HTTPS (443) のコマンドを調整します。

このコマンドの出力は長い場合があり、チェーン内のすべての証明書に関する情報が含まれます。 接続に成功すると、 Verification: OKVerify return code: 0 (ok)などの行が表示されます。

ゲートウェイ接続の確認のスクリーンショット。

ゲートウェイ接続をトラブルシューティングする

ダウンストリーム デバイスのゲートウェイ デバイスへの接続が不安定な場合は、問題の解決に役立つこれらの質問を検討してください。

  • 接続文字列のゲートウェイ ホスト名は、ゲートウェイ デバイスの IoT Edge 構成ファイル内のホスト名値と同じですか?
  • そのゲートウェイ ホスト名は IP アドレスに解決できますか? DNS を使用するか、ダウンストリーム デバイスにホスト ファイル エントリを追加して、断続的な接続を修正します。
  • ファイアウォールの通信ポートは開いていますか? ダウンストリーム デバイスと透過的な IoT Edge デバイスの間で、必要なプロトコル ポート (MQTTS:8883、AMQPS:5671、HTTPS:433) が開いていることを確認します。

次のステップ

IoT Edge が オフライン機能 をダウンストリーム デバイスに拡張する方法について説明します。