Einrichtung und Fehlerbehebung von AWS IoT Greengrass mit Client-Geräten - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Einrichtung und Fehlerbehebung von AWS IoT Greengrass mit Client-Geräten

Erstellt von Marouane Sefiani und Akalanka De Silva (AWS)

Umgebung: PoC oder Pilotprojekt

Technologien: IoT

AWS-Dienste: AWS IoT Greengrass; AWS IoT Core

Übersicht

AWS IoT Greengrass ist ein Open-Source-Edge-Laufzeit- und Cloud-Service für die Erstellung, Bereitstellung und Verwaltung von Internet of Things (IoT) -Software auf Edge-Geräten. Zu den Anwendungsfällen für AWS IoT Greengrass gehören:

  • Intelligente Häuser, in denen ein AWS IoT Greengrass-Gateway als Hub für die Hausautomation verwendet wird

  • Intelligente Fabriken, in denen AWS IoT Greengrass die Erfassung und lokale Verarbeitung von Daten aus der Fertigung erleichtern kann

AWS IoT Greengrass kann als sicherer, authentifizierter MQTT-Verbindungsendpunkt für andere Edge-Geräte (auch als Client-Geräte bezeichnet) fungieren, die andernfalls normalerweise eine direkte Verbindung zu AWS IoT Core herstellen würden. Diese Funktion ist nützlich, wenn Client-Geräte keinen direkten Netzwerkzugriff auf den AWS IoT Core Core-Endpunkt haben.

Sie können AWS IoT Greengrass für die Verwendung mit Client-Geräten für die folgenden Anwendungsfälle einrichten:

  • Für Client-Geräte, um Daten an AWS IoT Greengrass zu senden

  • Für AWS IoT Greengrass zur Weiterleitung von Daten an AWS IoT Core

  • Um die Vorteile der erweiterten Funktionen der AWS IoT Core Rules Engine zu nutzen

Diese Funktionen erfordern die Installation und Konfiguration der folgenden Komponenten auf dem AWS IoT Greengrass-Gerät:

  • MQTT-Broker

  • MQTT-Brücke

  • Authentifizierung von Client-Geräten

  • IP-Detektor

Darüber hinaus müssen veröffentlichte Nachrichten von Client-Geräten im JSON-Format oder im Protocol Buffer-Format (Protobuf) vorliegen.

Dieses Muster beschreibt, wie diese erforderlichen Komponenten installiert und konfiguriert werden, und bietet Tipps und bewährte Methoden zur Fehlerbehebung.

Voraussetzungen und Einschränkungen

Voraussetzungen

Einschränkungen

  • Sie müssen eine AWS-Region wählen, in der AWS IoT Core verfügbar ist. Die aktuelle Liste der Regionen für AWS IoT Core finden Sie unter AWS-Services nach Regionen.

  • Das Kerngerät muss über mindestens 172 MB RAM und 512 MB Festplattenspeicher verfügen.

Architektur

Das folgende Diagramm zeigt die Lösungsarchitektur für dieses Muster.

Lösungsarchitektur für die Einrichtung von AWS IoT Greengrass mit Client-Geräten

Die Architektur umfasst:

  • Zwei Client-Geräte. Jedes Gerät enthält einen privaten Schlüssel, ein Gerätezertifikat und ein Zertifikat der Stammzertifizierungsstelle (CA). Das AWS IoT Device SDK, das einen MQTT-Client enthält, ist ebenfalls auf jedem Client-Gerät installiert.

  • Ein Kerngerät, auf dem AWS IoT Greengrass mit den folgenden Komponenten bereitgestellt wird:

    • MQTT-Broker

    • MQTT-Brücke

    • Authentifizierung von Client-Geräten

    • IP-Detektor

Diese Architektur unterstützt die folgenden Szenarien:

  • Client-Geräte können ihren MQTT-Client verwenden, um über den MQTT-Broker des Kerngeräts miteinander zu kommunizieren.

  • Client-Geräte können auch mit AWS IoT Core in der Cloud über den MQTT-Broker des Kerngeräts und die MQTT-Bridge kommunizieren.

  • AWS IoT Core in der Cloud kann über den MQTT-Testclient und die MQTT-Bridge und den MQTT-Broker des Kerngeräts Nachrichten an Client-Geräte senden.

Weitere Informationen zur Kommunikation zwischen Client-Geräten und dem Core-Gerät finden Sie im Abschnitt Zusätzliche Informationen.

Tools

AWS-Services

  • AWS IoT Greengrass ist ein Open-Source-Edge-Runtime- und Cloud-Service für das Internet der Dinge (IoT), mit dem Sie IoT-Anwendungen auf Ihren Geräten erstellen, bereitstellen und verwalten können.

  • AWS IoT Core bietet sichere, bidirektionale Kommunikation für mit dem Internet verbundene Geräte, um eine Verbindung zur AWS-Cloud herzustellen.

  • Das AWS IoT Device SDK ist ein Software-Entwicklungskit, das Open-Source-Bibliotheken, Entwicklerhandbücher mit Beispielen und Portierungsleitfäden enthält, sodass Sie innovative IoT-Produkte oder -Lösungen auf den Hardwareplattformen Ihrer Wahl entwickeln können.

  • AWS Identity and Access Management (IAM) hilft Ihnen dabei, den Zugriff auf Ihre AWS-Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.

Bewährte Methoden

  • Die Nutzdaten der Nachrichten von Client-Geräten sollten entweder im JSON- oder Protobuf-Format vorliegen, um die erweiterten Funktionen der AWS IoT Core Rules Engine, wie Transformation und bedingte Aktionen, nutzen zu können.

  • Konfigurieren Sie die MQTT-Bridge so, dass sie eine bidirektionale Kommunikation ermöglicht.

  • Konfigurieren und implementieren Sie die IP-Detektorkomponente in AWS IoT Greengrass, um sicherzustellen, dass die IP-Adressen des Kerngeräts im Feld Subject Alternative Name (SAN) des MQTT-Brokerzertifikats enthalten sind.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Richten Sie AWS IoT Greengrass auf Ihrem Kerngerät ein.

Installieren Sie die AWS IoT Greengrass Core-Software, indem Sie den Anweisungen im Entwicklerhandbuch folgen.

AWS IoT Greengrass

Überprüfen Sie den Status Ihrer Installation.

Verwenden Sie den folgenden Befehl, um den Status des AWS IoT Greengrass-Service auf Ihrem Kerngerät zu überprüfen:

sudo systemctl status greengrass.service

Die erwartete Ausgabe des Befehls lautet:

Launched Nucleus successfully
Allgemeines AWS

Richten Sie eine IAM-Richtlinie ein und fügen Sie sie der Greengrass-Servicerolle hinzu.

  1. Erstellen Sie eine IAM-Richtlinie, um die Kommunikation zur und von der MQTT-Bridge zu ermöglichen. Hier ist ein Beispiel für eine Richtlinie:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:*" ], "Resource": "*" }, { "Sid": "GreengrassActions", "Effect": "Allow", "Action": [ "greengrass:*" ], "Resource": "*" } ] }
  2. Ordnen Sie die Richtlinie der Greengrass-Servicerolle zu. Verwenden Sie den folgenden Befehl, um die Servicerolle abzurufen:

    aws greengrassv2 get-service-role-for-account --region <region>

    wo <region> bezieht sich auf Ihre AWS-Region.

Allgemeines AWS

Konfigurieren und implementieren Sie die erforderlichen Komponenten auf dem AWS IoT Greengrass-Kerngerät.

Konfigurieren und implementieren Sie die folgenden Komponenten:

AWS IoT Greengrass

Vergewissern Sie sich, dass die MQTT-Bridge eine bidirektionale Kommunikation ermöglicht.

Um MQTT-Nachrichten zwischen Client-Geräten und AWS IoT Core weiterzuleiten, konfigurieren und implementieren Sie die MQTT-Bridge-Komponente und geben Sie die Themen an, die weitergeleitet werden sollen. Ein Beispiel:

{ "mqttTopicMapping": { "ClientDevicesToCloud": { "topic": "dt/#", "source": "LocalMqtt", "target": "IotCore" }, "CloudToClientDevices": { "topic": "cmd/#", "source": "IotCore", "target": "LocalMqtt" } } }
AWS IoT Greengrass

Vergewissern Sie sich, dass die Authentifizierungskomponente es Client-Geräten ermöglicht, sich zu verbinden und Themen zu veröffentlichen oder zu abonnieren.

Die folgende aws.greengrass.clientdevices.Auth Konfiguration ermöglicht es allen Client-Geräten, eine Verbindung herzustellen, Nachrichten zu veröffentlichen und alle Themen zu abonnieren.

{ "deviceGroups": { "formatVersion": "2021-03-05", "definitions": { "MyPermissiveDeviceGroup": { "selectionRule": "thingName: *", "policyName": "MyPermissivePolicy" } }, "policies": { "MyPermissivePolicy": { "AllowAll": { "statementDescription": "Allow client devices to perform all actions.", "operations": [ "*" ], "resources": [ "*" ] } } } } }
AWS IoT Greengrass
AufgabeBeschreibungErforderliche Fähigkeiten

Installieren Sie das AWS IoT Device SDK.

Installieren Sie das AWS IoT Device SDK auf Client-Geräten. Eine vollständige Liste der unterstützten Sprachen und der zugehörigen SDKs finden Sie in der AWS IoT Core Core-Dokumentation.

Das AWS IoT Device SDK für Python SDK befindet sich beispielsweise auf GitHub. Um dieses SDK zu installieren:

  1. Vergewissern Sie sich, dass Python 3.7 oder höher installiert ist, wie auf der Seite Voraussetzungen des GitHub Repositorys beschrieben.

  2. Verwenden Sie den Befehl pip, um das SDK zu installieren.

    Für macOS und Linux:

    python3 -m pip install awsiotsdk

    Für Windows:

    python -m pip install awsiotsdk

Alternativ können Sie das SDK aus dem Quell-Repository installieren:

# Create a workspace directory to hold all the SDK files mkdir sdk-workspace cd sdk-workspace # Clone the repository git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git # Install using Pip (use 'python' instead of 'python3' on Windows) python3 -m pip install ./aws-iot-device-sdk-python-v2
Allgemeines AWS IoT

Erschaffe etwas.

  1. Wenn in der AWS IoT IoT-Konsole die Schaltfläche Erste Schritte angezeigt wird, wählen Sie sie aus. Andernfalls wählen Sie im Navigationsbereich Sicherheit, Richtlinien aus.

  2. Wenn das Dialogfeld Sie haben noch keine Richtlinien angezeigt wird, wählen Sie Richtlinie erstellen aus. Wählen Sie andernfalls Erstellen.

  3. Geben Sie einen Namen für die AWS-IoT-Richtlinie ein (z. B.ClientDevicePolicy).

  4. Ersetzen Sie im Abschnitt Anweisungen hinzufügen die bestehende Richtlinie durch den folgenden JSON-Code. Ersetzen Sie <region> und <account> durch Ihre AWS-Region und AWS-Kontonummer.

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:region:account:client/*" }, { "Effect": "Allow", "Action": "iot:Publish", "Resource": "*" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": "*" }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": "arn:aws:iot:region:account:thing/*" } ] }
  5. Wählen Sie Erstellen.

  6. Wählen Sie auf der AWS IoT IoT-Konsole im Navigationsbereich Manage, Things aus.

  7. Wenn das Dialogfeld Sie haben noch nichts angezeigt wird, wählen Sie Etwas registrieren aus. Wählen Sie andernfalls Erstellen.

  8. Wählen sie auf der Seite Creating AWS IoT things (AWS IoT-Objekte erstellen) den Eintrag Create a single thing (Einzelnes Objekt erstellen).

  9. Geben Sie auf der Seite Add your device to the device registry (Ihr Gerät zur Geräteregistrierung hinzufügen) einen Namen für Ihr IoT-Objekt ein (z. B. ClientDevice1) und wählen Sie dann Next (Weiter).

    Hinweis: Sie können den Namen einer Sache nicht mehr ändern, nachdem Sie sie erstellt haben. Um den Namen zu ändern, müssen Sie ein neues Ding erstellen, ihm den neuen Namen geben und dann das alte Ding löschen.

  10. Wählen Sie auf der Seite Add a certificate for your thing (Fügen Sie ein Zertifikat für Ihr Objekt hinzu.) die Option Create certificate (Zertifikat erstellen).

  11. Klicken Sie auf die Download-Links, um das Zertifikat, den privaten Schlüssel und das CA-Stammzertifikat herunterzuladen.

    Wichtig: Dies ist Ihre einzige Möglichkeit, Ihr Zertifikat und Ihren privaten Schlüssel herunterzuladen.

  12. Wählen Sie Aktivieren aus, um Ihr Zertifikat zu aktivieren. Das Zertifikat muss aktiv sein, damit ein Gerät eine Verbindung zu AWS IoT herstellen kann.

  13. Wählen Sie Attach a policy (Richtlinie anfügen) aus.

  14. Wählen Sie unter Richtlinie für Ihr Ding hinzufügen die Option ClientDevicePolicyDing registrieren aus.

AWS IoT Core

Laden Sie das CA-Zertifikat vom Greengrass-Core-Gerät herunter.

Wenn Sie erwarten, dass das Greengrass-Core-Gerät in Offline-Umgebungen funktioniert, müssen Sie das Greengrass-Core-CA-Zertifikat für das Client-Gerät verfügbar machen, damit es das Zertifikat des MQTT-Brokers (das von der Greengrass Core CA ausgestellt wurde) verifizieren kann. Daher ist es wichtig, eine Kopie dieses Zertifikats zu erhalten. Verwenden Sie eine der folgenden Methoden, um das CA-Zertifikat herunterzuladen:

  • Wenn Sie von Ihrem PC aus Netzwerkzugriff auf das AWS IoT Greengrass-Gerät haben, geben Sie es https://<device IP>:8883 in Ihrem Webbrowser ein und sehen Sie sich das MQTT-Broker-Zertifikat und das CA-Zertifikat an. Sie können das CA-Zertifikat auch auf dem Client-Gerät speichern.

  • Alternativ können Sie die OpenSSL-Befehlszeile verwenden:

    openssl s_client -showcerts -connect <device IP>:8883
Allgemeines AWS

Kopieren Sie die Anmeldeinformationen auf den Client-Geräten.

Kopieren Sie das Greengrass Core CA-Zertifikat, das Gerätezertifikat und den privaten Schlüssel auf die Client-Geräte.

Allgemeines AWS

Ordnen Sie Client-Geräte dem Kerngerät zu.

Ordnen Sie Client-Geräte einem Core-Gerät zu, sodass sie das Core-Gerät erkennen können. Die Client-Geräte können dann die Greengrass Discovery API verwenden, um Verbindungsinformationen und Zertifikate für ihre zugehörigen Kerngeräte abzurufen. Weitere Informationen finden Sie unter Client-Geräte zuordnen in der AWS IoT Greengrass-Dokumentation.

  1. Wählen Sie auf der AWS IoT Greengrass-Konsole die Option Core-Geräte aus.

  2. Wählen Sie das zu verwaltende Kerngerät aus.

  3. Wählen Sie auf der Detailseite des Kerngeräts die Registerkarte Client-Geräte aus.

  4. Wählen Sie im Abschnitt Zugeordnete Client-Geräte die Option Client-Geräte zuordnen aus.

  5. Gehen Sie im Modalmodus Client-Geräte mit Kerngerät verknüpfen für jedes zu verknüpfende Client-Gerät wie folgt vor:

    1. Geben Sie den Namen des AWS IoT ein, das als Client-Gerät verknüpft werden soll.

    2. Wählen Sie Hinzufügen aus.

  6. Wählen Sie Associate aus.

Die Client-Geräte, die Sie verknüpft haben, können jetzt die Greengrass Discovery API verwenden, um dieses Kerngerät zu erkennen.

AWS IoT Greengrass
AufgabeBeschreibungErforderliche Fähigkeiten

Senden Sie Daten von einem Client-Gerät an ein anderes Client-Gerät.

Verwenden Sie den MQTT-Client auf Ihrem Gerät, um eine Nachricht zu dt/client1/sensor diesem Thema zu veröffentlichen.

Allgemeines AWS

Senden Sie Daten vom Client-Gerät an AWS IoT Core.

Verwenden Sie den MQTT-Client auf Ihrem Gerät, um eine Nachricht zu dt/client1/sensor diesem Thema zu veröffentlichen.

Abonnieren Sie im MQTT-Testclient das Thema, zu dem das Gerät Nachrichten sendet, oder abonnieren Sie # für alle Themen (siehe Details).

Allgemeines AWS

Senden Sie Nachrichten von AWS IoT Core an Client-Geräte.

Geben Sie auf der MQTT-Testclient-Seite auf der Registerkarte In einem Thema veröffentlichen im Feld Themenname den Themennamen Ihrer Nachricht ein. Verwenden Sie in diesem Beispiel cmd/client1 für das Thema.

Allgemeines AWS

Fehlerbehebung

ProblemLösung

Fehler beim Serverzertifikat konnte nicht verifiziert werden

Dieser Fehler tritt auf, wenn der MQTT-Client das vom MQTT-Broker während des TLS-Handshakes vorgelegte Zertifikat nicht verifizieren kann. Der häufigste Grund ist, dass der MQTT-Client nicht über das CA-Zertifikat verfügt. Gehen Sie wie folgt vor, um sicherzustellen, dass das CA-Zertifikat dem MQTT-Client zur Verfügung gestellt wird.

  1. Wenn Sie von Ihrem PC aus Netzwerkzugriff auf das AWS IoT Greengrass-Gerät haben, öffnen Sie https://<device IP>:8883 ein Browserfenster, um das MQTT-Broker-Zertifikat und das CA-Zertifikat anzuzeigen. Sie können das CA-Zertifikat auch auf dem Client-Gerät speichern.

    Verwenden Sie alternativ die OpenSSL-Befehlszeile:

    openssl s_client -showcerts -connect <device IP>:8883
  2. Speichern Sie den Inhalt der Zertifikate Moquette CA und Greengrass Core CA in Dateien und zeigen Sie dann den dekodierten Inhalt mit dem folgenden Befehl an:

    openssl x509 -in <Name of CA>.pem -text

    Das Moquette CA-Zertifikat sollte das SAN-Feld wie in diesem Beispiel anzeigen:

    X509v3 Subject Alternative Name: IP Address:XXX.XXX.XXX.XXX, IP Address:127.0.0.1, DNS:localhost

Fehler beim Überprüfen des Servernamens

Dieser Fehler tritt auf, wenn der MQTT-Client nicht überprüfen kann, ob er sich mit dem richtigen Server verbindet. Der häufigste Grund ist, dass die IP-Adresse des Greengrass-Geräts nicht im SAN-Feld des Zertifikats aufgeführt ist.

Folgen Sie den Anweisungen in der vorherigen Lösung, um das MQTT-Broker-Zertifikat zu erhalten, und stellen Sie sicher, dass das SAN-Feld die IP-Adresse des AWS IoT Greengrass-Geräts enthält, wie im Abschnitt Zusätzliche Informationen erklärt. Falls nicht, vergewissern Sie sich, dass die IP-Detektorkomponente korrekt installiert ist, und starten Sie das Kerngerät neu.

Der Servername konnte nicht nur überprüft werden, wenn die Verbindung von einem eingebetteten Client-Gerät aus hergestellt wurde

Mbed TLS, eine beliebte TLS-Bibliothek, die in eingebetteten Geräten verwendet wird, unterstützt derzeit nur die DNS-Namensüberprüfung im SAN-Feld des Zertifikats, wie im Mbed TLS-Bibliothekscode gezeigt. Da das Kerngerät keinen eigenen Domainnamen hat und von der IP-Adresse abhängt, schlagen TLS-Clients, die Mbed TLS verwenden, die Überprüfung des Servernamens während des TLS-Handshakes fehl, was zu einem Verbindungsfehler führt. Wir empfehlen, dass Sie die SAN-IP-Adressverifizierung über die Funktion x509_crt_check_san zu Ihrer Mbed-TLS-Bibliothek hinzufügen.

Zugehörige Ressourcen

Zusätzliche Informationen

Dieser Abschnitt enthält zusätzliche Informationen zur Kommunikation zwischen den Client-Geräten und dem Core-Gerät.

Der MQTT-Broker wartet auf Port 8883 im Kerngerät auf einen Verbindungsversuch mit dem TLS-Client. Die folgende Abbildung zeigt ein Beispiel für ein Serverzertifikat des MQTT-Brokers.

Beispiel für ein MQTT-Broker-Serverzertifikat

Das Beispielzertifikat zeigt die folgenden Details an:

  • Das Zertifikat wird von der AWS IoT Greengrass Core CA ausgestellt, die lokal und spezifisch für das Kerngerät ist. Das heißt, sie fungiert als lokale CA.

  • Dieses Zertifikat wird automatisch jede Woche von der Client-Authentifizierungskomponente rotiert, wie in der folgenden Abbildung dargestellt. Sie können dieses Intervall in der Konfiguration der Client-Authentifizierungskomponente festlegen.

Rotation des Serverzertifikats des MQTT-Brokers
  • Der alternative Subject Name (SAN) spielt eine entscheidende Rolle bei der Überprüfung des Servernamens auf der Seite des TLS-Clients. Damit kann der TLS-Client sicherstellen, dass er sich mit dem richtigen Server verbindet, und verhindert man-in-the-middle Angriffe bei der Einrichtung der TLS-Sitzung. Im Beispielzertifikat gibt das SAN-Feld an, dass dieser Server auf localhost (dem lokalen Unix-Domain-Socket) lauscht und die Netzwerkschnittstelle die IP-Adresse 192.168.1.12 hat.

Der TLS-Client verwendet das SAN-Feld im Zertifikat, um bei der Serververifizierung zu überprüfen, ob er eine Verbindung zu einem legitimen Server herstellt. Im Gegensatz dazu wird bei einem typischen TLS-Handshake zwischen einem HTTP-Server und einem Browser der Domainname im Feld Common Name (CN) oder SAN verwendet, um die Domain zu überprüfen, zu der der Browser während der Serververifizierung tatsächlich eine Verbindung herstellt. Wenn das Kerngerät keinen Domainnamen hat, dient die im SAN-Feld angegebene IP-Adresse demselben Zweck. Weitere Informationen finden Sie im Abschnitt „Alternativer Betreffname“ des Profils RFC 5280 — Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL).

Die IP-Detektorkomponente in AWS IoT Greengrass stellt sicher, dass die richtigen IP-Adressen im SAN-Feld des Zertifikats enthalten sind.

Das Zertifikat im Beispiel ist vom AWS IoT Greengrass-Gerät signiert, das als lokale Zertifizierungsstelle fungiert. Der TLS-Client (MQTT-Client) kennt diese CA nicht, daher müssen wir ein CA-Zertifikat bereitstellen, das wie folgt aussieht.

Beispiel für ein CA-Zertifikat