Esercitazione: Effettuare il provisioning dei dispositivi usando i gruppi di registrazione con chiave simmetrica

Questa esercitazione illustra come effettuare il provisioning sicuro di più dispositivi con chiave simmetrica simulata in un singolo hub IoT usando un gruppo di registrazione.

Il servizio Device Provisioning hub IoT di Azure supporta due tipi di registrazioni per i dispositivi di provisioning:

  • Gruppi di registrazioni: usato per registrare più dispositivi correlati. Questa esercitazione illustra il provisioning con i gruppi di registrazione.
  • Registrazioni singole: Usato per registrare un singolo dispositivo.

Il servizio Device Provisioning hub IoT di Azure supporta tre forme di autenticazione per i dispositivi di provisioning:

  • Certificati X.509
  • Modulo TPM (Trusted Platform Module)
  • Chiavi simmetriche: questa esercitazione illustra l'attestazione della chiave simmetrica

Alcuni dispositivi potrebbero non avere un certificato, un TPM o qualsiasi altra funzionalità di sicurezza che può essere usata per identificare in modo sicuro il dispositivo. Per tali dispositivi, il servizio Device Provisioning (DPS) hub IoT di Azure include l'attestazione della chiave simmetrica. L'attestazione con chiave simmetrica può essere usata per identificare un dispositivo in base a informazioni univoche, ad esempio l'indirizzo MAC o un numero di serie.

In questa esercitazione vengono completati gli obiettivi seguenti:

  • Definire un ID di registrazione univoco per ogni dispositivo.
  • Creare un gruppo di registrazione che usa l'attestazione con chiave simmetrica.
  • Produrre una chiave del dispositivo per ogni dispositivo usando l'ID registrazione univoco e la chiave del gruppo di registrazione condiviso.
  • Effettuare il provisioning dei dispositivi usando la chiave del dispositivo e il codice di esempio negli SDK per dispositivi IoT di Azure.

Questa esercitazione è orientata a una workstation basata su Windows. Tuttavia, è possibile eseguire le procedure in Linux. Per un esempio di Linux, vedere Esercitazione: Effettuare il provisioning per la latenza geografica.

Nota

Se in precedenza è stato completato Avvio rapido: Effettuare il provisioning di un dispositivo con chiave simmetrica simulata e avere ancora configurato le risorse di Azure e l'ambiente di sviluppo, è possibile passare a Creare un gruppo di registrazione con chiave simmetrica in questa esercitazione.

Prerequisiti

  • Se si usa un ambiente di sviluppo Windows, installare Visual Studio 2022 con il carico di lavoro "Sviluppo di applicazioni desktop con C++". Sono supportati anche Visual Studio 2019, Visual Studio 2017 e Visual Studio 2015. Per Linux o macOS, vedere la sezione appropriata in Preparare l'ambiente di sviluppo nella documentazione dell'SDK.

  • Installare il sistema di compilazione CMake più recente. Assicurarsi di selezionare l'opzione che aggiunge il file eseguibile CMake al percorso.

    Importante

    Verificare che i prerequisiti di Visual Studio (Visual Studio e il carico di lavoro "Sviluppo di applicazioni desktop con C++") siano installati nel computer prima di avviare l'installazione CMake . Quando i prerequisiti sono pronti e il download è stato verificato, installare il sistema di compilazione CMake. Tenere inoltre presente che le versioni precedenti del sistema di compilazione CMake non riescono a generare il file di soluzione usato in questo articolo. Assicurarsi di usare la versione più recente di CMake.

  • Installare .NET SDK 6.0 o versione successiva nel computer basato su Windows. Per controllare la versione, è possibile usare il comando seguente.

    dotnet --info
    
  • Installare Python 3.7 o versione successiva installato nel computer basato su Windows. Per controllare la versione di Python, eseguire python --version.
  • Installare la versione più recente di Git. Verificare che Git venga aggiunto alle variabili di ambiente accessibili alla finestra di comando. Vedere gli strumenti client Git di Software Freedom Conservancy per la versione più recente degli strumenti git da installare, tra cui Git Bash, l'app da riga di comando che è possibile usare per interagire con il repository Git locale.

Preparare l'ambiente di sviluppo

In questa sezione si prepara un ambiente di sviluppo per compilare Azure IoT Device SDK per C. Il codice di esempio effettua il provisioning del dispositivo durante la sequenza di avvio del dispositivo.

  1. In un Web browser passare alla pagina Versione di Azure IoT C SDK.

  2. Copiare il nome del tag per la versione più recente di Azure IoT C SDK, ad esempio: lts_03_2024.

  3. Aprire un prompt dei comandi di Windows ed eseguire i comandi seguenti per clonare la versione più recente del repository GitHub azure IoT Device SDK per C . Sostituire <release-tag> con il tag copiato nel passaggio precedente.

    git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git
    cd azure-iot-sdk-c
    git submodule update --init
    

    Il completamento di questa operazione potrebbe richiedere alcuni minuti.

  4. Al termine dell'operazione, eseguire i comandi seguenti dalla azure-iot-sdk-c directory :

    mkdir cmake
    cd cmake
    
  5. L'esempio di codice usa una chiave simmetrica per fornire l'attestazione. Eseguire il comando seguente per compilare una versione dell'SDK specifica per la piattaforma client di sviluppo che include il client di provisioning dei dispositivi:

    cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    

    Suggerimento

    Se cmake non trova il compilatore C++, potrebbero verificarsi errori di compilazione durante l'esecuzione del comando precedente. In tal caso, provare a eseguire il comando nel prompt dei comandi di Visual Studio.

  6. Al termine della compilazione, le ultime righe di output sono simili all'output seguente:

    $ cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    -- Building for: Visual Studio 16 2019
    -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22621.
    -- The C compiler identification is MSVC 19.29.30146.0
    -- The CXX compiler identification is MSVC 19.29.30146.0
    
    ...
    
    -- Configuring done
    -- Generating done
    -- Build files have been written to: C:/azure-iot-sdk-c/cmake
    
  1. Aprire un prompt dei comandi o un terminale Git Bash.

  2. Clonare il repository GitHub azure IoT SDK per C# usando il comando seguente:

    git clone https://github.com/Azure/azure-iot-sdk-csharp.git
    
  1. Aprire un prompt dei comandi o un terminale Git Bash.

  2. Clonare il repository GitHub di Azure IoT SDK per Node.js usando il comando seguente:

    git clone https://github.com/Azure/azure-iot-sdk-node.git --recursive
    
  1. Aprire un prompt dei comandi o un terminale Git Bash.

  2. Clonare il repository GitHub azure IoT Sdk per dispositivi per Python usando il comando seguente:

    git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
    

    Nota

    Gli esempi usati in questa esercitazione si trovano nel ramo v2 del repository azure-iot-sdk-python. La versione 3 di Python SDK è disponibile per l'uso nella versione beta. Per informazioni sull'aggiornamento degli esempi di codice V2 per l'uso di una versione V3 di Python SDK, vedere Guida alla migrazione di Azure IoT Device SDK per Python.

  1. Aprire un prompt dei comandi o un terminale Git Bash.

  2. Clonare il repository GitHub azure IoT SDK per Java usando il comando seguente:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  3. Passare alla directory radice azure-iot-sdk-java e compilare il progetto per scaricare tutti i pacchetti necessari. Questo passaggio può richiedere alcuni minuti.

    cd azure-iot-sdk-java
    mvn install -DskipTests=true
    

Creare un gruppo di registrazioni con chiave simmetrica

  1. Accedere al portale di Azure e aprire l'istanza del servizio Device Provisioning.

  2. Selezionare Gestisci registrazioni nella sezione Impostazioni del menu di spostamento.

  3. Selezionare Aggiungi gruppo di registrazione.

  4. Nella scheda Registrazione e provisioning della pagina Aggiungi gruppo di registrazione, specificare le informazioni seguenti per configurare i dettagli del gruppo di registrazione:

    Campo Descrizione
    Attestazione Selezionare Chiave simmetrica come Meccanismo di attestazione .
    impostazioni chiave simmetrica Selezionare la casella Genera chiavi simmetriche automaticamente se si vogliono usare chiavi generate in modo casuale. Deselezionare questa casella se si desidera specificare chiavi personalizzate.
    Nome gruppo Specificare un nome per il gruppo di dispositivi. Il nome del gruppo di registrazione è una stringa senza distinzione tra maiuscole e minuscole (fino a 128 caratteri) di caratteri alfanumerici più i caratteri speciali: '-', '.', '_', ':'. L'ultimo carattere deve essere alfanumerico o un trattino ('-').
    Stato del provisioning Selezionare la casella Abilita questa registrazione se si vuole che questo gruppo di registrazione sia disponibile per il provisioning dei dispositivi. Deselezionare questa casella se si desidera che il gruppo venga disabilitato. Non è possibile modificare questa impostazione in un secondo momento.
    Criteri di reprovisioning Scegliere un criterio di reprovisioning che rifletta il modo in cui si vuole che il servizio Device Provisioning gestisca i dispositivi che richiedono il provisioning. Per altre informazioni, vedere Criteri di reprovisioning

    Screenshot che mostra l'aggiunta di un gruppo di registrazione per l'attestazione con chiave simmetrica.

  5. Selezionare Avanti: Hub IoT.

  6. Nella scheda Hub IoT della pagina Aggiungi gruppo di registrazione specificare le informazioni seguenti per determinare gli hub IoT a cui il gruppo di registrazione può effettuare il provisioning dei dispositivi:

    Campo Descrizione
    Hub IoT di destinazione Selezionare uno o più hub IoT collegati oppure aggiungere un nuovo collegamento a un hub IoT. Per altre informazioni sul collegamento degli hub IoT all'istanza del servizio Device Provisioning, vedere Come collegare e gestire hub IoT.
    Criteri di allocazione Se sono stati selezionati più hub IoT collegati, selezionare la modalità di assegnazione dei dispositivi ai diversi hub. Per altre informazioni sui criteri di allocazione, vedere Come usare i criteri di allocazione.

    Se è stato selezionato un solo hub IoT collegato, è consigliabile usare i criteri di distribuzione ponderati in modo uniforme.

    Screenshot che mostra la connessione degli hub IoT al nuovo gruppo di registrazione.

  7. Selezionare Avanti: Impostazioni dispositivo

  8. Nella scheda Impostazioni dispositivo della pagina Aggiungi gruppo di registrazione specificare le informazioni seguenti per definire la modalità di configurazione dei dispositivi di cui è stato appena effettuato il provisioning:

    Campo Descrizione
    IoT Edge Selezionare Abilita IoT Edge nei dispositivi di cui è stato effettuato il provisioning se tutti i dispositivi di cui è stato effettuato il provisioning tramite questo gruppo eseguiranno Azure IoT Edge. Deselezionare questa casella se questo gruppo è solo per i dispositivi non abilitati per IoT Edge. Tutti i dispositivi in un gruppo saranno abilitati per IoT Edge o nessuno può essere.
    Tag del dispositivo Usare questa casella di testo per specificare i tag da applicare ai dispositivi gemelli dei dispositivi di cui è stato effettuato il provisioning.
    Proprietà desiderate Usare questa casella di testo per specificare le proprietà desiderate che si desidera applicare ai dispositivi gemelli dei dispositivi di cui è stato effettuato il provisioning.

    Per altre informazioni, vedere Comprendere e usare dispositivi gemelli nell'hub IoT.

  9. Selezionare Avanti: Rivedi e crea.

  10. Nella scheda Rivedi e crea, verificare tutti i valori e quindi selezionare Crea.

Quando si crea il gruppo di registrazione, DPS genera una chiave primaria e una chiave secondaria, quindi le aggiunge alla voce di registrazione. Il gruppo di registrazione con chiave simmetrica viene visualizzato nella colonna Nome gruppo nella scheda Gruppi di registrazioni .

Aprire la registrazione e copiare il valore della chiave primaria. Questa chiave è la chiave di gruppo.

Scegliere un ID di registrazione univoco per il dispositivo

È necessario definire un ID di registrazione univoco per identificare ogni dispositivo. È possibile usare l'indirizzo MAC, il numero di serie o informazioni univoche dal dispositivo.

In questo esempio si usa una combinazione di indirizzo MAC e numero di serie che formano la stringa seguente per un ID di registrazione.

sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6

Creare ID di registrazione univoci per ogni dispositivo. L'ID registrazione è una stringa senza distinzione tra maiuscole e minuscole (fino a 128 caratteri) di caratteri alfanumerici e i caratteri speciali seguenti: - . _ :. L'ultimo carattere deve essere alfanumerico o un trattino (-).

Derivare una chiave di dispositivo

Per generare le chiavi del dispositivo, usare la chiave primaria del gruppo di registrazione per calcolare un hash HMAC-SHA256 dell'ID di registrazione per ogni dispositivo. Il risultato viene quindi convertito in formato Base 64 per ogni dispositivo.

Avviso

Il codice del dispositivo per ogni dispositivo deve includere solo la chiave del dispositivo derivata per tale dispositivo. Non includere la chiave primaria del gruppo nel codice del dispositivo. Una chiave di gruppo compromessa può compromettere la sicurezza di tutti i dispositivi autenticati.

In Linux è possibile usare openssl per generare la chiave del dispositivo derivata, come illustrato nell'esempio seguente.

Sostituire il valore di KEY con la chiave primaria del gruppo di registrazione.

Sostituire il valore di REG_ID con l'ID registrazione.

KEY=<group_primary_key>
REG_ID=<device_registration_id>

keybytes=$(echo $KEY | base64 --decode | xxd -p -u -c 1000)
echo -n $REG_ID | openssl sha256 -mac HMAC -macopt hexkey:$keybytes -binary | base64

Risultato di esempio:

Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc=

Ogni dispositivo usa la chiave del dispositivo derivata e l'ID registrazione univoco per eseguire l'attestazione con chiave simmetrica con il gruppo di registrazione durante il provisioning.

Preparare ed eseguire il codice di provisioning del dispositivo

In questa sezione si aggiorna il codice di esempio del dispositivo per inviare la sequenza di avvio del dispositivo all'istanza del servizio Device Provisioning. Questa sequenza di avvio fa sì che il dispositivo venga riconosciuto, autenticato e assegnato a un hub IoT collegato all'istanza del servizio Device Provisioning.

Il codice di provisioning di esempio esegue le attività seguenti, in ordine:

  1. Autentica il dispositivo con la risorsa Device Provisioning usando i tre parametri seguenti:

    • Ambito ID del servizio Device Provisioning
    • ID di registrazione per il dispositivo.
    • Chiave del dispositivo derivata per il dispositivo.
  2. Assegna il dispositivo all'hub IoT già collegato all'istanza del servizio Device Provisioning.

Per aggiornare ed eseguire l'esempio di provisioning con le informazioni sul dispositivo:

  1. Nel menu principale del servizio Device Provisioning selezionare Panoramica.

  2. Copiare il valore ambito ID.

    Screenshot che mostra la copia dell'ambito ID dal riquadro di panoramica del servizio Device Provisioning.

  3. In Visual Studio aprire il file di soluzione azure_iot_sdks.sln generato in precedenza tramite l'esecuzione di CMake. Il file di soluzione deve trovarsi nel percorso seguente:

    
    \azure-iot-sdk-c\cmake\azure_iot_sdks.sln
    
    

    Suggerimento

    Se il file non è stato generato nella directory cmake, verificare di aver usato una versione recente del sistema di compilazione CMake.

  4. Nella finestra Esplora soluzioni di Visual Studio passare alla cartella Provision_Samples. Espandere il progetto di esempio denominato prov_dev_client_sample. Espandere File di origine e aprire prov_dev_client_sample.c.

  5. Trovare la id_scope costante e sostituire il valore con il valore ambito ID copiato dal portale di Azure.

    static const char* id_scope = "0ne00002193";
    
  6. Trovare la definizione per la funzione main() nello stesso file. Assicurarsi che la variabilehsm_type sia impostata su SECURE_DEVICE_TYPE_SYMMETRIC_KEY come illustrato di seguito:

    SECURE_DEVICE_TYPE hsm_type;
    //hsm_type = SECURE_DEVICE_TYPE_TPM;
    //hsm_type = SECURE_DEVICE_TYPE_X509;
    hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
    
  7. Trovare la chiamata a prov_dev_set_symmetric_key_info() in prov_dev_client_sample.c impostata come commento.

    // Set the symmetric key if using they auth type
    //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");
    

    Rimuovere il commento dalla chiamata di funzione e sostituire i valori segnaposto (incluse le parentesi angolari) con l'ID di registrazione scelto in Scegliere un ID di registrazione univoco per il dispositivo e la chiave del dispositivo derivata generata in Derivare una chiave del dispositivo.

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6", "Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc=");
    

    Attenzione

    Tenere presente che questo passaggio lascia inclusa la chiave del dispositivo derivata come parte dell'immagine per ogni dispositivo, che non è una procedura consigliata per la sicurezza. Questo è un motivo per cui la sicurezza e la facilità d'uso sono spesso compromessi. È necessario esaminare completamente la sicurezza dei dispositivi in base ai propri requisiti.

  8. Salvare il file.

  9. Fare clic con il pulsante destro del mouse sul progetto prov_dev_client_sample e scegliere Imposta come progetto di avvio.

  10. Nel menu di Visual Studio selezionare Debug>Avvia senza eseguire debug per eseguire la soluzione. Quando viene chiesto di ricompilare il progetto, selezionare per ricompilare il progetto prima di eseguirlo.

    L'output seguente è un esempio di dispositivo che si connette correttamente all'istanza del servizio di provisioning da assegnare all'hub IoT:

    Provisioning API Version: 1.9.1
    
    Registering Device
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service: contoso-hub-2.azure-devices.net, deviceId: sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
    Press enter key to exit:
    

Il codice di provisioning di esempio esegue le attività seguenti:

  1. Autentica il dispositivo con la risorsa Device Provisioning usando i tre parametri seguenti:

    • Ambito ID del servizio Device Provisioning
    • ID di registrazione per il dispositivo.
    • Chiave del dispositivo derivata per il dispositivo.
  2. Assegna il dispositivo all'hub IoT già collegato all'istanza del servizio Device Provisioning.

  3. Invia un messaggio di test all'hub IoT.

Per aggiornare ed eseguire l'esempio di provisioning con le informazioni sul dispositivo:

  1. Nel menu principale del servizio Device Provisioning selezionare Panoramica.

  2. Copiare il valore ambito ID.

    Screenshot che mostra la copia dell'ambito ID dal riquadro di panoramica del servizio Device Provisioning.

  3. Aprire un prompt dei comandi e passare a SymmetricKeySample nel repository SDK clonato:

    cd .\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\SymmetricKeySample
    
  4. Nella cartella SymmetricKeySample aprire Parameters.cs in un editor di testo. Questo file mostra i parametri a cui fa riferimento l'esempio. In questo articolo vengono usati solo i primi tre parametri obbligatori durante l'esecuzione dell'esempio. Rivedere il codice di questo file: Non sono necessarie modifiche.

    Parametro Richiesto Descrizione
    --i oppure --IdScope Vero Ambito ID dell'istanza del servizio Device Provisioning
    --r oppure --RegistrationId Vero ID di registrazione per il dispositivo. L'ID registrazione è una stringa senza distinzione tra maiuscole e minuscole (fino a 128 caratteri) di caratteri alfanumerici più i caratteri speciali: '-', '.', '_', ':'. L'ultimo carattere deve essere alfanumerico o un trattino ('-').
    --p oppure --PrimaryKey Vero Chiave primaria di una registrazione singola o della chiave del dispositivo derivata di una registrazione di gruppo.
    --g oppure --GlobalDeviceEndpoint Falso Endpoint globale a cui connettersi i dispositivi. L'impostazione predefinita è global.azure-devices-provisioning.net
    --t oppure --TransportType Falso Trasporto da usare per comunicare con l'istanza di device provisioning. Il valore predefinito è Mqtt. I valori possibili includono Mqtt, Mqtt_WebSocket_OnlyMqtt_Tcp_Only, Amqp, Amqp_WebSocket_Only, , Amqp_Tcp_onlye Http1.
  5. Nella cartella SymmetricKeySample aprire ProvisioningDeviceClientSample.cs in un editor di testo. Questo file mostra il funzionamento della classe SecurityProviderSymmetricKey con la classe ProvisioningDeviceClient per effettuare il provisioning del dispositivo con chiave simmetrica simulata. Rivedere il codice di questo file: Non sono necessarie modifiche.

  6. Compilare ed eseguire il codice di esempio usando il comando seguente:

    dotnet run --i <id-scope> --r <registration-id> --p <primarykey>
    
  7. Verrà visualizzato un risultato simile all'output seguente. Una stringa "TestMessage" viene inviata all'hub come messaggio di test.

    D:\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\SymmetricKeySample>dotnet run --i 0ne00000A0A --r sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 --p sbDDeEzRuEuGKag+kQKV+T1QGakRtHpsERLP0yPjwR93TrpEgEh/Y07CXstfha6dhIPWvdD1nRxK5T0KGKA+nQ==
    
    Initializing the device provisioning client...
    Initialized for registration Id sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6.
    Registering with the device provisioning service...
    Registration status: Assigned.
    Device sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 registered to contoso-hub-2.azure-devices.net.
    Creating symmetric key authentication for IoT Hub...
    Testing the provisioned device with IoT Hub...
    Sending a telemetry message...
    Finished.
    

Il codice di provisioning di esempio esegue le attività seguenti, in ordine:

  1. Autentica il dispositivo con la risorsa Device Provisioning usando i quattro parametri seguenti:

    • PROVISIONING_HOST
    • PROVISIONING_IDSCOPE
    • PROVISIONING_REGISTRATION_ID
    • PROVISIONING_SYMMETRIC_KEY
  2. Assegna il dispositivo all'hub IoT già collegato all'istanza del servizio Device Provisioning.

  3. Invia un messaggio di telemetria di test all'hub IoT.

Per aggiornare ed eseguire l'esempio di provisioning con le informazioni sul dispositivo:

  1. Nel menu principale del servizio Device Provisioning selezionare Panoramica.

  2. Copiare il valore ambito ID.

    Screenshot che mostra la copia dell'ambito ID dal riquadro di panoramica del servizio Device Provisioning.

  3. Aprire un prompt dei comandi per l'esecuzione di comandi Node.js e passare alla directory seguente:

    cd azure-iot-sdk-node\provisioning\device\samples
    
  4. Nella cartella provisioning/device/samples aprire register_symkey.js ed esaminare il codice.

    Per impostazione predefinita, l'esempio è MQTT come protocollo di trasporto. Se si desidera utilizzare un protocollo diverso, impostare come commento la riga seguente e rimuovere il commento dalla riga per il protocollo appropriato.

    var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
    

    Si noti anche che il codice di esempio imposta un payload personalizzato:

    provisioningClient.setProvisioningPayload({a: 'b'});
    

    È possibile impostare come commento questo codice, perché non è necessario per questa esercitazione. È possibile usare un payload personalizzato quando si usa un webhook di allocazione personalizzato per assegnare il dispositivo a un hub IoT. Per altre informazioni, vedere Esercitazione: Usare criteri di allocazione personalizzati.

    Il metodo provisioningClient.register() tenta di eseguire la registrazione del dispositivo.

  5. Nel prompt dei comandi eseguire i comandi seguenti per impostare le variabili di ambiente usate dall'esempio:

    • Il primo comando imposta la PROVISIONING_HOST variabile di ambiente sull'endpoint del dispositivo globale. Questo endpoint è lo stesso per tutte le istanze del servizio Device Provisioning.
    • Sostituire <id-scope> con l'ambito ID copiato dal portale di Azure.
    • Sostituire <registration-id> con l'ID di registrazione scelto in Scegliere un ID di registrazione univoco per il dispositivo.
    • Sostituire <derived-device-key> con la chiave del dispositivo derivata generata in Derivare una chiave del dispositivo.
    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    
    set PROVISIONING_IDSCOPE=<id-scope>
    
    set PROVISIONING_REGISTRATION_ID=<registration-id>
    
    set PROVISIONING_SYMMETRIC_KEY=<derived-device-key>
    
  6. Compilare ed eseguire il codice di esempio usando i comandi seguenti:

     npm install
    
    node register_symkey.js
    
  7. Verrà ora visualizzato un risultato simile all'output seguente. Una stringa "Hello World" viene inviata all'hub come messaggio di test.

    registration succeeded
    assigned hub=contoso-hub-2.azure-devices.net
    deviceId=sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
    payload=undefined
    Client connected
    send status: MessageEnqueued
    

Il codice di provisioning di esempio esegue le attività seguenti, in ordine:

  1. Autentica il dispositivo con la risorsa Device Provisioning usando i quattro parametri seguenti:

    • PROVISIONING_HOST
    • PROVISIONING_IDSCOPE
    • PROVISIONING_REGISTRATION_ID
    • PROVISIONING_SYMMETRIC_KEY
  2. Assegna il dispositivo all'hub IoT già collegato all'istanza del servizio Device Provisioning.

  3. Invia un messaggio di test all'hub IoT.

Per aggiornare ed eseguire l'esempio di provisioning con le informazioni sul dispositivo:

  1. Nel menu principale del servizio Device Provisioning selezionare Panoramica.

  2. Copiare il valore ambito ID.

    Screenshot che mostra la copia dell'ambito ID dal riquadro di panoramica del servizio Device Provisioning.

  3. Aprire un prompt dei comandi e passare alla directory in cui si trova il file di esempio, provision_symmetric_key.py.

    cd azure-iot-sdk-python\samples\async-hub-scenarios
    
  4. Nel prompt dei comandi eseguire i comandi seguenti per impostare le variabili di ambiente usate dall'esempio:

    • Il primo comando imposta la PROVISIONING_HOST variabile di ambiente sull'endpoint del dispositivo globale. Questo endpoint è lo stesso per tutte le istanze del servizio Device Provisioning.
    • Sostituire <id-scope> con l'ambito ID copiato dal portale di Azure.
    • Sostituire <registration-id> con l'ID di registrazione scelto in Scegliere un ID di registrazione univoco per il dispositivo.
    • Sostituire <derived-device-key> con la chiave del dispositivo derivata generata in Derivare una chiave del dispositivo.
    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    
    set PROVISIONING_IDSCOPE=<id-scope>
    
    set PROVISIONING_REGISTRATION_ID=<registration-id>
    
    set PROVISIONING_SYMMETRIC_KEY=<derived-device-key>
    
  5. Eseguire questo comando per installare la libreria azure-iot-device.

    pip install azure-iot-device
    
  6. Eseguire il codice di esempio Python in provision_symmetric_key.py.

    python provision_symmetric_key.py
    
  7. Verrà ora visualizzato un risultato simile all'output seguente. Alcuni messaggi di telemetria della velocità del vento vengono inviati anche all'hub come test.

    D:\azure-iot-sdk-python\samples\async-hub-scenarios>python provision_symmetric_key.py
    The complete registration result is
    sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
    contoso-hub-2.azure-devices.net
    initialAssignment
    null
    Will send telemetry from the provisioned device
    sending message #1
    sending message #2
    sending message #3
    sending message #4
    sending message #5
    sending message #6
    sending message #7
    sending message #8
    sending message #9
    sending message #10
    done sending message #1
    done sending message #2
    done sending message #3
    done sending message #4
    done sending message #5
    done sending message #6
    done sending message #7
    done sending message #8
    done sending message #9
    done sending message #10
    

Il codice di provisioning di esempio esegue le attività seguenti, in ordine:

  1. Autentica il dispositivo con la risorsa Device Provisioning usando i quattro parametri seguenti:

    • GLOBAL_ENDPOINT
    • SCOPE_ID
    • REGISTRATION_ID
    • SYMMETRIC_KEY
  2. Assegna il dispositivo all'hub IoT già collegato all'istanza del servizio Device Provisioning.

  3. Invia un messaggio di test all'hub IoT.

Per aggiornare ed eseguire l'esempio di provisioning con le informazioni sul dispositivo:

  1. Nel menu principale del servizio Device Provisioning selezionare Panoramica.

  2. Copiare il valore ambito ID.

    Screenshot che mostra la copia dell'ambito ID dal riquadro di panoramica del servizio Device Provisioning.

  3. Aprire il codice di esempio del dispositivo Java per la modifica. Il percorso completo del codice di esempio del dispositivo è:

    azure-iot-sdk-java/provisioning/provisioning-samples/provisioning-symmetrickey-individual-sample/src/main/java/samples/com/microsoft/azure/sdk/iot/ProvisioningSymmetricKeyIndividualEnrollmentSample.java

  4. Impostare il valore delle variabili seguenti per il servizio Device Provisioning e la registrazione del dispositivo:

    • Sostituire [Your scope ID here] con l'ambito ID copiato dal portale di Azure.
    • Sostituire [Your Provisioning Service Global Endpoint here] con l'endpoint del dispositivo globale: global.azure-devices-provisioning.net. Questo endpoint è lo stesso per tutte le istanze del servizio Device Provisioning.
    • Sostituire [Enter your Symmetric Key here] con la chiave del dispositivo derivata generata in Derivare una chiave del dispositivo.
    • Sostituire [Enter your Registration ID here] con l'ID di registrazione scelto in Scegliere un ID di registrazione univoco per il dispositivo.
    private static final String SCOPE_ID = "[Your scope ID here]";
    private static final String GLOBAL_ENDPOINT = "[Your Provisioning Service Global Endpoint here]";
    private static final String SYMMETRIC_KEY = "[Enter your Symmetric Key here]";
    private static final String REGISTRATION_ID = "[Enter your Registration ID here]";
    

    Attenzione

    Tenere presente che questo passaggio lascia inclusa la chiave del dispositivo derivata come parte dell'immagine per ogni dispositivo, che non è una procedura consigliata per la sicurezza. Questo è un motivo per cui la sicurezza e la facilità d'uso sono spesso compromessi. È necessario esaminare completamente la sicurezza dei dispositivi in base ai propri requisiti.

  5. Aprire un prompt dei comandi per la compilazione. Passare alla cartella del progetto di esempio di provisioning del repository Java SDK.

    cd azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-symmetrickey-individual-sample
    
  6. Compilare l'esempio.

    mvn clean install
    
  7. Passare alla target cartella ed eseguire il file creato .jar . java Nel comando sostituire il {version} segnaposto con la versione nel nome file nel .jar computer.

    cd target
    java -jar ./provisioning-symmetrickey-individual-sample-{version}-with-deps.jar
    
  8. Verrà ora visualizzato un risultato simile all'output seguente.

    Starting...
    Beginning setup.
    WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
    2022-10-07 18:14:48,388 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.2
    2022-10-07 18:14:48,390 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread...
    Waiting for Provisioning Service to register
    2022-10-07 18:14:48,392 INFO (global.azure-devices-provisioning.net-002edcf5-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service...
    2022-10-07 18:14:48,518 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Connection to device provisioning service opened successfully, sending initial device registration message
    2022-10-07 18:14:48,521 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using symmetric key
    2022-10-07 18:14:49,252 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device...
    2022-10-07 18:14:49,253 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING
    2022-10-07 18:14:52,459 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully
    IotHUb Uri : contoso-hub-2.azure-devices.net
    Device ID : sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
    2022-10-07 18:14:58,424 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true
    2022-10-07 18:14:58,436 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true
    2022-10-07 18:14:58,440 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.1.1
    2022-10-07 18:14:58,450 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection...
    2022-10-07 18:14:58,471 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet...
    2022-10-07 18:14:59,314 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged
    2022-10-07 18:14:59,315 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6/messages/devicebound/#
    2022-10-07 18:14:59,378 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6/messages/devicebound/# was acknowledged
    2022-10-07 18:14:59,379 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully
    2022-10-07 18:14:59,381 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established
    2022-10-07 18:14:59,383 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK
    2022-10-07 18:14:59,389 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads
    2022-10-07 18:14:59,392 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details
    2022-10-07 18:14:59,395 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully
    2022-10-07 18:14:59,404 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully
    Sending message from device to IoT Hub...
    2022-10-07 18:14:59,408 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] )
    Press any key to exit...
    2022-10-07 18:14:59,409 DEBUG (contoso-hub-2.azure-devices.net-sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6-c32c76d0-Cxn0e70bbf7-8476-441d-8626-c17250585ee6-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] )
    2022-10-07 18:14:59,777 DEBUG (MQTT Call: sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - IotHub message was acknowledged. Checking if there is record of sending this message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] )
    2022-10-07 18:14:59,779 DEBUG (contoso-hub-2.azure-devices.net-sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6-c32c76d0-Cxn0e70bbf7-8476-441d-8626-c17250585ee6-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking the callback function for sent message, IoT Hub responded to message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) with status OK
    Message received! Response status: OK
    

Confermare la registrazione del provisioning dei dispositivi

In questa esercitazione sono stati usati i criteri di allocazione della configurazione statica per assegnare i dispositivi registrati tramite il gruppo di registrazione allo stesso hub IoT. Tuttavia, per le allocazioni in cui è possibile eseguire il provisioning di un dispositivo in uno dei diversi hub IoT, è possibile esaminare i record di registrazione del gruppo di registrazione per vedere l'hub IoT in cui è stato effettuato il provisioning del dispositivo:

  1. Nella portale di Azure passare all'istanza del servizio Device Provisioning.

  2. Nel menu Impostazioni selezionare Gestisci registrazioni.

  3. Selezionare Gruppi di registrazione.

  4. Selezionare il gruppo di registrazione creato per questa esercitazione.

  5. Nella pagina Dettagli gruppo di registrazione selezionare Stato registrazione.

  6. Trovare l'ID dispositivo per la colonna ID dispositivo e annotare l'hub IoT nella colonna Hub IoT assegnato.

    È possibile selezionare il record del dispositivo per visualizzare altri dettagli, ad esempio il gemello iniziale assegnato al dispositivo.

Per verificare il dispositivo nell'hub IoT:

  1. Nella portale di Azure passare all'hub IoT a cui è stato assegnato il dispositivo.

  2. Nel menu Gestione dei dispositivi selezionare Dispositivi.

  3. Se il provisioning del dispositivo è stato eseguito correttamente, l'ID dispositivo dovrebbe essere visualizzato nell'elenco, con Stato impostato su abilitato. Se il dispositivo non è visualizzato, selezionare Aggiorna.

    Il dispositivo viene registrato con l'hub IoT

Nota

Se lo stato iniziale del dispositivo gemello è stato modificato dal valore predefinito nel gruppo di registrazione, un dispositivo può eseguire il pull dello stato del dispositivo gemello desiderato dall'hub e agire di conseguenza. Per altre informazioni, vedere Comprendere e usare dispositivi gemelli nell'hub IoT.

Effettuare il provisioning di più dispositivi

Per effettuare il provisioning di più dispositivi tramite il gruppo di registrazione, seguire la procedura descritta nelle sezioni precedenti per:

  1. Scegliere un ID di registrazione univoco per il dispositivo.

  2. Derivare una chiave del dispositivo. Come in precedenza, usare la chiave primaria per il gruppo di registrazione come chiave di gruppo.

  3. Eseguire il codice di provisioning del dispositivo. Sostituire gli artefatti necessari con la nuova chiave del dispositivo derivata e l'ID di registrazione.

Pulire le risorse

Se si prevede di continuare a lavorare ed esplorare l'esempio client del dispositivo, non pulire le risorse create in questa esercitazione. Se non si prevede di continuare, seguire questa procedura per eliminare tutte le risorse create in questa esercitazione.

Eliminare il gruppo di registrazione

L'eliminazione di un gruppo di registrazione non comporta l'eliminazione dei record di registrazione associati. Questi record orfani vengono conteggiati rispetto alla quota di registrazioni per l'istanza del servizio Device Provisioning. Per questo motivo, è consigliabile eliminare tutti i record di registrazione associati a un gruppo di registrazione prima di eliminare il gruppo di registrazione stesso.

  1. Nella portale di Azure passare all'istanza del servizio Device Provisioning.

  2. Nel menu Impostazioni selezionare Gestisci registrazioni.

  3. Selezionare la scheda Gruppi di registrazione.

  4. Selezionare il nome del gruppo di registrazione usato per questa esercitazione per aprire la relativa pagina dei dettagli.

  5. Nella pagina Dettagli registrazione selezionare Stato registrazione. Selezionare quindi la casella di controllo accanto all'intestazione di colonna ID dispositivo per selezionare tutti i record di registrazione per il gruppo di registrazione. Selezionare Elimina nella parte superiore della pagina per eliminare i record di registrazione.

  6. Tornare alla pagina Gestisci registrazioni .

  7. Selezionare la casella di controllo accanto al nome del gruppo di registrazione usato per questa esercitazione.

  8. Nella parte superiore della pagina selezionare Elimina.

Eliminare le registrazioni dei dispositivi da hub IoT

  1. Nella portale di Azure passare all'hub IoT a cui è stato assegnato il dispositivo.

  2. Selezionare Dispositivi nella sezione Gestione dispositivi del menu di spostamento.

  3. Selezionare la casella di controllo accanto all'ID dispositivo dei dispositivi registrati in questa esercitazione.

  4. Nella parte superiore della pagina selezionare Elimina.

Passaggi successivi

In questa esercitazione è stato effettuato il provisioning di più dispositivi in un singolo hub IoT usando un gruppo di registrazione. Informazioni su come eseguire il provisioning di dispositivi IoT in più hub.