演習 - グループ登録から単一のデバイスをプロビジョニング解除する
グループ登録の一部として登録されているデバイスの一部のみをプロビジョニング解除する必要がある理由はたくさんあります。 たとえば、デバイスが不要になったり、新しいバージョンのデバイスが使用可能になったり、破損または侵害されたりする可能性があります。
これらの手順では、デバイス証明書を明示的に無効にし、単一のデバイスの IoT ハブ エントリを登録解除します。一方、個別の証明書が CA によって署名されている他のデバイスが、引き続き機能できるようにします。
DPS 登録グループから単一のデバイスのプロビジョニングを解除するには、次の 2 つのことを行う必要があります。
デバイスのリーフ (デバイス) 証明書に対して、DPS が無効になっている個別登録を作成します。
このモジュール用に作成した 2 つのセンサーは、DPS enrollgroup-sensors 登録グループを介して認証されます。 この手順により、無効になっているそのデバイスの DPS プロビジョニング サービスへのアクセスが明示的に取り消されますが、チェーン内に登録グループの CA 署名証明書がある他のデバイスは、引き続き DPS アクセスを許可されます。 デバイスの、無効になっている DPS 個別登録を削除しないでください。削除すると、デバイスが登録グループを介して再登録できるようになります。
IoT Hub の ID レジストリからデバイスを無効化または削除する。
sensor-thl-001 と sensor-thl-002 は、2 つの C# プログラムを実行したときに IoT ハブに登録されたものです。 この手順では、IoT ハブから ID 登録エントリを無効化または削除します。
ヒント
ソリューションに複数の IoT ハブが含まれている場合は、登録グループにプロビジョニングされたデバイスのリストを使用して、デバイスがプロビジョニングされた IoT ハブを見つける必要があります。 これは、デバイスを無効化または削除できるようにするためです。 この演習では、使用する IoT ハブは 1 つだけであるため、どの IoT ハブが使用されたかを調べる必要はありません。
この演習では、登録グループから単一のデバイスのプロビジョニングを解除します。
タスク 1:デバイスの無効な個別登録を作成する
このタスクでは、sensor-thl-002 デバイスの個別登録を構成します。
Azure サンドボックスで、sensor-thl-002 の無効な個別登録を作成します。
az iot dps enrollment create --dps-name dps-$suffix --enrollment-id sensor-thl-002 --attestation-type x509 --certificate-path ~/certificates/certs/sensor-thl-002-device.cert.pem --provisioning-status disabled
Note
--enrollment-id
パラメーターは、アップロードするデバイス証明書に含まれているデバイス ID と一致する必要があります。 このモジュールのユニット 4 でcertGen.sh create_device_certificate sensor-thl-002
コマンドを使用して、デバイス ID をデバイス証明書の共通名 (CN=) 値として設定したことを思い出してください。 デバイス ID がデバイス証明書の CN と一致しない場合、無効になっている登録レコードは認識されず、テスト プログラムは引き続き IoT ハブに接続してテレメトリ メッセージを送信できます。
タスク 2:IoT Hub からデバイスの登録を解除する
Azure サンドボックスで、IoT Hub デバイス レジストリからデバイスを削除します。
az iot hub device-identity delete --hub-name hub-$suffix --device-id sensor-thl-002
タスク 3:デバイスのプロビジョニングが解除されていることを確認する
sensor-thl-002-device コードのプロジェクトがある Visual Studio Code ウィンドウに切り替えます。
コマンド プロンプトが sensor-thl-002-device フォルダーの場所にあることを確認します。
シミュレートされたデバイス アプリを実行します。
dotnet run
デバイスからプロビジョニングを試みると例外が表示されることに注意してください。
デバイスがデバイス プロビジョニング サービス (DPS) への接続と認証を試みると、サービスはまずデバイス ID 資格情報と一致する個別登録を探してから、登録グループを探し、デバイスをプロビジョニングできるかどうかを判別します。 デバイスに対して無効になっている個別のデバイス ID 登録が検出された場合、サービスはデバイスの接続を阻止します。 サービスは、デバイスの証明書チェーンに中間またはルート CA の有効な登録グループが存在する場合でも、接続を阻止します。
アプリケーションが構成済みの X.509 証明書を使用して DPS に接続しようとすると、DPS はデバイス登録状態が NOT 'Assigned' であることを報告します。
Found certificate: 13F32448E03F451E897B681758BAC593A60BFBFA CN=sensor-thl-002; PrivateKey: True Using certificate 13F32448E03F451E897B681758BAC593A60BFBFA CN=sensor-thl-002 ProvisioningClient AssignedHub: ; DeviceID: Unhandled exception. System.Exception: DeviceRegistrationResult.Status is NOT 'Assigned' at ContainerDevice.Program.ProvisionDevice(ProvisioningDeviceClient provisioningDeviceClient, SecurityProviderX509Certificate security) in C:\Users\howdc\Allfiles\Labs\06-Automatic Enrollment of Devices in DPS\Final\ContainerDevice2004\Program.cs:line 107 at ContainerDevice.Program.Main(String[] args) in C:\Users\howdc\Allfiles\Labs\06-Automatic Enrollment of Devices in DPS\Final\ContainerDevice2004\Program.cs:line 49 at ContainerDevice.Program.<Main>(String[] args)
DPS に戻って、個別のデバイス登録を有効に設定するか、個別の登録を削除すると、デバイスは再び DPS で認証され、IoT Hub に接続できるようになります。 個別の登録が削除されると、デバイスは自動的にグループの登録に追加し直されます。
作業内容を検証する
デバイス sensor-thl-002 に対して DPS が無効になっている個別登録があることを確認します。
az iot dps enrollment show --dps-name dps-$suffix --enrollment-id sensor-thl-002
戻りステータス情報を確認します。
provisioningStatus
はdisabled
である必要があります。"provisioningStatus": "disabled"
デバイスが IoT ハブから登録解除されたことを確認します。
az iot hub device-identity show --hub-name hub-$suffix --device-id sensor-thl-002
次のような
DeviceNotFound
エラー メッセージが表示されるはずです。{'Message': 'ErrorCode:DeviceNotFound;sensor-thl-002', 'ExceptionMessage': 'Tracking ID:06e0221675514160850421f0b3b787a9-G:0-TimeStamp:10/24/2023 16:53:16'}