Das Erstellen und Bereitstellen eines IoT Edge-Geräts im großen Stil mithilfe von X.509-Zertifikaten

Gilt für:IoT Edge 1.4 checkmark IoT Edge 1.4

Wichtig

IoT Edge Version 1.4 wird unterstützt. Wenn Sie ein früheres Release verwenden, finden Sie weitere Informationen unter Aktualisieren von IoT Edge.

Dieser Artikel enthält End-to-End-Anweisungen für die automatische Bereitstellung eines oder mehrerer IoT Edge Linux-Geräte mit X.509-Zertifikaten. Sie können Azure loT Edge-Geräte mit dem Azure loT Hub-Device Provisioning Service (DPS) automatisch bereitstellen. Wenn Sie mit dem Prozess der automatischen Bereitstellung nicht vertraut sind, lesen Sie die Übersicht zur Bereitstellung, bevor Sie den Vorgang fortsetzen.

Aufgaben:

  1. Generieren Sie Zertifikate und Schlüssel.
  2. Erstellen Sie entweder eine individuelle Registrierung für ein einzelnes Gerät oder eine Gruppenregistrierung für eine Gruppe von Geräten.
  3. Installieren Sie die IoT Edge-Runtime, und registrieren Sie das Gerät bei IoT Hub.

Die Verwendung von X.509-Zertifikaten als Nachweismechanismus ist eine exzellente Möglichkeit, die Produktion zu skalieren und die Gerätebereitstellung zu vereinfachen. X.509-Zertifikate werden normalerweise in einer Zertifikatvertrauenskette angeordnet. Beginnend mit einem selbst signierten oder vertrauenswürdigen Stammzertifikat signiert jedes Zertifikat in der Kette das nächstniedrigere Zertifikat. Mit diesem Muster wird eine delegierte Vertrauenskette vom Stammzertifikat über jedes Zwischenzertifikat bis zum endgültigen Zertifikat für nachgeschaltete Geräte erstellt, das auf einem Gerät installiert ist.

Tipp

Wenn Ihr Gerät ein Hardwaresicherheitsmodul (HSM) enthält, z. B. ein TPM 2.0, empfehlen wir, die X.509-Schlüssel sicher im HSM zu speichern. Informieren Sie sich ausführlicher, wie Sie die Zero-Touch-Bereitstellung nach Bedarf implementieren können, die in dieser Blaupause mit dem Beispiel Iotedge-tpm2cloud beschrieben wird.

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 oder virtuelles Linux-Gerät, dass das IoT Edge-Gerät sein soll.

Generieren von Geräteidentitätszertifikaten

Das Geräteidentitätszertifikat ist ein Zertifikat für nachgeschaltete Geräte, das über eine Zertifikatvertrauenskette mit dem obersten X.509-Zertifikat der Zertifizierungsstelle (Certificate Authority, CA) verbunden ist. Für das Geräteidentitätszertifikat muss der allgemeine Name (Common Name, CN) auf die Geräte-ID festgelegt sein, die das Gerät in Ihrem IoT-Hub haben soll.

Geräteidentitätszertifikate werden nur für die Bereitstellung des IoT Edge Geräts und die Authentifizierung des Geräts bei Azure IoT Hub verwendet. Im Gegensatz zu den Zertifizierungsstellenzertifikaten, die das IoT Edge-Gerät Modulen oder nachgeschalteten Geräten zur Überprüfung präsentiert, sind sie keine Signaturzertifikate. Weitere Informationen finden Sie unter Details zur Verwendung von Azure IoT Edge-Zertifikaten.

Nachdem Sie das Geräteidentitätszertifikat erstellt haben, sollten Sie zwei Dateien haben: eine CER- oder PEM-Datei, die den öffentlichen Teil des Zertifikats enthält, und eine CER- oder PEM-Datei mit dem privaten Schlüssel des Zertifikats. Wenn Sie die Gruppenregistrierung in DPS verwenden möchten, benötigen Sie in derselben Zertifikatvertrauenskette außerdem den öffentlichen Teil eines Zwischenzertifikats oder eines Stammzertifikats der Zertifizierungsstelle.

Zum Einrichten der automatischen Bereitstellung mit X.509 benötigen Sie die folgenden Dateien:

  • Das Geräteidentitätszertifikat und das zugehörige private Schlüsselzertifikat. Das Geräteidentitätszertifikat wird auf DPS hochgeladen, wenn Sie eine individuelle Registrierung erstellen. Der private Schlüssel wird an die IoT Edge-Runtime übermittelt.
  • Ein vollständiges Kettenzertifikat, das mindestens die Geräteidentität und die Zwischenzertifikate enthalten sollte. Das vollständige Kettenzertifikat wird an die IoT Edge-Runtime übermittelt.
  • Ein Zwischenzertifikat oder ein Zertifikat der Stammzertifizierungsstelle aus der Zertifikatvertrauenskette. Dieses Zertifikat wird auf DPS hochgeladen, wenn Sie eine Gruppenregistrierung erstellen.

Verwenden von Testzertifikaten (optional)

Wenn Sie über keine Zertifizierungsstelle zum Erstellen neuer Identitätszertifikate verfügen und dieses Szenario testen möchten, enthält das Git-Repository für Azure IoT Edge Skripts, mit denen Sie Testzertifikate generieren können. Diese Zertifikate sind nur für Entwicklungstests konzipiert und dürfen in der Produktionsumgebung nicht verwendet werden.

Führen Sie zum Erstellen von Testzertifikaten die Schritte in Erstellen von Demozertifikaten zum Testen der Features von IoT Edge-Geräten aus. Führen Sie die beiden erforderlichen Abschnitte zum Einrichten der Skripts für die Zertifikatgenerierung und Erstellen eines Stammzertifikats der Zertifizierungsstelle aus. Führen Sie danach die Schritte zum Erstellen eines Geräteidentitätszertifikats aus. Wenn Sie sie abgeschlossen haben, sollten Sie über die folgende Zertifikatskette und das folgende Schlüsselpaar verfügen:

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

Sie benötigen diese beiden Zertifikate auf dem IoT Edge-Gerät. Wenn Sie die individuelle Registrierung in DPS verwenden möchten, laden Sie die Datei „.cert.pem“ hoch. Wenn Sie die Gruppenregistrierung in DPS verwenden möchten, benötigen Sie in derselben Zertifikatvertrauenskette zum Hochladen außerdem ein Zwischenzertifikat oder ein Stammzertifikat der Zertifizierungsstelle. Wenn Sie Demozertifikate verwenden, verwenden Sie das Zertifikat für die Gruppenregistrierung, <WRKDIR>/certs/azure-iot-test-only.root.ca.cert.pem.

Erstellen einer DPS-Registrierung

Verwenden Sie Ihre generierten Zertifikate und Schlüssel, um in DPS eine Registrierung für ein oder mehrere IoT Edge-Geräte zu erstellen.

Wenn Sie ein einzelnes IoT Edge-Gerät bereitstellen möchten, erstellen Sie eine individuelle Registrierung. Wenn Sie mehrere Geräte bereitstellen müssen, führen Sie die Schritte zum Erstellen einer DPS-Gruppenregistrierung aus.

Wenn Sie eine Registrierung im DPS erstellen, haben Sie die Möglichkeit zum Angeben von Anfänglicher Status von Gerätezwilling. Im Gerätezwilling können Sie Tags zum Gruppieren von Geräten nach jeder beliebigen Metrik, z.B. Region, Umgebung, Speicherort oder Geräte, festlegen, die Sie in Ihrer Projektmappe benötigen. Diese Tags werden zum Erstellen von automatischen Bereitstellungen verwendet.

Weitere Informationen zu Registrierungen im Device Provisioning Service finden Sie unter Verwalten von Geräteregistrierungen.

Erstellen einer individuellen DPS-Registrierung

Individuelle Registrierungen verwenden den öffentlichen Teil des Identitätszertifikats eines Geräts und gleichen es mit dem Zertifikat auf dem Gerät ab.

Tipp

Die Schritte in diesem Artikel gelten für das Azure-Portal. Sie können individuelle Registrierungen aber auch mithilfe der 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. Navigieren Sie im Azure-Portal zu Ihrer Instanz des IoT Hub Device Provisioning Service.

  2. Klicken Sie in Einstellungen auf Registrierungen verwalten.

  3. Klicken Sie auf Individuelle Registrierung hinzufügen, und führen Sie dann die folgenden Schritte aus, um die Registrierung zu konfigurieren:

    • Mechanismus: Wählen Sie X.509 aus.

    • Primäre Zertifikatsdatei .pem oder .cer: Laden Sie die öffentliche Datei aus dem Geräteidentitätszertifikat hoch. Wenn Sie die Skripts zum Generieren eines Testzertifikats verwendet haben, wählen Sie die folgende Datei aus:

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

    • IoT Hub Device ID: Geben Sie bei Bedarf eine ID für Ihr Gerät an. Sie können mithilfe von Geräte-IDs ein einzelnes Gerät als Ziel für die Modulbereitstellung festlegen. Wenn Sie keine Geräte-ID angeben, wird der allgemeine Name (Common Name, CN) im X.509-Zertifikat verwendet.

    • IoT Edge-Gerät: Wählen Sie True aus, um zu deklarieren, dass die Registrierung für ein IoT Edge-Gerät gilt.

    • Wählen Sie die IoT-Hubs aus, denen dieses Gerät zugewiesen werden kann: Wählen Sie den verknüpften IoT-Hub aus, mit dem Sie Ihr Gerät verbinden möchten. Sie können mehrere Hubs auswählen, und das Gerät wird dann je nach gewählter Zuteilungsrichtlinie einem dieser Hubs zugewiesen.

    • Initial Device Twin State: Fügen Sie einen Tagwert hinzu, der dem Gerätezwilling hinzugefügt werden soll, wenn Sie möchten. Mithilfe von Tags können Sie Gruppen von Geräten als Ziel für die automatische Bereitstellung festlegen. Zum Beispiel:

      {
          "tags": {
             "environment": "test"
          },
          "properties": {
             "desired": {}
          }
      }
      
  4. Wählen Sie Speichern.

Unter Registrierungen verwalten wird die Registrierungs-ID für die Registrierung angezeigt, die Sie gerade erstellt haben. Notieren Sie sich diese ID, da sie bei der Bereitstellung Ihres Geräts verwendet werden kann.

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 das Containermodul 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

Konfigurieren Sie Ihr Gerät mit den Informationen, die es zum Herstellen einer Verbindung mit dem Gerätebereitstellungsdienst und IoT Hub verwendet, sobald die Runtime auf Ihrem Gerät installiert ist.

Halten Sie die folgenden Informationen bereit:

  • Den DPS-Wert ID-Bereich. Sie können diesen Wert im Azure-Portal von der Übersichtsseite für Ihre DPS-Instanz abrufen.
  • Die Kettendatei für das Geräteidentitätszertifikat auf dem Gerät.
  • Die Schlüsseldatei für die Geräteidentität auf dem Gerät.

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 Provisioning (Bereitstellung) der Datei. Heben Sie die Auskommentierung der Zeilen für die DPS-Bereitstellung mit X.509-Zertifikat auf, und stellen Sie sicher, dass alle anderen Bereitstellungszeilen auskommentiert sind.

    # 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. Aktualisieren Sie den Wert von id_scope mit der Bereichs-ID, die Sie zuvor aus Ihrer DPS-Instanz kopiert haben.

  3. Geben Sie eine registration_id für das Gerät an. Dies ist die ID, die das Gerät in IoT Hub aufweist. Die Registrierungs-ID muss mit dem allgemeinen Namen (Common Name, CN) des Identitätszertifikats übereinstimmen.

  4. Aktualisieren Sie die Werte von identity_cert und identity_pk mit Ihren Zertifikat- und Schlüsselinformationen.

    Der Wert des Identitätszertifikats kann als Datei-URI bereitgestellt oder mithilfe von EST oder einer lokalen Zertifizierungsstelle dynamisch ausgestellt werden. Heben Sie die Auskommentierung von nur einer Zeile auf, basierend auf dem Format, das Sie verwenden möchten.

    Der Wert des privaten Identitätsschlüssels kann als Datei-URI oder PKCS#11-URI angegeben werden. Heben Sie die Auskommentierung von nur einer Zeile auf, basierend auf dem Format, das Sie verwenden möchten.

    Wenn Sie PKCS#11-URIs verwenden, suchen Sie in der Konfigurationsdatei den Abschnitt PKCS#11, und stellen Sie Informationen zu Ihrer PKCS#11-Konfiguration bereit.

    Weitere Informationen zu Zertifikaten finden Sie unter Verwalten von IoT Edge-Zertifikaten.

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

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

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

  7. Speichern und schließen Sie die Datei.

Wenden Sie die an IoT Edge vorgenommenen Konfigurationsänderungen an.

sudo iotedge config apply

Bestätigen einer erfolgreichen Installation

Wenn die Runtime erfolgreich gestartet wurde, können Sie zu Ihrem IoT Hub navigieren und mit dem Bereitstellen von IoT Edge-Modulen auf Ihrem Gerät beginnen.

Sie können überprüfen, ob die individuelle Registrierung, die Sie im Gerätebereitstellungsdienst erstellt haben, verwendet wurde. Navigieren Sie im Azure-Portal zu Ihrer Instanz für den Gerätebereitstellungsdienst. Ö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.

Mit den folgenden Befehlen können Sie auf Ihrem Gerät überprüfen, ob IoT Edge erfolgreich installiert und gestartet wurde.

Überprüfen Sie den Status des IoT Edge-Diensts.

sudo iotedge system status

Untersuchen Sie die Dienstprotokolle.

sudo iotedge system logs

Führen Sie ausgeführte Module auf.

sudo iotedge list

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 Azure-Portals oder Verwenden der Azure CLI.