クイック スタート:Azure IoT C SDK を使用してシミュレートされた TPM デバイスをプロビジョニングするQuickstart: Provision a simulated TPM device using the Azure IoT C SDK

このクイック スタートでは、Windows 開発マシン上でトラステッド プラットフォーム モジュール (TPM) デバイス シミュレーターを作成して実行する方法について説明します。In this quickstart, you will learn how to create and run a Trusted Platform Module (TPM) device simulator on a Windows development machine. このシミュレートされたデバイスを、Device Provisioning Service を使用して IoT ハブに接続します。You will connect this simulated device to an IoT hub using a Device Provisioning Service instance. Azure IoT C SDK のサンプル コードは、デバイスを Device Provisioning Service インスタンスに登録し、そのデバイスのブート シーケンスをシミュレートするのに役立ちます。Sample code from the Azure IoT C SDK will be used to help enroll the device with a Device Provisioning Service instance and simulate a boot sequence for the device.

自動プロビジョニングの処理に慣れていない場合は、「自動プロビジョニングの概念」を確認してください。If you're unfamiliar with the process of autoprovisioning, review Auto-provisioning concepts. また、このクイック スタートを続行する前に、Azure portal での IoT Hub Device Provisioning Service の設定に関するページの手順も済ませておいてください。Also, make sure you've completed the steps in Set up IoT Hub Device Provisioning Service with the Azure portal before continuing with this quickstart.

Azure IoT Device Provisioning Service では、次の 2 種類の登録がサポートされています。The Azure IoT Device Provisioning Service supports two types of enrollments:

この記事では、個別登録の使用方法を示します。This article will demonstrate individual enrollments.

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

前提条件Prerequisites

Azure IoT C SDK の開発環境を準備するPrepare a development environment for the Azure IoT C SDK

このセクションでは、Azure IoT C SDKTPM デバイス シミュレーターのサンプルをビルドするために使用する開発環境を準備します。In this section, you will prepare a development environment used to build the Azure IoT C SDK and the TPM device simulator sample.

  1. CMake ビルド システムをダウンロードします。Download the CMake build system.

    CMake のインストールを開始する前に、Visual Studio の前提条件 (Visual Studio と "C++ によるデスクトップ開発" ワークロード) が マシンにインストールされていることが重要です。It is important that the Visual Studio prerequisites (Visual Studio and the 'Desktop development with C++' workload) are installed on your machine, before starting the CMake installation. 前提条件を満たし、ダウンロードを検証したら、CMake ビルド システムをインストールします。Once the prerequisites are in place, and the download is verified, install the CMake build system.

  2. コマンド プロンプトまたは Git Bash シェルを開きます。Open a command prompt or Git Bash shell. 次のコマンドを実行して、Azure IoT C SDK の GitHub リポジトリを複製します。Execute the following command to clone the Azure IoT C SDK GitHub repository:

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

    この操作は、完了するまでに数分かかります。You should expect this operation to take several minutes to complete.

  3. git リポジトリのルート ディレクトリに cmake サブディレクトリを作成し、そのフォルダーに移動します。Create a cmake subdirectory in the root directory of the git repository, and navigate to that folder.

    cd azure-iot-sdk-c
    mkdir cmake
    cd cmake
    

SDK をビルドし、TPM デバイス シミュレーターを実行するBuild the SDK and run the TPM device simulator

このセクションでは、TPM デバイス シミュレーターのサンプル コードを含む Azure IoT C SDK をビルドします。In this section, you will build the Azure IoT C SDK, which includes the TPM device simulator sample code. このサンプルは、Shared Access Signature (SAS) トークン認証を使用して、TPM 構成証明メカニズムを提供します。This sample provides a TPM attestation mechanism via Shared Access Signature (SAS) Token authentication.

  1. azure-iot-sdk-c git リポジトリに作成した cmake サブディレクトリから、次のコマンドを実行してサンプルをビルドします。From the cmake subdirectory you created in the azure-iot-sdk-c git repository, run the following command to build the sample. このビルド コマンドにより、シミュレートされたデバイスの Visual Studio ソリューションも生成されます。A Visual Studio solution for the simulated device will also be generated by this build command.

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

    cmake で C++ コンパイラが見つからない場合は、上記のコマンドの実行中にビルド エラーが発生している可能性があります。If cmake does not find your C++ compiler, you might get build errors while running the above command. これが発生した場合は、Visual Studio コマンド プロンプトでこのコマンドを実行してください。If that happens, try running this command in the Visual Studio command prompt.

    ビルドが成功すると、最後のいくつかの出力行は次のようになります。Once the build succeeds, the last few output lines will look similar to the following output:

    $ cmake -Duse_prov_client:BOOL=ON -Duse_tpm_simulator:BOOL=ON ..
    -- Building for: Visual Studio 15 2017
    -- Selecting Windows SDK version 10.0.16299.0 to target Windows 10.0.17134.
    -- The C compiler identification is MSVC 19.12.25835.0
    -- The CXX compiler identification is MSVC 19.12.25835.0
    
    ...
    
    -- Configuring done
    -- Generating done
    -- Build files have been written to: E:/IoT Testing/azure-iot-sdk-c/cmake
    
  2. 複製した git リポジトリのルート フォルダーに移動し、以下のパスを使用して TPM シミュレーターを実行します。Navigate to the root folder of the git repository you cloned, and run the TPM simulator using the path shown below. このシミュレーターは、ソケットでポート 2321 とポート 2322 をリッスンします。This simulator listens over a socket on ports 2321 and 2322. このコマンド ウィンドウは閉じないでください。このクイック スタート ガイドの最後まで、このシミュレーターを実行状態にしておく必要があります。Do not close this command window; you will need to keep this simulator running until the end of this quickstart.

    cmake フォルダーにいる場合は、次のコマンドを実行します。If you are in the cmake folder, then run the following commands:

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

    シミュレーターの出力は表示されません。You will not see any output from the simulator. TPM デバイスのシミュレートを実行したままにします。Let it continue to run simulating a TPM device.

TPM デバイスから暗号化キーを読み取るRead cryptographic keys from the TPM device

このセクションでは、実行したままにし、ポート 2321 と 2322 でリッスンしている TPM シミュレーターから保証キーと登録 ID を読み取るサンプルをビルドして実行します。In this section, you will build and execute a sample that will read the endorsement key and registration ID from the TPM simulator you left running, and listening over ports 2321 and 2322. これらの値は、Device Provisioning Service インスタンスにデバイスを登録する際に使用します。These values will be used for device enrollment with your Device Provisioning Service instance.

  1. Visual Studio を起動し、azure_iot_sdks.sln という名前の新しいソリューション ファイルを開きます。Launch Visual Studio and open the new solution file named azure_iot_sdks.sln. このソリューション ファイルは、以前に azure-iot-sdk-c git リポジトリのルートに作成した cmake フォルダーにあります。This solution file is located in the cmake folder you previously created in the root of the azure-iot-sdk-c git repository.

  2. Visual Studio のメニューで [ビルド] > [ソリューションのビルド] の順に選択して、ソリューション内のすべてのプロジェクトをビルドします。On the Visual Studio menu, select Build > Build Solution to build all projects in the solution.

  3. Visual Studio の "ソリューション エクスプローラー" ウィンドウで、Provision_Tools フォルダーに移動します。In Visual Studio's Solution Explorer window, navigate to the Provision_Tools folder. tpm_device_provision プロジェクトを右クリックし、 [スタートアップ プロジェクトに設定] を選択します。Right-click the tpm_device_provision project and select Set as Startup Project.

  4. Visual Studio のメニューで [デバッグ] > [デバッグなしで開始] の順に選択して、ソリューションを実行します。On the Visual Studio menu, select Debug > Start without debugging to run the solution. アプリが 登録 ID保証キー を読み取って表示します。The app reads and displays a Registration ID and an Endorsement Key. これらの値をコピーします。Copy these values. これらは次のセクションでデバイスを登録する際に使用します。They will be used in the next section for device enrollment.

ポータルでデバイス登録エントリを作成するCreate a device enrollment entry in the portal

  1. Azure Portal にサインインし、左側のメニューの [すべてのリソース] をクリックして、Device Provisioning Service を開きます。Sign in to the Azure portal, click on the All resources button on the left-hand menu and open your Device Provisioning service.

  2. [登録を管理します] タブをクリックし、上部にある [Add individual enrollment](個別登録の追加) ボタンをクリックします。Select the Manage enrollments tab, and then click the Add individual enrollment button at the top.

  3. [Add enrollment](登録の追加) で、次の情報を入力し、 [保存] をクリックします。On Add enrollment, enter the following information, and click the Save button.

    • メカニズム:ID 構成証明の "メカニズム" として [TPM] を選択します。Mechanism: Select TPM as the identity attestation Mechanism.

    • 保証キー:tpm_device_provision プロジェクトを実行することで TPM デバイスに対して生成された "保証キー" を入力します。Endorsement key: Enter the Endorsement key you generated for your TPM device by running the tpm_device_provision project.

    • 登録 ID:tpm_device_provision プロジェクトを実行することで TPM デバイスに対して生成された "登録 ID" を入力します。Registration ID: Enter the Registration ID you generated for your TPM device by running the tpm_device_provision project.

    • IoT Edge デバイス: [無効] を選択します。IoT Edge device: Select Disable.

    • IoT Hub のデバイス ID:デバイスに ID を割り当てるために、「test-docs-device」と入力します。IoT Hub Device ID: Enter test-docs-device to give the device an ID.

      ポータルでデバイス登録情報を入力

      登録に成功すると、 [Individual Enrollments](個々の登録) タブの一覧に、対象デバイスの "登録 ID" が表示されます。On successful enrollment, the Registration ID of your device will appear in the list under the Individual Enrollments tab.

デバイスの初回ブート シーケンスのシミュレーションSimulate first boot sequence for the device

このセクションでは、Advanced Message Queuing Protocol (AMQP) を使用して、デバイスのブート シーケンスを Device Provisioning Service インスタンスに送信するようにサンプル コードを構成します。In this section, you will configure sample code to use the Advanced Message Queuing Protocol (AMQP) to send the device's boot sequence to your Device Provisioning Service instance. このブート シーケンスにより、デバイスが認識され、Device Provisioning Service インスタンスにリンクされた IoT ハブに割り当てられます。This boot sequence will cause the device to be recognized and assigned to an IoT hub linked to the Device Provisioning Service instance.

  1. Azure portal で、Device Provisioning Service の [概要] タブをクリックし、 [ID スコープ] の値をコピーします。In the Azure portal, select the Overview tab for your Device Provisioning service and copy the ID Scope value.

    ポータルから Device Provisioning サービスのエンドポイント情報を抽出

  2. Visual Studio の "ソリューション エクスプローラー" ウィンドウで、Provision_Samples フォルダーに移動します。In Visual Studio's Solution Explorer window, navigate to the Provision_Samples folder. prov_dev_client_sample という名前のサンプル プロジェクトを展開します。Expand the sample project named prov_dev_client_sample. Source Files を展開し、prov_dev_client_sample.c を開きます。Expand Source Files, and open prov_dev_client_sample.c.

  3. ファイルの先頭近くで、以下のような各デバイス プロトコルの #define ステートメントを探します。Near the top of the file, find the #define statements for each device protocol as shown below. SAMPLE_AMQP のみがコメント解除されていることを確認します。Make sure only SAMPLE_AMQP is uncommented.

    現在、TPM の個別登録で MQTT プロトコルはサポートされていませんCurrently, the MQTT protocol is not supported for TPM Individual Enrollment.

    //
    // 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
    
  4. 定数 id_scope を探し、以前にコピーした ID スコープの値で置き換えます。Find the id_scope constant, and replace the value with your ID Scope value that you copied earlier.

    static const char* id_scope = "0ne00002193";
    
  5. 同じファイル内で main() 関数の定義を探します。Find the definition for the main() function in the same file. 以下に示すように hsm_type 変数が SECURE_DEVICE_TYPE_X509 ではなく SECURE_DEVICE_TYPE_TPM に設定されていることを確認します。Make sure the hsm_type variable is set to SECURE_DEVICE_TYPE_TPM instead of SECURE_DEVICE_TYPE_X509 as shown below.

    SECURE_DEVICE_TYPE hsm_type;
    hsm_type = SECURE_DEVICE_TYPE_TPM;
    //hsm_type = SECURE_DEVICE_TYPE_X509;
    
  6. prov_dev_client_sample プロジェクトを右クリックし、 [スタートアップ プロジェクトに設定] を選択します。Right-click the prov_dev_client_sample project and select Set as Startup Project.

  7. Visual Studio のメニューで [デバッグ] > [デバッグなしで開始] の順に選択して、ソリューションを実行します。On the Visual Studio menu, select Debug > Start without debugging to run the solution. プロジェクトをリビルドするよう求められたら、 [はい] をクリックして、プロジェクトをリビルドしてから実行します。In the prompt to rebuild the project, click Yes, to rebuild the project before running.

    次の出力は、プロビジョニング デバイス クライアントのサンプルが正常に起動し、Device Provisioning Service インスタンスに接続して、IoT ハブの情報を取得し、登録した場合の例です。The following output is an example of the provisioning device client sample successfully booting up, and connecting to a Device Provisioning Service instance to get IoT hub information and registering:

    Provisioning API Version: 1.2.7
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    
    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-device
    
  8. シミュレートされたデバイスがプロビジョニング サービスによって IoT ハブにプロビジョニングされると、ハブの [IoT デバイス] にデバイス ID が表示されます。Once the simulated device is provisioned to the IoT hub by your provisioning service, the device ID appears with the hub's IoT Devices.

    IoT ハブに登録されたデバイス

リソースのクリーンアップClean up resources

引き続きデバイス クライアント サンプルを使用する場合は、このクイックスタートで作成したリソースをクリーンアップしないでください。If you plan to continue working on and exploring the device client sample, do not clean up the resources created in this Quickstart. 使用する予定がない場合は、次の手順を使用して、このクイックスタートで作成したすべてのリソースを削除してください。If you do not plan to continue, use the following steps to delete all resources created by this Quickstart.

  1. マシンに表示されているデバイス クライアント サンプルの出力ウィンドウを閉じます。Close the device client sample output window on your machine.
  2. マシンに表示されている TPM シミュレーター ウィンドウを閉じます。Close the TPM simulator window on your machine.
  3. Azure Portal の左側のメニューにある [すべてのリソース] をクリックし、Device Provisioning サービスを選択します。From the left-hand menu in the Azure portal, click All resources and then select your Device Provisioning service. サービスの [登録を管理します] を開き、 [個々の登録] タブをクリックします。このクイックスタートで登録したデバイスの登録 ID を選択し、上部の [削除] ボタンをクリックします。Open Manage Enrollments for your service, and then click the Individual Enrollments tab. Select the REGISTRATION ID of the device you enrolled in this Quickstart, and click the Delete button at the top.
  4. Azure Portal の左側のメニューにある [すべてのリソース] をクリックし、IoT ハブを選択します。From the left-hand menu in the Azure portal, click All resources and then select your IoT hub. ハブの [IoT デバイス] を開き、このクイック スタートで登録したデバイスの "デバイス ID" を選択し、一番上の [削除] ボタンをクリックします。Open IoT Devices for your hub, select the DEVICE ID of the device you registered in this Quickstart, and then click Delete button at the top.

次の手順Next steps

このクイックスタートでは、TPM のシミュレートされたデバイスをコンピューター上に作成し、IoT Hub Device Provisioning Service を使用して IoT ハブにプロビジョニングしました。In this Quickstart, you’ve created a TPM simulated device on your machine and provisioned it to your IoT hub using the IoT Hub Device Provisioning Service. プログラミングによって TPM デバイスを登録する方法については、TPM デバイスのプログラミングによる登録のクイックスタートに進みます。To learn how to enroll your TPM device programmatically, continue to the Quickstart for programmatic enrollment of a TPM device.