Freigeben über


Bedarfsgerechtes Erstellen und Bereitstellen von IoT Edge-Geräten mit einem TPM unter Linux

Gilt für:Ja-Symbol IoT Edge 1.1

Wichtig

IoT Edge 1.1 Ende des Supports war der 13. Dezember 2022. Informationen darüber, wie dieses Produkt, dieser Dienst, diese Technologie oder diese API unterstützt werden, finden Sie im Microsoft Product Lifecycle. Weitere Informationen zum Aktualisieren auf die neueste Version von IoT Edge finden Sie unter Update IoT Edge.

Dieser Artikel enthält Anleitungen für die automatische Bereitstellung eines Azure IoT Edge für Linux-Geräts mithilfe eines TPM (Trusted Platform Module). Sie können IoT Edge-Geräte mit dem Azure IoT Hub Device Provisioning Service automatisch bereitstellen. Wenn Sie mit dem Prozess der automatischen Bereitstellung nicht vertraut sind, lesen Sie die Übersicht zur Bereitstellung, bevor Sie den Vorgang fortsetzen.

In diesem Artikel werden zwei Methodiken beschrieben. Wählen Sie Ihre Präferenz basierend auf der Architektur Ihrer Lösung aus:

  • Automatische Bereitstellung eines Linux-Geräts mit physischer TPM-Hardware. Ein Beispiel ist das Infineon OPTIGA™ TPM SLB 9670.
  • Automatische Bereitstellung eines virtuellen Linux-Computers (Virtual Machine, VM) mit einem simulierten TPM, das auf einem Windows-Entwicklungscomputer mit aktiviertem Hyper-V ausgeführt wird. Wir empfehlen diese Methodik nur als Testszenario. Ein simuliertes TPM bietet nicht die gleiche Sicherheit wie ein physisches TPM.

Die Anleitungen unterscheiden sich je nach Ihrer Methodik. Sorgen Sie deshalb künftig dafür, dass die richtige Registerkarte angezeigt wird.

Die Aufgaben sind wie folgt:

  1. Rufen Sie Bereitstellungsdaten für Ihr TPM ab.
  2. Erstellen Sie eine individuelle Registrierung für Ihr Gerät in einer Instanz des IoT Hub Device Provisioning Service.
  3. Installieren Sie die IoT Edge-Runtime, und verbinden Sie das Gerät mit dem IoT-Hub.

Voraussetzungen

Cloudressourcen

  • Ein aktiver IoT-Hub
  • Eine Instanz des IoT Hub Device Provisioning Service (Gerätebereitstellungsdienst) in Azure, die mit Ihrem IoT-Hub verknüpft ist

Geräteanforderungen

Ein physisches Linux-Gerät, das als IoT-Edge-Gerät fungieren soll.

Wenn Sie ein Gerätehersteller sind, finden Sie Anleitungen zum Integrieren eines TPM in den Herstellungsprozess.

Hinweis

TPM 2.0 ist erforderlich, wenn Sie den TPM-Nachweis beim Device Provisioning Service verwenden.

Wenn Sie ein TPM verwenden, können Sie nur individuelle Registrierungen des Device Provisioning Service erstellen, aber keine Gruppenregistrierungen.

Richten Sie Ihr Gerät ein

Wenn Sie ein physisches Linux-Gerät mit einem TPM verwenden, gibt es keine zusätzlichen Schritte zum Einrichten Ihres Geräts.

Sie sind bereit, fortzufahren.

Abrufen von Bereitstellungsdaten für Ihr TPM

In diesem Abschnitt erstellen Sie ein Tool, mit dem Sie die Registrierungs-ID und den Bestätigungsschlüssel für Ihr TPM abrufen können.

  1. Melden Sie sich bei Ihrem Gerät an, und führen Sie dann die Schritte unter Einrichten einer Linux-Entwicklungsumgebung aus, um das Azure IoT-Geräte-SDK für C zu installieren und zu erstellen.

  2. Führen Sie die folgenden Befehle aus, um das SDK-Tool zu erstellen, mit dem Sie die Gerätebereitstellungsinformationen für Ihr TPM abrufen.

    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. Im Ausgabefenster werden die Registrierungs-ID des Geräts und der Bestätigungsschlüssel angezeigt. Kopieren Sie diese Werte zur späteren Verwendung, wenn Sie eine individuelle Registrierung für Ihr Gerät im Device Provisioning Service erstellen.

Nachdem Sie über Ihre Registrierungs-ID und Ihren Endorsement Key verfügen, können Sie den Vorgang fortsetzen.

Tipp

Wenn Sie nicht die TPM2-Softwaretools zum Abrufen der Bereitstellungsinformationen verwenden möchten, müssen Sie eine andere Möglichkeit zum Abrufen dieser Informationen finden. Der Endorsement Key, der bei jedem TPM-Chip einzigartig ist, wird vom zugehörigen TPM-Chiphersteller abgerufen. Sie können eine eindeutige Registrierungs-ID für Ihr TPM-Gerät ableiten. So können Sie beispielsweise wie oben gezeigt einen SHA-256-Hash des Endorsement Key erstellen.

Erstellen einer Registrierung für den Device Provisioning Service

Verwenden Sie die Bereitstellungsinformationen Ihres TPM, um eine individuelle Registrierung im Gerätebereitstellungsdienst zu erstellen.

Wenn Sie eine Registrierung im Gerätebereitstellungsdienst erstellen, können Sie einen anfänglichen Gerätezwillingsstatus festlegen. Im Gerätezwilling können Sie Tags zum Gruppieren von Geräten nach beliebigen Metriken – z. B. Region, Umgebung, Standort oder Gerätetyp – festlegen, die in Ihrer Lösung verwendet werden. Diese Tags werden verwendet, um automatische Bereitstellungen zu erstellen.

Tipp

Die Schritte in diesem Artikel beziehen sich auf das Azure-Portal. Sie können aber auch individuelle Registrierungen über die Azure CLI erstellen. Weitere Informationen finden Sie unter az iot dps-Registrierung. Verwenden Sie als Teil des CLI-Befehls das Flag edge-enabled (Edge-fähig), um anzugeben, dass die Registrierung für ein IoT Edge-Gerät gilt.

  1. Wechseln Sie im Azure-Portal zu Ihrer Instanz von IoT Hub Device Provisioning Service.

  2. Klicken Sie in Einstellungen auf Registrierungen verwalten.

  3. Wählen Sie Individuelle Registrierung hinzufügen aus, und führen Sie dann die folgenden Schritte zum Konfigurieren der Registrierung aus:

    1. Klicken Sie unter Mechanismus auf die Option TPM.

    2. Geben Sie den Endorsement Key und die Registrierungs-ID an, den bzw. die Sie von Ihrer VM oder Ihrem physischen Gerät kopiert haben.

    3. Geben Sie bei Bedarf eine ID für Ihr Gerät an. Wenn Sie keine Geräte-ID angeben, wird die Registrierungs-ID verwendet.

    4. Wählen Sie True aus, um zu deklarieren, dass Ihre VM oder Ihr physisches Gerät ein IoT Edge-Gerät ist.

    5. Wählen Sie die verknüpfte IoT-Hub-Instanz, mit der Sie Ihr Gerät verbinden möchten, oder wählen Sie Link to new IoT Hub aus. Sie können mehrere Hubs auswählen. Das Gerät wird dann je nach gewählter Zuweisungsrichtlinie einem dieser Hubs zugewiesen.

    6. Fügen Sie optional einen Tagwert zum Anfänglicher Gerätezwilling-Zustand hinzu. Sie können mithilfe von Tags Gruppen von Geräten als Ziel für die Modulbereitstellung festlegen. Weitere Informationen finden Sie unter IoT Edge-Module in großem Umfang bereitstellen.

    7. Wählen Sie Speichern aus.

Nachdem nun eine Registrierung für dieses Gerät vorhanden ist, kann die IoT Edge-Runtime das Gerät während der Installation automatisch bereitstellen.

Installieren von IoT Edge

In diesem Abschnitt bereiten Sie Ihre Linux-VM oder Ihr physisches Gerät für IoT Edge vor. Anschließend installieren Sie IoT Edge.

Führen Sie die folgenden Befehle aus, um das Paketrepository hinzuzufügen, und fügen Sie dann Ihrer Liste von vertrauenswürdigen Schlüsseln den Microsoft-Paketsignaturschlüssel hinzu.

Wichtig

Am 30. Juni 2022 wurde Raspberry Pi OS Stretch aus der Betriebssystem-Supportliste der Stufe 1 zurückgezogen. Wenn Sie potenzielle Sicherheitsrisiken vermeiden möchten, aktualisieren Sie Ihr Hostbetriebssystem auf Bullseye.

Die Installation kann mit einigen wenigen Befehlen erledigt werden. Öffnen Sie ein Terminal, und führen Sie die folgenden Befehle aus:

  • 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
    

Hinweis

Für Azure IoT Edge-Softwarepakete gelten die in jedem Paket (im Verzeichnis usr/share/doc/{package-name} oder LICENSE) enthaltenen Lizenzbedingungen. Lesen Sie die Lizenzbedingungen, bevor Sie ein Paket verwenden. Durch Ihre Installation und Verwendung eines Pakets erklären Sie Ihre Zustimmung zu diesen Bedingungen. Wenn Sie den Lizenzbedingungen nicht zustimmen, verwenden Sie das Paket nicht.

Installieren einer Containerengine

Azure IoT Edge basiert auf einer OCI-kompatiblen Containerruntime. Für Produktionsszenarien empfehlen wir die Verwendung der Moby-Engine. Das Moby-Modul ist das einzige Containermodul, das offiziell mit IoT Edge unterstützt wird. Docker CE / EE-Container-Images sind mit der Moby-Runtime kompatibel.

Installieren Sie die Moby-Engine.

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

Nachdem das Moby-Modul erfolgreich installiert wurde, konfigurieren Sie es so, dass local Protokollierungstreiber als Protokollierungsmechanismus verwendet wird. Weitere Informationen zur Protokollierungskonfiguration finden Sie in der Prüfliste zur Produktionsbereitstellung.

  • Erstellen oder öffnen Sie die Config-Datei des Docker-Daemons unter /etc/docker/daemon.json.

  • Legen Sie den Standardprotokollierungstreiber auf den local Protokollierungstreiber fest, wie im folgenden Beispiel gezeigt.

       {
          "log-driver": "local"
       }
    
  • Starten Sie die Container-Engine neu, damit die Änderungen wirksam werden.

    sudo systemctl restart docker
    

    Tipp

    Wenn beim Installieren der Moby-Container-Engine Fehler angezeigt werden, überprüfen Sie Ihren Linux-Kernel auf Moby-Kompatibilität. Einige Hersteller von eingebetteten Geräten stellen Geräteimages mit benutzerdefinierten Linux-Kernels bereit, denen die Funktionen für die Containerengine-Kompatibilität fehlen. Führen Sie den folgenden Befehl aus, der das von Moby bereitgestellte check-config-Skript verwendet, um die Kernelkonfiguration zu überprüfen:

    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
    

    Überprüfen Sie in der Ausgabe des Skripts, ob alle Elemente unter Generally Necessary und Network Drivers aktiviert sind. Wenn Funktionen fehlen, aktivieren Sie diese, indem Sie Ihren Kernel aus der Quelle neu erstellen und die zugehörigen Module auswählen, die in die entsprechende Konfigurationsdatei für den Kernel eingebunden werden sollen. Gleiches gilt, wenn Sie einen Kernelkonfigurationsgenerator wie defconfig oder menuconfig verwenden: Suchen und aktivieren Sie die entsprechenden Funktionen, und erstellen Sie dann den Kernel dementsprechend neu. Sobald Sie Ihren neu bearbeiteten Kernel bereitgestellt haben, führen Sie das check-config-Skript erneut aus, um zu überprüfen, ob alle erforderlichen Funktionen erfolgreich aktiviert wurden.

Installieren der IoT Edge-Runtime

Der IoT Edge-Sicherheitsdaemon stellt Sicherheitsstandards auf dem IoT Edge-Gerät bereit und verwaltet diese. Der Daemon wird bei jedem Startvorgang ausgeführt und initialisiert das Gerät, indem er den Rest der IoT Edge-Laufzeit startet.

Die Schritte in diesem Abschnitt stellen den typischen Prozess zum Installieren der neuesten Version auf einem Gerät dar, das über eine Internetverbindung verfügt. Wenn Sie eine bestimmte Version, z. B eine Vorabversion, installieren oder eine Offlineinstallation durchführen müssen, führen Sie die Schritte unter Offlineinstallation oder Installation einer bestimmten Version weiter unten in diesem Artikel aus.

Installieren Sie IoT Edge Version 1.1.* zusammen mit dem libiothsm-std Paket:

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

Hinweis

IoT Edge Version 1.1 ist der langfristige Supportzweig von IoT Edge. Wenn Sie eine ältere Version ausführen, empfehlen wir die Installation oder Aktualisierung auf den neuesten Patch, da ältere Versionen nicht mehr unterstützt werden.

Bereitstellen des Geräts mit seiner Cloud-Identität

Nachdem die Runtime auf Ihrem Gerät installiert wurde, konfigurieren Sie es mit den Informationen, die es zum Herstellen einer Verbindung zwischen dem Device Provisioning Service und IoT Hub verwendet.

  1. Kennen Sie Ihren ID-Bereich des Device Provisioning Service und die Registrierungs-ID des Geräts, die zuvor erfasst wurden.

  2. Öffnen Sie die Konfigurationsdatei auf Ihrem IoT Edge-Gerät.

    sudo nano /etc/iotedge/config.yaml
    
  3. Suchen Sie den Bereitstellungskonfigurationsabschnitt der Datei. Heben Sie die Auskommentierung der Zeilen für die TPM-Bereitstellung auf, und vergewissern Sie sich, dass alle anderen Bereitstellungszeilen auskommentiert sind.

    Die provisioning:-Zeile sollte kein vorangehendes Leerzeichen aufweisen, und geschachtelte Elemente sollten durch zwei Leerzeichen eingerückt werden.

    # 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. Aktualisieren Sie die Werte von scope_id und registration_id mit Ihrem Gerätebereitstellungsdienst und den Geräteinformationen. Der scope_id Wert ist der ID Scope auf der Übersichtsseite Ihrer Gerätebereitstellungsdienst-Instanz.

  5. Sie können optional die Zeilen always_reprovision_on_startup oder dynamic_reprovisioning verwenden, um das Neuversorgungsverhalten Ihres Geräts zu konfigurieren. Wenn ein Gerät so eingestellt ist, dass es beim Start neu bereitgestellt wird, wird es immer versuchen, zuerst mit DPS bereitzustellen und dann, falls das fehlschlägt, auf das Backup zur Bereitstellung zurückzugreifen. Wenn ein Gerät so eingestellt ist, dass es sich dynamisch neu bereitstellen kann, wird IoT Edge (und alle Module) neu gestartet und erneut bereitgestellt, wenn ein Ereignis für die Neubereitstellung erkannt wird, z. B. wenn das Gerät von einem IoT Hub in einen anderen verschoben wird. Insbesondere überprüft IoT Edge auf bad_credential- oder device_disabled-Fehler aus dem SDK, um das Re-Provisionierungsereignis zu erkennen. Um dieses Ereignis manuell auszulösen, deaktivieren Sie das Gerät im IoT Hub. Weitere Informationen finden Sie unter Konzepte zur erneuten Bereitstellung von Geräten im IoT Hub.

  6. Speichern und schließen Sie die Datei.

IoT Edge Zugriff auf das TPM gewähren

Die IoT Edge-Laufzeit muss auf das TPM zugreifen, um Ihr Gerät automatisch bereitzustellen.

Sie können TPM-Zugriff auf die IoT Edge-Laufzeit gewähren, indem Sie die systemd-Einstellungen außer Kraft setzen, damit der iotedge Dienst über Stammberechtigungen verfügt. Wenn Sie die Dienstberechtigungen nicht erhöhen möchten, können Sie auch die folgenden Schritte ausführen, um den TPM-Zugriff manuell bereitzustellen.

  1. Erstellen Sie eine neue Regel, die der IoT Edge-Laufzeit den Zugriff auf tpm0 und tpmrm0 gibt.

    sudo touch /etc/udev/rules.d/tpmaccess.rules
    
  2. Öffnen Sie die Regeldatei.

    sudo nano /etc/udev/rules.d/tpmaccess.rules
    
  3. Kopieren Sie die folgenden Zugangsinformationen in die Regeldatei. tpmrm0 ist unter Umständen nicht auf Geräten vorhanden, die eine ältere Kernel-Version als 4.12 verwenden. Geräte ohne tpmrm0 können diese Regel ignorieren.

    # allow iotedge access to tpm0
    KERNEL=="tpm0", SUBSYSTEM=="tpm", OWNER="iotedge", MODE="0600"
    KERNEL=="tpmrm0", SUBSYSTEM=="tpmrm", OWNER="iotedge", MODE="0600"
    
  4. Speichern und beenden Sie die Datei.

  5. Aktivieren Sie das udev-System, um die neue Regel auszuwerten.

    /bin/udevadm trigger --subsystem-match=tpm --subsystem-match=tpmrm
    
  6. Vergewissern Sie sich, dass die Regel erfolgreich angewendet wurde.

    ls -l /dev/tpm*
    

    Die erfolgreiche Ausgabe sieht wie folgt aus:

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

    Wenn Sie nicht sehen, dass die richtigen Berechtigungen angewendet wurden, versuchen Sie, Ihren Computer neu zu starten, um udev zu aktualisieren.

  7. Starten Sie die IoT Edge-Laufzeit neu, damit alle Konfigurationsänderungen, die Sie auf dem Gerät vorgenommen haben, aufgenommen werden.

    sudo systemctl restart iotedge
    

Bestätigen einer erfolgreichen Installation

Falls noch nicht geschehen, starten Sie die IoT Edge-Laufzeit neu, damit alle Konfigurationsänderungen, die Sie auf dem Gerät vorgenommen haben, aufgenommen werden.

sudo systemctl restart iotedge

Überprüfen Sie, ob die IoT Edge-Runtime ausgeführt wird.

sudo systemctl status iotedge

Untersuchen Sie die Daemonprotokolle.

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

Wenn Bereitstellungsfehler angezeigt werden, sind die Konfigurationsänderungen möglicherweise noch nicht wirksam. Versuchen Sie erneut, den IoT Edge-Daemon neu zu starten.

sudo systemctl daemon-reload

Oder starten Sie Ihre VM erneut, um festzustellen, ob die Änderungen beim nächsten Neustart wirksam werden.

Wenn die Runtime erfolgreich gestartet wurde, können Sie zum IoT Hub wechseln und sehen, dass Ihr neues Gerät automatisch bereitgestellt wurde. Es ist jetzt bereit für die Ausführung von IoT Edge-Modulen.

Laufende Module auflisten.

iotedge list

Sie können überprüfen, ob die individuelle Registrierung, die Sie im Device Provisioning Service erstellt haben, verwendet wurde. Navigieren Sie im Azure-Portal zu Ihrer Device Provisioning-Service-Instanz. Öffnen Sie die Registrierungsdetails für die von Ihnen erstellte individuelle Registrierung. Beachten Sie, dass der Status der Registrierung Zugewiesen lautet und die Geräte-ID aufgeführt ist.

Nächste Schritte

Der Registrierungsprozess des Device Provisioning Service ermöglicht es Ihnen, beim Bereitstellen des neuen Geräts gleichzeitig die Geräte-ID und die Gerätezwillingstags festzulegen. Sie können diese Werte verwenden, um einzelne Geräte oder Gruppen von Geräten über die automatische Geräteverwaltung als Ziel festzulegen.

Weitere Informationen finden Sie unter „Bedarfsgerechtes Bereitstellen und Überwachen von IoT Edge-Modulen mithilfe des Microsoft Azure-Portals oder mithilfe der Azure CLI“.