X.509 証明書を使用して 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 を更新する」を参照してください。
この記事では、IoT Edge for Linux on Windows デバイスを登録およびプロビジョニングするエンド ツー エンドの手順について説明します。
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 証明書を使用する方法について説明します。 対称キーを使用する場合は、「対称キーを使用して IoT Edge for Linux on Windows デバイスを作成およびプロビジョニングする」を参照してください。
Note
設定するデバイスが多数あり、それぞれを手動でプロビジョニングしたくない場合は、次の記事のいずれかを使用して、IoT Edge が IoT Hub Device Provisioning Service でどのように動作するかを確認してください。
前提条件
この記事では、IoT Edge デバイスを登録し、IoT Edge for Linux on Windows をインストールする方法について説明します。 これらのタスクには、実行するために使用されるさまざまな前提条件とユーティリティがあります。 次に進む前に、すべての前提条件が満たされていることを確認してください。
デバイス管理ツール
デバイスを登録する手順には、Azure portal、Visual Studio Code、または Azure CLI を使用できます。 各ユーティリティには、独自の前提条件があり、インストールが必要な場合があります。
Azure サブスクリプション内の無料または標準の IoT ハブ。
デバイスの要件
以下の最小要件を備えた 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 関数リファレンスを参照してください。
デバイス ID 証明書を生成する
X.509 証明書を使用した手動プロビジョニングには、バージョン 1.0.10 以降の IoT Edge が必要です。
X.509 証明書を使用して IoT Edge デバイスをプロビジョニングする場合は、デバイス ID 証明書 と呼ばれるものを使用します。 この証明書は、IoT Edge デバイスのプロビジョニングと、Azure IoT Hub でのデバイス認証を行うためにのみ使用されます。 これは、他の証明書には署名しないリーフ証明書です。 デバイス ID 証明書は、IoT Edge デバイスによって検証のためにモジュールやダウンストリーム デバイスに提示される証明機関 (CA) 証明書とは別のものです。
X.509 証明書認証の場合、各デバイスの認証情報は、デバイス ID 証明書から取得した "拇印" の形式で提供されます。 これらの拇印は、サービスが接続時にデバイスを認識できるように、デバイスの登録時に IoT Hub に付与されます。
IoT Edge デバイスでの CA 証明書の使用方法については、「Azure IoT Edge での証明書の使用方法について理解する」を参照してください。
X.509 を使用して手動でプロビジョニングするには、次のファイルが必要です。
2 つのデバイス ID 証明書と、それに対応する .cer または pem 形式の秘密キー証明書。 証明書のローテーションには、2 つのデバイス ID 証明書が必要です。 ベスト プラクティスとして、有効期限が異なる 2 つの異なるデバイス ID 証明書を準備します。 一方の証明書が期限切れになっても、もう一方はまだ有効であり、期限切れの証明書をローテーションする時間が与えられます。
IoT Edge ランタイムには、証明書とキー ファイルのセットが 1 つ用意されています。 デバイス ID 証明書を作成するとき、IoT ハブ内のデバイスで使用するデバイス ID を使って証明書の共通名 (CN) を設定します。
両方のデバイス ID 証明書から取得された拇印。 IoT Hub では、IoT Edge デバイスの登録時に 2 つの拇印が必要です。 登録に使用できる証明書は 1 つだけです。 1 つの証明書を使用するには、デバイスを登録するときに、プライマリとセカンダリの両方の拇印に同じ証明書の拇印を設定します。
拇印の値は SHA-1 ハッシュの場合は 40 桁の 16 進数、SHA-256 ハッシュの場合は 64 桁の 16 進数です。 両方の拇印は、デバイスの登録時に IoT Hub に提供されます。
証明書から拇印を取得する方法の 1 つは、次の openssl コマンドを使用することです。
openssl x509 -in <certificate filename>.pem -text -fingerprint
このコマンドの出力には拇印が含まれています。 次に例を示します。
SHA1 Fingerprint=D2:68:D9:04:9F:1A:4D:6A:FD:84:77:68:7B:C6:33:C0:32:37:51:12
使用できる証明書がない場合は、デモ証明書を作成して IoT Edge デバイスの機能をテストできます。 この記事に記載されている手順に従って、証明書作成スクリプトを設定し、ルート CA 証明書を作成して、IoT Edge デバイス ID 証明書を作成します。 テストでは、1 つのデバイス ID 証明書を作成し、IoT Hub にデバイスを登録するときにプライマリとセカンダリの両方の拇印の値に同じ拇印を使用できます。
デバイスを登録する
デバイスを登録するには、好みに応じて Azure portal、Visual Studio Code、または Azure CLI を使用できます。
Azure portal の IoT Hubで、IoT Edge デバイスは、Edge 対応ではない IoT デバイスとは別に作成および管理されます。
Azure Portal にサインインし、IoT Hub に移動します。
左側のウィンドウで、メニューから [デバイス] を選択し、[デバイスを追加する] を選択します。
[デバイスの作成] ページで、次の情報を指定します。
- わかりやすいデバイス ID を作成します。 このデバイス ID は、後で使用するのでメモしておいてください。
- [IoT Edge デバイス] のチェック ボックスをオンにします。
- 認証の種類として [X.509 自己署名済み] を選択します。
- プライマリとセカンダリの ID 証明書の拇印を指定します。 拇印の値は SHA-1 ハッシュの場合は 40 桁の 16 進数、SHA-256 ハッシュの場合は 64 桁の 16 進数です。 Azure portal では、16 進数の値のみがサポートされます。 ポータルに入力する前に、拇印の値から列の区切り記号とスペースを削除します。 たとえば、
D2:68:D9:04:9F:1A:4D:6A:FD:84:77:68:7B:C6:33:C0:32:37:51:12
はD268D9049F1A4D6AFD8477687BC633C032375112
として入力されます。
ヒント
テストで 1 つの証明書を使用する場合は、プライマリとセカンダリの両方の拇印に同じ証明書を使用できます。
[保存] を選択します。
デバイスが IoT Hub に登録されたので、IoT Edge ランタイムのインストールとプロビジョニングを完了するために使用する情報を取得します。
登録済みデバイスを表示し、プロビジョニング情報を取得する
X.509 証明書認証を使用するデバイスでは、IoT Edge ランタイムのインストールとプロビジョニングを完了するために、IoT Hub 名、デバイス名、証明書ファイルが必要です。
IoT ハブに接続するエッジ対応デバイスが、デバイス ページに一覧表示されます。 IoT Edge デバイスのデバイスの種類で一覧をフィルター処理できます。
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 ウィンドウに、「デプロイが成功しました」と表示されます。
デプロイが正常に完了したら、デバイスをプロビジョニングする準備が整いました。
クラウド ID を使用してデバイスをプロビジョニングする
クラウド ID と認証情報を使用してデバイスを設定する準備ができました。
x.509 証明書を使用してデバイスをプロビジョニングするには、IoT hub 名、デバイス ID、Windows ホスト マシン上のID 証明書と秘密キーへの絶対パスが必要です。
ターゲット デバイス上に、デバイス ID 証明書と、対応する秘密キーを準備しておきます。 両方のファイルへの絶対パスを確認します。
管理者特権の PowerShell セッションで、ターゲット デバイスに対して次のコマンドを実行します。 プレースホルダー テキストは実際の値に置き換えてください。
Provision-EflowVm -provisioningType ManualX509 -iotHubHostname "HUB_HOSTNAME_HERE" -deviceId "DEVICE_ID_HERE" -identityCertPath "ABSOLUTE_PATH_TO_IDENTITY_CERT_HERE" -identityPrivKeyPath "ABSOLUTE_PATH_TO_PRIVATE_KEY_HERE"
Provision-EflowVM
コマンドの詳細については、「IoT Edge for Linux on Windows 用の PowerShell 関数」を参照してください。
構成が成功したことを確認する
IoT Edge for Linux on Windows が IoT Edge デバイスに正常にインストールされ、構成されたことを確認します。
PowerShell セッションで次のコマンドを使用して、お使いの IoT Edge for Linux on Windows 仮想マシンにサインインします。
Connect-EflowVm
Note
仮想マシンへの SSH 接続が許可されるアカウントは、それを作成したユーザーだけです。
ログインすると、次の 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 デバイスを作成すると、Azure portal で状態コード 417 -- The device's deployment configuration is not set
が表示されます。 この状態は正常であり、デバイスでモジュールのデプロイを受け取る準備ができていることを意味します。
IoT Edge for Linux on Windows をアンインストールする
デバイスから Azure IoT Edge for Linux on Windows のインストールを削除する場合は、次のコマンドを使用します。
- Windows で [設定] を開きます
- [プログラムの追加と削除] を選択します
- [Azure IoT Edge] アプリを選択します
- [アンインストール] を選択します
次のステップ
- IoT Edge モジュールのデプロイに進んで、デバイスにモジュールをデプロイする方法を確認します。
- IoT Edge for Linux on Windows 仮想マシンで証明書を管理し、ホスト OS から Linux 仮想マシンにファイルを転送する方法について確認します。
- プロキシ サーバー経由で通信するように IoT Edge デバイスを構成する方法について確認します。