Freigeben über


Erstellen und Bereitstellen eines IoT Edge-Geräts unter Linux mithilfe von X.509-Zertifikaten

Gilt für:Ja-Symbol IoT Edge 1.1

Von Bedeutung

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 End-to-End-Anweisungen zum Registrieren und Bereitstellen eines IoT Edge-Geräts unter Linux, einschließlich Anweisungen zur Installation von IoT Edge.

Jedes Gerät, das eine Verbindung mit einem IoT-Hub herstellt, verfügt über eine Geräte-ID, die zum Nachverfolgen der Cloud-zu-Gerät- oder Gerät-zu-Cloud-Kommunikation verwendet wird. Sie konfigurieren ein Gerät mit den Verbindungsinformationen, einschließlich des IoT Hub-Hostnamens, der Geräte-ID und der Informationen, die das Gerät zum Authentifizieren bei IoT Hub verwendet.

Die Schritte in diesem Artikel führen Sie durch die sogenannte manuelle Bereitstellung, bei der Sie ein einzelnes Gerät mit dem entsprechenden IoT-Hub verbinden. Bei der manuellen Bereitstellung haben Sie zwei Optionen zum Authentifizieren von IoT Edge-Geräten:

  • Symmetrische Schlüssel: Wenn Sie in IoT Hub eine neue Geräteidentität erstellen, erstellt der Dienst zwei Schlüssel. Sie platzieren einen der Schlüssel auf dem Gerät, und dieses präsentiert den Schlüssel beim Authentifizieren im IoT-Hub.

    Diese Authentifizierungsmethode kann schneller eingerichtet werden, ist dafür aber weniger sicher.

  • selbstsignierte X.509: Sie erstellen zwei X.509-Identitätszertifikate und bewahren diese auf dem Gerät auf. Wenn Sie in IoT Hub eine neue Geräteidentität erstellen, geben Sie Fingerabdrücke aus beiden Zertifikaten an. Wenn sich das Gerät bei IoT Hub authentifiziert, übergibt es ein Zertifikat, und IoT Hub überprüft, ob das Zertifikat mit dem Fingerabdruck übereinstimmt.

    Diese Authentifizierungsmethode ist sicherer und wird für Produktionsszenarios empfohlen.

In diesem Artikel wird die Verwendung von X.509-Zertifikaten als Authentifizierungsmethode behandelt. Wenn Sie symmetrische Schlüssel verwenden möchten, finden Sie weitere Informationen unter Erstellen und Bereitstellen eines IoT Edge-Geräts unter Linux mithilfe von symmetrischen Schlüsseln.

Hinweis

Wenn Sie viele Geräte einrichten müssen und sie nicht einzeln manuell bereitstellen möchten, informieren Sie sich in einem der folgenden Artikel, wie IoT Edge beim IoT Hub Device Provisioning Service (Gerätebereitstellungsdienst) funktioniert:

Voraussetzungen

In diesem Artikel wird beschrieben, wie Sie Ihr IoT Edge-Gerät registrieren und darauf IoT Edge installieren. Bei diesen Aufgaben gibt es unterschiedliche Voraussetzungen und Hilfsprogramme zu deren Erledigung. Stellen Sie sicher, dass alle Voraussetzungen erfüllt sind, bevor Sie fortfahren.

Geräteverwaltungstools

Sie können die Schritte zum Registrieren Ihres Geräts über das Azure-Portal, mithilfe von Visual Studio Code oder über die Azure CLI ausführen. Jedes Dienstprogramm verfügt über eigene Voraussetzungen:

Ein IoT-Hub in Ihrem Azure-Abonnement im Tarif „Free“ oder „Standard“.

Geräteanforderungen

Ein X64-, ARM32- oder ARM64-Linux-Gerät.

Microsoft veröffentlicht Installationspakete für viele verschiedene Betriebssysteme.

Neueste Informationen dazu, welche Betriebssysteme zurzeit für Produktionsszenarien unterstützt werden, finden Sie unter Von Azure IoT Edge unterstützte Systeme.

Generieren von Geräteidentitätszertifikaten

Die manuelle Bereitstellung mit X.509-Zertifikaten erfordert die IoT Edge-Version 1.0.10 oder höher.

Wenn Sie ein IoT Edge-Gerät mit X.509-Zertifikaten bereitstellen, verwenden Sie das sogenannte Geräteidentitätszertifikat. Dieses Zertifikat wird nur für die Bereitstellung eines IoT Edge-Geräts und die Authentifizierung des Geräts bei Azure IoT Hub verwendet. Es handelt sich um ein Blattzertifikat, das keine anderen Zertifikate signiert. Das Geräteidentitätszertifikat hängt nicht mit den Zertifikaten der Zertifizierungsstelle zusammen, die das IoT Edge-Gerät Modulen oder Downstreamgeräten zur Überprüfung präsentiert.

Bei der Authentifizierung mit einem X.509-Zertifikat werden die Informationen zur Authentifizierung der einzelnen Geräte in Form eines Fingerabdrucks bereitgestellt, der den Geräteidentitätszertifikaten entnommen wurde. Diese Fingerabdrücke werden IoT Hub zum Zeitpunkt der Geräteregistrierung bereitgestellt, damit der Dienst das Gerät erkennen kann, wenn es eine Verbindung herstellt.

Weitere Informationen darüber, wie die CA-Zertifikate auf IoT Edge-Geräten verwendet werden, finden Sie unter Grundlegendes zur Verwendung von Zertifikaten durch Azure IoT Edge.

Für die manuelle Bereitstellung mit X.509 benötigen Sie die folgenden Dateien:

  • Zwei Geräteidentitätszertifikate mit den dazugehörigen privaten Schlüsselzertifikaten im .cer- oder .pem-Formaten.

    Eine Gruppe von Zertifikats-/Schlüsseldateien wird der IoT Edge-Laufzeit bereitgestellt. Wenn Sie Geräteidentitätszertifikate erstellen, legen Sie den allgemeinen Namen (Common Name, CN) des Zertifikats auf die Geräte-ID fest, die das Gerät in Ihrem IoT-Hub haben soll.

  • Fingerabdrücke von beiden Geräteidentitätszertifikaten.

    Die Fingerabdruckwerte bestehen aus 40 Hexadezimalzeichen für SHA-1-Hashes oder 64 Hexadezimalzeichen für SHA-256-Hashes. Beide Fingerabdrücke werden zum Zeitpunkt der Geräteregistrierung für IoT Hub bereitgestellt.

Sollten Sie über keine Zertifikate verfügen, können Sie Demozertifikate zum Testen von IoT Edge-Gerätefeatures erstellen. Befolgen Sie die Anweisungen in diesem Artikel, um Skripte zur Zertifikaterstellung einzurichten, ein Zertifikat für die Stammzertifizierungsstelle zu erstellen und danach zwei Identitätszertifikate für IoT Edge-Geräte zu erstellen.

Der Fingerabdruck kann beispielsweise mithilfe des folgenden OpenSSL-Befehls aus einem Zertifikat abgerufen werden:

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

Registrieren Ihres Geräts

Je nach Präferenz können Sie Ihr Gerät über das Azure-Portal, mithilfe von Visual Studio Code oder über die Azure CLI registrieren.

In Ihrem IoT-Hub im Azure-Portal werden IoT Edge-Geräte separat von IoT-Geräten erstellt und verwaltet, die nicht mit Edge verwendet werden können.

  1. Melden Sie sich beim Azure-Portal an, und navigieren Sie zu Ihrem IoT Hub.

  2. Klicken Sie im linken Bereich auf Geräte, und klicken Sie dann auf Gerät hinzufügen.

  3. Geben Sie auf der Seite Gerät erstellen die folgenden Informationen ein:

    • Erstellen Sie eine beschreibende Geräte-ID. Notieren Sie sich diese Geräte-ID, da Sie sie später verwenden werden.
    • Aktivieren Sie das Kontrollkästchen IoT Edge-Gerät.
    • Wählen Sie als Authentifizierungstyp X.509, selbstsigniert aus.
    • Geben Sie die primären und sekundären Identitätszertifikatfingerabdrücke an. Die Fingerabdruckwerte bestehen aus 40 Hexadezimalzeichen für SHA-1-Hashes oder 64 Hexadezimalzeichen für SHA-256-Hashes.
  4. Wählen Sie Speichern aus.

Nachdem Sie ein Gerät in IoT Hub registriert haben, rufen Sie die Informationen ab, mit der Sie die Installation und Bereitstellung der IoT Edge-Runtime abschließen.

Anzeigen registrierter Geräte und Abrufen von Bereitstellungsinformationen

Geräte, die die X.509-Zertifikatauthentifizierung verwenden, benötigen ihren IoT-Hub-Namen, ihren Gerätenamen und ihre Zertifikatdateien, um die Installation und Bereitstellung der Iot Edge-Runtime abzuschließen.

Die für die Verwendung mit Edge vorgesehenen Geräte, die eine Verbindung mit Ihrem IoT-Hub herstellen, sind auf der Seite Geräte aufgeführt. Sie können die Liste nach dem Typ Iot Edge Devicefiltern.

Screenshot zum Anzeigen aller IoT Edge-Geräte in Ihrem IoT-Hub.

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.

Von Bedeutung

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 Checkliste 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 das Containermodul und die IoT Edge-Laufzeit auf Ihrem Gerät installiert sind, können Sie den nächsten Schritt ausführen, der das Gerät mit seinen Cloudidentitäts- und Authentifizierungsinformationen einrichten soll.

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

sudo nano /etc/iotedge/config.yaml

Suchen Sie den Abschnitt "Bereitstellungskonfigurationen" der Datei, und entfernen Sie die Kommentare zur manuellen Bereitstellungskonfiguration mithilfe eines X.509-Identitätszertifikatabschnitts . Stellen Sie sicher, dass alle anderen Bereitstellungsabschnitte auskommentiert sind und dass die Bereitstellung:-Zeile keine vorangestellten Leerzeichen hat und die geschachtelten Elemente durch zwei Leerzeichen eingerückt sind.

# Manual provisioning configuration using an x.509 identity certificate
provisioning:
  source: "manual"
  authentication:
    method: "x509"
    iothub_hostname: "REQUIRED_IOTHUB_HOSTNAME"
    device_id: "REQUIRED_DEVICE_ID_PROVISIONED_IN_IOTHUB"
    identity_cert: "REQUIRED_URI_TO_DEVICE_IDENTITY_CERTIFICATE"
    identity_pk: "REQUIRED_URI_TO_DEVICE_IDENTITY_PRIVATE_KEY"

Aktualisieren Sie die folgenden Felder:

  • iothub_hostname: Hostname des IoT-Hubs, mit dem das Gerät verbunden wird. Beispiel: {IoT hub name}.azure-devices.net.
  • device_id: die ID, die Sie bei der Registrierung des Geräts angegeben haben.
  • identity_cert: URI für ein Identitätszertifikat auf dem Gerät. Beispiel: file:///path/identity_certificate.pem.
  • identity_pk: URI der privaten Schlüsseldatei für das bereitgestellte Identitätszertifikat. Beispiel: file:///path/identity_key.pem.

Speichern und schließen Sie die Datei.

CTRL + X, YEnter

Starten Sie den Daemon neu, nachdem Sie die Bereitstellungsinformationen in die Konfigurationsdatei eingegeben haben:

sudo systemctl restart iotedge

Überprüfen der erfolgreichen Konfiguration

Vergewissern Sie sich, dass die Runtime erfolgreich auf Ihrem IoT Edge-Gerät installiert und konfiguriert wurde.

Tipp

Sie benötigen erhöhte Rechte zum Ausführen von iotedge-Befehlen. Nachdem Sie sich bei Ihrem Computer abgemeldet und sich nach der Installation der IoT Edge-Runtime zum ersten Mal erneut angemeldet haben, werden Ihre Berechtigungen automatisch aktualisiert. Verwenden Sie bis dahin sudo vor den Befehlen.

Überprüfen Sie, ob der IoT Edge-Systemdienst ausgeführt wird.

sudo systemctl status iotedge

Wenn Sie den Dienst zur Fehlerbehebung benötigen, rufen Sie die Dienstprotokolle ab.

journalctl -u iotedge

Verwenden Sie das Tool check, um die Konfiguration und den Verbindungsstatus des Geräts zu überprüfen.

sudo iotedge check

Tipp

Verwenden Sie zur Ausführung des Tools „check“ immer sudo, auch nachdem Ihre Berechtigungen aktualisiert wurden. Das Tool benötigt erhöhte Rechte für den Zugriff auf die Konfigurationsdatei, um den Konfigurationsstatus überprüfen zu können.

Hinweis

Auf einem neu bereitgestellten Gerät wird möglicherweise ein Fehler im Zusammenhang mit dem IoT Edge-Hub angezeigt:

× Produktionsbereitschaft: Das Speicherverzeichnis des Edge-Hubs wird im Hostdateisystem beibehalten – Fehler.

Der aktuelle Zustand des edgeHub-Containers konnte nicht überprüft werden.

Dieser Fehler wird auf einem neu bereitgestellten Gerät erwartet, da das IoT Edge-Hubmodul nicht ausgeführt wird. Um den Fehler zu beheben, legen Sie in IoT Hub die Module für das Gerät fest, und erstellen Sie eine Bereitstellung. Durch das Erstellen einer Bereitstellung für das Gerät werden die Module auf dem Gerät gestartet, einschließlich des IoT Edge-Hubmoduls.

Zeigen Sie alle Module an, die auf Ihrem IoT Edge-Gerät ausgeführt werden. Wenn der Dienst zum ersten Mal gestartet wird, sollte nur das Modul edgeAgent ausgeführt werden. Das Modul edgeAgent wird standardmäßig ausgeführt und unterstützt Sie beim Installieren und Starten von zusätzlichen Modulen, die Sie auf Ihrem Gerät bereitstellen.

sudo iotedge list

Wenn Sie ein neues IoT Edge Gerät erstellen, wird es im Azure-Portal mit dem Statuscode 417 -- The device's deployment configuration is not set angezeigt. Dieser Status ist normal und bedeutet, dass das Gerät bereit ist, eine Modulbereitstellung zu empfangen.

Offlineinstallation oder Installation einer bestimmten Version (optional)

Die in diesem Abschnitt aufgeführten Schritte sind für Szenarien vorgesehen, die von den Schritten der Standardinstallation nicht abgedeckt werden. Dies kann beinhalten:

  • Die Offlineinstallation von IoT Edge
  • Die Installation einer Release Candidate-Version

Mithilfe der in diesem Abschnitt beschriebenen Schritte können Sie eine bestimmte Version der Azure IoT Edge-Runtime installieren, die über Ihren Paket-Manager nicht zur Verfügung steht. Die Microsoft-Paketliste enthält nur eine begrenzte Reihe aktueller Versionen und deren Unterversionen. Diese Schritte sind also für diejenigen gedacht, die eine ältere Version oder eine Release Candidate-Version installieren möchten.

Mithilfe von curl-Befehlen können Sie die Komponentendateien direkt aus dem IoT Edge-GitHub-Repository als Ziel verwenden.

  1. Navigieren Sie zu den Veröffentlichungen von Azure IoT Edge, und suchen Sie die Version, die Sie verwenden möchten.

  2. Erweitern Sie den Abschnitt Assets für diese Version.

  3. Jede Version sollte neue Dateien für den IoT Edge-Sicherheitsdaemon und die hsmlib haben. Wenn Sie IoT Edge auf einem Offlinegerät installieren möchten, laden Sie diese Dateien im Voraus herunter. Alternativ können Sie diese Komponenten mit den folgenden Befehlen aktualisieren.

    1. Suchen Sie die Libiothsm-std-Datei , die der Architektur Ihres IoT Edge-Geräts entspricht. Klicken Sie mit der rechten Maustaste auf den Dateilink, und kopieren Sie die Linkadresse.

    2. Verwenden Sie den kopierten Link im folgenden Befehl, um diese Version der hsmlib zu installieren:

      curl -L libiothsm-std_link_here -o libiothsm-std.deb && sudo apt-get install ./libiothsm-std.deb
      
    3. Suchen Sie die Iotedge-Datei , die der Architektur Ihres IoT Edge-Geräts entspricht. Klicken Sie mit der rechten Maustaste auf den Dateilink, und kopieren Sie die Linkadresse.

    4. Verwenden Sie den kopierten Link im folgenden Befehl, um diese Version des IoT Edge-Sicherheitsdaemons zu installieren.

      curl -L iotedge_link_here -o iotedge.deb && sudo apt-get install ./iotedge.deb
      

Nachdem das Containermodul und die IoT Edge-Laufzeit auf Ihrem Gerät installiert sind, können Sie den nächsten Schritt ausführen, der darin besteht, das Gerät mit seiner Cloudidentität bereitzustellen.

Deinstallieren von IoT Edge

Verwenden Sie die folgenden Befehle, wenn Sie die IoT Edge-Installationen von Ihrem Gerät entfernen möchten.

Entfernen Sie die IoT Edge-Runtime.

sudo apt-get autoremove iotedge

Wenn die IoT Edge-Runtime entfernt wird, werden alle von ihr erstellten Container angehalten. Auf Ihrem Gerät sind sie jedoch weiterhin vorhanden. Sehen Sie sich alle Container an, um zu sehen, welche verbleiben.

sudo docker ps -a

Löschen Sie die Container von Ihrem Gerät, einschließlich der zwei Laufzeitcontainer.

sudo docker rm -f <container name>

Entfernen Sie schließlich die Containerruntime von Ihrem Gerät.

sudo apt-get autoremove --purge moby-engine

Nächste Schritte

Sie können nun mit dem Artikel zum Bereitstellen von IoT Edge-Modulen fortfahren, um zu erfahren, wie Sie Module auf Ihrem Gerät bereitstellen.