練習 - 從群組註冊取消佈建單一裝置
有許多原因導致您可能需要取消佈建部分註冊為群組註冊的裝置。 例如,可能不再需要裝置、較新版本的裝置可能可供使用,或可能中斷或遭入侵。
這些步驟會明確停用單一裝置的裝置憑證,並取消註冊單一裝置的 IoT 中樞項目,同時允許其個別憑證由 CA 簽署的其他裝置繼續運作。
若要從 DPS 註冊群組取消佈建單一裝置,您必須執行兩件事:
為裝置的分葉 (裝置) 憑證建立 DPS 已停用的個別註冊。
您為此模組建立的兩個感測器會透過 DPS enrollmentgroup-sensors 註冊群組進行驗證。 此步驟會明確撤銷已停用裝置的 DPS 佈建服務存取權限,但是仍允許鏈結之中具有註冊群組的 CA 簽署憑證的其他裝置進行 DPS 存取。 您不應刪除裝置的停用 DPS 個別註冊,因為這麼做,會允許裝置透過註冊群組重新註冊。
從 IoT 中樞的身分識別登錄停用或刪除裝置。
當您執行兩個 C# 程式時,sensor-thl-001 和 sensor-thl-002 便已向 IoT 中樞註冊。 此步驟會停用或刪除 IoT 中樞的身分識別註冊項目。
提示
如果您的解決方案包含多個 IoT 中樞,您應該使用註冊群組的已布建裝置清單來尋找裝置已佈建的 IoT 中樞。 如此一來,您就可以停用或刪除裝置。 在此練習中,您會使用單一 IoT 中樞,因此您不需要查閱應使用哪一個 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
注意
--enrollment-id
參數必須符合上傳之裝置憑證中包含的裝置識別碼。 回想一下,使用本模組單元 4 中的certGen.sh create_device_certificate sensor-thl-002
命令,將裝置識別碼設定為一般名稱或 CN=,裝置憑證的值。 如果裝置識別碼不符合裝置憑證 CN,將無法辨識已停用的註冊記錄,而測試計劃仍能夠連結到 IoT 中樞並傳送遙測訊息。
工作 2:從 IoT 中樞取消註冊裝置
在 Azure 沙箱中,從 IoT 中樞裝置登錄中刪除裝置。
az iot hub device-identity delete --hub-name hub-$suffix --device-id sensor-thl-002
工作 3:確認裝置已取消佈建
切換至 Visual Studio Code 視窗,其中包含您的 sensor-thl-002-device 程式碼專案。
確定命令提示字元位於 sensor-thl-002-device 資料夾位置。
執行模擬裝置應用程式。
dotnet run
請注意裝置嘗試佈建時所列的例外狀況。
當裝置嘗試使用裝置佈建服務 (DPS) 進行連線和驗證時,服務會先尋找符合裝置識別碼認證的個別註冊,然後再檢查註冊群組以判斷是否可以佈建裝置。 如果服務找到裝置的已停用個別裝置識別碼註冊,就會防止該裝置進行連線。 即使裝置憑證鏈結中之中繼或根 CA 的已啟用註冊群組存在,服務也會防止連線。
當應用程式嘗試使用已設定的 X.509 憑證連線到 DPS 時,DPS 會報告裝置註冊狀態為 [未「指派」]。
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 中樞。 如果刪除個別註冊,裝置會自動新增回群組註冊。
驗證您的工作
驗證裝置 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'}