TPM を使用して IoT Edge for Linux on Windows デバイスを大規模に作成およびプロビジョニングする
適用対象: IoT Edge 1.4
重要
サポートされているリリースは、IoT Edge 1.5 LTS と IoT Edge 1.4 です。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日にサポートが終了します。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。
この記事では、トラステッド プラットフォーム モジュール (TPM) を使用して Azure IoT Edge for Linux on Windows デバイスを自動プロビジョニングする手順について説明します。 Azure IoT Edge デバイスは、Azure IoT Hub Device Provisioning Service を使用して自動プロビジョニングできます。 自動プロビジョニングの処理に慣れていない場合は、「プロビジョニングの概要」を読んでから先に進んでください。
この記事では、次の 2 つの手法の概要を説明します。 ソリューションのアーキテクチャに基づいて、使用する手法を選択してください。
- 物理 TPM ハードウェアを使用して Linux on Windows デバイスを自動プロビジョニングします。
- シミュレートされた TPM を使用して、Linux on Windows デバイスを自動プロビジョニングします。 この手法は、テスト シナリオとしてのみお勧めします。 シミュレートされた TPM では、物理 TPM と同じセキュリティは提供されません。
タスクは次のとおりです。
- IoT Edge for Linux on Windows をインストールする。
- 自分のデバイスから TPM 情報を取得する。
- デバイスの個別登録を作成する。
- TPM 情報を使用して自分のデバイスをプロビジョニングする。
前提条件
クラウド リソース
- アクティブな IoT ハブ
- 自分の IoT ハブにリンクされた、Azure 内の IoT Hub デバイス プロビジョニング サービスのインスタンス
- デバイス プロビジョニング サービスのインスタンスをお持ちでない場合は、IoT Hub デバイス プロビジョニング サービス クイックスタートの「新しい IoT Hub デバイス プロビジョニング サービスの作成」および「IoT ハブとデバイス プロビジョニング サービスとをリンクさせる」の手順に従ってください。
- Device Provisioning Service を実行した後、概要ページから [ID スコープ] の値をコピーします。 この値は、IoT Edge ランタイムを構成するときに使用します。
デバイスの要件
以下の最小要件を備えた Windows デバイス:
システム要件
- Windows 101/11 (Pro、Enterprise、IoT Enterprise)
- Windows Server 20191/2022
1 現在のすべての累積更新プログラムがインストールされた Windows 10 および Windows Server 2019 最小ビルド 17763。
ハードウェア要件
- 最小空きメモリ容量: 1 GB
- 最小空きディスク領域:10 GB
仮想化サポート
- Windows 10 で Hyper-V を有効にします。 詳細については、「Windows 10 上に Hyper-V をインストールする」を参照してください。
- Windows サーバーで、Hyper-V ロールをインストールし、既定のネットワーク スイッチを作成します。 詳細については、「Azure IoT Edge for Linux on Windows の入れ子になった仮想化」を参照してください。
- 仮想マシンで、入れ子になった仮想化を構成します。 詳細については、入れ子になった仮想化に関するページを参照してください。
ネットワークのサポート
- Windows Server には既定のスイッチは付属していません。 EFLOW を Windows Server デバイスにデプロイする前に、仮想スイッチを作成する必要があります。 詳細については、Windows 上の Linux のために仮想スイッチを作成することに関する記事を参照してください。
- デスクトップ バージョンの Windows には、EFLOW のインストールに使用できる既定のスイッチが付属しています。 必要な場合は、独自のカスタム仮想スイッチを作成できます。
ヒント
Azure IoT Edge for Linux on Windows のデプロイで GPU アクセラレーション対応の Linux モジュールを使用する場合は、いくつかの構成オプションを検討する必要があります。
お使いの GPU のアーキテクチャに応じて適切なドライバーをインストールする必要があり、Windows Insider Program ビルドを入手することが必要な場合があります。 構成上の必要性を特定し、それらの前提条件を満たすには、「Azure IoT Edge for Linux on Windows 用の GPU アクセラレーション」を参照してください。
時間をとって、現時点で GPU アクセラレータの前提条件を満たしていることをご確認ください。 インストール中に GPU アクセラレーションを使用する場合は、インストール プロセスを再起動する必要があります。
開発者ツール
Azure IoT Edge for Linux on Windows のインストールと Linux 仮想マシンのデプロイに使用するターゲット デバイスを準備してください。
ターゲット デバイスの実行ポリシーを
AllSigned
に設定します。 現在の実行ポリシーは、管理者特権の PowerShell プロンプトで次のコマンドを使用して確認できます。Get-ExecutionPolicy -List
local machine
の実行ポリシーがAllSigned
になっていない場合は、次のようにして実行ポリシーを設定できます。Set-ExecutionPolicy -ExecutionPolicy AllSigned -Force
Azure IoT Edge for Linux on Windows PowerShell モジュールの詳細については、PowerShell 関数リファレンスを参照してください。
Note
Device Provisioning Service で TPM 構成証明を使用する場合は、TPM 2.0 が必要です。
TPM を使用する場合、グループではなく個別の Device Provisioning Service の登録のみ作成できます。
IoT Edge をインストールする
ターゲット デバイスに Azure IoT Edge for Linux on Windows をデプロイします。
Note
下記の PowerShell の手順では、IoT Edge for Linux on Windows をローカル デバイスにデプロイする方法の概要を示しています。 PowerShell を使用してリモート ターゲット デバイスにデプロイする場合は、リモート PowerShell を使用してリモート デバイスへの接続を確立し、そのデバイスでこれらのコマンドをリモートで実行することができます。
管理者特権の PowerShell セッションで、ターゲット デバイス アーキテクチャに応じて次のいずれかのコマンドを実行し、IoT Edge for Linux on Windows をダウンロードします。
X64、AMD64
$msiPath = $([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi')) $ProgressPreference = 'SilentlyContinue' Invoke-WebRequest "https://aka.ms/AzEFLOWMSI_1_4_LTS_X64" -OutFile $msiPath
ARM64
$msiPath = $([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi')) $ProgressPreference = 'SilentlyContinue' Invoke-WebRequest "https://aka.ms/AzEFLOWMSI_1_4_LTS_ARM64" -OutFile $msiPath
IoT Edge for Linux on Windows をデバイスにインストールします。
Start-Process -Wait msiexec -ArgumentList "/i","$([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))","/qn"
インストール コマンドに
INSTALLDIR="<FULLY_QUALIFIED_PATH>"
パラメーターとVHDXDIR="<FULLY_QUALIFIED_PATH>"
パラメーターを追加することで、IoT Edge for Linux on Windows のカスタム インストールと VHDX ディレクトリを指定できます。 たとえば、インストールに D:\EFLOW フォルダーを使用し、VHDX に D:\EFLOW-VHDX を使用する場合は、次の PowerShell コマンドレットを使用できます。Start-Process -Wait msiexec -ArgumentList "/i","$([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))","/qn","INSTALLDIR=D:\EFLOW", "VHDXDIR=D:\EFLOW-VHDX"
ターゲット デバイスの実行ポリシーがまだ
AllSigned
に設定されていない場合、これを設定します。 最新の実行ポリシーをチェックしたり実行ポリシーをAllSigned
に設定したりするためのコマンドについては、PowerShell の前提条件を参照してください。IoT Edge for Linux on Windows のデプロイを作成します。 このデプロイによって Linux 仮想マシンが作成され、IoT Edge ランタイムが自動的にインストールされます。
Deploy-Eflow
ヒント
既定では
Deploy-Eflow
コマンドを実行すると、1 GB の RAM、1 つの仮想 CPU コア、16 GB のディスク領域を持つ Linux 仮想マシンを作成します。 ですが、VM に必要なリソースは、デプロイするワークロードに大きく左右されます。 ワークロードを処理するのに十分なメモリがなければ、VM は起動に失敗します。Deploy-Eflow
コマンドのオプションでパラメーターを指定することで、仮想マシンで使用できるリソースをカスタマイズできます。 これは、最小ハードウェア要件を持つデバイスに EFLOW をデプロイするために必要です。たとえば、次のコマンドは、1 つの vCPU コア、1 GB の RAM (MB で表現)、および 2 GB のディスク領域を持つ仮想マシンを作成します。
Deploy-Eflow -cpuCount 1 -memoryInMB 1024 -vmDataSize 2
使用できるすべてのオプション パラメーターについては、「IoT Edge for Linux on Windows 用の PowerShell 関数」を参照してください。
警告
既定では、EFLOW の Linux 仮想マシンには DNS 構成がありません。 DHCP を使用したデプロイでは、DHCP サーバーによって伝達された DNS 構成の取得が試みられます。 DNS の構成を確認して、インターネット接続を確保してください。 詳細については、AzEFLOW-DNS に関するページを参照してください。
GPU をデプロイに割り当てて、GPU アクセラレーション対応の Linux モジュールを有効にできます。 これらの機能にアクセスするには、「Azure IoT Edge for Linux on Windows 用の GPU アクセラレーション」に詳述されている前提条件をインストールする必要があります。
GPU パススルーを使用するには、
Deploy-Eflow
コマンドに gpuName、gpuPassthroughType、gpuCount の各パラメーターを追加します。 使用できるすべてのオプション パラメーターについては、「IoT Edge for Linux on Windows 用の PowerShell 関数」を参照してください。警告
ハードウェア デバイスのパススルーを有効にすると、セキュリティ リスクが高まる可能性があります。 該当する場合は、GPU ベンダーが提供する、デバイスのリスク軽減ドライバーをお勧めします。 詳細については、「Discrete Device Assignment を使用したグラフィックス デバイスのデプロイ」を参照してください。
ライセンス条項に同意するには、「Y」と入力します。
必要に応じて、「O」または「R」を入力して [Optional diagnostic data](オプションの診断データ) をオンまたはオフに切り替えます。
デプロイが完了すると、PowerShell ウィンドウに、「デプロイが成功しました」と表示されます。
デプロイが正常に完了したら、デバイスをプロビジョニングする準備が整いました。
TPM によるプロビジョニングを行うためにデバイスを準備するのには、いくつかの手順があります。 デバイスを準備する間は、デプロイを開いたままにしてください。 この記事の後半でデプロイに戻ります。
TPM パススルーを有効にする
IoT Edge for Linux on Windows VM には TPM 機能があり、有効または無効にすることができます。 これは既定で無効になっています。 この機能が有効になっている場合、VM はホスト マシンの TPM にアクセスできます。
管理者特権のセッションで PowerShell を開きます。
まだ行っていない場合は、自分のデバイスの実行ポリシーを
AllSigned
に設定して、IoT Edge for Linux on Windows の PowerShell 関数を実行できるようにします。Set-ExecutionPolicy -ExecutionPolicy AllSigned -Force
TPM 機能をオンにします。
Set-EflowVmFeature -feature 'DpsTpm' -enable
デバイスから TPM 情報を取得する
デバイスをプロビジョニングするには、TPM チップの保証キーと、デバイスの登録 IDが必要です。 デバイス プロビジョニング サービスのインスタンスにこの情報を提供して、サービスが接続を試みたときにデバイスを認識できるようにします。
保証キーは、各 TPM チップに固有です。 これは、関連付けられている TPM チップの製造元から取得されます。 たとえば、保証キーの SHA-256 ハッシュを作成することによって、TPM デバイスの一意の登録 ID を派生させることができます。
IoT Edge for Linux on Windows には、TPM からこの情報を取得するのに役立つ PowerShell スクリプトが用意されています。 スクリプトを使用するには、自分のデバイスでこれらの手順を実行します。
管理者特権のセッションで PowerShell を開きます。
コマンドを実行します。
Get-EflowVmTpmProvisioningInfo | Format-List
Device Provisioning Service 登録の作成
TPM のプロビジョニング情報を使用して、Device Provisioning Service で個別登録を作成します。
Device Provisioning Service 内に登録を作成するときに、デバイス ツインの初期状態を宣言する機会があります。 デバイス ツインでは、ソリューションで使用される任意のメトリック (リージョン、環境、場所、デバイスの種類など) によってデバイスをグループ化するためのタグを設定できます。 これらのタグは、自動展開を作成するために使用されます。
ヒント
この記事の手順は Azure portal 向けですが、Azure CLI を使用して個別登録を作成することもできます。 詳細については、az iot dps enrollment を参照してください。 この CLI コマンドの一部として、edge-enabled フラグを使用して、登録の対象が IoT Edge デバイスであることを指定します。
Azure portal で、IoT Hub Device Provisioning Service のインスタンスに移動します。
[設定] の下の [登録の管理] を選択します。
[個別登録の追加] を選択し、登録を構成する次の手順を完了します。
[メカニズム] で [TPM] を選択します。
VM または物理デバイスからコピーした保証キーと登録 ID を指定します。
必要に応じて、デバイス ID を指定します。 デバイス ID を指定しなかった場合は、登録 ID が使用されます。
[True] を選択し、VM または物理デバイスが IoT Edge デバイスであることを宣言します。
デバイスの接続先になるリンクされた IoT ハブを選択するか、[Link to new IoT Hub]\(新しい IoT ハブへのリンク\) を選択します。 複数のハブを選択でき、デバイスは、選択した割り当てポリシーに従ってそれらのハブの 1 つに割り当てられます。
必要に応じて、[デバイス ツインの初期状態] にタグ値を追加します。 タグを使用して、デバイス グループをモジュール展開のターゲットにすることができます。 詳細については、大規模な IoT Edge モジュールの展開に関する記事を参照してください。
[保存] を選択します。
これで、このデバイスの登録が存在しているので、IoT Edge ランタイムによってインストール時にデバイスを自動的にプロビジョニングできます。
クラウド ID を使用してデバイスをプロビジョニングする
Windows デバイス上で管理者特権の PowerShell セッションを開きます。
Device Provisioning Service のインスタンスから収集したスコープ ID を使用して、デバイスをプロビジョニングします。
Provision-EflowVM -provisioningType "DpsTpm" -scopeId "SCOPE_ID_HERE"
カスタムの登録 ID を使用してデバイスを登録した場合は、プロビジョニング時に登録 ID も指定する必要があります。
Provision-EflowVM -provisioningType "DpsTpm" -scopeId "SCOPE_ID_HERE" -registrationId "REGISTRATION_ID_HERE"
インストールの成功を確認する
IoT Edge for Linux on Windows が IoT Edge デバイスに正常にインストールされ、構成されたことを確認します。
ランタイムが正常に起動されたら、IoT Hub にアクセスし、デバイスに IoT Edge モジュールを展開できます。
Device Provisioning Service で作成した個々の登録が使用されたことを確認できます。 Azure portal で Device Provisioning Service インスタンスに移動します。 作成した個々の登録の詳細を開きます。 登録の状態が割り当てられており、デバイス ID が表示されています。
IoT Edge が正常にインストールされ、起動されたことを確認するには、デバイスで次のコマンドを使用します。
PowerShell セッションで次のコマンドを使用して、自分の IoT Edge for Linux on Windows VM に接続します。
Connect-EflowVm
Note
VM に SSH 接続できる唯一のアカウントは、VM を作成したユーザーです。
サインインすると、次の Linux コマンドを使用して、実行中の IoT Edge モジュールの一覧を確認できます。
sudo iotedge list
IoT Edge サービスのトラブルシューティングを行う必要がある場合は、次の Linux コマンドを使用します。
サービスのトラブルシューティングが必要な場合は、サービス ログを取得します。
sudo iotedge system logs
check
ツールを使用して、デバイスの構成と接続の状態を確認します。sudo iotedge check
Note
新しくプロビジョニングされたデバイスでは、IoT Edge ハブに関連するエラーが表示される場合があります。
× 運用環境の準備: Edge ハブのストレージ ディレクトリがホスト ファイル システムに保持されています - エラー
edgeHub コンテナーの現在の状態を確認できませんでした
このエラーは、IoT Edge ハブ モジュールが実行されていないために、新しくプロビジョニングされたデバイスで発生します。 このエラーを解決するには、IoT Hub でデバイスのモジュールを設定し、デプロイを作成します。 デバイスのデプロイを作成することで、IoT Edge ハブ モジュールを含むモジュールがデバイス上で開始されます。
IoT Edge for Linux on Windows をアンインストールする
デバイスから Azure IoT Edge for Linux on Windows のインストールを削除する場合は、次のコマンドを使用します。
- Windows で [設定] を開きます
- [プログラムの追加と削除] を選択します
- [Azure IoT Edge] アプリを選択します
- [アンインストール] を選択します
次のステップ
デバイス プロビジョニング サービスの登録プロセスでは、新しいデバイスをプロビジョニングするときに、デバイス ID とデバイス ツイン タグを同時に設定できます。 これらの値を使用して、個々のデバイスまたはデバイス グループをデバイスの自動管理で使用できます。
Azure portal を使用して大規模な IoT Edge モジュールの展開と監視を行う方法または Azure CLI を使用する方法を理解します。