Share via


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

Gilt für:Häkchen für IoT Edge 1.5 IoT Edge 1.5 IoT Edge 1.4 Häkchen IoT Edge 1.4

Wichtig

IoT Edge 1.5 LTS und IoT Edge 1.4 LTS sind unterstützte Releases. Das Ende der Lebensdauer von IoT Edge 1.4 LTS wird am 12. November 2024 erreicht. Wenn Sie ein früheres Release verwenden, finden Sie weitere Informationen unter Aktualisieren von 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 loT Edge-Geräte mit dem Azure loT Hub Device Provisioning Service (Gerätebereitstellungsdienst) 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.
  • 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.

Aufgaben:

  1. Rufen Sie Bereitstellungsinformationen 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 Gerät, das das IoT Edge-Gerät sein soll.

Wenn Sie Gerätehersteller sind, beachten Sie die 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.

Legen Sie Ihr Gerät fest

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

Sie können den Vorgang fortsetzen.

Abrufen von Bereitstellungsinformationen für Ihr TPM

Hinweis

In diesem Artikel wurde zuvor das tpm_device_provision-Tool aus dem IoT C SDK verwendet, um Bereitstellungsinformationen zu generieren. Wenn Sie zuvor dieses Tool verwendet haben, sollten Sie beachten, dass die nachstehenden Schritte eine andere Registrierungs-ID für denselben öffentlichen Endorsement Key generieren. Wenn Sie erneut dieselbe Registrierungs-ID wie zuvor erstellen müssen, informieren Sie sich, wie das tpm_device_provision Tool des C-SDK sie generiert. Stellen Sie sicher, dass die Registrierungs-ID für die individuelle Registrierung in DPS mit der Registrierungs-ID übereinstimmt, für deren Benutzung das IoT Edge-Gerät konfiguriert ist.

In diesem Abschnitt verwenden Sie die TPM2-Softwaretools, um den Endorsement Key für Ihr TPM abzurufen und dann eine eindeutige Registrierungs-ID zu generieren. Dieser Abschnitt entspricht Schritt 3: Das Gerät verfügt über Firmware und Software im Prozess zum Integrieren eines TPM in den Herstellungsprozess.

Installieren der TPM2-Tools

Melden Sie sich bei Ihrem Gerät an, und installieren Sie das tpm2-tools-Paket.

sudo apt-get install tpm2-tools

Führen Sie das folgende Skript aus, um den Endorsement Key zu lesen, und einen zu erstellen, wenn noch keiner vorhanden ist.

#!/bin/sh
if [ "$USER" != "root" ]; then
  SUDO="sudo "
fi

$SUDO tpm2_readpublic -Q -c 0x81010001 -o ek.pub 2> /dev/null
if [ $? -gt 0 ]; then
  # Create the endorsement key (EK)
  $SUDO tpm2_createek -c 0x81010001 -G rsa -u ek.pub

  # Create the storage root key (SRK)
  $SUDO tpm2_createprimary -Q -C o -c srk.ctx > /dev/null

  # make the SRK persistent
  $SUDO tpm2_evictcontrol -c srk.ctx 0x81000001 > /dev/null

  # open transient handle space for the TPM
  $SUDO tpm2_flushcontext -t > /dev/null
fi

printf "Gathering the registration information...\n\nRegistration Id:\n%s\n\nEndorsement Key:\n%s\n" $(sha256sum -b ek.pub | cut -d' ' -f1 | sed -e 's/[^[:alnum:]]//g') $(base64 -w0 ek.pub)
$SUDO rm ek.pub srk.ctx 2> /dev/null

Im Ausgabefenster werden der Endorsement Key des Geräts und eine eindeutige Registrierungs-ID 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 eindeutig ist, wird von dem ihm zugeordneten 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 in Device Provisioning Service (DPS) zu erstellen.

Wenn Sie eine Registrierung in DPS erstellen, haben Sie die Möglichkeit, einen anfänglichen Gerätezwillingsstatus zu deklarieren. Im Gerätezwilling können Sie Tags zum Gruppieren von Geräten nach jeder beliebigen Metrik – z. B. Region, Umgebung, Speicherort oder Gerätetyp – festlegen, die in Ihrer Lösung verwendet wird. Diese Tags werden zum Erstellen von automatischen Bereitstellungen verwendet.

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 Link to new IoT Hub (Mit neuer IoT Hub-Instanz verknüpfen) 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 bei Bedarf einen Tagwert zu Anfänglicher Status von Gerätezwilling hinzu. Sie können mithilfe von Tags Gruppen von Geräten als Ziel für die Modulbereitstellung festlegen. Weitere Informationen finden Sie unter Bedarfsgerechtes Bereitstellen von IoT Edge-Modulen mithilfe des Azure-Portals.

    7. Wählen Sie Speichern.

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 Ihren virtuellen Linux Computer oder Ihr physisches Gerät für loT 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:

  • 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
    

Weitere Informationen zu den Betriebssystemversionen finden Sie unter Unterstützte Plattformen für Azure IoT Edge.

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. Die Moby-Engine ist die einzige Container-Engine, die offiziell von IoT Edge unterstützt wird. Docker CE/EE-Containerimages sind mit der Moby-Runtime kompatibel.

Installieren Sie die Moby-Engine.

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

Standardmäßig legt die Containerengine keine Grenzwerte für die Größe des Containerprotokolls fest. Im Laufe der Zeit kann dies dazu führen, dass das Gerät mit Protokollen überfüllt wird und auf dem Datenträger nicht genügend Speicherplatz zur Verfügung steht. Sie können Ihr Protokoll jedoch so konfigurieren, dass es lokal angezeigt wird, allerdings ist dies optional. Weitere Informationen zur Protokollierungskonfiguration finden Sie in der Prüfliste zur Produktionsbereitstellung.

Die folgenden Schritte zeigen Ihnen, wie Sie Ihren Container so konfigurieren, dass der Protokollierungstreiber local als Protokollierungsmechanismus verwendet wird.

  1. Erstellen oder Bearbeiten der Konfigurationsdatei des vorhandenen Docker-Daemons

    sudo nano /etc/docker/daemon.json
    
  2. Legen Sie den Standardprotokollierungstreiber auf den Protokollierungstreiber local fest, wie im folgenden Beispiel gezeigt.

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

    sudo systemctl restart docker
    

Installieren der IoT Edge-Runtime

Der IoT Edge-Dienst stellt Sicherheitsstandards auf dem IoT Edge-Gerät bereit und sorgt für deren Einhaltung. Der Dienst wird bei jedem Start gestartet und führt durch Starten der restlichen IoT Edge-Runtime einen Bootstrap für das Gerät aus.

Hinweis

Ab Version 1.2 übernimmt der IoT-Identitätsdienst die Identitätsbereitstellung und -verwaltung für IoT Edge und für andere Gerätekomponenten, die mit IoT Hub kommunizieren müssen.

Die Schritte in diesem Abschnitt stellen den typischen Prozess zur Installation der neuesten IoT Edge-Version auf einem Gerät mit Internetverbindung dar. 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.

Tipp

Wenn Sie bereits ein IoT Edge-Gerät haben, auf dem eine ältere Version ausgeführt wird, und ein Upgrade auf die neueste Version durchführen möchten, führen Sie die Schritte unter Aktualisieren des IoT Edge-Sicherheitsdaemons und der Runtime aus. Neuere Versionen unterscheiden sich ausreichend von früheren IoT Edge-Versionen, sodass bestimmte Schritte für das Upgrade erforderlich sind.

Installieren Sie die neueste Version von IoT Edge und das IoT-Identitätsdienstpaket (falls Sie nicht bereits auf dem neuesten Stand sind):

  • 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
    

Das optionale Paket defender-iot-micro-agent-edge enthält den Microsoft Defender for IoT-Sicherheitsmikroagenten, der an den Endpunkten Einblicke in das Sicherheitsmanagement, Sicherheitslücken, die Erkennung von Bedrohungen, das Flottenmanagement und vieles mehr bietet, damit Sie Ihre IoT Edge-Geräte schützen können. Es wird empfohlen, den Micro-Agent zusammen mit dem Edge-Agent zu installieren, um die Sicherheitsüberwachung und -härtung Ihrer Edgegeräte zu ermöglichen. Weitere Informationen zu Microsoft Defender für Cloud finden Sie unter Was ist Microsoft Defender für IoT für Geräteentwickler?.

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.

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

Erstellen Sie eine Konfigurationsdatei für Ihr Gerät basierend auf einer Vorlagendatei, die im Rahmen der IoT Edge-Installation bereitgestellt wird.

sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml

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

sudo nano /etc/aziot/config.toml
  1. Suchen Sie den Abschnitt zu Bereitstellungskonfigurationen der Datei. Heben Sie die Auskommentierung der Zeilen für die TPM-Bereitstellung auf, und vergewissern Sie sich, dass alle anderen Bereitstellungszeilen auskommentiert sind.

    # DPS provisioning with TPM
    [provisioning]
    source = "dps"
    global_endpoint = "https://global.azure-devices-provisioning.net"
    id_scope = "DPS_ID_SCOPE_HERE"
    
    # Uncomment to send a custom payload during DPS registration
    # payload = { uri = "PATH_TO_JSON_FILE" }
    
    [provisioning.attestation]
    method = "tpm"
    registration_id = "REGISTRATION_ID_HERE"
    
    # auto_reprovisioning_mode = Dynamic
    
  2. Aktualisieren Sie die Werte id_scope und registration_id mit Ihrem Gerätebereitstellungsdienst und den Geräteinformationen. Der scope_id Wert ist der ID-Bereich auf der Übersichtsseite Ihrer Gerätebereitstellungsdienst-Instanz.

    Weitere Informationen zur Bereitstellung von Konfigurationseinstellungen finden Sie unter Konfigurieren von IoT Edge-Geräteeinstellungen.

  3. Suchen Sie optional in der Datei nach dem Abschnitt zum „Modus für die automatische erneute Bereitstellung“. Verwenden Sie den Parameter auto_reprovisioning_mode, um das Verhalten bei der erneuten Bereitstellung Ihres Geräts zu konfigurieren. Dynamic – Erneute Bereitstellung, wenn das Gerät erkennt, dass es möglicherweise von einem IoT Hub zu einem anderen verschoben wurde. Dies ist die Standardeinstellung. AlwaysOnStartup – Erneute Bereitstellung, wenn das Gerät neu gestartet wird oder ein Absturz dazu führt, dass die Daemons neu gestartet werden. OnErrorOnly – Löst niemals automatisch die erneute Bereitstellung des Geräts aus. Bei jedem Modus gibt es eine implizite erneute Bereitstellung des Geräts, wenn es während der Identitätsbereitstellung aufgrund von Verbindungsfehlern keine Verbindung mit IoT Hub herstellen kann. Weitere Informationen finden Sie unter IoT Hub Device-Konzepte für die erneute Bereitstellung.

  4. Optional können Sie die Auskommentierung des Parameters payload aufheben, um den Pfad zu einer lokalen JSON-Datei anzugeben. Der Inhalt der Datei wird als zusätzliche Daten an DPS gesendet, wenn das Gerät registriert wird. Dies ist nützlich für die benutzerdefinierte Zuordnung. Beispiel: Sie möchten Ihre Geräte basierend auf der ID des IoT Plug & Play-Modells ohne menschliches Eingreifen zuordnen.

  5. Speichern und schließen Sie die Datei.

Gewähren von IoT Edge-Zugriff für das TPM

Die IoT Edge-Runtime basiert auf einem TPM-Dienst, der den Zugriff eines Brokers auf das TPM eines Geräts vermittelt. Dieser Dienst muss für die automatische Bereitstellung Ihres Geräts auf das TPM zugreifen.

Sie können Zugriff auf das TPM gewähren, indem Sie die Systemeinstellungen überschreiben, sodass der Dienst aziottpm Stammrechte hat. 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, damit IoT Edge-Runtime Zugriff auf tpm0 und tpmrm0 erhält.

    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 Informationen, 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 aziottpm access to tpm0 and tpmrm0
    KERNEL=="tpm0", SUBSYSTEM=="tpm", OWNER="aziottpm", MODE="0660"
    KERNEL=="tpmrm0", SUBSYSTEM=="tpmrm", OWNER="aziottpm", MODE="0660"
    
  4. Speicher und beende die Datei.

  5. Lösen Sie das udev-System aus, 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-rw---- 1 root aziottpm 10, 224 Jul 20 16:27 /dev/tpm0
    crw-rw---- 1 root aziottpm 10, 224 Jul 20 16:27 /dev/tpmrm0
    

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

  7. Wenden Sie die am Gerät vorgenommenen Konfigurationsänderungen an.

    sudo iotedge config apply
    

Bestätigen einer erfolgreichen Installation

Wenn dies noch nicht geschehen ist, wenden Sie die von Ihnen am Gerät vorgenommenen Konfigurationsänderungen an.

sudo iotedge config apply

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

sudo iotedge system status

Untersuchen Sie die Daemonprotokolle.

sudo iotedge system logs

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

sudo systemctl daemon-reload

Oder starten Sie Ihre VM erneut, um festzustellen, ob die Änderungen bei einem sauberen Start 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.

Führen Sie ausgeführte Module auf.

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, die Geräte-ID und die Tags von Gerätezwillingen beim Bereitstellen des neuen Geräts 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“.