Exercício - Desprovisionar um único dispositivo da inscrição do grupo

Concluído

Há muitos motivos pelos quais talvez seja necessário desprovisionar apenas uma parte dos dispositivos registrados como parte de um registro de grupo. Por exemplo, um dispositivo pode não ser mais necessário, uma versão mais recente do dispositivo pode estar disponível ou pode estar quebrado ou comprometido.

Essas etapas desabilitam explicitamente um certificado de dispositivo e cancelam o registro de entradas do hub IoT para um único dispositivo, permitindo que outros dispositivos cujos certificados individuais foram assinados pela autoridade de certificação ainda funcionem.

Para desprovisionar um único dispositivo de um grupo de registro DPS, você deve fazer duas coisas:

  • Crie um registro individual desativado do DPS para o certificado folha (dispositivo) do dispositivo.

    Os dois sensores criados para este módulo são autenticados por meio do grupo de inscrição DPS enrollgroup-sensores. Esta etapa revoga explicitamente o acesso ao serviço de provisionamento DPS para o dispositivo desativado, enquanto ainda permite o acesso DPS para outros dispositivos que têm o certificado de assinatura de CA do grupo de registro em sua cadeia. Você não deve excluir o registro individual do DPS desabilitado para o dispositivo, pois isso permitiria que o dispositivo se registrasse novamente por meio do grupo de registro.

  • Desative ou exclua o dispositivo do registro de identidade do hub IoT.

    sensor-thl-001 e sensor-thl-002 foram registrados com seu hub IoT quando você executou os dois programas C#. Esta etapa desabilita ou exclui uma entrada de registro de identidade do seu hub IoT.

    Gorjeta

    Se sua solução incluir vários hubs IoT, você deverá usar a lista de dispositivos provisionados para o grupo de registro para localizar o hub IoT para o qual o dispositivo foi provisionado. Isso é para que você possa desativar ou excluir o dispositivo. Neste exercício, você usa um único hub IoT, portanto, não precisa procurar qual hub IoT foi usado.

Neste exercício, você desprovisiona um único dispositivo de um grupo de inscrição.

Tarefa 1: Criar um registro individual desabilitado para o dispositivo

Nesta tarefa, você configura um registro individual para o dispositivo sensor-thl-002 .

  1. Na sandbox do Azure, crie um registro individual desabilitado para 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
    

    Nota

    O --enrollment-id parâmetro deve corresponder ao ID do dispositivo contido no certificado do dispositivo que está sendo carregado. Lembre-se de que o ID do dispositivo foi definido como o nome comum, ou CN=, valor do certificado do dispositivo usando o certGen.sh create_device_certificate sensor-thl-002 comando na unidade 4 deste módulo. Se o ID do dispositivo não corresponder ao certificado CN do dispositivo, o registro de inscrição desabilitado não será reconhecido e o programa de teste ainda poderá se conectar ao seu hub IoT e enviar mensagens de telemetria.

Tarefa 2: Cancelar o registro do dispositivo do hub IoT

  1. Na área restrita do Azure, exclua o dispositivo do registro do dispositivo do hub IoT.

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

Tarefa 3: Confirmar se o dispositivo foi desprovisionado

  1. Alterne para a janela Visual Studio Code que contém seu projeto de código sensor-thl-002-device.

  2. Verifique se o prompt de comando está localizado no local da pasta sensor-thl-002-device .

  3. Execute o aplicativo de dispositivo simulado.

    dotnet run
    
  4. Observe as exceções listadas quando o dispositivo tenta provisionar.

    Quando um dispositivo tenta se conectar e autenticar com o DPS (Serviço de Provisionamento de Dispositivo), o serviço primeiro procura um registro individual que corresponda à credencial de ID do dispositivo antes de verificar se há grupos de registro para determinar se o dispositivo pode ser provisionado. Se o serviço encontrar um registro de ID de dispositivo individual desativado para o dispositivo, ele impedirá que o dispositivo se conecte. O serviço impede a conexão mesmo se existir um grupo de registro habilitado para uma CA intermediária ou raiz na cadeia de certificados do dispositivo.

    Quando o aplicativo tenta usar o certificado X.509 configurado para se conectar ao DPS, o DPS informa que o status de registro do dispositivo NÃO é 'Atribuído'.

    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)
    

    Se você voltar ao DPS e definir o registro de dispositivo individual para habilitado ou excluir o registro individual, o dispositivo poderá mais uma vez se autenticar com o DPS e se conectar ao hub IoT. Se o registro individual for excluído, o dispositivo será automaticamente adicionado de volta ao registro do grupo.

Verifique o seu trabalho

  1. Verifique se há um registro individual desativado do DPS para o dispositivo sensor-thl-002.

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

    Verifique as informações de status da devolução. O provisioningStatus deve ser disabled.

    "provisioningStatus": "disabled"
    
  2. Verifique se o dispositivo foi cancelado do registro do hub IoT.

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

    Deverá ver uma mensagem de DeviceNotFound erro semelhante à seguinte.

     {'Message': 'ErrorCode:DeviceNotFound;sensor-thl-002', 'ExceptionMessage': 'Tracking ID:06e0221675514160850421f0b3b787a9-G:0-TimeStamp:10/24/2023 16:53:16'}