透過的なゲートウェイとして機能するように IoT Edge デバイスを構成します。
適用対象: IoT Edge 1.5
IoT Edge 1.4
重要
サポートされているリリースは、IoT Edge 1.5 LTS と IoT Edge 1.4 LTS です。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日にサポートが終了します。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。
この記事では、他のデバイスが IoT Hub と通信するための透過的なゲートウェイとして機能するように IoT Edge デバイスを構成するための詳細な手順を提供します。 この記事では、IoT Edge ゲートウェイ という用語は、透過的ゲートウェイとして構成された IoT Edge デバイスを指します。 詳細は、「IoT Edge デバイスをゲートウェイとして使用する方法」を参照してください。
Note
ダウンストリーム デバイスではファイル アップロードを使用できません。
透過的なゲートウェイ接続を正常にセットアップするための 3 つの一般的な手順があります。 この記事では、最初の手順について説明します。
- ゲートウェイ デバイスをサーバーとして構成し、ダウンストリーム デバイスが安全に接続できるようにします。 ダウンストリーム デバイスからメッセージを受信するようにゲートウェイを設定し、適切な宛先にルーティングします。
- ダウンストリーム デバイスのデバイス ID を作成して、IoT Hub で認証できるようにします。 ゲートウェイ デバイスを介してメッセージを送信するようにダウンストリーム デバイスを構成します。 その手順については、「Azure IoT Hub に対するダウンストリーム デバイスの認証を行う」を参照してください。
- ダウンストリーム デバイスをゲートウェイ デバイスに接続し、メッセージの送信を開始します。 その手順については、「ダウンストリーム デバイスを Azure IoT Edge ゲートウェイに接続する」を参照してください。
デバイスがゲートウェイとして機能するためには、そのダウンストリーム デバイスに安全に接続する必要があります。 Azure IoT Edge では、公開キー基盤 (PKI) を使用して、これらのデバイス間にセキュリティで保護された接続を設定することができます。 この場合、透過的なゲートウェイとして機能する IoT Edge デバイスにダウンストリーム デバイスが接続できるようにします。 妥当なセキュリティを維持するために、ダウン ストリーム デバイスはゲートウェイ デバイスの ID を確認する必要があります。 この ID 検査により、お使いのデバイスが悪意のある可能性のあるゲートウェイに接続することを防止できます。
Azure IoT Hub クラウド サービスを使って作成された ID を持つ任意のアプリケーションまたはプラットフォームを、ダウンストリーム デバイスにすることもできます。 多くの場合、これらのアプリケーションでは Azure IoT device SDK が使用されます。 ダウンストリーム デバイスは、IoT Edge ゲートウェイ デバイスそのもので実行されているアプリケーションの場合もあります。
デバイス ゲートウェイ トポロジに必要な信頼を有効にする証明書インフラストラクチャを作成できます。 この記事では、IoT Hub で X.509 CA セキュリティを 有効にするために使用するのと同じ証明書のセットアップを前提としています。これには、特定の IoT ハブ (IoT ハブのルート CA) に関連付けられた X.509 CA 証明書、およびこの CA と IoT Edge デバイスの CA によって署名された一連の証明書が使用されます。
Note
この記事全体で使用されている "ルート CA 証明書" という用語は、PKI 証明書チェーンの最上位機関の公開証明書を指し、必ずしもシンジケート化された認証局の証明書ルートではありません。 多くの場合、実際は中間 CA の公開証明書です。
次の手順では、証明書を作成し、ゲートウェイ上の適切な場所にインストールするプロセスについて説明します。 任意のマシンを使用して証明書を生成してから、その証明書をお使いの IoT Edge デバイスにコピーできます。
前提条件
IoT Edge がインストールされている Linux または Windows デバイス。
準備ができたデバイスがない場合は、Azure 仮想マシンに作成できます。 「初めての IoT Edge モジュールを Linux 仮想デバイスにデプロイする」の手順に従って IoT Hub を作成し、仮想マシンを作成して、IoT Edge ランタイムを構成します。
Edge CA 証明書をセットアップする
すべての IoT Edge ゲートウェイには、Edge CA 証明書がインストールされている必要があります。 IoT Edge セキュリティ デーモンは、Edge CA 証明書を使用してワークロード CA 証明書に署名します。その後、この証明書は IoT Edge ハブのサーバー証明書に署名します。 ゲートウェイは、接続の開始時に、ダウンストリーム デバイスにサーバー証明書を提示します。 ダウンストリーム デバイスは、サーバー証明書がルート CA 証明書にロールアップされる証明書チェーンの一部であることを確認します。 このプロセスにより、ダウンストリーム デバイスは、ゲートウェイが信頼できるソースからのものであることを確認できます。 詳細については、「Azure IoT Edge での証明書の使用方法について理解する」を参照してください。
ルート CA 証明書と Edge CA 証明書 (およびその秘密キー) が、IoT Edge ゲートウェイ デバイス上に存在し、IoT Edge の構成ファイルで構成されている必要があります。 この場合の "ルート CA 証明書" は、この IoT Edge シナリオに対する最上位の証明機関であることに注意してください。 ゲートウェイの Edge CA 証明書とダウンストリーム デバイスの証明書は、同じルート CA 証明書にロールアップする必要があります。
ヒント
ルート CA 証明書と Edge CA 証明書を IoT Edge デバイスにインストールするプロセスの詳細については、「IoT Edge デバイスの証明書を管理する」も参照してください。
次のファイルを準備します。
- ルート CA 証明書
- Edge CA 証明書
- デバイス CA 秘密キー
運用シナリオでは、独自の証明機関を使用してこれらのファイルを生成する必要があります。 開発シナリオとテスト シナリオでは、デモ証明書を使用できます。
デモ証明書を作成する
独自の証明機関がなく、デモ用の証明書を使用する場合は、「IoT Edge デバイスの機能をテストするためのデモ用の証明書を作成する」の手順に従ってファイルを作成します。 そのページでは、以下の手順を実行する必要があります。
- まず、デバイスで証明書を生成するためのスクリプトを設定します。
- ルート CA 証明書を作成します。 これらの手順を終えると、ルート CA 証明書ファイル
<path>/certs/azure-iot-test-only.root.ca.cert.pem
が作成されます。 - Edge CA 証明書を作成します。 これらの手順を終えると、Edge CA 証明書と
<path>/certs/iot-edge-device-ca-<cert name>-full-chain.cert.pem
その秘密キー<path>/private/iot-edge-device-ca-<cert name>.key.pem
が作成されます。
証明書をデバイスにコピーする
証明書が形式の要件を満たしていることを確認します。
別のマシンで証明書を作成した場合は、それらを IoT Edge デバイスにコピーします。 USB ドライブを使用したり、Azure Key Vault などのサービスを使用したり、セキュア ファイル コピーなどの機能を使用したりできます。
証明書とキーの優先ディレクトリにファイルを移動します。 証明書には
/var/aziot/certs
を、キーには/var/aziot/secrets
を使用します。証明書とキー ディレクトリを作成し、アクセス許可を設定します。 証明書とキーは、好みの
/var/aziot
ディレクトリに格納する必要があります。 証明書には/var/aziot/certs
を、キーには/var/aziot/secrets
を使用します。# If the certificate and keys directories don't exist, create, set ownership, and set permissions sudo mkdir -p /var/aziot/certs sudo chown aziotcs:aziotcs /var/aziot/certs sudo chmod 755 /var/aziot/certs sudo mkdir -p /var/aziot/secrets sudo chown aziotks:aziotks /var/aziot/secrets sudo chmod 700 /var/aziot/secrets
証明書とキーの所有権とアクセス許可を変更します。
# Give aziotcs ownership to certificates # Read and write for aziotcs, read-only for others sudo chown -R aziotcs:aziotcs /var/aziot/certs sudo find /var/aziot/certs -type f -name "*.*" -exec chmod 644 {} \; # Give aziotks ownership to private keys # Read and write for aziotks, no permission for others sudo chown -R aziotks:aziotks /var/aziot/secrets sudo find /var/aziot/secrets -type f -name "*.*" -exec chmod 600 {} \;
デバイス上に証明書を構成する
お使いの IoT Edge デバイスで構成ファイル
/etc/aziot/config.toml
を開きます。 IoT Edge for Linux on Windows を使用している場合は、Connect-EflowVm
PowerShell コマンドレットを使用して EFLOW 仮想マシンに接続する必要があります。ヒント
構成ファイルがデバイスにまだ存在しない場合は、
/etc/aziot/config.toml.edge.template
をテンプレートとして使用して作成します。trust_bundle_cert
パラメーターを見つけます。 この行をコメント解除し、デバイスのルート CA 証明書ファイルにファイルの URI を指定します。ファイルの
[edge_ca]
セクションを探します。 このセクションの 3 行をコメント解除し、次のプロパティの値として、証明書とキー ファイルにファイル URI を指定します。- cert: Edge CA 証明書
- pk: デバイス CA 秘密キー
ファイルを保存して閉じます。
変更を [適用] します。
sudo iotedge config apply
edgeHub をデプロイしてメッセージをルーティングする
ダウンストリーム デバイスによって、テレメトリとメッセージがゲートウェイ デバイスに送信されます。ここで、IoT Edge ハブ モジュールは、他のモジュールまたは IoT Hub に情報をルーティングする役割を担います。 この機能のためにゲートウェイ デバイスを準備するには、次のことを確認してください。
IoT Edge ハブ モジュールがデバイスにデプロイされます。
デバイスに IoT Edge を初めてインストールするときには、1 つのシステム モジュール (IoT Edge エージェント) のみが自動的に起動します。 デバイスの最初のデプロイを作成すると、2 番目のシステム モジュールと IoT Edge ハブも起動します。 デバイス上で edgeHub モジュールが実行されていない場合は、デバイスのデプロイを作成します。
IoT Edge ハブ モジュールには、ダウンストリーム デバイスからの受信メッセージを処理するためのルートが設定されています。
ダウンストリーム デバイスからのメッセージを処理するためのルートがゲートウェイ デバイスに存在している必要があります。そうではない場合、メッセージは処理されません。 ゲートウェイ デバイスのモジュールに、または直接 IoT Hub にメッセージを送信することができます。
IoT Edge ハブ モジュールをデプロイし、ダウンストリーム デバイスからの受信メッセージを処理するためのルートを使用して構成するには、次の手順に従います。
Azure Portal で、お使いの IoT ハブに移動します。
デバイス管理メニューのデバイスに移動し、ゲートウェイとして使用する IoT Edge デバイスを選択します。
[Set Modules] \(モジュールの設定) を選択します。
[モジュール] ページで、ゲートウェイ デバイスにデプロイするモジュールを追加できます。 この記事では、このページで明示的に設定する必要のない edgeHub モジュールの構成とデプロイに重点を置いて説明します。
[次へ: ルート] を選択します。
[ルート] ページで、ダウンストリーム デバイスからのメッセージを処理するためのルートが存在することを確認します。 次に例を示します。
モジュールやダウンストリーム デバイスからのすべてのメッセージを IoT Hub に送信するルート。
- 名前:
allMessagesToHub
- 値:
FROM /messages/* INTO $upstream
- 名前:
すべてのダウンストリーム デバイスからのすべてのメッセージを IoT Hub に送信するルート。
- 名前:
allDownstreamToHub
- 値:
FROM /messages/* WHERE NOT IS_DEFINED ($connectionModuleId) INTO $upstream
IoT Edge モジュールからのメッセージとは異なり、ダウンストリーム デバイスからのメッセージにはモジュール ID が関連付けられていないため、このルートは機能します。 ルートの WHERE 句を使用すると、そのシステム プロパティが含まれるメッセージをフィルター処理で除外できます。
メッセージのルーティングについて詳しくは、モジュールのデプロイとルートの確立に関する記事をご覧ください。
- 名前:
ルートが 1 つ以上作成されたら、[確認と作成] を選択します。
[確認および作成] ページで、 [作成] を選択します。
ゲートウェイ デバイスで開いているポート
IoT Hub とのすべての通信は送信接続を介して行われるため、Standard IoT Edge デバイスが機能するために受信接続は必要ありません。 ゲートウェイ デバイスは、ダウンストリーム デバイスからメッセージを受信する必要があるため、異なります。 ダウンストリーム デバイスとゲートウェイ デバイスの間にファイアウォールがある場合は、ファイアウォール経由でも通信が可能である必要があります。
ゲートウェイ シナリオが機能するためには、IoT Edge ハブでサポートされているプロトコルの少なくとも 1 つが、ダウンストリーム デバイスからの受信トラフィック用に開かれている必要があります。 サポートされているプロトコルは、MQTT、AMQP、HTTPS、MQTT over WebSockets、および AMQP over WebSockets です。
Port | Protocol |
---|---|
8883 | MQTT |
5671 | AMQP |
443 | HTTPS MQTT+WS AMQP+WS |
次のステップ
これで IoT Edge デバイスが透過的なゲートウェイとしてセットアップされたので、ゲートウェイを信頼してメッセージを送信するようにダウンストリーム デバイスを構成する必要があります。 「Azure IoT Hub に対するダウンストリーム デバイスの認証を行う」に進み、透過的なゲートウェイのシナリオを設定する手順について確認してください。