Condividi tramite


Creare ed effettuare il provisioning di dispositivi IoT Edge su larga scala con un TPM in Linux

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 per il provisioning automatico di un dispositivo Azure IoT Edge per Linux usando un modulo TPM (Trusted Platform Module). È possibile effettuare automaticamente il provisioning dei dispositivi IoT Edge con il servizio device provisioning hub IoT di Azure. Se non si ha familiarità con il processo di provisioning automatico, esaminare la panoramica del provisioning prima di continuare.

Questo articolo illustra due metodologie. Selezionare le preferenze in base all'architettura della soluzione:

  • Provisioning automatico di un dispositivo Linux con hardware TPM fisico. Un esempio è Infineon OPTIGA™ TPM SLB 9670.
  • Eseguire il provisioning automatico di una macchina virtuale Linux con un TPM simulato in esecuzione in un computer di sviluppo Windows con Hyper-V abilitato. È consigliabile usare questa metodologia solo come scenario di test. Un TPM simulato non offre la stessa sicurezza di un TPM fisico.

Le istruzioni differiscono in base alla metodologia, quindi assicurarsi di entrare nella scheda corretta in futuro.

Le attività sono le seguenti:

  1. Recuperare le informazioni di provisioning per il TPM.
  2. Creare una registrazione singola per il dispositivo in un'istanza del servizio di provisioning di dispositivi hub IoT.
  3. Installare il runtime di IoT Edge e connettere il dispositivo all'hub IoT.

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 che sia il dispositivo IoT Edge.

Se si è un produttore di dispositivi, fare riferimento a indicazioni sull'integrazione di un TPM nel processo di produzione.

Nota

TPM 2.0 è necessario quando si usa l'attestazione TPM con il servizio device provisioning.

È possibile creare registrazioni individuali, non di gruppo, del servizio device provisioning solo quando si usa un TPM.

Configurare il dispositivo

Se si usa un dispositivo Linux fisico con un TPM, non sono previsti passaggi aggiuntivi per configurare il dispositivo.

Sei pronto per continuare.

Recuperare le informazioni di provisioning per il TPM

In questa sezione viene creato uno strumento che è possibile usare per recuperare l'ID di registrazione e la chiave di verifica dell'autenticità per il TPM.

  1. Accedere al dispositivo e quindi seguire la procedura descritta in Configurare un ambiente di sviluppo Linux per installare e compilare Azure IoT SDK per dispositivi per C.

  2. Eseguire i comandi seguenti per compilare lo strumento SDK che recupera le informazioni sul provisioning dei dispositivi per il TPM.

    cd azure-iot-sdk-c/cmake
    cmake -Duse_prov_client:BOOL=ON ..
    cd provisioning_client/tools/tpm_device_provision
    make
    sudo ./tpm_device_provision
    
  3. La finestra di output visualizza l'ID registrazione del dispositivo e la chiave di verifica dell'autenticità. Copiare questi valori per usarli in un secondo momento quando si crea una registrazione singola per il dispositivo nel servizio device provisioning.

Dopo aver ottenuto l'ID di registrazione e la chiave di verifica dell'autenticità, si è pronti per continuare.

Suggerimento

Se non si vogliono usare gli strumenti software TPM2 per recuperare le informazioni, è necessario trovare un altro modo per ottenere le informazioni di provisioning. La chiave di verifica dell'autenticità, univoca per ogni chip TPM, viene ottenuta dal produttore del chip TPM associato. È possibile derivare un ID di registrazione univoco per il dispositivo TPM. Ad esempio, come illustrato in precedenza, è possibile creare un hash SHA-256 della chiave di verifica dell'autenticità.

Creare una registrazione del servizio device provisioning

Usare le informazioni di provisioning del TPM per creare una registrazione singola nel servizio device provisioning.

Quando si crea una registrazione nel servizio device provisioning, si ha la possibilità di dichiarare uno stato iniziale del dispositivo gemello. Nel dispositivo gemello è possibile impostare tag per raggruppare i dispositivi in base a qualsiasi metrica usata nella soluzione, ad esempio area, ambiente, posizione o tipo di dispositivo. Questi tag vengono usati per creare distribuzioni automatiche.

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 del servizio device provisioning hub IoT.

  2. In le impostazioni selezionare Gestisci registrazioni.

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

    1. In Meccanismo selezionare TPM.

    2. Specificare la chiave di verifica dell'autenticità e l'ID registrazione copiati dalla macchina virtuale o dal dispositivo fisico.

    3. Specificare un ID per il dispositivo, se necessario. Se non si specifica un ID dispositivo, viene usato l'ID di registrazione.

    4. Selezionare True per dichiarare che la macchina virtuale o il dispositivo fisico è un dispositivo IoT Edge.

    5. Scegliere l'hub IoT collegato a cui si vuole connettere il dispositivo oppure selezionare Collega a un nuovo hub IoT. È possibile scegliere più hub e il dispositivo verrà assegnato a uno di essi in base ai criteri di assegnazione selezionati.

    6. Aggiungere un valore di tag allo stato iniziale del dispositivo gemello, se necessario. È possibile usare tag per identificare come destinazione gruppi di dispositivi per la distribuzione di moduli. Per altre informazioni, vedere Distribuire moduli IoT Edge su larga scala.

    7. Seleziona Salva.

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:

  • 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 (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

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 per la 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 del contenitore per rendere effettive le modifiche.

    sudo systemctl restart docker
    

    Suggerimento

    Se si verificano errori durante l'installazione del motore del contenitore Moby, verificare la compatibilità del kernel Linux. 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 kernel .config 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 di conseguenza. Dopo aver distribuito il kernel appena modificato, eseguire di nuovo 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 della versione offline o specifici 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, configurare il dispositivo con le informazioni usate per connettersi al servizio device provisioning e hub IoT.

  1. Conoscere l'ambito dell'ID servizio di provisioning del dispositivo e l'ID registrazione del dispositivo raccolti in precedenza.

  2. Aprire il file di configurazione nel dispositivo IoT Edge.

    sudo nano /etc/iotedge/config.yaml
    
  3. Trovare la sezione relativa alla configurazione del provisioning del file. Rimuovere il commento dalle righe per il provisioning TPM 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: "SCOPE_ID_HERE"
      attestation:
        method: "tpm"
        registration_id: "REGISTRATION_ID_HERE"
    
    # always_reprovision_on_startup: true
    # dynamic_reprovisioning: false
    
  4. Aggiornare i valori di scope_id e registration_id con le informazioni sul servizio di provisioning dei dispositivi e sul dispositivo. Il scope_id valore è l'ambito ID dalla pagina di panoramica dell'istanza del servizio device provisioning.

  5. 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 hub IoT concetti relativi al provisioning dei dispositivi.

  6. Salva e chiude il file .

Concedere l'accesso IoT Edge al TPM

Il runtime di IoT Edge deve accedere al TPM per effettuare automaticamente il provisioning del dispositivo.

È possibile concedere al TPM l'accesso al runtime di IoT Edge eseguendo l'override delle impostazioni di sistema in modo che il iotedge servizio disponga dei privilegi radice. Se non si vuole elevare i privilegi di servizio, è possibile usare la procedura seguente per concedere manualmente l'accesso al modulo TPM.

  1. Creare una nuova regola che consentirà al runtime IoT Edge di accedere a tpm0 e tpmrm0.

    sudo touch /etc/udev/rules.d/tpmaccess.rules
    
  2. Aprire il file delle regole.

    sudo nano /etc/udev/rules.d/tpmaccess.rules
    
  3. Copiare le informazioni di accesso seguenti nel file di regole. Potrebbe tpmrm0 non essere presente nei dispositivi che usano un kernel precedente alla 4.12. I dispositivi che non dispongono tpmrm0 di questa regola verranno ignorati in modo sicuro.

    # allow iotedge access to tpm0
    KERNEL=="tpm0", SUBSYSTEM=="tpm", OWNER="iotedge", MODE="0600"
    KERNEL=="tpmrm0", SUBSYSTEM=="tpmrm", OWNER="iotedge", MODE="0600"
    
  4. Salvare e chiudere il file.

  5. Attivare il udev sistema per valutare la nuova regola.

    /bin/udevadm trigger --subsystem-match=tpm --subsystem-match=tpmrm
    
  6. Verificare che la regola sia stata applicata.

    ls -l /dev/tpm*
    

    L'output riuscito viene visualizzato come segue:

    crw------- 1 iotedge root 10, 224 Jul 20 16:27 /dev/tpm0
    crw------- 1 iotedge root 10, 224 Jul 20 16:27 /dev/tpmrm0
    

    Se non si noterà che sono state applicate le autorizzazioni corrette, provare a riavviare il computer per aggiornare udev.

  7. 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 non è già stato fatto, riavviare il runtime di IoT Edge in modo che rilevi tutte le modifiche di configurazione apportate nel dispositivo.

sudo systemctl restart iotedge

Verificare che il runtime IoT Edge sia in esecuzione.

sudo systemctl status iotedge

Esaminare i log del daemon.

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

Se vengono visualizzati errori di provisioning, è possibile che le modifiche alla configurazione non siano ancora state applicate. Provare a riavviare di nuovo il daemon IoT Edge.

sudo systemctl daemon-reload

In alternativa, provare a riavviare la macchina virtuale per verificare se le modifiche hanno effetto su un nuovo avvio.

Se il runtime è stato avviato correttamente, è possibile accedere all'hub IoT e verificare che il provisioning del nuovo dispositivo sia stato eseguito automaticamente. Il dispositivo è ora è pronto per l'esecuzione di moduli IoT Edge.

Elencare i moduli in esecuzione.

iotedge list

È 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.

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 definire 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 usando il portale di Azure o l'interfaccia della riga di comando di Azure.