対称キーを使用して Linux で大規模に IoT Edge デバイスを作成およびプロビジョニングする

適用対象:IoT Edge 1.5 のチェックマーク IoT Edge 1.5 IoT Edge 1.4 チェックマーク IoT Edge 1.4

重要

IoT Edge 1.5 LTS および IoT Edge 1.4 LTS がサポートされているリリースです。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日にサポートが終了します。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。

この記事では、対称キーを使用して 1 つ以上の Linux IoT Edge デバイスを自動プロビジョニングするエンド ツー エンドの手順について説明します。 Azure IoT Edge デバイスは、Azure IoT Hub Device Provisioning Service (DPS) を使用して自動プロビジョニングできます。 自動プロビジョニングの処理に慣れていない場合は、プロビジョニングの概要を確認してから先に進んでください。

タスクは次のとおりです。

  1. 単一のデバイスの個別登録を作成するか、一連のデバイスに対してグループ登録を作成する。
  2. IoT Edge ランタイムをインストールし、IoT Hub に接続する。

ヒント

簡素化されたエクスペリエンスのために、Azure IoT Edge 構成ツールをお試しください。 現在パブリック プレビュー中のこのコマンド ライン ツールは、デバイスに IoT Edge をインストールし、DPS と対称キーの構成証明を使用してプロビジョニングします。

対称キーの構成証明は、デバイス プロビジョニング サービス インスタンスを使用してデバイスを認証する簡単なアプローチです。 この構成証明の方法では、初めてデバイスのプロビジョニングを行う開発者または厳密なセキュリティ要件がない開発者に対して、"Hello world" エクスペリエンスを提示します。 TPM または X.509 証明書を使用するデバイス構成証明は、より安全であり、さらに厳格なセキュリティ要件に対して使用する必要があります。

前提条件

クラウド リソース

デバイスの要件

IoT Edge デバイスとなる物理デバイスまたは仮想 Linux デバイス。

各デバイスを識別するために、"一意の" 登録 ID を定義する必要があります。 デバイスの MAC アドレス、シリアル番号、または何らかの固有の情報を使用できます。 この例では、MAC アドレスとシリアル番号の組み合わせを使用して、次のような登録 ID の文字列を形成します: sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6。 有効な文字は、小文字の英字、数字、ダッシュ (-) です。

DPS の登録を作成する

DPS を介して 1 つ以上のデバイスをプロビジョニングする登録を作成します。

単一の IoT Edge デバイスをプロビジョニングする方法を求めている場合は、個別の登録を作成します。 複数のデバイスをプロビジョニングする必要がある場合は、DPS グループ登録を作成する手順に従います。

DPS 内に登録を作成するときに、デバイス ツインの初期状態を宣言する機会があります。 デバイス ツインでは、ソリューションで必要な任意のメトリック (リージョン、環境、場所、デバイスの種類など) によってデバイスをグループ化するためのタグを設定できます。 これらのタグは、自動展開を作成するために使用されます。

デバイス プロビジョニング サービスでの登録の詳細については、デバイス登録の管理方法に関するページをご覧ください。

DPS 個別登録を作成する

ヒント

この記事の手順は Azure portal 向けですが、Azure CLI を使用して個別登録を作成することもできます。 詳細については、az iot dps enrollment を参照してください。 この CLI コマンドの一部として、edge-enabled フラグを使用して、登録の対象が IoT Edge デバイスであることを指定します。

  1. Azure portal で、IoT Hub Device Provisioning Service のインスタンスに移動します。

  2. [設定] の下の [登録の管理] を選択します。

  3. [Add individual enrollment]\(個別登録の追加\) を選択し、登録を構成する次の手順を完了します。

    1. [メカニズム][対称キー] を選択します。

    2. デバイスの一意の登録 ID を指定します。

    3. 必要に応じて、デバイスの IoT Hub デバイス ID を指定します。 デバイス ID を使用して、個々のデバイスをモジュール展開のターゲットにすることができます。 デバイス ID を指定しなかった場合は、登録 ID が使用されます。

    4. [True] を選択して、その登録が IoT Edge デバイス用のものであることを宣言します。

    5. 必要に応じて、[デバイス ツインの初期状態] にタグ値を追加します。 タグを使用して、デバイス グループをモジュール展開のターゲットにすることができます。 次に例を示します。

      {
         "tags": {
            "environment": "test"
         },
         "properties": {
            "desired": {}
         }
      }
      
    6. [保存] を選択します。

  4. IoT Edge ランタイムのインストール時に使用する個別登録の主キーの値をコピーします。

これで、このデバイスの登録が存在しているので、IoT Edge ランタイムによってインストール時にデバイスを自動的にプロビジョニングできます。

IoT Edge をインストールする

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

次のコマンドを実行してパッケージ リポジトリを追加し、信頼できるキーの一覧に Microsoft パッケージ署名キーを追加します。

重要

2022 年 6 月 30 日に、レベル 1 OS サポート リストから Raspberry Pi OS Stretch が廃止されました。 潜在的なセキュリティの脆弱性を回避するために、ホスト OS を Bullseye に更新してください。

インストールは、数個のコマンドで実行できます。 ターミナルを開き、次のコマンドを実行します。

  • 22.04:

    wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    
  • 20.04:

    wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    

オペレーティング システムのバージョンの詳細については、「Azure IoT Edge でサポートされているプラットフォーム」を参照してください。

Note

Azure IoT Edge ソフトウェア パッケージには、パッケージ内にあるライセンス条項 (usr/share/doc/{package-name} または LICENSE ディレクトリ) が適用されます。 パッケージを使用する前に、ライセンス条項をお読みください。 インストールし、パッケージを使用すると、これらの条項に同意したものと見なされます。 ライセンス条項に同意しない場合は、そのパッケージを使用しないでください。

コンテナー エンジンをインストールする

Azure IoT Edge は、OCI と互換性のあるコンテナー ランタイムに依存します。 運用環境のシナリオでは、Moby エンジンを使用することをお勧めします。 Moby エンジンは、IoT Edge で公式にサポートされている唯一のコンテナー エンジンです。 Docker CE/EE コンテナー イメージは、Moby ランタイムと互換性があります。

Moby エンジンをインストールします。

sudo apt-get update; \
  sudo apt-get install moby-engine

既定では、コンテナー エンジンによってコンテナー ログ サイズの制限は設定されません。 これにより、時間の経過と共に、デバイスがログでいっぱいになり、ディスク容量が不足する可能性があります。 ただし、ローカルに表示するようにログを構成することはできますが、省略しても構いません。 ログ構成の詳細については、「運用環境デプロイのチェックリスト」を参照してください。

次の手順では、ログ メカニズムとして local ログ ドライバーを使用するようにコンテナーを構成する方法を示します。

  1. 既存の Docker デーモンの構成ファイルを作成または編集します

    sudo nano /etc/docker/daemon.json
    
  2. 例で示すように、既定のログ ドライバーを local ログ ドライバーに設定します。

       {
          "log-driver": "local"
       }
    
  3. コンテナー エンジンを再起動して、変更を有効にします。

    sudo systemctl restart docker
    

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

IoT Edge サービスによって、IoT Edge デバイス上にセキュリティ標準が提供されて維持されます。 サービスは起動のたびに開始され、IoT Edge ランタイムの残りの部分を開始することでデバイスをブートストラップします。

Note

バージョン 1.2 以降では、IoT ID サービスにより、IoT Edge および IoT Hub と通信する必要があるその他のデバイス コンポーネントの ID プロビジョニングと管理が処理されます。

このセクションの手順では、インターネットに接続されているデバイスに最新バージョンの IoT Edge をインストールする一般的なプロセスが示されています。 プレリリース バージョンなどの特定のバージョンをインストールする必要がある場合、またはオフラインの間にインストールする必要がある場合は、この記事で後述する「オフラインまたは特定のバージョンのインストール」の手順に従ってください。

ヒント

以前のバージョンを実行している IoT Edge デバイスが既にあり、最新のリリースにアップグレードする場合は、「IoT Edge セキュリティ デーモンおよびランタイムの更新」の手順を使用します。 それ以降のバージョンは、以前のバージョンの IoT Edge と十分に異なるため、アップグレードには特定の手順が必要です。

(まだ最新の状態でない場合) 最新バージョンの IoT Edge と IoT ID サービス パッケージをインストールします。

  • 22.04:

    sudo apt-get update; \
       sudo apt-get install aziot-edge
    
  • 20.04:

    sudo apt-get update; \
       sudo apt-get install aziot-edge defender-iot-micro-agent-edge
    

オプションの defender-iot-micro-agent-edge パッケージには、セキュリティ態勢管理、脆弱性、脅威検出、フリート管理などのエンドポイントの可視性を提供する Microsoft Defender for IoT セキュリティ マイクロ エージェントが含まれており、IoT Edge デバイスのセキュリティ保護に役立ちます。 Edge デバイスのセキュリティ監視とセキュリティ強化を有効にするには、Edge エージェントを使ってマイクロ エージェントをインストールすることをお勧めします。 Microsoft Defender for IoT の詳細については、「デバイス ビルダー向け Microsoft Defender for IoT とは」を参照してください。

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

ランタイムがデバイスにインストールされたら、デバイス プロビジョニング サービスと IoT Hub に接続するための情報を使用してデバイスを構成します。

次の情報を用意しておきます。

  • DPS の ID スコープ
  • 作成したデバイス登録 ID
  • 個別登録の主キー、またはグループ登録を使用するデバイスの派生キーのいずれか。

IoT Edge のインストールの一部として提供されるテンプレート ファイルに基づいて、デバイスの構成ファイルを作成します。

sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml

IoT Edge デバイスで構成ファイルを開きます。

sudo nano /etc/aziot/config.toml
  1. ファイルのプロビジョニング セクションを見つけます。 対称キーによる DPS のプロビジョニング行をコメント解除し、他にもプロビジョニング行があれば、それらもコメント アウトするようにします。

    # DPS provisioning with symmetric key
    [provisioning]
    source = "dps"
    global_endpoint = "https://global.azure-devices-provisioning.net"
    id_scope = "PASTE_YOUR_SCOPE_ID_HERE"
    
    # Uncomment to send a custom payload during DPS registration
    # payload = { uri = "PATH_TO_JSON_FILE" }
    
    [provisioning.attestation]
    method = "symmetric_key"
    registration_id = "PASTE_YOUR_REGISTRATION_ID_HERE"
    
    symmetric_key = { value = "PASTE_YOUR_PRIMARY_KEY_OR_DERIVED_KEY_HERE" }
    
    # auto_reprovisioning_mode = Dynamic
    
  2. id_scoperegistration_idsymmetric_key の値を DPS およびデバイス情報で更新します。

    対称キー パラメーターは、インライン キー、ファイル URI、または PKCS#11 URI の値を受け入れることができます。 使用している形式に基づいて、1 つの対称キー行だけをコメント解除します。 インライン キーを使うときは、例のように base64 でエンコードされたキーを使います。 ファイル URI を使うときは、ファイルにキーの生バイトが含まれている必要があります。

    任意の PKCS#11 URI を使用する場合は、構成ファイルで PKCS#11 セクションを見つけ、PKCS#11 構成に関する情報を提供します。

    プロビジョニング構成設定の詳細については、「IoT Edge デバイスの設定を構成する」を参照してください。

  3. 必要に応じて、ファイルの自動再プロビジョニング モード セクションを見つけます。 auto_reprovisioning_mode パラメーターを使用して、デバイスの再プロビジョニング動作を構成します。 動的 - 1 つの IoT Hub から別の IoT Hub にデバイスが移動されたことがデバイスで検出されたときに再プロビジョニングします。 これが既定です。 AlwaysOnStartup - デバイスが再起動されたとき、またはクラッシュによってデーモンが再起動されたときに再プロビジョニングします。 OnErrorOnly - デバイスの再プロビジョニングを自動的にトリガーしません。 接続エラーが原因で ID プロビジョニング中にデバイスが IoT Hub に接続できない場合、各モードには暗黙的なデバイス再プロビジョニング フォールバックがあります。 詳細については、「IoT Hub デバイスの再プロビジョニングの概念」を参照してください。

  4. 必要に応じて、payload パラメーターのコメントを解除して、ローカル JSON ファイルへのパスを指定します。 デバイスが登録されると、ファイルの内容が追加データとして DPS に送信されます。 これは、カスタム割り当てに役立ちます。 たとえば、人間の介入なしに IoT プラグ アンド プレイモデル ID に基づいてデバイスを割り当てる場合などです。

  5. ファイルを保存して閉じます。

  6. デバイスで行った構成の変更を適用します。

    sudo iotedge config apply
    

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

ランタイムが正常に起動されたら、IoT Hub にアクセスし、デバイスに IoT Edge モジュールを展開できます。

デバイス プロビジョニング サービスで作成した個々の登録が使用されたことを確認できます。 Azure portal でデバイス プロビジョニング サービス インスタンスに移動します。 作成した個々の登録の詳細を開きます。 登録の状態が割り当てられており、デバイス ID が表示されています。

IoT Edge が正常にインストールされ、起動されたことを確認するには、デバイスで次のコマンドを使用します。

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

sudo iotedge system status

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

sudo iotedge system logs

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

sudo iotedge list

次のステップ

デバイス プロビジョニング サービスの登録プロセスでは、新しいデバイスをプロビジョニングするときに、デバイス ID とデバイス ツイン タグを同時に設定できます。 これらの値を使用して、個々のデバイスまたはデバイス グループをデバイスの自動管理で使用できます。 使用方法については、「Azure Portal を使用した大規模な IoT Edge モジュールの展開と監視」または「Azure CLI を使用した大規模な IoT Edge モジュールの展開と監視」を参照してください。