練習 - 從群組註冊取消佈建單一裝置

已完成

有許多原因導致您可能需要取消佈建部分註冊為群組註冊的裝置。 例如,可能不再需要裝置、較新版本的裝置可能可供使用,或可能中斷或遭入侵。

這些步驟會明確停用單一裝置的裝置憑證,並取消註冊單一裝置的 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 裝置設定個別註冊。

  1. 在 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 中樞取消註冊裝置

  1. 在 Azure 沙箱中,從 IoT 中樞裝置登錄中刪除裝置。

    az iot hub device-identity delete --hub-name hub-$suffix --device-id sensor-thl-002
    

工作 3:確認裝置已取消佈建

  1. 切換至 Visual Studio Code 視窗,其中包含您的 sensor-thl-002-device 程式碼專案。

  2. 確定命令提示字元位於 sensor-thl-002-device 資料夾位置。

  3. 執行模擬裝置應用程式。

    dotnet run
    
  4. 請注意裝置嘗試佈建時所列的例外狀況。

    當裝置嘗試使用裝置佈建服務 (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 中樞。 如果刪除個別註冊,裝置會自動新增回群組註冊。

驗證您的工作

  1. 驗證裝置 sensor-thl-002 有已停用 DPS 的個別註冊。

    az iot dps enrollment show --dps-name dps-$suffix --enrollment-id sensor-thl-002
    

    檢查傳回狀態資訊。 provisioningStatus 應該是 disabled

    "provisioningStatus": "disabled"
    
  2. 驗證裝置已從 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'}