対称キーの構成証明を使用して IoT Edge デバイスを作成およびプロビジョニングするCreate and provision an IoT Edge device using symmetric key attestation

Azure IoT Edge デバイスは、Device Provisioning Service を使用して、Edge に対応していないデバイスと同じように自動プロビジョニングできます。Azure IoT Edge devices can be auto-provisioned using the Device Provisioning Service just like devices that are not edge-enabled. 自動プロビジョニングの処理に慣れていない場合は、「自動プロビジョニングの概念」を読んでから先に進んでください。If you're unfamiliar with the process of auto-provisioning, review the auto-provisioning concepts before continuing.

この記事では、次の手順に従って、IoT Edge デバイスで対称キーの構成証明を使用して Device Provisioning Service の個別登録を作成する方法について説明します。This article shows you how to create a Device Provisioning Service individual enrollment using symmetric key attestation on an IoT Edge device with the following steps:

  • IoT Hub Device Provisioning Service (DPS) のインスタンスを作成する。Create an instance of IoT Hub Device Provisioning Service (DPS).
  • デバイスの個別登録を作成する。Create an individual enrollment for the device.
  • IoT Edge ランタイムをインストールし、IoT Hub に接続する。Install the IoT Edge runtime and connect to the IoT Hub.

対称キーの構成証明は、Device Provisioning Service インスタンスを使用してデバイスを認証する簡単なアプローチです。Symmetric key attestation is a simple approach to authenticating a device with a Device Provisioning Service instance. この構成証明の方法では、初めてデバイスのプロビジョニングを行う開発者または厳密なセキュリティ要件がない開発者に対して、"Hello world" エクスペリエンスを提示します。This attestation method represents a "Hello world" experience for developers who are new to device provisioning, or do not have strict security requirements. TPM または X.509 証明書を使用するデバイス構成証明は、より安全であり、さらに厳格なセキュリティ要件に対して使用する必要があります。Device attestation using a TPM or X.509 certificates is more secure, and should be used for more stringent security requirements.


  • アクティブな IoT HubAn active IoT Hub
  • 物理デバイスまたは仮想デバイスA physical or virtual device

Azure IoT Hub Device Provisioning Service を設定するSet up the IoT Hub Device Provisioning Service

Azure 内に IoT Hub Device Provisioning Service の新しいインスタンスを作成し、それを自分の IoT Hub にリンクします。Create a new instance of the IoT Hub Device Provisioning Service in Azure, and link it to your IoT hub. 手順については、IoT Hub DPS の設定に関する記事を参照してください。You can follow the instructions in Set up the IoT Hub DPS.

Device Provisioning Service を実行した後、概要ページから [ID スコープ] の値をコピーします。After you have the Device Provisioning Service running, copy the value of ID Scope from the overview page. この値は、IoT Edge ランタイムを構成するときに使用します。You use this value when you configure the IoT Edge runtime.

デバイスの一意の登録 ID を選択するChoose a unique registration ID for the device

各デバイスを識別する一意の登録 ID を定義する必要があります。A unique registration ID must be defined to identify each device. デバイスの MAC アドレス、シリアル番号、または何らかの固有の情報を使用できます。You can use the MAC address, serial number, or any unique information from the device.

この例では、MAC アドレスとシリアル番号の組み合わせを使用して、次のような登録 ID の文字列を形成します: sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6In this example, we use a combination of a MAC address and serial number forming the following string for a registration ID: sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6.

デバイスの一意の登録 ID を作成します。Create a unique registration ID for your device. 有効な文字は、小文字の英字、数字、ダッシュ ('-') です。Valid characters are lowercase alphanumeric and dash ('-').

DPS の登録を作成するCreate a DPS enrollment

デバイスの登録 ID を使用して、DPS で個別登録を作成します。Use your device's registration ID to create an individual enrollment in DPS.

DPS 内に登録を作成するときに、デバイス ツインの初期状態を宣言する機会があります。When you create an enrollment in DPS, you have the opportunity to declare an Initial Device Twin State. デバイス ツインでは、ソリューションで必要な任意のメトリック (リージョン、環境、場所、デバイスの種類など) によってデバイスをグループ化するためのタグを設定できます。In the device twin, you can set tags to group devices by any metric you need in your solution, like region, environment, location, or device type. これらのタグは、自動展開を作成するために使用されます。These tags are used to create automatic deployments.


対称キーの構成証明を使用する場合、グループの登録も可能です。その場合は、個別の登録と同じ決定を行います。Group enrollments are also possible when using symmetric key attestation and involve the same decisions as individual enrollments.

  1. Azure portal で、IoT Hub Device Provisioning Service のインスタンスに移動します。In the Azure portal, navigate to your instance of IoT Hub Device Provisioning Service.

  2. [設定] の下の [登録の管理] を選択します。Under Settings, select Manage enrollments.

  3. [Add individual enrollment](個別登録の追加) を選択し、登録を構成する次の手順を完了します。Select Add individual enrollment then complete the following steps to configure the enrollment:

    1. [メカニズム][対称キー] を選択します。For Mechanism, select Symmetric Key.

    2. [キーの自動生成] チェック ボックスをオンにします。Select the Auto-generate keys check box.

    3. デバイス用に作成した登録 ID を指定します。Provide the Registration ID that you created for your device.

    4. 必要に応じて、IoT Hub のデバイス ID を指定します。Provide an IoT Hub Device ID for your device if you'd like. デバイス ID を使用して、個々のデバイスをモジュール展開のターゲットにすることができます。You can use device IDs to target an individual device for module deployment. デバイス ID を指定しなかった場合は、登録 ID が使用されます。If you don't provide a device ID, the registration ID is used.

    5. [True] を選択して、その登録が IoT Edge デバイス用のものであることを宣言します。Select True to declare that the enrollment is for an IoT Edge device. グループ登録の場合、すべてのデバイスを IoT Edge デバイスにする必要があります。そうしない場合、いずれも IoT Edge デバイスにすることはできません。For a group enrollment, all devices must be IoT Edge devices or none of them can be.


    Azure CLI では、登録または登録グループを作成し、Edge 対応フラグを使用して、デバイスまたはデバイスのグループが IoT Edge デバイスであることを指定できます。In the Azure CLI, you can create an enrollment or an enrollment group and use the edge-enabled flag to specify that a device, or group of devices, is an IoT Edge device.

    1. デバイスをハブに割り当てる方法について、Device Provisioning Service の割り当てポリシーの既定値をそのまま使用するか、その登録に固有の別の値を選択します。Accept the default value from the Device Provisioning Service's allocation policy for how you want to assign devices to hubs or choose a different value that is specific to this enrollment.

    2. デバイスの接続先になるリンクされた IoT Hub を選択します。Choose the linked IoT Hub that you want to connect your device to. 複数のハブを選択でき、デバイスは、選択した割り当てポリシーに従ってそれらのハブの 1 つに割り当てられます。You can choose multiple hubs, and the device will be assigned to one of them according to the selected allocation policy.

    3. デバイスが初回以降にプロビジョニングを要求したときのために、再プロビジョニング時のデバイス データの処理方法を選択します。Choose how you want device data to be handled on re-provisioning when devices request provisioning after the first time.

    4. 必要に応じて、 [デバイス ツインの初期状態] にタグ値を追加します。Add a tag value to the Initial Device Twin State if you'd like. タグを使用して、デバイス グループをモジュール展開のターゲットにすることができます。You can use tags to target groups of devices for module deployment. 次に例を示します。For example:

         "tags": {
            "environment": "test"
         "properties": {
            "desired": {}
    5. [エントリの有効化][有効] に設定されていることを確認します。Ensure Enable entry is set to Enable.

    6. [保存] を選択します。Select Save.

これで、このデバイスの登録が存在しているので、IoT Edge ランタイムによってインストール時にデバイスを自動的にプロビジョニングできます。Now that an enrollment exists for this device, the IoT Edge runtime can automatically provision the device during installation. IoT Edge ランタイムのインストール時や、グループ登録に使用するデバイス キーを作成する場合に使用できるよう、登録のプライマリ キーの値をコピーしておいてください。Be sure to copy your enrollment's Primary Key value to use when installing the IoT Edge runtime, or if you're going to be creating device keys for use with a group enrollment.

デバイス キーを派生させるDerive a device key


このセクションは、グループ登録を使用する場合にのみ必須となります。This section is required only if using a group enrollment.

各デバイスでは、プロビジョニングの間に、派生デバイス キーと一意の登録 ID を使用して、登録で対称キーの構成証明が実行されます。Each device uses its derived device key with your unique registration ID to perform symmetric key attestation with the enrollment during provisioning. デバイス キーを生成するには、DPS 登録からコピーしたキーを使用して、デバイスに対する一意の登録 ID の HMAC-SHA256 を計算し、結果を Base64 形式に変換します。To generate the device key, use the key you copied from your DPS enrollment to compute an HMAC-SHA256 of the unique registration ID for the device and convert the result into Base64 format.

デバイス コードには、登録の主キーやセカンダリ キーを含めないでください。Do not include your enrollment's primary or secondary key in your device code.

Linux ワークステーションLinux workstations

Linux ワークステーションを使用している場合は、次の例に示すように、openssl を使用して派生デバイス キーを生成することができます。If you are using a Linux workstation, you can use openssl to generate your derived device key as shown in the following example.

KEY の値を、前に書き留めた主キーで置き換えます。Replace the value of KEY with the Primary Key you noted earlier.

REG_ID の値をデバイスの登録 ID に置き換えます。Replace the value of REG_ID with your device's registration ID.


keybytes=$(echo $KEY | base64 --decode | xxd -p -u -c 1000)
echo -n $REG_ID | openssl sha256 -mac HMAC -macopt hexkey:$keybytes -binary | base64

Windows ベースのワークステーションWindows-based workstations

Windows ベースのワークステーションを使用している場合は、次の例に示すように、PowerShell を使用して派生デバイス キーを生成することができます。If you are using a Windows-based workstation, you can use PowerShell to generate your derived device key as shown in the following example.

KEY の値を、前に書き留めた主キーで置き換えます。Replace the value of KEY with the Primary Key you noted earlier.

REG_ID の値をデバイスの登録 ID に置き換えます。Replace the value of REG_ID with your device's registration ID.


$hmacsha256 = New-Object System.Security.Cryptography.HMACSHA256
$hmacsha256.key = [Convert]::FromBase64String($KEY)
$sig = $hmacsha256.ComputeHash([Text.Encoding]::ASCII.GetBytes($REG_ID))
$derivedkey = [Convert]::ToBase64String($sig)
echo "`n$derivedkey`n"

IoT Edge ランタイムをインストールするInstall the IoT Edge runtime

IoT Edge ランタイムはすべての IoT Edge デバイスに展開されます。The IoT Edge runtime is deployed on all IoT Edge devices. そのコンポーネントはコンテナー内で実行されるため、デバイスに追加のコンテナーを展開して、Edge でコードを実行できるようにすることができます。Its components run in containers, and allow you to deploy additional containers to the device so that you can run code at the edge.

デバイスをプロビジョニングする際には、次の情報が必要になります。You'll need the following information when provisioning your device:

  • DPS の ID スコープThe DPS ID Scope value
  • 作成したデバイス登録 IDThe device Registration ID you created
  • DPS の登録からコピーしたプライマリ キーThe Primary Key you copied from the DPS enrollment


グループ登録の場合、DPS の登録キーではなく、各デバイスの派生キーが必要となります。For group enrollments, you need each device's derived key rather than the DPS enrollment key.

Linux デバイスLinux device

デバイスのアーキテクチャに応じた指示に従います。Follow the instructions for your device's architecture. IoT Edge ランタイムの構成が、手動プロビジョニングではなく、自動プロビジョニングになっていることを確認してください。Make sure to configure the IoT Edge runtime for automatic, not manual, provisioning.

Linux に Azure IoT Edge ランタイムをインストールするInstall the Azure IoT Edge runtime on Linux

対称キーのプロビジョニングに関する構成ファイル内のセクションは次のようになります。The section in the configuration file for symmetric key provisioning looks like this:

# DPS symmetric key provisioning configuration
   source: "dps"
   global_endpoint: "https://global.azure-devices-provisioning.net"
   scope_id: "<SCOPE_ID>"
      method: "symmetric_key"
      registration_id: "<REGISTRATION_ID>"
      symmetric_key: "<SYMMETRIC_KEY>"

<SCOPE_ID><REGISTRATION_ID>、および <SYMMETRIC_KEY> のプレースホルダー値を、前に収集したデータに置き換えます。Replace the placeholder values for <SCOPE_ID>, <REGISTRATION_ID>, and <SYMMETRIC_KEY> with the data you collected earlier. provisioning: の行に先行する空白文字がなく、入れ子になった項目が 2 つの空白でインデントされていることを確認します。Make sure the provisioning: line has no preceding whitespace and that nested items are indented by two spaces.

Windows デバイスWindows device

派生デバイスキーを生成したデバイスに IoT Edge ランタイムをインストールします。Install the IoT Edge runtime on the device for which you generated a derived device key. IoT Edge ランタイムを、手動プロビジョニングではなく、自動プロビジョニング用に構成します。You'll configure the IoT Edge runtime for automatic, not manual, provisioning.

Windows での IoT Edge のインストールの詳細については、コンテナーの管理や IoT Edge の更新などのタスクに関する前提条件や手順を含めて、「Windows に Azure IoT Edge ランタイムをインストールする」を参照してください。For more detailed information about installing IoT Edge on Windows, including prerequisites and instructions for tasks like managing containers and updating IoT Edge, see Install the Azure IoT Edge runtime on Windows.

  1. 管理者モードで PowerShell ウィンドウを開きます。Open a PowerShell window in administrator mode. IoT Edge をインストールするときは、PowerShell (x86) ではなく、PowerShell の AMD64 セッションを必ず使用してください。Be sure to use an AMD64 session of PowerShell when installing IoT Edge, not PowerShell (x86).

  2. Deploy-IoTEdge コマンドを使用して、ご使用の Windows コンピューターがサポートされているバージョンであることを確認し、コンテナー機能をオンに設定した後、moby ランタイムと IoT Edge ランタイムをダウンロードします。The Deploy-IoTEdge command checks that your Windows machine is on a supported version, turns on the containers feature, and then downloads the moby runtime and the IoT Edge runtime. コマンドの既定値では Windows コンテナーが使用されます。The command defaults to using Windows containers.

    . {Invoke-WebRequest -useb https://aka.ms/iotedge-win} | Invoke-Expression; `
  3. この時点で、IoT Core デバイスが自動的に再起動することがあります。At this point, IoT Core devices may restart automatically. その他の Windows 10 または Windows Server デバイスでは、再起動が求められることがあります。Other Windows 10 or Windows Server devices may prompt you to restart. その場合、デバイスをすぐに再起動してください。If so, restart your device now. デバイスが起動されたら、管理者として PowerShell を再実行します。Once your device is ready, run PowerShell as an administrator again.

  4. Initialize-IoTEdge コマンドを使用して、お使いのマシンに IoT Edge ランタイムを構成します。The Initialize-IoTEdge command configures the IoT Edge runtime on your machine. 自動プロビジョニングを使用するために -Dps フラグを使用する場合を除き、このコマンドでは、Windows コンテナーを使用した手動プロビジョニングが既定で設定されます。The command defaults to manual provisioning with Windows containers unless you use the -Dps flag to use automatic provisioning.

    {scope_id}{registration_id}、および {symmetric_key} のプレースホルダー値を、前に収集したデータに置き換えます。Replace the placeholder values for {scope_id}, {registration_id}, and {symmetric_key} with the data you collected earlier.

    . {Invoke-WebRequest -useb https://aka.ms/iotedge-win} | Invoke-Expression; `
    Initialize-IoTEdge -Dps -ScopeId {scope ID} -RegistrationId {registration ID} -SymmetricKey {symmetric key}

インストールの成功を確認するVerify successful installation

ランタイムが正常に起動されたら、IoT Hub にアクセスし、デバイスに IoT Edge モジュールを展開できます。If the runtime started successfully, you can go into your IoT Hub and start deploying IoT Edge modules to your device. ランタイムが正常にインストールされ、起動されたことを確認するには、デバイスで次のコマンドを使用します。Use the following commands on your device to verify that the runtime installed and started successfully.

Linux デバイスLinux device

IoT Edge サービスの状態を確認します。Check the status of the IoT Edge service.

systemctl status iotedge

サービス ログを調べます。Examine service logs.

journalctl -u iotedge --no-pager --no-full

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

iotedge list

Windows デバイスWindows device

IoT Edge サービスの状態を確認します。Check the status of the IoT Edge service.

Get-Service iotedge

サービス ログを調べます。Examine service logs.

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

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

iotedge list

Device Provisioning Service で作成した個々の登録が使用されたことを確認できます。You can verify that the individual enrollment that you created in Device Provisioning Service was used. Azure portal で Device Provisioning Service インスタンスに移動します。Navigate to your Device Provisioning Service instance in the Azure portal. 作成した個々の登録の詳細を開きます。Open the enrollment details for the individual enrollment that you created. 登録の状態が割り当てられており、デバイス ID が表示されています。Notice that the status of the enrollment is assigned and the device ID is listed.

次のステップNext steps

Device Provisioning Service の登録プロセスでは、新しいデバイスをプロビジョニングするときに、デバイス ID とデバイス ツイン タグを同時に設定できます。The Device Provisioning Service enrollment process lets you set the device ID and device twin tags at the same time as you provision the new device. これらの値を使用して、個々のデバイスまたはデバイス グループをデバイスの自動管理で使用できます。You can use those values to target individual devices or groups of devices using automatic device management. 使用方法については、「Azure Portal を使用した大規模な IoT Edge モジュールの展開と監視」または「Azure CLI を使用した大規模な IoT Edge モジュールの展開と監視」を参照してください。Learn how to Deploy and monitor IoT Edge modules at scale using the Azure portal or using Azure CLI.