クイックスタート: シミュレートされた TPM デバイスをプロビジョニングする

このクイックスタートでは、シミュレートされたデバイスを Windows コンピューターに作成します。 シミュレートされたデバイスは、認証のためにトラステッド プラットフォーム モジュール (TPM) の構成証明メカニズムを使用するように構成されます。 デバイスを構成した後、Azure IoT Hub Device Provisioning Service を使用して IoT ハブにプロビジョニングします。 その後、サンプル コードを使用します。これは、デバイスを Device Provisioning Service インスタンスに登録するのに役立ちます。

プロビジョニングのプロセスに慣れていない場合は、プロビジョニングの概要を確認してください。 また、先に進む前に、Azure Portal での IoT Hub Device Provisioning Service の設定に関するページの手順も済ませておいてください。

Azure IoT Device Provisioning Service では、次の 2 種類の登録がサポートされています。

  • 登録グループ。複数の関連するデバイスを登録するために使用されます。

  • 個別登録。1 台のデバイスを登録するために使用されます。

この記事では、個別登録の使用方法を示します。

トラステッド プラットフォーム モジュール (TPM) の構成証明は、Python SDK ではサポートされていません。 Python では、対称キーまたは X.509 証明書を使ってデバイスをプロビジョニングできます。

前提条件

Windows 開発環境の前提条件は次のとおりです。 Linux または macOS については、SDK ドキュメントの「開発環境を準備する」の該当するセクションを参照してください。

  • Windows ベースのマシン上の TPM 2.0 ハードウェア セキュリティ モジュール。

  • Windows ベースのコンピューターに .NET Core SDK 6.0 以降をインストールします。 次のコマンドを使用してバージョンを確認してください。

    dotnet --info
    
  • コンピューターに Java SE Development Kit 8 以降をインストールします。

  • Maven をダウンロードし、インストールします。

  • 最新バージョンの Git をインストールします。 コマンド ウィンドウからアクセスできる環境変数に Git が追加されていることを確認します。 Git Bash (ローカル Git リポジトリとやりとりする際に使用できるコマンドライン アプリ) を含む、インストールする git ツールの最新バージョンについては、Software Freedom Conservancy の Git クライアント ツールに関するページを参照してください。

開発環境を準備する

このセクションでは、Azure IoT C SDKTPM デバイス シミュレーターのサンプルをビルドするために使用する開発環境を準備します。

  1. 最新の CMake ビルド システムをダウンロードします。

    重要

    CMake のインストールを開始する前に、Visual Studio の前提条件 (Visual Studio と "C++ によるデスクトップ開発" ワークロード) がコンピューターにインストールされていることを確認します。 前提条件を満たし、ダウンロードを検証したら、CMake ビルド システムをインストールします。 また、以前のバージョンの CMake ビルド システムでは、この記事で使用されているソリューション ファイルを生成できないことに注意してください。 必ず最新バージョンの CMake を使用してください。

  2. Web ブラウザーを開き、Azure IoT C SDK のリリース ページに移動します。

  3. そのページの上部にある [タグ] タブを選択します。

  4. 最新リリースの Azure IoT C SDK のタグ名をコピーします。

  5. コマンド プロンプトまたは Git Bash シェルを開きます。 次のコマンドを実行して、最新リリースの C 用 Azure IoT Device SDK の GitHub リポジトリを複製します。 <release-tag> を前のステップでコピーしたタグで置き換えます (例: lts_01_2023)。

    git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git
    cd azure-iot-sdk-c
    git submodule update --init
    

    この操作が完了するまで数分かかる場合があります。

  6. 操作が完了したら、azure-iot-sdk-c ディレクトリから次のコマンドを実行します。

    mkdir cmake
    cd cmake
    
  1. Git CMD または Git Bash コマンド ライン環境を開きます。

  2. 次のコマンドを使用して、Azure IoT SDK for C# の GitHub リポジトリをクローンします。

    git clone https://github.com/Azure/azure-iot-sdk-csharp.git
    
  1. Git CMD または Git Bash コマンド ライン環境を開きます。

  2. 次のコマンドを使用して、azure-utpm-c の GitHub リポジトリをクローンします。

    git clone https://github.com/Azure/azure-utpm-c.git --recursive
    
  1. Git CMD または Git Bash コマンド ライン環境を開きます。

  2. 次のコマンドを使用して、Java の GitHub リポジトリをクローンします。

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    

TPM デバイス シミュレーターをビルドして実行する

このセクションでは、TPM シミュレーターをビルドして実行します。 このシミュレーターは、ソケットでポート 2321 とポート 2322 をリッスンします。 コマンド ウィンドウは閉じないでください。 このクイックスタートを終了するまで、このシミュレーターを実行状態にしておく必要があります。

  1. 次のコマンドを実行して、TPM デバイス シミュレーターのサンプル コードを含む Azure IoT C SDK をビルドします。 シミュレートされたデバイスの Visual Studio ソリューションが cmake ディレクトリに生成されます。 このサンプルは、Shared Access Signature (SAS) トークン認証を使用して、TPM 構成証明メカニズムを提供します。

    cmake -Duse_prov_client:BOOL=ON -Duse_tpm_simulator:BOOL=ON ..
    

    ヒント

    cmake で C++ コンパイラが見つからない場合は、上記のコマンドの実行中にビルド エラーが発生する可能性があります。 これが発生した場合は、Visual Studio コマンド プロンプトでコマンドを実行してください。

  2. ビルドが成功すると、最後のいくつかの出力行は次の出力のようになります。

    $ cmake -Duse_prov_client:BOOL=ON ..
    -- Building for: Visual Studio 16 2019
    -- The C compiler identification is MSVC 19.23.28107.0
    -- The CXX compiler identification is MSVC 19.23.28107.0
    
    ...
    
    -- Configuring done
    -- Generating done
    -- Build files have been written to: C:/code/azure-iot-sdk-c/cmake
    
  3. クローンした git リポジトリのルート フォルダーに移動します。

  4. 以下に示すパスを使用して、TPM シミュレーターを実行します。

    cd ..
    .\provisioning_client\deps\utpm\tools\tpm_simulator\Simulator.exe
    

    シミュレーターに出力は表示されません。 TPM デバイスがシミュレートされるので、実行したままにします。

  1. GitHub ルート フォルダーに移動します。

  2. シミュレートされたデバイスの HSM として TPM シミュレーターを実行します。

    .\azure-utpm-c\tools\tpm_simulator\Simulator.exe
    
  3. registerdevice という名前の新しい空のフォルダーを作成します。 コマンド プロンプトで次のコマンドを使用して、registerdevice フォルダーに package.json ファイルを作成します (必ず、npm による質問に回答するか、既定値が適切であれば、それを受け入れてください)。

    npm init
    
  4. 次の前段階パッケージをインストールします。

    npm install node-gyp -g
    npm install ffi-napi -g
    

    Note

    上記のパッケージのインストールには、いくつかの既知の問題があります。 これらの問題を解決するには、 [管理者として実行] モードのコマンド プロンプトで npm install --global --production windows-build-tools を実行し、インストールしたバージョンにパスを置き換えて SET VCTargetsPath=C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140 を実行します。その後、上のインストール コマンドを再実行します。

  5. コマンド プロンプトで次のコマンドを実行し、registerdevice フォルダーに必要なすべてのパッケージをインストールします。

    npm install --save azure-iot-device azure-iot-device-mqtt azure-iot-security-tpm azure-iot-provisioning-device-http azure-iot-provisioning-device
    

    このコマンドでは次のパッケージがインストールされます。

    • TPM と連係するセキュリティ クライアント: azure-iot-security-tpm

    • デバイスが Device Provisioning Service に接続するためのトランスポート: azure-iot-provisioning-device-http または azure-iot-provisioning-device-amqp

    • トランスポートおよびセキュリティ クライアントを使用するクライアント: azure-iot-provisioning-device

    • デバイス クライアント: azure-iot-device

    • トランスポート: azure-iot-device-amqpazure-iot-device-mqttazure-iot-device-http のいずれか

    • 既にインストール済みのセキュリティ クライアント: azure-iot-security-tpm

      Note

      このクイックスタートのサンプルでは、azure-iot-provisioning-device-http および azure-iot-device-mqtt トランスポートを使用します。

  6. 任意のテキスト エディターを開きます。

  7. registerdevice フォルダーに、新しい ExtractDevice.js ファイルを作成します。

  8. ExtractDevice.js ファイルの先頭に、次の require ステートメントを追加します。

    
    'use strict';
    
    var tpmSecurity = require('azure-iot-security-tpm');
    var tssJs = require("tss.js");
    
    var myTpm = new tpmSecurity.TpmSecurityClient(undefined, new tssJs.Tpm(true));
    
  9. メソッドを実装するために、次の関数を追加します。

    
    myTpm.getEndorsementKey(function(err, endorsementKey) {
      if (err) {
        console.log('The error returned from get key is: ' + err);
      } else {
        console.log('the endorsement key is: ' + endorsementKey.toString('base64'));
        myTpm.getRegistrationId((getRegistrationIdError, registrationId) => {
          if (getRegistrationIdError) {
            console.log('The error returned from get registration id is: ' + getRegistrationIdError);
          } else {
            console.log('The Registration Id is: ' + registrationId);
            process.exit();
          }
        });
      }
    });
    
  10. ExtractDevice.js ファイルを保存して閉じます。

    node ExtractDevice.js
    
  11. サンプルを実行します。

  12. デバイス登録に必要な 保証キー登録 ID が出力ウィンドウに表示されます。 これらの値をコピーします。

  1. シミュレートされたデバイスの HSM として TPM シミュレーターを実行します。

  2. [アクセスを許可] を選択します。 シミュレーターでは、ソケットでポート 2321 および 2322 をリッスンします。 このコマンド ウィンドウを閉じないでください。このクイック スタート ガイドの終了まで、このシミュレーターを実行状態にしておく必要があります。

    .\azure-iot-sdk-java\provisioning\provisioning-tools\tpm-simulator\Simulator.exe
    

    TPM Simulator

  3. 2 つ目のコマンド プロンプトを開きます。

  4. 2 つ目のコマンド プロンプトで、ルート フォルダーに移動し、サンプルの依存関係をビルドします。

    cd azure-iot-sdk-java
    mvn install -DskipTests=true
    
  5. サンプル フォルダーに移動します。

    cd provisioning/provisioning-samples/provisioning-tpm-sample
    

TPM デバイスから暗号化キーを読み取る

このセクションでは、実行したままにし、引き続きポート 2321 と 2322 でリッスンしている TPM シミュレーターから保証キーと登録 ID を読み取るサンプルをビルドして実行します。 これらの値は、Device Provisioning Service インスタンスにデバイスを登録する際に使用します。

  1. Visual Studio を起動します。

  2. cmake フォルダーに生成されたソリューション (azure_iot_sdks.sln という名前) を開きます。

  3. Visual Studio のメニューで [ビルド]>[ソリューションのビルド] の順に選択して、ソリューション内のすべてのプロジェクトをビルドします。

  4. Visual Studio の "ソリューション エクスプローラー" ウィンドウで、Provision_Tools フォルダーに移動します。 tpm_device_provision プロジェクトを右クリックし、[スタートアップ プロジェクトに設定] を選択します。

  5. Visual Studio のメニューで [デバッグ]>[デバッグなしで開始] の順に選択して、ソリューションを実行します。 アプリが登録 ID保証キーを読み取って表示します。 この値をメモに書くかコピーします。 これらは次のセクションでデバイスを登録する際に使用します。

  1. Azure portal にサインインし、左側のメニューの [すべてのリソース] ボタンを選択して、Device Provisioning Service を開きます。 "ID スコープ" と "プロビジョニング サービス グローバル エンドポイント" をメモします。

    Device Provisioning Service information

  2. src/main/java/samples/com/microsoft/azure/sdk/iot/ProvisioningTpmSample.java を編集して、メモした "ID スコープ" と "プロビジョニング サービス グローバル エンドポイント" を含めます。

    private static final String idScope = "[Your ID scope here]";
    private static final String globalEndpoint = "[Your Provisioning Service Global Endpoint here]";
    private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
    
  3. ファイルを保存します。

  4. 次のコマンドを使用してプロジェクトをビルドし、ターゲット フォルダーに移動して、作成した jar ファイルを実行します ({version} は、ご利用の Java のバージョンに置き換えてください)。

    mvn clean install
    cd target
    java -jar ./provisioning-tpm-sample-{version}-with-deps.jar
    
  5. プログラムの実行が開始されると、[保証キー][登録キー] が表示されます。 次のセクションのためにこれらの値をコピーします。 プログラムは必ず実行したままにしておいてください。

このセクションでは、TPM 2.0 ハードウェア セキュリティ モジュールから保証キーを読み取るサンプルをビルドして実行します。 この値は、Device Provisioning Service インスタンスにデバイスを登録する際に使用します。

  1. コマンド プロンプトで、ディレクトリを TPM デバイス プロビジョニング サンプルのプロジェクト ディレクトリに変更します。

    cd '.\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\TpmSample\'
    
  2. 次のコマンドを入力して、TPM デバイス プロビジョニング サンプルをビルドして実行します。 TPM 2.0 ハードウェア セキュリティ モジュールから返された保証キーをコピーして、デバイスを登録するときに後で使用できるようにします。

    dotnet run -- -e
    

デバイス登録エントリを作成する

  1. Azure portal にサインインし、Device Provisioning Service インスタンスに移動します。

  2. ナビゲーション メニューの [設定] セクションから [Manage enrollments] (登録の管理) を選択します。

  3. [個々の登録] タブを選択し、[個別登録の追加] を選択します。

    Screenshot that shows the add individual enrollment option.

  4. [登録の追加] ページの [登録とプロビジョニング] で、次の情報を入力して登録の詳細を構成します。

    フィールド 説明
    構成証明 [Attestation mechanism] (構成証明メカニズム) として [Trusted Platform Module (TPM)] (トラステッド プラットフォーム モジュール (TPM)) を選択します。
    トラステッド プラットフォーム モジュール (TPM) の設定 この登録でのデバイスの検証に使用する保証キーを指定します。 保証キーは、デバイスの TPM から取得できます。
    登録 ID デバイスの一意の登録 ID を指定します。 登録 ID は、デバイスの TPM から取得できます。
    プロビジョニングの状態 この登録をデバイスのプロビジョニングに使用できるようにする場合は、[この登録を有効にする] チェック ボックスをオンにします。 登録を無効にする場合は、このチェック ボックスをオフにします。 この設定は後で変更できます。
    再プロビジョニング ポリシー 再プロビジョニングを要求するデバイスを DPS で処理する方法を反映する再プロビジョニング ポリシーを選択します。 詳細については、再プロビジョニング ポリシーに関するページを参照してください。
  5. [Next: IoT hubs] (次へ: IoT ハブ) を選択します。

  6. [登録の追加] ページの [IoT ハブ] タブで、次の情報を入力して、登録でデバイスをプロビジョニングできる IoT ハブを決定します。

    フィールド 説明
    Target IoT hubs (ターゲット IoT ハブ) 1 つ以上のリンクされた IoT ハブを選択するか、IoT ハブへの新しいリンクを追加します。 IoT ハブを DPS インスタンスにリンクする方法の詳細については、IoT ハブをリンクして管理する方法に関するページを参照してください。
    割り当てポリシー 複数のリンクされた IoT ハブを選択した場合は、デバイスを別のハブに割り当てる方法を選択します。 割り当てポリシーの詳細については、割り当てポリシーの使用方法に関するページを参照してください。

    リンクされた IoT ハブを 1 つだけ選択した場合は、加重が均等に分布ポリシーを使用することをお勧めします。
  7. [次へ: デバイスの設定] を選択します

  8. [登録の追加] ページの [デバイス設定] タブで、次の情報を入力して、新しくプロビジョニングされたデバイスの構成方法を定義します。

    フィールド 説明
    Device ID IoT Hub でプロビジョニングされたデバイスに割り当てられるデバイス ID を指定します。 デバイス ID を指定しなかった場合は、登録 ID が使用されます。
    IoT Edge プロビジョニングされたデバイスで Azure IoT Edge が実行される場合は、[プロビジョニングされたデバイスで IoT Edge を有効にする] をオンにします。 この登録が非 IoT Edge 対応デバイス用である場合は、このボックスをオフにします。
    デバイス タグ このテキスト ボックスを使用して、プロビジョニングされたデバイスのデバイス ツインに適用するタグを指定します。
    必要なプロパティ このテキスト ボックスを使用して、プロビジョニングされたデバイスのデバイス ツインに適用する必要なプロパティを指定します。

    詳細については、「IoT Hub のデバイス ツインの理解と使用」を参照してください。

  9. 確認と作成 をクリックします。

  10. [確認 + 作成] タブで、すべての値を確認してから [作成] を選択します。

このクイックスタートの C# TPM サンプルでは登録 ID を提供していません。 個々の登録で追加するように求められたら、独自の値を指定してください。

  1. Azure portal にサインインし、Device Provisioning Service インスタンスに移動します。

  2. ナビゲーション メニューの [設定] セクションから [Manage enrollments] (登録の管理) を選択します。

  3. [個々の登録] タブを選択し、[個別登録の追加] を選択します。

    Screenshot that shows the add individual enrollment option.

  4. [登録の追加] ページの [登録とプロビジョニング] で、次の情報を入力して登録の詳細を構成します。

    フィールド 説明
    構成証明 [Attestation mechanism] (構成証明メカニズム) として [Trusted Platform Module (TPM)] (トラステッド プラットフォーム モジュール (TPM)) を選択します。
    トラステッド プラットフォーム モジュール (TPM) の設定 この登録でのデバイスの検証に使用する保証キーを指定します。 保証キーは、デバイスの TPM から取得できます。
    登録 ID デバイスの一意の登録 ID を指定します。 登録 ID は、デバイスの TPM から取得できます。
    プロビジョニングの状態 この登録をデバイスのプロビジョニングに使用できるようにする場合は、[この登録を有効にする] チェック ボックスをオンにします。 登録を無効にする場合は、このチェック ボックスをオフにします。 この設定は後で変更できます。
    再プロビジョニング ポリシー 再プロビジョニングを要求するデバイスを DPS で処理する方法を反映する再プロビジョニング ポリシーを選択します。 詳細については、再プロビジョニング ポリシーに関するページを参照してください。
  5. [Next: IoT hubs] (次へ: IoT ハブ) を選択します。

  6. [登録の追加] ページの [IoT ハブ] タブで、次の情報を入力して、登録でデバイスをプロビジョニングできる IoT ハブを決定します。

    フィールド 説明
    Target IoT hubs (ターゲット IoT ハブ) 1 つ以上のリンクされた IoT ハブを選択するか、IoT ハブへの新しいリンクを追加します。 IoT ハブを DPS インスタンスにリンクする方法の詳細については、IoT ハブをリンクして管理する方法に関するページを参照してください。
    割り当てポリシー 複数のリンクされた IoT ハブを選択した場合は、デバイスを別のハブに割り当てる方法を選択します。 割り当てポリシーの詳細については、割り当てポリシーの使用方法に関するページを参照してください。

    リンクされた IoT ハブを 1 つだけ選択した場合は、加重が均等に分布ポリシーを使用することをお勧めします。
  7. [次へ: デバイスの設定] を選択します

  8. [登録の追加] ページの [デバイス設定] タブで、次の情報を入力して、新しくプロビジョニングされたデバイスの構成方法を定義します。

    フィールド 説明
    Device ID IoT Hub でプロビジョニングされたデバイスに割り当てられるデバイス ID を指定します。 デバイス ID を指定しなかった場合は、登録 ID が使用されます。
    IoT Edge プロビジョニングされたデバイスで Azure IoT Edge が実行される場合は、[プロビジョニングされたデバイスで IoT Edge を有効にする] をオンにします。 この登録が非 IoT Edge 対応デバイス用である場合は、このボックスをオフにします。
    デバイス タグ このテキスト ボックスを使用して、プロビジョニングされたデバイスのデバイス ツインに適用するタグを指定します。
    必要なプロパティ このテキスト ボックスを使用して、プロビジョニングされたデバイスのデバイス ツインに適用する必要なプロパティを指定します。

    詳細については、「IoT Hub のデバイス ツインの理解と使用」を参照してください。

  9. 確認と作成 をクリックします。

  10. [確認 + 作成] タブで、すべての値を確認してから [作成] を選択します。

デバイスの登録

このセクションでは、Advanced Message Queuing Protocol (AMQP) を使用して、デバイスのブート シーケンスを Device Provisioning Service インスタンスに送信するようにサンプル コードを構成します。 このブート シーケンスにより、Device Provisioning Service インスタンスにリンクされた IoT ハブにデバイスが登録されます。

  1. Azure portal で、Device Provisioning Service の [概要] タブを選択します。

  2. [ID スコープ] の値をコピーします。

    Extract Device Provisioning Service endpoint information from the portal

  3. Visual Studio の [ソリューション エクスプローラー] ウィンドウで、Provision_Samples フォルダーに移動します。 prov_dev_client_sample という名前のサンプル プロジェクトを展開します。 [ソース ファイル] を展開して、prov_dev_client_sample.c を開きます。

  4. ファイルの先頭近くで、以下のような各デバイス プロトコルの #define ステートメントを探します。 SAMPLE_AMQP のみがコメント解除されていることを確認します。

    現在、TPM の個別登録で MQTT プロトコルはサポートされていません

    //
    // The protocol you wish to use should be uncommented
    //
    //#define SAMPLE_MQTT
    //#define SAMPLE_MQTT_OVER_WEBSOCKETS
    #define SAMPLE_AMQP
    //#define SAMPLE_AMQP_OVER_WEBSOCKETS
    //#define SAMPLE_HTTP
    
  5. 定数 id_scope を探し、以前にコピーした ID スコープの値で置き換えます。

    static const char* id_scope = "0ne00002193";
    
  6. 同じファイル内で main() 関数の定義を探します。 以下に示すように hsm_type 変数が SECURE_DEVICE_TYPE_TPM に設定されていることを確認します。

    SECURE_DEVICE_TYPE hsm_type;
    hsm_type = SECURE_DEVICE_TYPE_TPM;
    //hsm_type = SECURE_DEVICE_TYPE_X509;
    //hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
    
  7. prov_dev_client_sample プロジェクトを右クリックし、[スタートアップ プロジェクトに設定] を選択します。

  8. Visual Studio のメニューで [デバッグ]>[デバッグなしで開始] の順に選択して、ソリューションを実行します。 プロジェクトをリビルドするよう求められたら、 [はい] を選択して、プロジェクトをリビルドしてから実行します。

    次の出力は、プロビジョニング デバイス クライアントのサンプルが正常に起動し、Device Provisioning Service インスタンスに接続して、IoT ハブの情報を取得し、登録した場合の例です。

    Provisioning API Version: 1.2.7
    
    Registering... Press enter key to interrupt.
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service:
    test-docs-hub.azure-devices.net, deviceId: test-docs-cert-device
    
  1. Azure portal で、Device Provisioning Service の [概要] タブを選択します。

  2. [ID スコープ] の値をコピーします。

    Copy provisioning service Scope ID from the portal blade

  3. コマンド プロンプトで、ディレクトリを TPM デバイス プロビジョニング サンプルのプロジェクト ディレクトリに変更します。

     cd '.\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\TpmSample\'
    
  4. 次のコマンドを実行して、デバイスを登録します。 <IdScope> を、コピーした DPS の値に置き換え、<RegistrationId> を、デバイス登録の作成時に使用した値に置き換えます。

    dotnet run -- -s <IdScope> -r <RegistrationId>
    

    デバイスの登録が成功した場合は、次のメッセージが表示されます。

    Initializing security using the local TPM...
    Initializing the device provisioning client...
    Initialized for registration Id <RegistrationId>.
    Registering with the device provisioning service...
    Registration status: Assigned.
    Device <RegistrationId> registered to <HubName>.azure-devices.net.
    Creating TPM authentication for IoT Hub...
    Testing the provisioned device with IoT Hub...
    Sending a telemetry message...
    Finished.
    
  1. Azure portal で、Device Provisioning Service の [概要] タブを選択します。

  2. [ID スコープ] の値をコピーします。

    Extract Device Provisioning Service endpoint information from the portal blade

  3. 任意のテキスト エディターを開きます。

  4. registerdevice フォルダーに、新しい RegisterDevice.js ファイルを作成します。

  5. RegisterDevice.js ファイルの先頭に、次の require ステートメントを追加します。

    
    'use strict';
    
    var ProvisioningTransport = require('azure-iot-provisioning-device-http').Http;
    var iotHubTransport = require('azure-iot-device-mqtt').Mqtt;
    var Client = require('azure-iot-device').Client;
    var Message = require('azure-iot-device').Message;
    var tpmSecurity = require('azure-iot-security-tpm');
    var ProvisioningDeviceClient = require('azure-iot-provisioning-device').ProvisioningDeviceClient;
    

    Note

    Node.js 用 Azure IoT SDK では、AMQPAMQP WSMQTT WS などの追加プロトコルがサポートされています。 詳細については、「Device Provisioning Service SDK for Node.js samples (Node.js 用 Device Provisioning Service SDK のサンプル)」を参照してください。

  6. globalDeviceEndpointidScope 変数を追加し、それらを使用して ProvisioningDeviceClient インスタンスを作成します。 {globalDeviceEndpoint}{idScope} を、手順 1. の " グローバル デバイス エンドポイント " と " ID スコープ " の値に置き換えます。

    
    var provisioningHost = '{globalDeviceEndpoint}';
    var idScope = '{idScope}';
    
    var tssJs = require("tss.js");
    var securityClient = new tpmSecurity.TpmSecurityClient('', new tssJs.Tpm(true));
    // if using non-simulated device, replace the above line with following:
    //var securityClient = new tpmSecurity.TpmSecurityClient();
    
    var provisioningClient = ProvisioningDeviceClient.create(provisioningHost, idScope, new ProvisioningTransport(), securityClient);
    
  7. デバイスにメソッドを実装する次の関数を追加します。

    
    provisioningClient.register(function(err, result) {
      if (err) {
        console.log("error registering device: " + err);
      } else {
        console.log('registration succeeded');
        console.log('assigned hub=' + result.registrationState.assignedHub);
        console.log('deviceId=' + result.registrationState.deviceId);
        var tpmAuthenticationProvider = tpmSecurity.TpmAuthenticationProvider.fromTpmSecurityClient(result.registrationState.deviceId, result.registrationState.assignedHub, securityClient);
        var hubClient = Client.fromAuthenticationProvider(tpmAuthenticationProvider, iotHubTransport);
    
        var connectCallback = function (err) {
          if (err) {
            console.error('Could not connect: ' + err.message);
          } else {
            console.log('Client connected');
            var message = new Message('Hello world');
            hubClient.sendEvent(message, printResultFor('send'));
          }
        };
    
        hubClient.open(connectCallback);
    
        function printResultFor(op) {
          return function printResult(err, res) {
            if (err) console.log(op + ' error: ' + err.toString());
            if (res) console.log(op + ' status: ' + res.constructor.name);
            process.exit(1);
          };
        }
      }
    });
    
  8. RegisterDevice.js ファイルを保存して閉じます。

  9. 次のコマンドを実行します。

    node RegisterDevice.js
    
  10. デバイスが起動して Device Provisioning Service に接続し、IoT ハブの情報を取得する動作がシミュレートされるので、そのメッセージに注目してください。

  1. コンピューター上で Java サンプル コードを実行しているコマンド ウィンドウで、Enter キーを押してアプリケーションの実行を続けます。 デバイスが起動して Device Provisioning Service に接続し、IoT ハブの情報を取得する動作がシミュレートされるので、そのメッセージに注目してください。

    Java TPM device program final

デバイス プロビジョニングの登録を確認する

  1. Azure portal にサインインします。

  2. 左側のメニューまたはポータル ページで、 [すべてのリソース] を選択します。

  3. デバイスが割り当てられた IoT ハブを選択します。

  4. [エクスプローラー] メニューで、 [IoT デバイス] を選択します。

  1. デバイスが正常にプロビジョニングされた場合は、デバイス ID が一覧に表示され、 [状態][有効] として設定されているはずです。 デバイスが表示されていない場合は、ページの上部にある [最新の情報に更新] を選択します。

    Device is registered with the IoT hub for C

  1. デバイスが正常にプロビジョニングされた場合は、デバイス ID が一覧に表示され、 [状態][有効] として設定されているはずです。 デバイスが表示されていない場合は、ページの上部にある [最新の情報に更新] を選択します。

    Device is registered with the IoT hub for C#

  1. デバイスが正常にプロビジョニングされた場合は、デバイス ID が一覧に表示され、 [状態][有効] として設定されているはずです。 デバイスが表示されていない場合は、ページの上部にある [最新の情報に更新] を選択します。

    Device is registered with the IoT hub for Node.js

  1. デバイスが正常にプロビジョニングされた場合は、デバイス ID が一覧に表示され、 [状態][有効] として設定されているはずです。 デバイスが表示されていない場合は、ページの上部にある [最新の情報に更新] を選択します。

    Device is registered with the IoT hub

Note

[Initial device twin state](初期のデバイス ツインの状態) をデバイスの登録エントリの既定値から変更した場合、デバイスはハブから目的のツインの状態をプルし、それに従って動作することができます。 詳細については、「IoT Hub のデバイス ツインの理解と使用」を参照してください。

リソースをクリーンアップする

デバイス クライアント サンプルでの作業と確認を続行する予定の場合は、このクイックスタートで作成したリソースをクリーンアップしないでください。 続行する予定がない場合は、次の手順を使用して、このクイックスタートで作成したすべてのリソースを削除してください。

デバイスの登録を削除する

  1. マシンに表示されているデバイス クライアント サンプルの出力ウィンドウを閉じます。

  2. Azure portal の左側のメニューから、 [すべてのリソース] を選択します。

  3. ご利用の Device Provisioning Service を選択します。

  4. [設定] メニューで [登録の管理] を選択します。

  5. [個別の登録] タブを選択します。

  6. このクイックスタートで登録したデバイスの登録 ID の横にあるチェック ボックスをオンにします。

  7. ページの上部で、[削除] を選択します。

IoT Hub からデバイスの登録を削除する

  1. Azure portal の左側のメニューから、 [すべてのリソース] を選択します。

  2. IoT ハブを選択します。

  3. [エクスプローラー] メニューで、 [IoT デバイス] を選択します。

  4. このクイックスタートで登録したデバイスのデバイス ID の横にあるチェック ボックスをオンにします。

  5. ページの上部で、[削除] を選択します。

次のステップ

このクイック スタートでは、個別登録を使用して 1 つのデバイスを IoT ハブにプロビジョニングしました。 次に、複数のハブ間で複数のデバイスをプロビジョニングする方法について説明します。