Creare ed effettuare il provisioning di dispositivi IoT Edge su larga scala in Linux usando certificati X.509

Si applica a:IoT Edge 1.4 checkmark IoT Edge 1.4

Importante

IoT Edge 1.4 è la versione supportata. Se si usa una versione precedente, vedere Aggiornare IoT Edge.

Questo articolo fornisce istruzioni end-to-end per il provisioning automatico di uno o più dispositivi Linux IoT Edge usando certificati X.509. È possibile effettuare automaticamente il provisioning dei dispositivi Azure IoT Edge con il servizio device provisioning (DPS) hub IoT di Azure. Se non si ha familiarità con il processo di provisioning automatico, esaminare la panoramica del provisioning prima di continuare.

Le attività sono le seguenti:

  1. Generare certificati e chiavi.
  2. Creare una registrazione singola per un singolo dispositivo o una registrazione di gruppo per un set di dispositivi.
  3. Installare il runtime di IoT Edge e registrare il dispositivo con hub IoT.

L'uso di certificati X.509 come meccanismo di attestazione è un ottimo modo per aumentare la produzione e semplificare il provisioning dei dispositivi. In genere, i certificati X.509 sono disposti in una catena di certificati di trust. A partire da un certificato radice autofirmato o attendibile, ogni certificato nella catena firma il certificato inferiore successivo. Questo modello crea una catena di attendibilità delegata dal certificato radice verso il basso attraverso ogni certificato intermedio al certificato finale del dispositivo downstream installato in un dispositivo.

Suggerimento

Se il dispositivo ha un modulo HSM (Hardware Security Module), ad esempio TPM 2.0, è consigliabile archiviare le chiavi X.509 in modo sicuro nel modulo di protezione hardware. Altre informazioni su come implementare il provisioning zero-touch su larga scala descritto in questo progetto con l'esempio iotedge-tpm2cloud .

Prerequisiti

Risorse cloud

  • Un hub IoT attivo
  • Istanza del servizio device provisioning hub IoT in Azure, collegata all'hub IoT
    • Se non si dispone di un'istanza del servizio device provisioning, è possibile seguire le istruzioni riportate nella guida introduttiva Creare un nuovo servizio di provisioning dei dispositivi hub IoT e Collegare l'hub IoT e il servizio device provisioning dell'avvio rapido hub IoT servizio device provisioning.
    • Dopo aver eseguito il servizio device provisioning, copiare il valore di Ambito ID dalla pagina di panoramica. Questo valore viene usato quando si configura il runtime IoT Edge.

Requisiti dei dispositivi

Un dispositivo Linux fisico o virtuale come dispositivo IoT Edge.

Generare certificati di identità del dispositivo

Il certificato di identità del dispositivo è un certificato del dispositivo downstream che si connette tramite una catena di certificati di attendibilità al certificato dell'autorità di certificazione X.509 principale. Il certificato di identità del dispositivo deve avere il nome comune (CN) impostato sull'ID dispositivo che si vuole che il dispositivo abbia nell'hub IoT.

I certificati di identità del dispositivo vengono usati solo per il provisioning del dispositivo IoT Edge e l'autenticazione del dispositivo con hub IoT di Azure. Non firmano certificati, a differenza dei certificati della CA che il dispositivo IoT Edge presenta ai moduli o ai dispositivi downstream per la verifica. Per altre informazioni, vedere Dettagli sull'utilizzo dei certificati di Azure IoT Edge.

Dopo aver creato il certificato di identità del dispositivo, è necessario avere due file: un file .cer o pem che contiene la parte pubblica del certificato e un file .cer o pem con la chiave privata del certificato. Se si prevede di usare la registrazione dei gruppi in DPS, è necessaria anche la parte pubblica di un certificato CA intermedio o radice nella stessa catena di certificati di attendibilità.

Per configurare il provisioning automatico con X.509, sono necessari i file seguenti:

  • Certificato di identità del dispositivo e certificato della chiave privata. Il certificato di identità del dispositivo viene caricato nel servizio Device Provisioning se si crea una registrazione singola. La chiave privata viene passata al runtime di IoT Edge.
  • Un certificato a catena completa, che deve avere almeno l'identità del dispositivo e i certificati intermedi in esso contenuti. Il certificato della catena completa viene passato al runtime di IoT Edge.
  • Un certificato CA intermedio o radice dalla catena di certificati di attendibilità. Questo certificato viene caricato nel servizio Device Provisioning se si crea una registrazione di gruppo.

Usare i certificati di test (facoltativo)

Se non si dispone di un'autorità di certificazione disponibile per creare nuovi certificati di identità e si vuole provare questo scenario, il repository Git di Azure IoT Edge contiene script che è possibile usare per generare certificati di test. Questi certificati sono progettati solo per i test di sviluppo e non devono essere usati nell'ambiente di produzione.

Per creare certificati di test, seguire la procedura descritta in Creare certificati demo per testare le funzionalità dei dispositivi IoT Edge. Completare le due sezioni necessarie per configurare gli script di generazione del certificato e per creare un certificato CA radice. Seguire quindi la procedura per creare un certificato di identità del dispositivo. Al termine, dovrebbe essere presente la catena di certificati e la coppia di chiavi seguenti:

  • <WRKDIR>/certs/iot-edge-device-identity-<name>-full-chain.cert.pem
  • <WRKDIR>/private/iot-edge-device-identity-<name>.key.pem

Questi certificati sono necessari nel dispositivo IoT Edge. Se si intende usare la registrazione singola in DPS, caricare il file con estensione cert.pem. Se si intende usare la registrazione di gruppo in DPS, è necessario anche un certificato CA intermedio o radice nella stessa catena di certificati di attendibilità da caricare. Se si usano certificati demo, usare il certificato per la <WRKDIR>/certs/azure-iot-test-only.root.ca.cert.pem registrazione del gruppo.

Creare una registrazione nel servizio Device Provisioning

Usare i certificati e le chiavi generati per creare una registrazione in DPS per uno o più dispositivi IoT Edge.

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

Quando si crea una registrazione nel servizio Device Provisioning, si ha la possibilità di dichiarare un valore di Stato dispositivo gemello iniziale. 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 del servizio Device Provisioning

Le registrazioni individuali accettano la parte pubblica del certificato di identità di un dispositivo e corrispondono al certificato nel dispositivo.

Suggerimento

I passaggi descritti in questo articolo sono relativi alla 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 abilitato per edge per specificare che la registrazione è per un dispositivo IoT Edge.

  1. Nella portale di Azure passare all'istanza di hub IoT servizio device provisioning.

  2. In le impostazioni selezionare Gestisci registrazioni.

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

    • Meccanismo: selezionare X.509.

    • File con estensione pem o .cer certificato primario: caricare il file pubblico dal certificato di identità del dispositivo. Se sono stati usati gli script per generare un certificato di test, scegliere il file seguente:

      <WRKDIR>\certs\iot-edge-device-identity-<name>.cert.pem

    • hub IoT ID dispositivo: specificare un ID per il dispositivo se si vuole. È 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 il nome comune (CN) nel certificato X.509.

    • Dispositivo IoT Edge: selezionare True per dichiarare che la registrazione è per un dispositivo IoT Edge.

    • Selezionare gli hub IoT a cui è possibile assegnare questo dispositivo: scegliere l'hub IoT collegato a cui si vuole connettere il dispositivo. È possibile scegliere più hub e il dispositivo verrà assegnato a uno di essi in base ai criteri di allocazione selezionati.

    • Stato dispositivo gemello iniziale: aggiungere un valore di tag da aggiungere al dispositivo gemello se si vuole. È possibile usare i tag per indirizzare i gruppi di dispositivi per la distribuzione automatica. Ad esempio:

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

In Gestisci registrazioni è possibile visualizzare l'IDregistrazione per la registrazione appena creata. Prendere nota di esso, perché può essere usato quando si effettua il provisioning del dispositivo.

Ora che esiste una registrazione per questo dispositivo, il runtime di 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. Installare quindi IoT Edge.

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

Importante

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

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

  • 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 (usr/share/doc/{package-name} o nella LICENSE directory). Leggere le condizioni di licenza prima di usare un pacchetto. L'installazione e l'uso di un pacchetto costituiscono l'accettazione di queste condizioni. Se non si accettano le condizioni di licenza, non usare tale 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

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

I passaggi seguenti illustrano come configurare il contenitore per l'uso local del driver di registrazione 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 local driver di registrazione, come illustrato nell'esempio.

       {
          "log-driver": "local"
       }
    
  3. Riavviare il motore del contenitore per rendere effettive 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 e avvia il dispositivo avviando il resto del runtime di IoT Edge.

Nota

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

I passaggi descritti in questa sezione rappresentano il processo tipico per installare la versione più recente di IoT Edge 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 della versione offline o specifici più avanti in questo articolo.

Suggerimento

Se si dispone già di un dispositivo IoT Edge che esegue una versione precedente e si vuole eseguire l'aggiornamento alla versione più recente, usare la procedura descritta in Aggiornare il daemon di sicurezza e il runtime di IoT Edge. Le versioni successive sono sufficientemente diverse dalle versioni precedenti di IoT Edge che sono necessari passaggi specifici per l'aggiornamento.

Installare la versione più recente di IoT Edge e il pacchetto del servizio di gestione delle 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 facoltativo defender-iot-micro-agent-edge include il micro-agente di sicurezza di Microsoft Defender per IoT che fornisce visibilità sugli endpoint sulla gestione del comportamento di sicurezza, sulle vulnerabilità, sul rilevamento delle minacce, sulla gestione della flotta e altro ancora per proteggere i dispositivi IoT Edge. È consigliabile installare il micro agente con l'agente Edge per abilitare il monitoraggio della sicurezza e la protezione avanzata dei dispositivi Perimetrali. 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

Dopo aver installato il runtime nel dispositivo, configurare il dispositivo con le informazioni usate per connettersi al servizio device provisioning e hub IoT.

Preparare le informazioni seguenti:

  • Valore ambito ID DPS. È possibile recuperare questo valore dalla pagina di panoramica dell'istanza del servizio Device Provisioning nella portale di Azure.
  • File della catena di certificati dell'identità del dispositivo nel dispositivo.
  • File della chiave di identità del dispositivo nel dispositivo.

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

Aprire il file di configurazione nel dispositivo IoT Edge.

sudo nano /etc/aziot/config.toml
  1. Trovare la sezione Provisioning del file. Rimuovere il commento dalle righe per il provisioning dps con certificato X.509 e assicurarsi che tutte le altre righe di provisioning siano impostate come commento.

    # DPS provisioning with X.509 certificate
    [provisioning]
    source = "dps"
    global_endpoint = "https://global.azure-devices-provisioning.net"
    id_scope = "SCOPE_ID_HERE"
    
    # Uncomment to send a custom payload during DPS registration
    # payload = { uri = "PATH_TO_JSON_FILE" }
    
    [provisioning.attestation]
    method = "x509"
    registration_id = "REGISTRATION_ID_HERE"
    
    identity_cert = "DEVICE_IDENTITY_CERTIFICATE_HERE"
    
    identity_pk = "DEVICE_IDENTITY_PRIVATE_KEY_HERE"
    
    # auto_reprovisioning_mode = Dynamic
    
  2. Aggiornare il valore di id_scope con l'ID ambito copiato dall'istanza del servizio Device Provisioning.

  3. Specificare un registration_id oggetto per il dispositivo, ovvero l'ID del dispositivo in hub IoT. L'ID di registrazione deve corrispondere al nome comune (CN) del certificato di identità.

  4. Aggiornare i valori di identity_cert e identity_pk con le informazioni sul certificato e sulla chiave.

    Il valore del certificato di identità può essere fornito come URI di file oppure può essere emesso dinamicamente tramite EST o un'autorità di certificazione locale. Rimuovere il commento da una sola riga, in base al formato che si sceglie di usare.

    Il valore della chiave privata di identità può essere fornito come URI di file o un URI PKCS#11. Rimuovere il commento da una sola riga, in base al formato che si sceglie di usare.

    Se si usano URI PKCS#11, trovare la sezione PKCS#11 nel file di configurazione e fornire informazioni sulla configurazione PKCS#11.

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

    Per altre informazioni sulle impostazioni di configurazione del provisioning, vedere Configurare le impostazioni del dispositivo IoT Edge.

  5. Facoltativamente, trovare la sezione modalità di provisioning automatico del file. Usare il auto_reprovisioning_mode parametro per configurare il comportamento di provisioning del dispositivo. Dinamico: eseguire il reprovisioning quando il dispositivo rileva che potrebbe essere stato spostato da un hub IoT a un altro. Si tratta dell'impostazione predefinita. AlwaysOnStartup : effettuare il reprovisioning quando il dispositivo viene riavviato o un arresto anomalo causa il riavvio dei daemon. OnErrorOnly : non attivare mai il provisioning automatico del dispositivo. Ogni modalità ha un fallback implicito di provisioning del dispositivo se il dispositivo non è in grado di connettersi a hub IoT durante il provisioning delle identità a causa di errori di connettività. Per altre informazioni, vedere hub IoT concetti relativi al provisioning dei dispositivi.

  6. Facoltativamente, rimuovere il commento dal payload parametro per specificare il percorso di un file JSON locale. Il contenuto del file viene inviato al servizio Device Provisioning come dati aggiuntivi quando il dispositivo viene registrato. Ciò è utile per l'allocazione personalizzata. Ad esempio, se si desidera allocare i dispositivi in base a un ID modello Plug and Play IoT senza intervento umano.

  7. Salva e chiudi il file.

Applicare le modifiche di configurazione apportate a IoT Edge.

sudo iotedge config apply

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 viene assegnato e che l'ID dispositivo è elencato.

Usare i comandi seguenti nel dispositivo per verificare che IoT Edge sia installato e avviato correttamente.

Verificare lo stato del servizio IoT Edge.

sudo iotedge system status

Esaminare i log del servizio.

sudo iotedge system logs

Elencare i moduli in esecuzione.

sudo iotedge list

Passaggi successivi

Il processo di registrazione del servizio device provisioning consente di impostare l'ID dispositivo e i tag del dispositivo gemello contemporaneamente al 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.