Creare ed effettuare il provisioning di un dispositivo IoT Edge in Linux usando certificati X.509

Si applica a: Segno di spunta IoT Edge 1.5 IoT Edge 1.5 Segno di spunta IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.5 LTS e IoT Edge 1.4 LTS sono versioni supportate. IoT Edge 1.4 LTS raggiungerà il fine vita il 12 novembre 2024. Se si usa una versione precedente, vedere Aggiornare IoT Edge.

Questo articolo fornisce istruzioni end-to-end per la registrazione e il provisioning di un dispositivo IoT Edge in Linux, inclusa l'installazione di IoT Edge.

Ogni dispositivo che si connette a un hub IoT è dotato di un ID dispositivo, che viene usato per tenere traccia delle comunicazioni da cloud a dispositivo o da dispositivo a cloud. Configurare un dispositivo con le relative informazioni di connessione, che includono il nome host dell'hub IoT, l'ID dispositivo e le informazioni utilizzate dal dispositivo per l'autenticazione nell'hub IoT.

I passaggi descritti nel presente articolo illustrano un processo denominato provisioning manuale, in cui si connette un singolo dispositivo all'hub IoT. Per il provisioning manuale sono disponibili due opzioni per l'autenticazione dei dispositivi IoT Edge:

  • Chiavi simmetriche: quando si crea una nuova identità del dispositivo nell'hub IoT, il servizio crea due chiavi. Si inserisce una delle chiavi nel dispositivo e questa viene presentata all'hub IoT in fase di autenticazione.

    Questo metodo di autenticazione risulta più rapido per iniziare, ma non è il più sicuro.

  • X.509 autofirmato: creare due certificati di identità X.509 e inserirli nel dispositivo. Quando si crea una nuova identità del dispositivo nell'hub IoT, si forniscono le identificazioni personali di entrambi i certificati. Quando il dispositivo esegue l'autenticazione nell'hub IoT, presenta un certificato e l'hub IoT verifica che tale certificato corrisponda all'identificazione personale.

    Questo metodo di autenticazione è più sicuro ed è consigliato per gli scenari di produzione.

Questo articolo illustra l'uso dei certificati X.509 come metodo di autenticazione. Per usare chiavi simmetriche, vedere Creare ed effettuare il provisioning di un dispositivo IoT Edge in Linux usando chiavi simmetriche.

Nota

Se i dispositivi da configurare sono numerosi e non si desidera eseguire manualmente il provisioning di ognuno, consultare uno degli articoli seguenti riguardanti il funzionamento di IoT Edge con il servizio Device Provisioning in hub IoT:

Prerequisiti

Questo articolo illustra la registrazione del dispositivo IoT Edge e l'installazione di IoT Edge nel dispositivo. Queste attività presentano prerequisiti differenti e sono richieste utilità diverse per eseguirle. Prima di procedere, assicurarsi di avere soddisfatto tutti i prerequisiti.

Strumenti di gestione dei dispositivi

È possibile usare il portale di Azure, Visual Studio Code o l'interfaccia della riga di comando di Azure per la procedura di registrazione del dispositivo. Ogni utilità ha prerequisiti specifici o può essere necessario installarla:

Un hub IoT gratuito o standard nella sottoscrizione di Azure.

Requisiti dei dispositivi

Un dispositivo Linux X64, ARM32 o ARM64.

Microsoft pubblica pacchetti di installazione per un'ampia gamma di sistemi operativi.

Per informazioni aggiornate sui sistemi operativi attualmente supportati per scenari di produzione, vedere Sistemi supportati da Azure IoT Edge.

Generare certificati di identità del dispositivo

Il provisioning manuale con certificati X.509 richiede IoT Edge versione 1.0.10 o successiva.

Quando si effettua il provisioning di un dispositivo IoT Edge con certificati X.509, si usa il cosiddetto certificato di identità del dispositivo. Questo certificato viene utilizzato solo per il provisioning di un dispositivo IoT Edge e l'autenticazione del dispositivo con l'hub IoT di Azure. Si tratta di un certificato foglia che non firma altri certificati. Il certificato di identità del dispositivo è separato dai certificati dell'autorità di certificazione (CA) che il dispositivo IoT Edge presenta ai moduli o ai dispositivi downstream a scopo di verifica.

Per l'autenticazione del certificato X.509, le informazioni di autenticazione di ogni dispositivo vengono fornite sotto forma di identificazioni personali ottenute dai certificati di identità del dispositivo. Queste identificazioni personali vengono fornite all'hub IoT al momento della registrazione del dispositivo, in modo che il servizio possa riconoscere il dispositivo quando si connette.

Per altre informazioni sull'uso dei certificati della CA nei dispositivi IoT Edge, vedere Informazioni sulla modalità di utilizzo dei certificati da parte di Azure IoT Edge.

Per il provisioning manuale con X.509 sono necessari i file seguenti:

  • Due certificati di identità del dispositivo con i certificati di chiave privata corrispondenti nei formati .cer o .pem. Sono necessari due certificati di identità del dispositivo per la rotazione dei certificati. Una procedura consigliata consiste nel preparare due diversi certificati di identità del dispositivo con date di scadenza differenti. Se un certificato scade, l'altro è ancora valido e consente di ruotare il certificato scaduto.

    Un set di file di certificato e di chiave viene fornito al runtime IoT Edge. Quando si creano certificati di identità del dispositivo, impostare il nome comune (CN) del certificato sull'ID dispositivo che si vuole che il dispositivo abbia nell'hub IoT.

  • Identificazioni personali ricavate da entrambi i certificati di identità del dispositivo. L'hub IoT richiede due identificazioni personali durante la registrazione di un dispositivo IoT Edge. È possibile utilizzare un solo certificato per la registrazione. Per usare un singolo certificato, impostare la stessa identificazione personale del certificato per le identificazioni personali primaria e secondaria durante la registrazione del dispositivo.

    I valori di identificazione personale sono costituiti da 40 caratteri esadecimali per gli hash SHA-1 o 64 caratteri esadecimali per gli hash SHA-256. Entrambe le identificazioni personali vengono fornite all'hub IoT al momento della registrazione del dispositivo.

    Un modo per recuperare l'identificazione personale da un certificato è tramite il comando openssl seguente:

    openssl x509 -in <certificate filename>.pem -text -fingerprint
    

    L'identificazione personale è inclusa nell'output di questo comando. Ad esempio:

    SHA1 Fingerprint=D2:68:D9:04:9F:1A:4D:6A:FD:84:77:68:7B:C6:33:C0:32:37:51:12
    

Se non sono disponibili certificati, è possibile creare certificati demo per testare le funzionalità del dispositivo IoT Edge. Seguire le istruzioni in questo articolo per configurare gli script di creazione dei certificati, generare un certificato CA radice, nonché creare un certificato di identità per un dispositivo IoT Edge. A scopi di test, è possibile creare un singolo certificato di identità del dispositivo e usare la stessa identificazione personale per i valori di identificazione personale primaria e secondaria durante la registrazione del dispositivo nell'hub IoT.

Registrare il dispositivo

È possibile usare il portale di Azure, Visual Studio Code o l'l'interfaccia della riga di comando di Azure per la registrazione del dispositivo, a seconda delle preferenze.

Nell'hub IoT nel portale di Azure, i dispositivi IoT Edge vengono creati e gestiti separatamente dai dispositivi IoT non abilitati per Edge.

  1. Accedere al portale di Azure e passare all'hub IoT.

  2. Nel riquadro sinistro selezionare Dispositivi dal menu e quindi scegliere Aggiungi dispositivo.

  3. Nella pagina Crea un dispositivo specificare le informazioni seguenti:

    • Creare un ID dispositivo descrittivo. Prendere nota di questo ID dispositivo, perché verrà usato in un secondo momento.
    • Selezionare la casella di controllo Dispositivo IoT Edge.
    • Selezionare X.509 autofirmato come tipo di autenticazione.
    • Specificare le identificazioni personali del certificato di identità primaria e secondaria. I valori di identificazione personale sono costituiti da 40 caratteri esadecimali per gli hash SHA-1 o 64 caratteri esadecimali per gli hash SHA-256. Il portale di Azure supporta solo valori esadecimali. Rimuovere i separatori di colonna e gli spazi dai valori di identificazione personale prima di immetterli nel portale. Ad esempio, D2:68:D9:04:9F:1A:4D:6A:FD:84:77:68:7B:C6:33:C0:32:37:51:12 va immesso come D268D9049F1A4D6AFD8477687BC633C032375112.

    Suggerimento

    Se si stanno eseguendo test e si vuole usare un solo certificato, è possibile utilizzare lo stesso certificato per le identificazioni personali primaria e secondaria.

  4. Seleziona Salva.

Dopo aver registrato un dispositivo nell'hub IoT, recuperare le informazioni utilizzate per completare l'installazione e il provisioning del runtime IoT Edge.

Visualizzare i dispositivi registrati e recuperare le informazioni di provisioning

Per completare l'installazione e il provisioning del runtime IoT Edge, i dispositivi che utilizzano l'autenticazione del certificato X.509 richiedono il nome dell'hub IoT, il nome del dispositivo e i relativi file di certificato.

I dispositivi abilitati per Edge che si connettono all'hub IoT sono elencati nella pagina Dispositivi. È possibile filtrare l'elenco in base al tipo di dispositivi IoT Edge.

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.

Per i sistemi operativi della piattaforma supportati di livello 2, i pacchetti di installazione vengono resi disponibili nelle versioni di Azure IoT Edge. Vedere i passaggi di installazione in Installazione offline o di una versione specifica.

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

  • 24.04:

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

    wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    
  • 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
    

Per altre informazioni sulle versioni del sistema operativo, vedere Piattaforme supportate da Azure IoT Edge.

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 è il motore di contenitore ufficialmente supportato con IoT Edge. Le immagini del contenitore Docker CE/EE sono compatibili con il runtime di Moby. Se si usano pacchetti snap di Ubuntu Core, lo snap di Docker è gestito da Canonical ed è supportato per gli scenari di produzione.

Installare il motore Moby.

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

Per impostazione predefinita, il motore di contenitore non imposta limiti di dimensioni per i log dei contenitori. Nel corso del tempo questo può causare il riempimento del dispositivo con i log e l'esaurimento dello spazio su disco. È possibile, tuttavia, configurare il log per la visualizzazione locale, anche se è facoltativo. Per altre informazioni sulla configurazione della registrazione, vedere Elenco di controllo della distribuzione di produzione.

I passaggi seguenti illustrano come configurare il contenitore per l'uso del driver di registrazione local come meccanismo di registrazione.

  1. Creare o modificare il file di configurazione del daemon Docker esistente

    sudo nano /etc/docker/daemon.json
    
  2. Impostare il driver di registrazione predefinito sul driver di registrazione local, come illustrato nell'esempio.

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

    sudo systemctl restart docker
    

Installare il runtime IoT Edge.

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

Nota

A partire dalla versione 1.2, il servizio di identità IoT controlla il provisioning e la gestione delle identità per IoT Edge e per altri componenti del dispositivo che devono comunicare con l'hub IoT.

I passaggi in questa sezione rappresentano il processo tipico per l'installazione dell'ultima versione di IoT Edge in un dispositivo dotato di 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.

Suggerimento

Se già si dispone di un dispositivo IoT Edge che esegue una versione precedente e si desidera eseguire l'aggiornamento all'ultima versione, seguire la procedura descritta in Aggiornare il daemon di sicurezza e il runtime IoT Edge. Le versioni successive sono tanto diverse dalle versioni precedenti di IoT Edge che occorrono passaggi specifici per l'aggiornamento.

Installare l'ultima versione di IoT Edge e il pacchetto del servizio di identità IoT, se non è già aggiornato:

  • 22.04:

    sudo apt-get update; \
       sudo apt-get install aziot-edge
    
  • 20.04:

    sudo apt-get update; \
       sudo apt-get install aziot-edge defender-iot-micro-agent-edge
    

Il pacchetto defender-iot-micro-agent-edge facoltativo include il micro-agente di sicurezza di Microsoft Defender per IoT, che fornisce visibilità dell'endpoint nella gestione della postura di sicurezza, nelle vulnerabilità, nel rilevamento delle minacce, nella gestione della flotta e altro, facilitando la protezione dei dispositivi IoT Edge. È consigliabile installare il micro agente con l'agente Edge per abilitare il monitoraggio della sicurezza e la protezione avanzata dei dispositivi Edge. Per altre informazioni su Microsoft Defender per IoT, vedere Che cos'è Microsoft Defender per IoT per i generatori di dispositivi.

Effettuare il provisioning del dispositivo con la relativa identità cloud

Una volta installati il motore di contenitore e il runtime di IoT Edge nel dispositivo, è possibile configurare il dispositivo con le relative informazioni di autenticazione e identità cloud.

  1. Creare un file di configurazione per il dispositivo in base a un file modello fornito come parte dell'installazione di IoT Edge.

    sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml
    
  2. Nel dispositivo IoT Edge aprire il file di configurazione.

    sudo nano /etc/aziot/config.toml
    
  3. Trovare la sezione Provisioning del file e rimuovere il commento dalle righe per il provisioning manuale con il certificato di identità X.509. Verificare che tutte le altre sezioni di provisioning siano impostate come commento.

    # Manual provisioning with x.509 certificates
    [provisioning]
    source = "manual"
    iothub_hostname = "REQUIRED_IOTHUB_HOSTNAME"
    device_id = "REQUIRED_DEVICE_ID_PROVISIONED_IN_IOTHUB"
    
    [provisioning.authentication]
    method = "x509"
    
    identity_cert = "REQUIRED_URI_OR_POINTER_TO_DEVICE_IDENTITY_CERTIFICATE"
    
    identity_pk = "REQUIRED_URI_TO_DEVICE_IDENTITY_PRIVATE_KEY"
    

Aggiorna i seguenti campi:

  • iothub_hostname: nome host dell'hub IoT a cui si connette il dispositivo. Ad esempio: {IoT hub name}.azure-devices.net.
  • device_id: ID specificato al momento della registrazione del dispositivo.
  • identity_cert: URI a un certificato di identità nel dispositivo, ad esempio file:///path/identity_certificate.pem. In alternativa, rilasciare dinamicamente il certificato usando EST o un'autorità di certificazione locale.
  • identity_pk: URI del file di chiave privata per il certificato di identità fornito, ad esempio: file:///path/identity_key.pem. In alternativa, specificare un URI PKCS#11 e quindi specificare le informazioni di configurazione nella

sezione PKCS#11 più avanti nel file di configurazione.

Per altre informazioni sui certificati, vedere Gestire i certificati IoT Edge.

Salva e chiude il file .

CTRL + X, Y, Enter

Dopo aver immesso le informazioni di provisioning nel file di configurazione, applicare le modifiche:

sudo iotedge config apply

Distribuire i moduli

Per distribuire i moduli IoT Edge, passare all'hub IoT nel portale di Azure, quindi:

  1. Selezionare Dispositivi dal menu dell'hub IoT.

  2. Selezionare il dispositivo per aprire la relativa pagina.

  3. Selezionare la scheda Imposta moduli.

  4. Poiché lo scopo è distribuire i moduli predefiniti di IoT Edge (edgeAgent ed edgeHub), non è necessario aggiungere moduli a questo riquadro, quindi selezionare Rivedi e crea nella parte inferiore.

  5. Viene visualizzata la conferma JSON dei moduli. Selezionare Crea per distribuire i moduli.<

Per altre informazioni, vedere Distribuire un modulo.

Verificare la corretta configurazione

Verificare che il runtime sia stato installato e configurato correttamente nel dispositivo IoT Edge.

Suggerimento

Per eseguire comandi iotedge sono necessari privilegi elevati. Quando ci si disconnette dal computer e si accede di nuovo per la prima volta dopo l'installazione del runtime IoT Edge, le autorizzazioni vengono aggiornate automaticamente. Fino ad allora, usare sudo davanti ai comandi.

Verificare che il servizio di sistema IoT Edge sia in esecuzione.

sudo iotedge system status

Una risposta che indica lo stato riuscito è Ok.

Se è necessario risolvere problemi del servizio, recuperare i log di servizio.

sudo iotedge system logs

Usare lo strumento check per verificare lo stato di configurazione e connessione del dispositivo.

sudo iotedge check

Sono possibili svariate risposte, tra cui OK (verde), Avviso (giallo) o Errore (rosso). Per la risoluzione di errori comuni, vedere Soluzioni ai problemi comuni per Azure IoT Edge.

Screenshot delle risposte di esempio dal comando check.

Suggerimento

Usare sempre sudo per eseguire lo strumento di controllo, anche dopo l'aggiornamento delle autorizzazioni. Lo strumento richiede privilegi elevati per accedere al file di configurazione per la verifica dello stato di configurazione.

Nota

In un dispositivo di cui è stato appena effettuato il provisioning potrebbe essere visualizzato un errore correlato all'hub di IoT Edge:

× idoneità alla produzione: la directory di archiviazione dell'hub di Edge è persistente nel file system host - Errore

Non è stati possibile controllare lo stato corrente del contenitore edgeHub

Questo errore è previsto in un dispositivo di cui è stato appena effettuato il provisioning, perché il modulo hub di IoT Edge non è in esecuzione. Per risolvere l'errore, nell'hub IoT impostare i moduli per il dispositivo e creare una distribuzione. La creazione di una distribuzione per il dispositivo avvia i moduli al suo interno, incluso il modulo hub di IoT Edge.

Visualizzare tutti i moduli in esecuzione nel dispositivo IoT Edge. Quando il servizio viene avviato per la prima volta, verrà visualizzato solo il modulo edgeAgent in esecuzione. Il modulo edgeAgent viene eseguito per impostazione predefinita e permette di installare e avviare tutti i moduli aggiuntivi distribuiti nel dispositivo.

sudo iotedge list

Quando si crea un nuovo dispositivo IoT Edge, viene visualizzato il codice di stato 417 -- The device's deployment configuration is not set nel portale di Azure. Questo stato è normale e significa che il dispositivo è pronto per ricevere una distribuzione del modulo.

Installazione offline o di una versione specifica (facoltativo)

I passaggi in questa sezione riguardano scenari non coperti dalla procedura di installazione standard. Possono includere:

  • Installare IoT Edge offline
  • Installare di una versione finale candidata

Seguire la procedura in questa sezione se si vuole installare una versione specifica del runtime Azure IoT Edge non disponibile tramite la gestione pacchetti. L'elenco dei pacchetti Microsoft contiene solo un set limitato di versioni recenti e delle relative versioni secondarie, quindi questi passaggi sono destinati a chi desidera installare una versione precedente o una versione finale candidata.

Se si usano snap di Ubuntu, è possibile scaricare uno snap e installarlo offline. Per altre informazioni, vedere Scaricare snap e installare offline.

Tramite comandi curl è possibile specificare come destinazione i file dei componenti direttamente dal repository GitHub di IoT Edge.

  1. Passare alle versioni di Azure IoT Edgee trovare la versione di rilascio desiderata come destinazione.

  2. Espandere la sezione Asset per tale versione.

  3. Ogni versione deve avere nuovi file per IoT Edge e il servizio di identità. Se si intende installare IoT Edge in un dispositivo offline, scaricare questi file in anticipo. In alternativa, usare i comandi seguenti per aggiornare tali componenti.

    1. Trovare il file aziot-identity-service corrispondente all'architettura del dispositivo IoT Edge. Fare doppio clic sul collegamento del file e copiare l'indirizzo del collegamento.

    2. Usare il collegamento copiato nel comando seguente per installare quella versione del servizio di identità:

      curl -L <identity service link> -o aziot-identity-service.deb && sudo apt-get install ./aziot-identity-service.deb
      

    1. Trovare il file aziot-edge corrispondente all'architettura del dispositivo IoT Edge. Fare doppio clic sul collegamento del file e copiare l'indirizzo del collegamento.

    2. Usare il collegamento copiato nel comando seguente per installare quella versione di IoT Edge.

      curl -L <iotedge link> -o aziot-edge.deb && sudo apt-get install ./aziot-edge.deb
      

Disinstallare IoT Edge

Se si vuole rimuovere l'installazione di IoT Edge dal dispositivo, usare i comandi seguenti.

Rimuovere il runtime IoT Edge.

sudo apt-get autoremove --purge aziot-edge

Omettere il flag --purge se si prevede di reinstallare IoT Edge e usare le stesse informazioni di configurazione in futuro. I flag --purge eliminano tutti i file associati a IoT Edge, inclusi i file di configurazione.

Quando il runtime IoT Edge viene rimosso, i contenitori creati vengono arrestati, ma rimangono sul dispositivo. Verificare tutti i contenitori per vedere quali vengono conservati.

sudo docker ps -a

Eliminare i contenitori dal dispositivo, inclusi i due contenitori di runtime.

sudo docker rm -f <container name>

Infine, rimuovere il runtime del contenitore dal dispositivo.

sudo apt-get autoremove --purge moby-engine