연습 - 그룹 등록에서 단일 디바이스 프로비전 해제

완료됨

여러 가지 이유로 인해 그룹 등록의 일부분으로 등록된 디바이스 중 일부만 프로비전해야 할 수 있습니다. 예를 들어 디바이스가 더 이상 필요하지 않거나, 최신 버전의 디바이스를 사용할 수 있거나, 디바이스가 고장나거나 손상된 경우가 있을 수 있습니다.

다음 단계를 수행하면 디바이스 인증서를 명시적으로 비활성화하고 단일 디바이스의 IoT 허브 항목을 등록 취소하는 동시에 CA에서 개별 인증서에 서명한 다른 디바이스는 계속 작동하도록 할 수 있습니다.

DPS 등록 그룹에서 단일 디바이스의 프로비전을 해제하려면 다음 두 가지 작업을 수행해야 합니다.

  • 디바이스의 리프(디바이스) 인증서에 대해 DPS가 비활성화된 개별 등록을 만듭니다.

    이 모듈에서 만든 두 센서는 DPS enrollgroup-sensors 등록 그룹을 통해 인증됩니다. 이 단계에서는 비활성화된 디바이스의 DPS 프로비저닝 서비스에 대한 액세스를 명시적으로 취소하는 동시에 등록 그룹의 CA 서명 인증서가 체인에 있는 다른 디바이스의 DPS 액세스는 허용합니다. 디바이스의 비활성화된 DPS 개별 등록을 삭제하면 안 됩니다. 삭제 시 디바이스가 등록 그룹을 통해 다시 등록될 수 있습니다.

  • IoT 허브의 ID 레지스트리에서 디바이스를 비활성화 또는 삭제합니다.

    두 개의 C# 프로그램을 실행했을 때 sensor-thl-001 및 sensor-thl-002가 IoT 허브에 등록되었습니다. 이 단계에서는 IoT 허브에서 ID 등록 항목을 비활성화하거나 삭제합니다.

    솔루션에 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 매개 변수는 업로드 중인 디바이스 인증서에 포함된 디바이스 ID와 일치해야 합니다. 이 모듈의 4단원에서 certGen.sh create_device_certificate sensor-thl-002 명령을 사용하여 디바이스 ID가 디바이스 인증서 값인 일반 이름 또는 CN=으로 설정되었습니다. 디바이스 ID가 디바이스 인증서 CN과 일치하지 않으면 비활성화된 등록 레코드가 인식되지 않으며 테스트 프로그램에서 여전히 IoT 허브에 연결하고 원격 분석 메시지를 보낼 수 있습니다.

작업 2: IoT 허브에서 디바이스 등록 취소

  1. Azure 샌드박스의 IoT Hub 디바이스 레지스트리에서 디바이스를 삭제합니다.

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

작업 3: 디바이스 프로비전이 해제되었는지 확인

  1. sensor-thl-002-device 코드 프로젝트가 포함된 Visual Studio Code 창으로 전환합니다.

  2. 명령 프롬프트의 위치가 sensor-thl-002-device 폴더인지 확인합니다.

  3. 시뮬레이션된 디바이스 앱을 실행합니다.

    dotnet run
    
  4. 디바이스에서 프로비전할 때 나열된 예외를 확인합니다.

    디바이스가 DPS(Device Provisioning Service)를 사용하여 연결 및 인증을 시도하는 경우 서비스에서는 디바이스를 프로비전할 수 있는지 여부를 확인하기 위해 등록 그룹 확인 전에 디바이스 ID 자격 증명과 일치하는 개별 등록을 먼저 찾습니다. 서비스에서 디바이스에 대해 비활성화된 개별 디바이스 ID 등록을 찾으면 디바이스 연결이 차단됩니다. 디바이스의 인증서 체인에 중간 또는 루트 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
    

    반환 상태 정보를 확인합니다. provisioningStatusdisabled여야 합니다.

    "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'}