Exercício – Desprovisionar um único dispositivo a partir do registro de grupo

Concluído

Há muitas razões pelas 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 quebrada ou comprometida.

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, continuem funcionando.

Para desprovisionar um único dispositivo de um grupo de registro DPS, você deve fazer duas ações:

  • Crie um registro individual desabilitado 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 registro de sensores de grupo de registro do DPS. Esta etapa revoga explicitamente o acesso ao serviço de provisionamento DPS para o dispositivo desabilitado, ao mesmo tempo que permite o acesso DPS para outros dispositivos que tenham o certificado de assinatura CA do grupo de inscrição em sua cadeia. Você não deve excluir o registro individual de DPS desabilitado para o dispositivo, pois isso permitiria que o dispositivo se registrasse novamente por meio do grupo de registro.

  • Desabilitar ou excluis 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.

    Dica

    Se a 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.

Exercício – Desprovisionar um único dispositivo com base no registro de grupo.

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 área restrita 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
    

    Observação

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

Tarefa 2: Cancelar o registro dos dispositivos do Hub IoT

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

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

Tarefa 3: Confirme se o dispositivo está desprovisionado

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

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

  3. Execute o aplicativo de dispositivos simulados.

    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 Dispositivos), o serviço procura primeiro um registro individual que corresponda à credencial de identificação 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 identificação de dispositivo individual desabilitado para o dispositivo, ele impedirá que o dispositivo se conecte. O serviço impede a conexão, mesmo que exista um grupo de registros habilitado para um intermediário ou a autoridade de certificação raiz da 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 como habilitado ou excluir o registro individual, o dispositivo poderá se autenticar novamente com o DPS e se conectar ao hub IoT. Se a inscrição individual for excluída, o dispositivo será automaticamente adicionado de volta à inscrição em grupo.

Verificar seu trabalho

  1. Verifique se há um registro individual desabilitado 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 de retorno. provisioningStatus deve ser disabled.

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

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

    Você deverá ver uma mensagem de erro DeviceNotFound semelhante à seguinte.

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