Exercício - Desprovisionar um único dispositivo da inscrição do grupo
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 .
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 ocertGen.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
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
Alterne para a janela Visual Studio Code que contém seu projeto de código sensor-thl-002-device.
Verifique se o prompt de comando está localizado no local da pasta sensor-thl-002-device .
Execute o aplicativo de dispositivo simulado.
dotnet run
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
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 serdisabled
."provisioningStatus": "disabled"
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'}