次の方法で共有


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

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

重要

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

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

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 証明書を使用する場合は、「x.509 証明書を使用して Linux で IoT Edge デバイスを作成およびプロビジョニングする」を参照してください。

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

前提条件

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

デバイス管理ツール

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

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

デバイスの要件

X64、ARM32、または ARM64 の Linux デバイス。

Microsoft では、さまざまなオペレーティング システム用のインストール パッケージを公開しています。

運用シナリオ向けに現在サポートされているオペレーティング システムに関する最新の情報については、「Azure IoT Edge のサポートされるシステム」を参照してください。

デバイスを登録する

デバイスを登録するには、好みに応じて 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 デバイス] のチェック ボックスをオンにします。
    • 認証の種類として [対称キー] を選択します。
    • 既定の設定を使用して認証キーを自動生成し、新しいデバイスをハブに接続します。
  4. [保存] を選択します。

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

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

対称キー認証を使用するデバイスでは、IoT Edge ランタイムのインストールとプロビジョニングを完了するために接続文字列が必要です。

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

Azure portal、IoT Hub でデバイスを表示する方法のスクリーンショット。

デバイスを設定する準備ができたら、物理デバイスを IoT ハブ内でのその ID にリンクする接続文字列が必要です。

対称キーを使用して認証を行うデバイスでは、接続文字列をポータルでコピーできます。

  1. ポータルの [デバイス] ページで、一覧から IoT Edge デバイス ID を選択します。
  2. [プライマリ接続文字列] または [セカンダリ接続文字列] のどちらかの値をコピーします。

IoT Edge をインストールする

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

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

重要

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

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

  • 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
    
  • 18.04:

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

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

Moby エンジンが正常にインストールされたら、ログ記録メカニズムとして local ログ ドライバー を使用するように構成します。 ログ構成の詳細については、「運用環境デプロイのチェックリスト」を参照してください。

  • /etc/docker/daemon.jsonで Docker デーモンの構成ファイルを作成または開きます。

  • 次の例に示すように、既定のログ ドライバーを local ログ ドライバーに設定します。

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

    sudo systemctl restart docker
    

    ヒント

    Moby コンテナー エンジンをインストールするときにエラーが発生する場合は、Linux カーネルに Moby との互換性があることを確認します。 埋め込みデバイスの一部の製造元からは、コンテナー エンジンとの互換性のために必要な機能を備えていないカスタム Linux カーネルを含むデバイス イメージが提供されています。 Moby から提供されている check-config スクリプトを使用する次のコマンドを実行して、カーネルの構成を確認します。

    curl -ssl https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh -o check-config.sh
    chmod +x check-config.sh
    ./check-config.sh
    

    スクリプトの出力で、Generally NecessaryNetwork Drivers の下のすべての項目が有効になっていることを確認します。 機能が欠けている場合は、カーネルをソースから再構築し、カーネルの適切な .config に含める関連モジュールを選択することで、それらを有効にします。同様に、defconfigmenuconfig などのカーネル構成ジェネレーターを使用している場合は、それぞれの機能を見つけて有効にし、ご自分のカーネルを適宜再構築します。 新たに変更されたカーネルを展開したら、check-config スクリプトをもう一度実行して、必要なすべての機能が正常に有効になっていることを確認します。

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

IoT Edge セキュリティ デーモンは、IoT Edge デバイスのセキュリティ標準を提供し、維持します。 デーモンは、すべてのブートで起動し、残りの IoT Edge ランタイムを起動してデバイスをブートストラップします。

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

libiothsm-std パッケージと共に IoT Edge バージョン 1.1.* をインストールします。

sudo apt-get update; \
  sudo apt-get install iotedge

IoT Edge バージョン 1.1 は、IoT Edge の長期的なサポート ブランチです。 古いバージョンを実行している場合は、古いバージョンがサポートされなくなったので、最新のパッチをインストールまたは更新することをお勧めします。

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

コンテナー エンジンと IoT Edge ランタイムがデバイスにインストールされたので、次の手順として、クラウド ID と認証情報を使用してデバイスを設定する準備が整いました。

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

sudo nano /etc/iotedge/config.yaml

ファイルのプロビジョニング構成を見つけ、接続文字列の セクションを使用して 手動プロビジョニング構成のコメントを解除します (まだコメント解除されていない場合)。

# Manual provisioning configuration using a connection string
provisioning:
source: "manual"
device_connection_string: "ADD_DEVICE_CONNECTION_STRING_HERE"

IoT Edge デバイスからの接続文字列を使用して device_connection_string の値を更新します。 他のプロビジョニング セクションがコメント アウトされていることを確認します。プロビジョニング: 行に先行する空白がなく、入れ子になった項目が 2 つのスペースでインデントされていることを確認します。

クリップボードの内容を Nano Shift+Right Click に貼り付けるか、Shift+Insertを押します。

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

CTRL + XYEnter

構成ファイルにプロビジョニング情報を入力したら、デーモンを再起動します。

sudo systemctl restart iotedge

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

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

ヒント

iotedge コマンドの実行には、昇格された特権が必要です。 IoT Edge ランタイムのインストール後に初めてマシンにサインインし直すと、アクセス許可は自動的に更新されます。 それまでは、コマンドの前に sudo を使用します。

IoT Edge システム サービスが実行されていることを確認します。

sudo systemctl status iotedge

サービスのトラブルシューティングが必要な場合は、サービス ログを取得します。

journalctl -u iotedge

check ツールを使用して、デバイスの構成と接続の状態を確認します。

sudo iotedge check

ヒント

アクセス許可が更新された後でも、必ず sudo を使用してチェック ツールを実行してください。 このツールには、構成状態を確認するために、config ファイルにアクセスするための昇格された特権が必要です。

新しくプロビジョニングされたデバイスでは、IoT Edge ハブに関連するエラーが表示される場合があります。

× 運用環境の準備: Edge ハブのストレージ ディレクトリがホスト ファイル システムに保持されています - エラー

edgeHub コンテナーの現在の状態を確認できませんでした

このエラーは、IoT Edge ハブ モジュールが実行されていないために、新しくプロビジョニングされたデバイスで発生します。 このエラーを解決するには、IoT Hub でデバイスのモジュールを設定し、デプロイを作成します。 デバイスのデプロイを作成することで、IoT Edge ハブ モジュールを含むモジュールがデバイス上で開始されます。

IoT Edge デバイス上で実行されているすべてのモジュールを表示します。 初めてサービスが開始されると、edgeAgent モジュールが実行されていることだけを確認できます。 edgeAgent モジュールが既定で実行され、デバイスにデプロイする追加モジュールのインストールと起動を支援します。

sudo iotedge list

新しい IoT Edge デバイスを作成すると、Azure portal で状態コード 417 -- The device's deployment configuration is not set が表示されます。 この状態は正常であり、デバイスでモジュールのデプロイを受け取る準備ができていることを意味します。

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

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

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

パッケージ マネージャーで使用できない特定のバージョンの Azure IoT Edge ランタイムをインストールする場合は、このセクションの手順を使用します。 Microsoft パッケージのリストには、最近のバージョンとそのサブバージョンの限られたセットしか含まれていないので、これらの手順は、古いバージョンまたはリリース候補バージョンをインストールするユーザーが対象となります。

curl コマンドを使用すると、IoT Edge GitHub リポジトリから直接、コンポーネント ファイルをターゲットにすることができます。

  1. Azure IoT Edge リリースに移動し、対象とするリリース バージョンを見つけます。

  2. そのバージョンの [Assets] セクションを展開します。

  3. すべてのリリースには、IoT Edge セキュリティ デーモンと hsmlib 用の新しいファイルが必要です。 オフライン デバイスに IoT Edge をインストールする場合は、事前にこれらのファイルをダウンロードします。 それ以外の場合は、以下のコマンドを使用して、これらのコンポーネントを更新します。

    1. IoT Edge デバイスのアーキテクチャに一致する libiothsm-std ファイルを見つけます。 ファイル リンクを右クリックし、リンクのアドレスをコピーします。

    2. 次のコマンドでコピーしたリンクを使用して、そのバージョンの hsmlib をインストールします。

      curl -L <libiothsm-std_link> -o libiothsm-std.deb && sudo apt-get install ./libiothsm-std.deb
      
    3. IoT Edge デバイスのアーキテクチャに一致する iotedge ファイルを見つけます。 ファイル リンクを右クリックし、リンクのアドレスをコピーします。

    4. 次のコマンドでコピーしたリンクを使用して、そのバージョンの IoT Edge セキュリティ デーモンをインストールします。

      curl -L iotedge_link_here -o iotedge.deb && sudo apt-get install ./iotedge.deb
      

コンテナー エンジンと IoT Edge ランタイムがデバイスにインストールされたので、次のステップに進む準備が整いました。次のステップでは、デバイスをクラウド ID でプロビジョニングします。

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

デバイスから IoT Edge のインストールを削除する必要がある場合は、次のコマンドを使用します。

IoT Edge ランタイムを削除します。

sudo apt-get autoremove iotedge

IoT Edge ランタイムが削除されると、作成したコンテナーは停止されますが、デバイスには残っています。 すべてのコンテナーを表示して、どのコンテナーが残っているかを確認します。

sudo docker ps -a

2 つのランタイム コンテナーを含め、デバイスからコンテナーを削除します。

sudo docker rm -f <container name>

最後に、デバイスからコンテナー ランタイムを削除します。

sudo apt-get autoremove --purge moby-engine