対称キーを使用して Linux で IoT Edge デバイスを作成およびプロビジョニングする
適用対象: IoT Edge 1.4
この記事では、Linux IoT Edge デバイスの登録とプロビジョニングに関するエンドツーエンドの手順について説明します。これには、IoT Edgeのインストールが含まれます。
IoT ハブに接続する各デバイスには、クラウドからデバイスへの通信またはデバイス間の通信を追跡するために使用されるデバイス 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 (IoT Edge ランタイムとも呼ばれます) をデバイスにインストールする方法について説明します。 デバイスを登録してインストールする前に、Azure CLI などのデバイス管理ツールとデバイス要件があることを確認してください。
デバイス管理ツール
デバイスを登録する手順には、Azure portal、Visual Studio Code、または Azure CLI を使用できます。 各ユーティリティには、独自の前提条件があります。または、インストールが必要な場合があります。
Azure サブスクリプション内の無料または標準の IoT ハブ。
デバイスの要件
X64、ARM32、または ARM64 の Linux デバイス。
Microsoft では、さまざまなオペレーティング システム用のインストール パッケージを公開しています。
運用シナリオ向けに現在サポートされているオペレーティング システムに関する最新の情報については、「Azure IoT Edge のサポートされるシステム」を参照してください。
Visual Studio Code 拡張機能
Visual Studio Code を使用している場合は、デバイスの作成と管理プロセスを容易にする役に立つ Azure IoT 拡張機能があります。
Azure IoT Edge と Azure IoT Hub の両方の拡張機能をインストールします。
デバイスを登録する
デバイスを登録するには、好みに応じて Azure portal、Visual Studio Code、または Azure CLI を使用できます。
Azure portal の IoT Hubで、IoT Edge デバイスは、Edge 対応ではない IoT デバイスとは別に作成および管理されます。
Azure Portal にサインインし、IoT Hub に移動します。
左側のウィンドウで、メニューから [デバイス] を選択し、[デバイスを追加する] を選択します。
[デバイスの作成] ページで、次の情報を指定します。
- 説明的なデバイス ID を作成します (すべて
my-edge-device-1
小文字)。 後で使用するので、このデバイス ID をコピーします。 - [IoT Edge デバイス] のチェック ボックスをオンにします。
- 認証の種類として [対称キー] を選択します。
- 既定の設定を使用して認証キーを自動生成し、新しいデバイスをハブに接続します。
- 説明的なデバイス ID を作成します (すべて
[保存] を選択します。
IoT ハブに新しいデバイスが表示されます。
IoT Hubにデバイスが登録されたので、次の手順でIoT Edge ランタイムのインストールとプロビジョニングを完了するために使用されるプロビジョニング情報を取得できます。
登録済みデバイスを表示し、プロビジョニング情報を取得する
対称キー認証を使用するデバイスでは、IoT Edge ランタイムのインストールとプロビジョニングを完了するために接続文字列が必要です。 デバイスの作成時に、IoT Edge デバイスの接続文字列が生成されます。 Visual Studio Code と Azure CLI の場合、接続文字列は JSON 出力にあります。 Azure portalを使用してデバイスを作成する場合は、デバイス自体から接続文字列を見つけることができます。 IoT ハブでデバイスを選択すると、デバイス ページに と Primary connection string
表示されます。
IoT ハブに接続するエッジ対応デバイスは、IoT ハブの [デバイス] ページに一覧表示されます。 複数のデバイスがある場合は、 Iot Edge デバイスの種類を選択して一覧をフィルター処理し、[ 適用] を選択します。
デバイスを設定する準備ができたら、物理デバイスを IoT ハブ内でのその ID にリンクする接続文字列が必要です。 対称キーを使用して認証を行うデバイスでは、接続文字列をポータルでコピーできます。 ポータルで接続文字列を検索するには:
- [デバイス] ページで、一覧からIoT Edgeデバイス ID を選択します。
- [プライマリ接続文字列] または [セカンダリ接続文字列] のどちらかの値をコピーします。 どちらのキーも機能します。
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
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サポートされているプラットフォーム」を参照してください。
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
既定では、Moby コンテナー エンジンでは、コンテナー ログ サイズの制限が設定されません。 これにより、時間の経過と共に、デバイスがログでいっぱいになり、ディスク容量が不足する可能性があります。 ただし、ローカルに表示するようにログを構成することはできますが、オプションです。 ログ構成の詳細については、「運用環境デプロイのチェックリスト」を参照してください。
次の手順では、ログ 記録メカニズムとしてログ ドライバーを使用local
するようにコンテナーを構成する方法を示します。
(ファイルがまだ存在しない場合) を作成するか、 で Docker デーモンの構成ファイルを 開きます
/etc/docker/daemon.json
。次の例に示すように、既定のログ ドライバーを
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 Necessary
とNetwork Drivers
の下のすべての項目が有効になっていることを確認します。 機能が欠けている場合は、カーネルをソースから再構築し、カーネルの適切な .config に含める関連モジュールを選択することで、それらを有効にします。同様に、defconfig
やmenuconfig
などのカーネル構成ジェネレーターを使用している場合は、それぞれの機能を見つけて有効にし、ご自分のカーネルを適宜再構築します。 新たに変更されたカーネルを展開したら、check-config スクリプトをもう一度実行して、必要なすべての機能が正常に有効になっていることを確認します。
IoT Edge ランタイムをインストールする
IoT Edge サービスによって、IoT Edge デバイス上にセキュリティ標準が提供されて維持されます。 サービスは起動のたびに開始され、IoT Edge ランタイムの残りの部分を開始することでデバイスをブートストラップします。
注意
バージョン 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 または 18.04:
sudo apt-get update; \ sudo apt-get install aziot-edge defender-iot-micro-agent-edge
オプションdefender-iot-micro-agent-edge
のパッケージには、IoT セキュリティ マイクロ エージェント用のMicrosoft Defenderが含まれており、セキュリティ体制の管理、脆弱性、脅威検出、フリート管理などをエンドポイントで可視化し、IoT Edge デバイスのセキュリティ保護に役立ちます。 Edge デバイスのセキュリティ監視とセキュリティ強化を有効にするには、Edge エージェントを使ってマイクロ エージェントをインストールすることをお勧めします。 Microsoft Defender for IoT の詳細については、「デバイス ビルダー向け Microsoft Defender for IoT とは」を参照してください。
クラウド ID を使用してデバイスをプロビジョニングする
コンテナー エンジンとIoT Edge ランタイムがデバイスにインストールされたので、クラウド ID と認証情報を使用してデバイスを設定する準備ができました。
次のコマンドで、対称キー認証を使用する IoT Edge デバイスを簡単に構成できます。
sudo iotedge config mp --connection-string 'PASTE_DEVICE_CONNECTION_STRING_HERE'
このコマンドは iotedge config mp
、デバイスに構成ファイルを作成し、構成ファイルに接続文字列を入力します。
構成の変更を適用します。
sudo iotedge config apply
構成ファイルを表示するには、次のように開きます。
sudo nano /etc/aziot/config.toml
モジュールのデプロイ
IoT Edge モジュールをデプロイするには、Azure portalで IoT ハブに移動し、次の手順を実行します。
[IoT Hub] メニューから [デバイス] を選択します。
デバイスを選択してページを開きます。
[ モジュールの設定 ] タブを選択します。
IoT Edge既定のモジュール (edgeAgent と edgeHub) をデプロイするため、このウィンドウにモジュールを追加する必要はないので、下部にある [確認と作成] を選択します。
モジュールの JSON 確認が表示されます。 [ 作成] を 選択してモジュールをデプロイします。
詳細については、「 モジュールをデプロイする」を参照してください。
構成が成功したことを確認する
IoT Edge デバイスにランタイムが正常にインストールされ、構成されていることを確認します。
ヒント
iotedge
コマンドの実行には、昇格された特権が必要です。 IoT Edge ランタイムのインストール後に初めてマシンにサインインし直すと、アクセス許可は自動的に更新されます。 それまでは、コマンドの前に sudo
を使用します。
IoT Edge システム サービスが実行されていることを確認します。
sudo iotedge system status
成功した状態の応答には、サービスが
aziot
実行中または準備完了として表示されます。サービスのトラブルシューティングが必要な場合は、サービス ログを取得します。
sudo iotedge system logs
check
ツールを使用して、デバイスの構成と接続の状態を確認します。sudo iotedge check
OK (緑)、警告 (黄色)、またはエラー (赤) を含む可能性がある応答の範囲が予想されます。
ヒント
アクセス許可が更新された後でも、必ず
sudo
を使用してチェック ツールを実行してください。 このツールには、構成状態を確認するために、config ファイルにアクセスするための昇格された特権が必要です。注意
新しくプロビジョニングされたデバイスでは、IoT Edge ハブに関連するエラーが表示される場合があります。
×運用環境の準備: Edge Hub のストレージ ディレクトリがホスト ファイル システムに保持されている - エラー: edgeHub コンテナーの現在の状態をチェックできませんでした
このエラーは、IoT Edge Hub モジュールがまだ実行されていないため、新しくプロビジョニングされたデバイスで発生します。 IoT Edge モジュールが前の手順でデプロイされていることを確認します。 デプロイでは、このエラーが解決されます。
または、状態コードが として
417 -- The device's deployment configuration is not set
表示される場合があります。 モジュールがデプロイされると、この状態が変わります。初めてサービスが開始されると、edgeAgent モジュールが実行されていることだけを確認できます。 edgeAgent モジュールが既定で実行され、デバイスにデプロイする追加モジュールのインストールと起動を支援します。
Azure portalでデバイス ページを表示して、デバイスとモジュールがデプロイされ、実行されていることを確認します。
モジュールをデプロイして実行したら、次のコマンドを使用して、デバイスまたは仮想マシンでそれらを一覧表示します。
sudo iotedge list
オフラインまたは特定のバージョンのインストール (省略可能)
このセクションの手順は、標準のインストール手順では説明されていないシナリオを対象としています。 次のような場合が含まれます。
- オフライン時のIoT Edgeのインストール
- リリース候補バージョンのインストール
パッケージ マネージャーで使用できない特定のバージョンの Azure IoT Edge ランタイムをインストールする場合は、このセクションの手順を使用します。 Microsoft パッケージのリストには、最近のバージョンとそのサブバージョンの限られたセットしか含まれていないので、これらの手順は、古いバージョンまたはリリース候補バージョンをインストールするユーザーが対象となります。
curl コマンドを使用すると、IoT Edge GitHub リポジトリから直接、コンポーネント ファイルをターゲットにすることができます。
注意
デバイスで現在 IoT Edge バージョン 1.1 以前が実行されている場合は、このセクションの手順を行う前に、IoT Edge と libiothsm-std パッケージをアンインストールします。 詳細については、「1.0 または 1.1 から最新リリースへの更新」を参照してください。
Azure IoT Edge リリースに移動し、対象とするリリース バージョンを見つけます。
そのバージョンの [Assets] セクションを展開します。
各リリースには、IoT Edge と ID サービスの新しいファイルがあります。 オフライン デバイスに IoT Edge をインストールする場合は、事前にこれらのファイルをダウンロードします。 それ以外の場合は、以下のコマンドを使用して、これらのコンポーネントを更新します。
IoT Edge デバイスのアーキテクチャに一致する aziot-identity-service ファイルを見つけます。 ファイル リンクを右クリックし、リンクのアドレスをコピーします。
コピーしたリンクを次のコマンドで使用して、そのバージョンの ID サービスをインストールします。
curl -L <identity service link> -o aziot-identity-service.deb && sudo apt-get install ./aziot-identity-service.deb
IoT Edge デバイスのアーキテクチャに対応する aziot-edge ファイルを見つけます。 ファイル リンクを右クリックし、リンクのアドレスをコピーします。
コピーしたリンクを次のコマンドで使用して、そのバージョンの IoT Edge をインストールします。
curl -L <iotedge link> -o aziot-edge.deb && sudo apt-get install ./aziot-edge.deb
これでコンテナー エンジンと IoT Edge ランタイムがデバイスにインストールされたので、次のステップに進み、クラウド ID を使用してデバイスをプロビジョニングできます。
IoT Edge をアンインストールする
デバイスから IoT Edge のインストールを削除する必要がある場合は、次のコマンドを使用します。
IoT Edge ランタイムを削除します。
sudo apt-get autoremove --purge aziot-edge
IoT Edge を再インストールし、今後同じ構成情報を使用する場合は、--purge
フラグを使用しないでください。 構成ファイルを含め、IoT Edge に関連付けられているすべてのファイルを削除する場合は、--purge
フラグを使用します。
IoT Edge ランタイムが削除されると、作成したコンテナーは停止されますが、デバイスには残っています。 すべてのコンテナーを表示して、どのコンテナーが残っているかを確認します。
sudo docker ps -a
2 つのランタイム コンテナーを含め、デバイスからコンテナーを削除します。
sudo docker rm -f <container name>
最後に、デバイスからコンテナー ランタイムを削除します。
sudo apt-get autoremove --purge moby-engine