適用対象: IoT Edge 1.5
重要
IoT Edge 1.5 LTS は、サポートされているリリースです。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日をもってサポートが終了しています。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。
この記事では、他のデバイスが IoT Hub に接続できるように、IoT Edge デバイスを透過的なゲートウェイとして構成する詳細な手順について説明します。 この記事では、 IoT Edge ゲートウェイ とは、透過的なゲートウェイとして構成された IoT Edge デバイスを意味します。 詳細は、「IoT Edge デバイスをゲートウェイとして使用する方法」を参照してください。
注
ダウンストリーム デバイスではファイル アップロードを使用できません。
透過的なゲートウェイ接続を設定するには、主に 3 つの手順があります。 この記事では、最初の手順について説明します。
- ダウンストリーム デバイスが安全に接続できるように、ゲートウェイ デバイスをサーバーとして構成します。 ダウンストリーム デバイスからメッセージを受信し、適切な宛先にルーティングするようにゲートウェイを設定します。
- IoT Hub で認証できるように、ダウンストリーム デバイスのデバイス ID を作成します。 ゲートウェイ デバイスを介してメッセージを送信するようにダウンストリーム デバイスを構成します。 その手順については、「Azure IoT Hub に対するダウンストリーム デバイスの認証を行う」を参照してください。
- ダウンストリーム デバイスをゲートウェイ デバイスに接続し、メッセージの送信を開始します。 その手順については、「ダウンストリーム デバイスを Azure IoT Edge ゲートウェイに接続する」を参照してください。
ゲートウェイとして機能するには、デバイスをダウンストリーム デバイスに安全に接続する必要があります。 Azure IoT Edge では、公開キー 基盤 (PKI) を使用して、デバイス間のセキュリティで保護された接続を設定できます。 この場合、ダウンストリーム デバイスは、透過的なゲートウェイとして機能する IoT Edge デバイスに接続します。 セキュリティを維持するために、ダウンストリーム デバイスはゲートウェイ デバイスの 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 を使用します。
注
この記事全体で使用されている "ルート 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 証明書を作成します。 最後に、
<path>/certs/azure-iot-test-only.root.ca.cert.pem
というルート CA 証明書ファイルがあります。 - 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
を開きます。 Windows で Linux 用 IoT Edge を使用する場合は、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 をインストールすると、IoT Edge エージェントという 1 つのシステム モジュールのみが自動的に起動します。 デバイスの最初のデプロイを作成すると、2 つ目のシステム モジュールと IoT Edge ハブも起動します。 デバイス上で edgeHub モジュールが実行されていない場合は、デバイスのデプロイを作成します。
IoT Edge ハブ モジュールには、ダウンストリーム デバイスからの受信メッセージを処理するためのルートが設定されています。
ゲートウェイ デバイスには、ダウンストリーム デバイスからのメッセージを処理するためのルートが必要です。または、それらのメッセージは処理されません。 ゲートウェイ デバイスのモジュールに、または直接 IoT Hub にメッセージを送信することができます。
IoT Edge ハブ モジュールをデプロイし、ダウンストリーム デバイスからの受信メッセージを処理するルートを構成するには、次の手順に従います。
Azure portal で IoT Hub に移動します。
[デバイス管理] メニューの [デバイス] に移動し、ゲートウェイとして使用する 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 句を使用すると、そのシステム プロパティを使用してメッセージをフィルターで除外できます。
メッセージのルーティングについて詳しくは、モジュールのデプロイとルートの確立に関する記事をご覧ください。
-
名前:
ルートを作成したら、[レビューと作成] を選択します。
[確認および作成] ページで、 [作成] を選択します。
ゲートウェイ デバイスで開いているポート
IoT Hub とのすべての通信は送信接続を介して行われるため、Standard IoT Edge デバイスが機能するために受信接続は必要ありません。 ゲートウェイ デバイスは、ダウンストリーム デバイスからメッセージを受信する必要があるため、異なります。 ダウンストリーム デバイスとゲートウェイ デバイスの間にファイアウォールがある場合は、ファイアウォール経由でも通信が可能である必要があります。
ゲートウェイ シナリオが機能するためには、IoT Edge ハブでサポートされているプロトコルの少なくとも 1 つが、ダウンストリーム デバイスからの受信トラフィック用に開かれている必要があります。 サポートされているプロトコルは、MQTT、AMQP、HTTPS、MQTT over WebSockets、および AMQP over WebSockets です。
港 / ポート | プロトコル |
---|---|
8883 | MQTT |
5671 | AMQP |
443 | HTTPS MQTT+ WS AMQP+WS |
次のステップ
IoT Edge デバイスを透過的なゲートウェイとして設定したら、ゲートウェイを信頼してメッセージを送信するようにダウンストリーム デバイスを設定します。 透過的なゲートウェイ シナリオの次の手順については、 Azure IoT Hub に対するダウンストリーム デバイスの認証 に進みます。