X.509 証明書を使用して Windows で IoT Edge デバイスを作成およびプロビジョニングする

適用対象: [はい] アイコン IoT Edge 1.1

重要

IoT Edge 1.1 のサポート終了日は、2022 年 12 月 13 日でした。 本製品、サービス、テクノロジ、または API のサポート内容については、Microsoft 製品のライフサイクルに関するページをご確認ください。 最新バージョンの IoT Edge への更新の詳細については、「 Update IoT Edge」を参照してください。

この記事では、Windows IoT Edge デバイスを登録およびプロビジョニングするエンドツーエンドの手順について説明します。

Note

Windows コンテナーを使用する Azure IoT Edge は、Azure IoT Edge のバージョン 1.2 以降サポートされなくなります。

IoT Edge を Windows デバイスで実行するための新しい方法である Azure IoT Edge for Linux on Windows の使用を検討してください。

Azure IoT Edge for Linux on Windows を使用する場合は、同等のハウツーガイドに記載されている手順に従います。

IoT ハブに接続するすべてのデバイスには、cloud-to-device または device-to-cloud の通信の追跡に使用されるデバイス ID があります。 デバイスをその接続情報で構成します。これには、IoT ハブ ホスト名、デバイス ID、IoT Hub に対して認証を行うためにデバイスで使用される情報が含まれます。

この記事の手順では、手動プロビジョニングと呼ばれるプロセスについて説明します。ここでは、1 つのデバイスを IoT ハブに接続します。 手動プロビジョニングの場合、IoT Edge デバイスの認証には 2 つのオプションがあります。

  • 対称キー: IoT Hub で新しいデバイス ID を作成すると、サービスによって 2 つのキーが作成されます。 いずれかのキーをデバイスに配置すると、認証時にそのキーが IoT Hub に提示されます。

    この認証方法は比較的すばやく開始できますが、それほど安全ではありません。

  • X.509 自己署名: 2 つの X.509 ID 証明書を作成し、デバイスに配置します。 IoT Hub で新しいデバイス ID を作成するときは、両方の証明書の拇印を指定します。 デバイスでは IoT Hub に対して認証を行うときに、1 つの証明書が提示され、その証明書がその拇印と一致することが IoT によって検証されます。

    この認証方法はより安全であり、運用環境のシナリオの場合に推奨されます。

この記事では、認証方法として X.509 証明書を使用する方法について説明します。 対称キーを使用する場合は、「対称キーを使用して Windows で IoT Edge デバイスを作成およびプロビジョニングする」を参照してください。

Note

設定するデバイスが多数あり、それぞれを手動でプロビジョニングしたくない場合は、次の記事のいずれかを使用して、IoT Edge が IoT Hub Device Provisioning Service でどのように動作するかを確認してください。

前提条件

この記事では、IoT Edge デバイスを登録し、そこに IoT Edge をインストールする方法について説明します。 これらのタスクには、実行するために使用されるさまざまな前提条件とユーティリティがあります。 次に進む前に、すべての前提条件が満たされていることを確認してください。

デバイス管理ツール

デバイスを登録する手順には、Azure portalVisual Studio Code、または Azure CLI を使用できます。 ユーティリティごとに個別の前提条件があります。

Azure サブスクリプション内の無料または標準の IoT ハブ

デバイスの要件

Windows デバイス。

Windows コンテナーを使用する IoT Edge には、Windows バージョン 1809、ビルド 17763 が必要です。これは、最新の Windows 長期サポート ビルドです。 サポートされている SKU の一覧については、サポートされているシステムの一覧を確認してください。

デバイス ID 証明書を生成する

X.509 証明書を使用した手動プロビジョニングには、バージョン 1.0.10 以降の IoT Edge が必要です。

X.509 証明書を使用して IoT Edge デバイスをプロビジョニングする場合は、"デバイス ID 証明書" と呼ばれるものを使用します。 この証明書は、IoT Edge デバイスのプロビジョニングと、Azure IoT Hub でのデバイス認証を行うためにのみ使用されます。 これは、他の証明書には署名しないリーフ証明書です。 デバイス ID 証明書は、IoT Edge デバイスによって検証のためにモジュールやダウンストリーム デバイスに提示される証明機関 (CA) 証明書とは別のものです。

X.509 証明書認証の場合、各デバイスの認証情報は、デバイス ID 証明書から取得した "拇印" の形式で提供されます。 これらの拇印は、サービスが接続時にデバイスを認識できるように、デバイスの登録時に IoT Hub に付与されます。

IoT Edge デバイスでの CA 証明書の使用方法については、「Azure IoT Edge での証明書の使用方法について理解する」を参照してください。

X.509 を使用して手動でプロビジョニングするには、次のファイルが必要です。

  • 2 つのデバイス ID 証明書と、それに対応する .cer または pem 形式の秘密キー証明書。

    IoT Edge ランタイムには、証明書/キー ファイルのセットが 1 つ用意されています。 デバイス ID 証明書を作成するとき、IoT ハブ内のデバイスで使用するデバイス ID を使って証明書の共通名 (CN) を設定します。

  • 両方のデバイス ID 証明書から取得された拇印。

    拇印の値は SHA-1 ハッシュの場合は 40 桁の 16 進数、SHA-256 ハッシュの場合は 64 桁の 16 進数です。 両方の拇印は、デバイスの登録時に IoT Hub に提供されます。

使用できる証明書がない場合は、デモ証明書を作成して IoT Edge デバイスの機能をテストできます。 この記事に記載されている手順に従って、証明書作成スクリプトを設定し、ルート CA 証明書を作成してから、2 つの IoT Edge デバイス ID 証明書を作成します。

証明書から拇印を取得する方法の 1 つは、次の openssl コマンドを使用することです。

openssl x509 -in <certificate filename>.pem -text -fingerprint

デバイスを登録する

デバイスを登録するには、好みに応じて Azure portalVisual Studio Code、または Azure CLI を使用できます。

Azure portal の IoT Hubで、IoT Edge デバイスは、Edge 対応ではない IoT デバイスとは別に作成および管理されます。

  1. Azure Portal にサインインし、IoT Hub に移動します。

  2. 左側のウィンドウで、メニューから [デバイス] を選択し、[デバイスを追加する] を選択します。

  3. [デバイスの作成] ページで、次の情報を指定します。

    • わかりやすいデバイス ID を作成します。 このデバイス ID は、後で使用するのでメモしておいてください。
    • [IoT Edge デバイス] のチェック ボックスをオンにします。
    • 認証の種類として [X.509 自己署名済み] を選択します。
    • プライマリとセカンダリの ID 証明書の拇印を指定します。 拇印の値は SHA-1 ハッシュの場合は 40 桁の 16 進数、SHA-256 ハッシュの場合は 64 桁の 16 進数です。
  4. [保存] を選択します。

デバイスが IoT Hub に登録されたので、IoT Edge ランタイムのインストールとプロビジョニングを完了するために使用する情報を取得します。

登録済みデバイスを表示し、プロビジョニング情報を取得する

X.509 証明書認証を使用するデバイスでは、IoT Edge ランタイムのインストールとプロビジョニングを完了するために、IoT Hub 名、デバイス名、証明書ファイルが必要です。

IoT ハブに接続するエッジ対応デバイスが、デバイス ページに一覧表示されます。 IoT Edge デバイスの種類で一覧をフィルター処理できます。

IoT ハブ内のすべての IoT Edge デバイスを表示する方法のスクリーンショット。

IoT Edge をインストールする

このセクションでは、Windows VM または物理デバイスを IoT Edge 用に準備します。 次に、IoT Edge をインストールします。

Azure IoT Edge は、OCI と互換性のあるコンテナー ランタイムに依存します。 Moby (Moby ベースのエンジン) はインストール スクリプトに含まれているので、エンジンをインストールする追加手順はありません。

IoT Edge ランタイムをインストールするには:

  1. PowerShell を管理者として実行します。

    PowerShell(x86) ではなく、PowerShell の AMD64 セッションを使用します。 使用しているセッションの種類がわからない場合は、次のコマンドを実行します。

    (Get-Process -Id $PID).StartInfo.EnvironmentVariables["PROCESSOR_ARCHITECTURE"]
    
  2. Deploy-IoTEdge コマンドを実行します。これにより、次のタスクが実行されます。

    • お使いの Windows コンピューターがサポートされているバージョンであることを確認します
    • コンテナー機能をオンにします
    • Moby エンジンと IoT Edge ランタイムをダウンロードします
    . {Invoke-WebRequest -useb https://aka.ms/iotedge-win} | Invoke-Expression; `
    Deploy-IoTEdge
    
  3. メッセージが表示されたら、デバイスを再起動します。

デバイスに IoT Edge をインストールするときは、追加のパラメーターを使用して、プロセスを次のように変更できます。

  • プロキシ サーバーを経由するようトラフィックを誘導する
  • オフライン インストール用にローカル ディレクトリをインストーラーに指定する

これらの追加パラメーターの詳細については、Windows コンテナーを使用した IoT Edge 用の PowerShell スクリプトに関するページを参照してください。

クラウド ID を使用してデバイスをプロビジョニングする

これでコンテナー エンジンと IoT Edge ランタイムがデバイスにインストールされたので、次のステップに進み、クラウド ID と認証情報を使用してデバイスを設定できます。

  1. IoT Edge デバイスで、PowerShell を管理者として実行します。

  2. Initialize-IoTEdge コマンドを使用して、お使いのマシンに IoT Edge ランタイムを構成します。

    . {Invoke-WebRequest -useb https://aka.ms/iotedge-win} | Invoke-Expression; `
    Initialize-IoTEdge -ManualX509
    
    • オフラインまたは特定のバージョンのインストール用に IoTEdgeSecurityDaemon.ps1 スクリプトをデバイスにダウンロードした場合は、スクリプトのローカル コピーを必ず参照してください。

      . <path>/IoTEdgeSecurityDaemon.ps1
      Initialize-IoTEdge -ManualX509
      
  3. 入力を求められたら、次の情報を指定します。

    • IotHubHostName: デバイスが接続する IoT ハブのホスト名。 たとえば、{IoT_hub_name}.azure-devices.net のようにします。
    • DeviceId: デバイスを登録したときに指定した ID。
    • X509IdentityCertificate: デバイス上の ID 証明書への絶対パス。 たとえば、C:\path\identity_certificate.pem のようにします。
    • X509IdentityPrivateKey: 指定された ID 証明書の秘密キー ファイルへの絶対パス。 たとえば、C:\path\identity_key.pem のようにします。

デバイスを手動でプロビジョニングする場合は、追加のパラメーターを使用して、プロセスを次のように変更できます。

  • プロキシ サーバーを経由するようトラフィックを誘導する
  • 特定の edgeAgent コンテナー イメージを宣言し、それがプライベート レジストリに存在する場合は資格情報を提供する

これらの追加パラメーターの詳細については、Windows コンテナーを使用した IoT Edge 用の PowerShell スクリプトに関するページを参照してください。


構成が成功したことを確認する

IoT Edge デバイスにランタイムが正常にインストールされ、構成されていることを確認します。

IoT Edge サービスの状態を確認します。

Get-Service iotedge

サービス ログを調べます。

. {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog

実行中のモジュールを一覧表示します。

iotedge list

オフラインまたは特定のバージョンのインストール (省略可能)

このセクションの手順は、標準のインストール手順では説明されていないシナリオを対象としています。 これには以下が含まれます。

  • オフラインの間に IoT Edge をインストールする
  • リリース候補バージョンをインストールする
  • 最新以外のバージョンをインストールする

インストール中に、次の 3 つのファイルがダウンロードされます。

  • PowerShell スクリプト。これには、インストール手順が含まれています。
  • Microsoft Azure IoT Edge cab。これには、IoT Edge セキュリティ デーモン (iotedged)、Moby コンテナー エンジン、および Moby CLI が含まれています。
  • Visual C++ 再頒布可能パッケージ (VC ランタイム) インストーラー

インストール中にデバイスがオフラインになる予定の場合、または特定のバージョンの IoT Edge をインストールする場合は、これらのファイルを事前にデバイスにダウンロードできます。 インストール時には、インストール スクリプトによって、ダウンロード済みのファイルを含むディレクトリを指定します。 インストーラーでは、最初にそのディレクトリをチェックし、見つからないコンポーネントのみをダウンロードします。 すべてのファイルがオフラインで利用可能な場合、インターネット接続なしでインストールできます。

  1. IoT Edge の最新のインストール ファイルとその以前のバージョンについては、Azure IoT Edge リリースを参照してください。

  2. インストールするバージョンを見つけ、リリース ノートの [アセット] セクションから次のファイルを IoT デバイスにダウンロードします。

    • IoTEdgeSecurityDaemon.ps1
    • 1.1 リリース チャネルからの Microsoft-Azure-IoTEdge-amd64.cab。

    各リリースの機能をサポートするために機能が変更されるため、使用する .cab ファイルと同じリリースの PowerShell スクリプトを使用することが重要です。

  3. ダウンロードした .cab ファイルにアーキテクチャのサフィックスが付いている場合は、そのファイルの名前を Microsoft-Azure-IoTEdge.cab のみに変更します。

  4. 必要に応じて、Visual C++ 再頒布可能パッケージ インストーラーをダウンロードします。 たとえば、PowerShell スクリプトでは、バージョン vc_redist.x64.exe を使用します。 IoT デバイスの IoT Edge ファイルと同じフォルダーにインストーラーを保存します。

  5. オフライン コンポーネントを使用してインストールするには、PowerShell スクリプトのローカル コピーをドット ソースで実行します。

  6. -OfflineInstallationPath パラメーターを指定して Deploy-IoTEdge コマンドを実行します。 ファイル ディレクトリへの絶対パスを指定します。 たとえば、 にします。

    . path_to_powershell_module_here\IoTEdgeSecurityDaemon.ps1
    Deploy-IoTEdge -OfflineInstallationPath path_to_file_directory_here
    

    デプロイ コマンドでは、指定されたローカル ファイル ディレクトリにあるコンポーネントが使用されます。 .cab ファイルまたは Visual C++ インストーラーが見つからない場合は、ダウンロードが試行されます。

IoT Edge をアンインストールする

IoT Edge のインストールを Windows デバイスから削除する場合は、管理用 PowerShell ウィンドウから Uninstall-IoTEdge コマンドを使用します。 このコマンドは、IoT Edge ランタイムを既存の構成と Moby エンジン データと一緒に削除します。

. {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; `
Uninstall-IoTEdge

アンインストール オプションの詳細については、Get-Help Uninstall-IoTEdge -full コマンドを使用してください。

次のステップ

IoT Edge モジュールのデプロイに進んで、デバイスにモジュールをデプロイする方法を確認します。