Creare ed effettuare il provisioning di dispositivi IoT Edge su larga scala in Linux usando la chiave simmetrica

Si applica a: Icona Sì IoT Edge 1.1

Importante

La data di fine del supporto di IoT Edge 1.1 è stata il 13 dicembre 2022. Controlla il ciclo di vita dei prodotti Microsoft per ottenere informazioni sul modo in cui viene supportato questo prodotto, servizio, tecnologia o API. Per altre informazioni sull'aggiornamento alla versione più recente di IoT Edge, vedere Aggiornare IoT Edge.

Questo articolo fornisce istruzioni end-to-end per il provisioning automatico di uno o più dispositivi IoT Edge Linux usando chiavi simmetriche. È possibile effettuare automaticamente il provisioning di dispositivi Azure IoT Edge con servizio Device Provisioning in hub IoT di Azure (DPS). Se non si ha familiarità con il processo di provisioning automatico, vedere la panoramica sul provisioning prima di continuare.

Le attività sono le seguenti:

  1. Creare una registrazione singola per un singolo dispositivo o una registrazione di gruppo per un set di dispositivi.
  2. Installare il runtime IoT Edge e connettersi all'hub IoT.

L'attestazione con chiave simmetrica costituisce un approccio semplice per autenticare un dispositivo con un'istanza del servizio Device Provisioning. Questo metodo di attestazione rappresenta un'esperienza di "Hello World" per gli sviluppatori che non hanno familiarità con il provisioning dei dispositivi o che non possiedono requisiti di sicurezza restrittivi. L'attestazione del dispositivo mediante un TPM o certificati X.509 è più sicura e deve essere usata per requisiti di sicurezza più rigorosi.

Prerequisiti

Risorse cloud

  • Un hub IoT attivo
  • Un'istanza del servizio Device Provisioning in Hub IoT in Azure, collegata all'hub IoT

Requisiti dei dispositivi

Un dispositivo Linux fisico o virtuale che fungerà da dispositivo IoT Edge.

Sarà 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. Ad esempio, si può usare 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. I caratteri validi sono i caratteri alfanumerici minuscoli e il trattino (-).

Creare una registrazione nel servizio Device Provisioning

Creare una registrazione per effettuare il provisioning di uno o più dispositivi tramite il servizio Device Provisioning.

Se si vuole effettuare il provisioning di un singolo dispositivo IoT Edge, creare una registrazione singola. Se è necessario effettuare il provisioning di più dispositivi, seguire la procedura per creare una registrazione di gruppo nel servizio Device Provisioning.

Quando si crea una registrazione nel servizio Device Provisioning, si ha la possibilità di dichiarare un valore di Stato iniziale dispositivo gemello. Nel dispositivo gemello è possibile impostare tag per raggruppare i dispositivi in base a una qualsiasi metrica necessaria nella propria soluzione, come l'area, l'ambiente, la località o il tipo di dispositivo. Questi tag vengono usati per creare distribuzioni automatiche.

Per altre informazioni sulle registrazioni nel servizio Device Provisioning, vedere Come gestire le registrazioni dei dispositivi.

Creare una registrazione singola nel servizio Device Provisioning

Suggerimento

I passaggi descritti in questo articolo sono relativi al portale di Azure, ma è anche possibile creare registrazioni singole usando l'interfaccia della riga di comando di Azure. Per altre informazioni, vedere az iot dps enrollment. Come parte del comando dell'interfaccia della riga di comando, usare il flag edge-enabled per specificare che la registrazione è per un dispositivo IoT Edge.

  1. Nel portale di Azure passare all'istanza del servizio Device Provisioning in hub IoT.

  2. In le impostazioni selezionare Gestisci registrazioni.

  3. Selezionare Aggiungi registrazione singola, quindi completare la procedura seguente per configurare la registrazione:

    1. Per Meccanismo selezionare Chiave simmetrica.

    2. Creare un ID registrazione univoco per il dispositivo.

    3. Facoltativamente, specificare un ID dispositivo hub IoT per il dispositivo. È possibile usare gli ID dispositivo per identificare come destinazione un singolo dispositivo per la distribuzione di moduli. Se non si specifica un ID dispositivo, viene usato l'ID di registrazione.

    4. Selezionare Vero per dichiarare che la registrazione è per un dispositivo IoT Edge.

    5. Facoltativamente, aggiungere un valore di tag allo Stato iniziale dispositivo gemello. È possibile usare tag per identificare come destinazione gruppi di dispositivi per la distribuzione di moduli. Ad esempio:

      {
         "tags": {
            "environment": "test"
         },
         "properties": {
            "desired": {}
         }
      }
      
    6. Seleziona Salva.

  4. Copiare il valore della Chiave primaria della registrazione singola per usarlo durante l'installazione del runtime IoT Edge.

Ora che esiste una registrazione per questo dispositivo, il runtime IoT Edge può effettuare automaticamente il provisioning del dispositivo durante l'installazione.

Installare IoT Edge

In questa sezione si prepara la macchina virtuale Linux o il dispositivo fisico per IoT Edge. Quindi si installa IoT Edge.

Eseguire i comandi seguenti per aggiungere il repository di pacchetti, quindi aggiungere la chiave di firma del pacchetto Microsoft all'elenco di chiavi attendibili.

Importante

Il 30 giugno 2022, il sistema operativo Raspberry Pi OS Stretch è stato ritirato dall'elenco dei sistemi operativi supportati di livello 1. Per evitare potenziali vulnerabilità di sicurezza, aggiornare il sistema operativo host a Bullseye.

L'installazione può essere eseguita con pochi comandi. Aprire un terminale ed eseguire i comandi seguenti:

  • 20.04:

    wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    
  • 18.04:

    wget https://packages.microsoft.com/config/ubuntu/18.04/multiarch/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    

Nota

I pacchetti software di Azure IoT Edge sono soggetti alle condizioni di licenza disponibili in ogni pacchetto (in usr/share/doc/{package-name} o nella directory LICENSE). Prima di usare un pacchetto, leggere le condizioni di licenza. L'installazione e l'uso di un pacchetto implicano l'accettazione di tali condizioni. Se non si accettano le condizioni di licenza, non usare il pacchetto.

Installare un motore di contenitore

Azure IoT Edge si basa su un runtime del contenitore compatibile con OCI. Per gli scenari di produzione è consigliabile usare il motore Moby. Il motore Moby è l'unico motore di contenitori ufficialmente supportato con IoT Edge. Le immagini del contenitore Docker CE/EE sono compatibili con il runtime di Moby.

Installare il motore Moby.

sudo apt-get update; \
  sudo apt-get install moby-engine

Dopo aver installato correttamente il motore Moby, configurarlo per l'uso local del driver di registrazione come meccanismo di registrazione. Per altre informazioni sulla configurazione della registrazione, vedere Elenco di controllo della distribuzione di produzione.

  • Creare o aprire il file di configurazione del daemon Docker in /etc/docker/daemon.json.

  • Impostare il driver di registrazione predefinito sul local driver di registrazione, come illustrato nell'esempio seguente.

       {
          "log-driver": "local"
       }
    
  • Riavviare il motore di contenitore per applicare le modifiche.

    sudo systemctl restart docker
    

    Suggerimento

    Se si verificano errori durante l'installazione del motore di contenitore Moby, verificare la compatibilità del kernel Linux con Moby. Alcuni produttori di dispositivi incorporati commercializzano immagini di dispositivo che contengono kernel Linux personalizzati senza le funzionalità necessarie per la compatibilità con il motore di contenitore. Eseguire il comando seguente, che usa lo script check-config fornito da Moby, per controllare la configurazione del kernel:

    curl -ssl https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh -o check-config.sh
    chmod +x check-config.sh
    ./check-config.sh
    

    Nell'output dello script controllare che tutti gli elementi in Generally Necessary e Network Drivers siano abilitati. Se mancano funzionalità, abilitarle ricompilando il kernel dall'origine e selezionando i moduli associati per l'inclusione nel file .config del kernel appropriato. Analogamente, se si usa un generatore di configurazione del kernel come defconfig o menuconfig, trovare e abilitare le rispettive funzionalità e ricompilare il kernel. Dopo aver distribuito il kernel appena modificato, eseguire nuovamente lo script check-config per verificare che tutte le funzionalità necessarie siano state abilitate correttamente.

Installare il runtime IoT Edge.

Il daemon di sicurezza di IoT Edge fornisce e gestisce gli standard di sicurezza nel dispositivo IoT Edge. Il daemon viene avviato a ogni avvio del dispositivo e ne esegue il bootstrap avviando la parte restante del runtime IoT Edge.

I passaggi descritti in questa sezione rappresentano il processo tipico per installare la versione più recente in un dispositivo con connessione Internet. Se è necessario installare una versione specifica, ad esempio una versione non definitiva, o se è necessario eseguire l'installazione offline, seguire i passaggi di Installazione offline o di una versione specifica riportati più avanti in questo articolo.

Installare IoT Edge versione 1.1.* insieme al pacchetto libiothsm-std :

sudo apt-get update; \
  sudo apt-get install iotedge

Nota

IoT Edge versione 1.1 è il ramo di supporto a lungo termine di IoT Edge. Se si esegue una versione precedente, è consigliabile installare o eseguire l'aggiornamento alla patch più recente perché le versioni precedenti non sono più supportate.

Effettuare il provisioning del dispositivo con la relativa identità cloud

Dopo aver installato il runtime nel dispositivo, configurarlo con le informazioni da usare per connettersi al servizio Device Provisioning e all'hub IoT.

Preparare le informazioni seguenti:

  • Valore Ambito ID del servizio Device Provisioning
  • ID di registrazione del dispositivo creato
  • Chiave primaria per una registrazione singola oppure chiave derivata per i dispositivi che usano una registrazione di gruppo.
  1. Aprire il file di configurazione nel dispositivo IoT Edge.

    sudo nano /etc/iotedge/config.yaml
    
  2. Trovare la sezione delle configurazioni di provisioning del file. Rimuovere il commento dalle righe per il provisioning di chiavi simmetriche dps e assicurarsi che tutte le altre righe di provisioning siano impostate come commento.

    La provisioning: riga non deve contenere spazi vuoti precedenti e gli elementi annidati devono essere rientrati in due spazi.

    # DPS TPM provisioning configuration
    provisioning:
      source: "dps"
      global_endpoint: "https://global.azure-devices-provisioning.net"
      scope_id: "PASTE_YOUR_SCOPE_ID_HERE"
      attestation:
        method: "symmetric_key"
        registration_id: "PASTE_YOUR_REGISTRATION_ID_HERE"
        symmetric_key: "PASTE_YOUR_PRIMARY_KEY_OR_DERIVED_KEY_HERE"
    
    # always_reprovision_on_startup: true
    # dynamic_reprovisioning: true
    
  3. Aggiornare i valori di scope_id, registration_id e symmetric_key con le informazioni sul dispositivo e sul servizio Device Provisioning.

  4. Facoltativamente, usare le always_reprovision_on_startup righe o dynamic_reprovisioning per configurare il comportamento di reprovisioning del dispositivo. Se un dispositivo è impostato per eseguire nuovamente il provisioning all'avvio, tenterà sempre di eseguire il provisioning con dps e quindi eseguirà il fallback al backup di provisioning in caso di errore. Se un dispositivo è impostato per eseguire il reprovisioning in modo dinamico, IoT Edge (e tutti i moduli) riavvierà e eseguirà il provisioning se viene rilevato un evento di reprovisioning, ad esempio se il dispositivo viene spostato da un hub IoT a un altro. In particolare, IoT Edge verifica la presenza bad_credential o device_disabled gli errori dell'SDK per rilevare l'evento di reprovisioning. Per attivare questo evento manualmente, disabilitare il dispositivo in hub IoT. Per altre informazioni, vedere Concetti di reprovisioning di un dispositivo hub IoT.

  5. Riavviare il runtime IoT Edge in modo che accetti tutte le modifiche alla configurazione apportate nel dispositivo.

    sudo systemctl restart iotedge
    

Verificare l'esito positivo dell'installazione

Se il runtime è stato avviato correttamente, è possibile passare all'hub IoT e iniziare la distribuzione di moduli IoT Edge nel dispositivo.

È possibile verificare che sia stata usata la registrazione singola creata nel servizio Device Provisioning. Passare all'istanza del servizio Device Provisioning nel portale di Azure. Aprire i dettagli della registrazione per la registrazione singola creata. Si noti che lo stato della registrazione è assegnata e che l'ID dispositivo è elencato.

Usare i comandi seguenti sul dispositivo per verificare che il runtime IoT Edge sia stato installato e avviato correttamente.

Verificare lo stato del servizio IoT Edge.

systemctl status iotedge

Esaminare i log del servizio.

journalctl -u iotedge --no-pager --no-full

Elencare i moduli in esecuzione.

iotedge list

Passaggi successivi

Il processo di registrazione del servizio Device Provisioning consente di impostare l'ID dispositivo e i tag del dispositivo gemello mentre si effettua il provisioning del nuovo dispositivo. È possibile usare questi valori per identificare come destinazione singoli dispositivi o gruppi di dispositivi usando la gestione automatica dei dispositivi. Informazioni su come Distribuire e monitorare i moduli IoT Edge su larga scala tramite il portale di Azure o usando l'interfaccia della riga di comando di Azure.