Wie werden Geräte mit AWS-IoT bereitgestellt?
Das Internet der Dinge (IoT) hat die Art und Weise wie wir mit der Welt interagieren revolutioniert. Von Smart Homes bis hin zu vernetzten Städten ermöglicht IoT Geräten, Daten in Echtzeit zu sammeln, zu teilen und darauf zu reagieren. Diese Konnektivität verbessert nicht nur die Effizienz und den Komfort, sondern eröffnet auch neue Möglichkeiten für Innovationen in verschiedenen Branchen.
Was ist Provisioning im IoT?
Provisioning im IoT bezieht sich auf den Prozess der Registrierung, Konfiguration und Sicherung von Geräten, sodass sie effektiv mit einer IoT-Plattform kommunizieren können. Dieser Prozess umfasst das Zuweisen von Anmeldeinformationen, das Einrichten von Sicherheitsrichtlinien und das Installieren der erforderlichen Software. Effizientes Provisioning ist entscheidend für das Management und die Skalierbarkeit jedes IoT-Netzwerks, da es sicherstellt, dass Geräte ab dem Moment ihrer Verbindung betriebsbereit sind.
Was ist AWS IoT Fleet Provisioning?
AWS IoT Core bietet eine robuste Lösung für die Gerätebereitstellung, die als Fleet Provisioning bekannt ist. Dieses Tool ermöglicht die automatisierte und sichere Registrierung sowie Konfiguration einer großen Anzahl von Geräten, wodurch die Zeit und der Aufwand für die Inbetriebnahme neuer Einheiten erheblich reduziert werden.
In diesem Artikel werden wir untersuchen, wie man AWS IoT Fleet Provisioning verwendet, um Geräte effizient bereitzustellen und eine reibungslose sowie sichere Integration in dein IoT-Netzwerk zu gewährleisten.
Geräte in AWS IoT
In AWS IoT werden Geräte als „things“ bezeichnet. Ein „Thing“ ist die virtuelle Darstellung eines Geräts, das über MQTT mit dem IoT-Netzwerk verbunden werden kann. Jedes „Thing“ verfügt über ein einzigartiges Zertifikat und einen privaten Schlüssel, um sich mit dem Netzwerk zu verbinden.

Der folgende Code zeigt die einfachste Verbindung eines Geräts mit AWS IoT unter Verwendung der
import { mqtt, iot } from 'aws-iot-device-sdk-v2';
const config = iot.AwsIotMqttConnectionConfigBuilder
.new_mtls_builder_from_path('certificate-filepath', 'private-key-filepath')
.with_certificate_authority_from_path(undefined, 'certificate-authority-filepath')
.with_client_id('client-id')
.with_endpoint('endpoint')
.build();
const connection = new mqtt.MqttClient().new_connection(config);
Wie erhalte ich Zertifikate?
Der einfachste Weg Verbindungszertifikate und einen privaten Schlüssel zu erhalten besteht darin, ein einzelnes Ding in der AWS


Du musst außerdem eine Richtlinie für das Zertifikat auswählen oder erstellen. Diese Richtlinie gewährt dem Gerät mit dem neuen Zertifikat die Berechtigungen sich zu verbinden, Nachrichten zu veröffentlichen und die erforderlichen MQTT-Themen zu abonnieren. Wenn du zum ersten Mal eine Richtlinie einrichtest und die Ressourcen nicht in der Produktion verwendest, kannst du eine Richtlinie mit vollem Zugriff wie die folgende verwenden:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
Die obige Richtlinie ermöglicht es dir, alle spezifischen Aktionen und Ressourcen von IoT Core zu verwenden, die hier beschrieben sind. Wenn du jedoch den Zugriff einschränken möchtest, zum Beispiel um das Abonnieren eines bestimmten MQTT-Themas und für einen bestimmten Client zu erlauben, kannst du etwas Ähnliches verwenden.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "arn:aws:iot:us-east-1:123456789:client/my-client"
},
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": "arn:aws:iot:us-east-1:123456789:topicfilter/some/topic"
}
]
}
Die obige Richtlinie erlaubt nur die Verbindung mit einer clientId namens „my-client“ und das Abonnieren des Themas „some/topic“.
Am Ende des Formulars erhältst du die benötigten Dateien für die Verbindung. Lade diese einmalig herunter und verwende sie zur Konfiguration deines Geräts.
...
.new_mtls_builder_from_path('certificate-filepath', 'private-key-filepath')
...
Was ist eine Zertifizierungsstelle (CA)?
Eine Zertifizierungsstelle (CA) ist eine vertrauenswürdige Instanz, die digitale Zertifikate ausstellt und verwaltet. Im Zusammenhang mit IoT validiert eine CA, dass die Geräte, die sich mit dem Netzwerk verbinden legitim und vertrauenswürdig sind. Du kannst entweder deine eigene CA einrichten, um deine Zertifikate zu generieren oder die von Amazon verwenden, die du im vorherigen Schritt heruntergeladen hast (Amazon Root CA 1).
...
.with_certificate_authority_from_path(undefined, 'certificate-authority-filepath')
...
Soll ich dies mit all meinen Geräten tun?
Die vorherigen Schritte sind korrekt, wenn du mit IoT-Core experimentierst und die Anzahl der Geräte gering ist. Wenn du jedoch die Konfiguration deiner Geräte automatisieren und dein Geschäft skalieren möchtest, könnte Fleet Provisioning eine bessere Alternative sein.
Schritt für Schritt zur Bereitstellung von Geräten mit AWS IoT Fleet Provisioning
Das Ziel der Bereitstellung besteht darin automatisch ein neues „thing“ zu erstellen, wenn ein neues Gerät online geht und das erforderliche Zertifikat und den privaten Schlüssel zu erhalten, um mit dem Netzwerk zu kommunizieren. AWS bietet zwei Methoden zur Flottenbereitstellung an:
Bereitstellung durch ein temporäres Zertifikat
Bereitstellung durch einen vertrauenswürdigen Benutzer
In diesem Beitrag konzentrieren wir uns auf die Bereitstellung durch einen vertrauenswürdigen Benutzer.

Was ist ein temporäres Zertifikat?
Ein temporäres Zertifikat ist ein provisorisches Zertifikat und ein privater Schlüssel mit eingeschränkten Berechtigungen, die dein Gerät nutzen wird, um sich zum ersten Mal mit AWS IoT zu verbinden. Nach Abschluss des Bereitstellungsprozesses erhält das Gerät dann die endgültigen Anmeldeinformationen.
Was ist ein vertrauenswürdiger Benutzer?
Ein vertrauenswürdiger Benutzer ist ein Benutzer mit den erforderlichen Berechtigungen, um einen AWS IoT-temporäres Zertifikat zu generieren, das zur Bereitstellung eines Geräts verwendet wird.
IoT-Vorlagen
Der erste Schritt bei der Konfiguration der Bereitstellung besteht darin, eine IoT-Vorlage über die AWS IoT-Konsole zu erstellen. Diese Vorlage definiert die Merkmale der Dinge, die mithilfe dieser Vorlage erstellt werden, wie zum Beispiel:
Attribute
Thing-Gruppen
Richtlinien
Um die Vorlage zu erstellen, wählst du die Option „Bereitstellung durch vertrauenswürdigen Benutzer“ und aktivierst den Status.


Im Formular wirst du aufgefordert zwei Rollen zu erstellen:
Bereitstellungsrolle: Diese Rolle gewährt der Berechtigungsgruppe AWSIoTThingsRegistration die Erlaubnis, damit die Vorlage AWS IoT-Dienste zur Registrierung eines neuen Dings verwenden kann.
Benutzerbereitstellungsrolle: Diese Rolle gewährt nur die Berechtigung CreateProvisioningClaim, sodass der Benutzer ein temporäres Zertifikat erhalten kann, wenn er Zugriff hat und den Namen einer IoT-Vorlage kennt.
Du kannst außerdem eine Vorbereitungsaktion aktivieren, um die Bereitstellung zu überprüfen (mehr Details findest du

Schließlich wirst du aufgefordert, eine Richtlinie für das Gerät zu erstellen. Denke daran, dass das Ergebnis der Bereitstellung die Anmeldeinformationen für dein Gerät sein werden, um sich mit AWS zu verbinden. Diese Richtlinie sollte daher die notwendigen Berechtigungen zum Verbinden, Veröffentlichen oder Abonnieren der relevanten Themen haben, wie wir in den vorherigen Abschnitten besprochen haben.
Bearbeiten einer IoT-Vorlage
Die IoT-Vorlage ist einfach ein JSON-Format der im vorherigen Formular ausgewählten Merkmale. Eine einfache Vorlage könnte folgendermaßen aussehen:
{
"Parameters": {
"MyParameter": {
"Type": "String"
}
},
"Resources": {
"policy_name": {
...
},
"certificate": {
...
},
"thing": {
"Type": "AWS::IoT::Thing",
"OverrideSettings": {
"AttributePayload": "MERGE",
"ThingGroups": "DO_NOTHING",
"ThingTypeName": "REPLACE"
},
"Properties": {
"AttributePayload": {
"myParameter": {
"Ref": "MyParameter"
}
},
"ThingGroups": [],
"ThingName": {"Ref": "MyParameter"}
}
}
},
"DeviceConfiguration": {}
}
Lass uns die wichtigen Teile betrachten:
Parameter: Dies sind die Namen der Variablen, die während des Bereitstellungsprozesses vom Gerät gesendet werden sollten und die die Vorlage zur Benennung des Dings und anderer Ressourcen verwendet. Andere Abschnitte der Vorlage können auf diese Variablen mit dem Schlüsselwort Ref zugreifen.
..."ThingName": {"Ref": "MyParameter"}
Thing: Dies sind die Merkmale des zu erstellenden Dings, einschließlich seiner Eigenschaften und wie diese überschrieben werden können. Die AttributPayload-Eigenschaft ermöglicht es dir, wichtige Informationen für das Gerät zu speichern.
Gerätekonfiguration: Dies sind die Eigenschaften, die von AWS IoT am Ende der Bereitstellung an das Gerät gesendet werden können.
Ein temporäres Zertifikat generieren, um die Bereitstellung zu starten
Sobald die Vorlage erstellt ist, kann ein Benutzer sie verwenden, um ein temporäres Zertifikat zu generieren und die Bereitstellung zu starten. Um das temporäre Zertifikat zu erhalten, benötigest du AWS-Anmeldeinformationen (accessKeyId und secretAccessKey) und die folgende Berechtigung:
{
"Sid": "IotProvisioningPermissions",
"Effect": "Allow",
"Action": [
"iot:CreateProvisioningClaim"
],
"Resource": [
"*"
]
}
Der folgende Code zeigt eine einfache Version, wie man ein temporäres Zertifikat mit dem
import { CreateProvisioningClaimCommand, IoTClient } from "@aws-sdk/client-iot";
const iotClient = new IoTClient({
region: 'AWS_REGION',
credentials: {
accessKeyId: 'AWS_ACCESS_KEY_ID',
secretAccessKey: 'AWS_SECRET_ACCESS_KEY',
}
});
iotClient.send(new CreateProvisioningClaimCommand({
templateName: 'template-name'
})).then((claim) => {
...
});
Der Inhalt des temporären Zertifikates wird ähnlich wie folgt aussehen:
{
"certificateId": "string",
"certificatePem": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n",
"expiration": "2024-06-26T16:44:29.000Z",
"keyPair": {
"PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\n....\n-----END RSA PRIVATE KEY-----\n",
"PublicKey": "-----BEGIN PUBLIC KEY-----\n....\n-----END PUBLIC KEY-----\n"
}
}
Du musst den Inhalt des temporären Zertifikates dem Gerät zur Verfügung stellen, das das certificatePem und den PrivateKey verwenden wird, um sich mit AWS zu verbinden und die Bereitstellung fortzusetzen.
Bereitstellung abschließen
Jeder Anspruch ist nur 5 Minuten gültig, daher musst du ihn so schnell wie möglich an Ihr Gerät senden. Wie du das temporäres Zertifikat an Ihr Gerät senden, hängt von Ihrem Projekt und Ihrem Geschäftsmodell ab.
Wenn das Gerät den Anspruch erhält, sollte es sich mit AWS IoT unter Verwendung des certificatePem und des PrivateKey verbinden. Es wird auch die Zertifizierungsstelle (CA) benötigen; da die CA jedoch für ganz AWS (oder für Ihr Unternehmen, wenn du eine benutzerdefinierte CA verwendest) generisch ist, kannst du den Wert in Ihrem Gerät speichern.
Um dich mit AWS IoT zu verbinden, kannst du den zuvor genannten MQTT-Client oder ähnliche verwenden. Sobald die Verbindung hergestellt ist, besteht die Bereitstellung aus zwei Teilen: dem Erhalt der endgültigen Anmeldeinformationen und der Aktivierung der Anmeldeinformationen.

Endgültige Anmeldeinformationen erhalten
Mit den folgenden Schritten erhälst du die endgültigen Anmeldeinformationen (Zertifikat und privaten Schlüssel), um sich mit AWS IoT zu verbinden. Die Anmeldeinformationen werden jedoch erst aktiviert, wenn der zweite Teil abgeschlossen ist.
Abonniere die MQTT-Themen: $aws/certificates/create/json/accepted und $aws/certificates/create/json/rejected.
Veröffentliche eine leere Nachricht an das Thema $aws/certificates/create/json.
Du musst warten bis du eine Nachricht zu den Themen /acceptedoder /rejected erhälst.
Wenn das Thema /rejected ist, ist etwas schiefgelaufen, und du musst die Bereitstellung beenden.
Wenn das Thema /accepted ist, erhälst du etwas Ähnliches wie:
{
"certificateId": "string",
"certificatePem": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n",
"privateKey": "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----\n",
"certificateOwnershipToken": "string"
}
Speichere das certificatePem und den PrivateKey auf deinem Gerät; dies werden die endgültigen Anmeldeinformationen zur Verbindung mit AWS IoT sein.
Endgültige Anmeldeinformationen aktivieren
Nachdem die Anmeldeinformationen mit den vorherigen Schritten generiert wurden, müssen sie aktiviert werden. Dazu sind die folgenden Schritte erforderlich:
Abonniere die Themen $aws/provisioning-templates/template-name/provision/json/accepted und$aws/provisioning-templates/template-name/provision/json/rejected. Ersetze template-name durch den Namen der zuvor erstellten Vorlage.
Veröffentliche eine Nachricht an das Thema $aws/provisioning-templates/template-name/provision/json. Die Nachricht muss den certificateOwnershipToken aus der vorherigen Nachrichtenantwort und die Parameterwerte enthalten, die zu Beginn der IoT-Vorlage hinzugefügt wurden. Die Nachricht könnte wie folgt aussehen:
{
"certificateOwnershipToken": "value",
"parameters": {
"MyParameter": "value"
}
}
Du musst warten, bis du eine Nachricht zu den Themen /acceptedoder /rejected erhälst.
Wenn das Thema /rejected ist, ist etwas schiefgelaufen, und du musst die Bereitstellung beenden.
Wenn das Thema /accepted ist, erhälst du eine Antwort mit dem thingName und der deviceConfiguration, die die Werte enthält, die du im Schlüssel DeviceConfiguration der IoT-Vorlage konfiguriert hast.
{
"deviceConfiguration": {
...
},
"thingName": "name"
}
Verwende die neuen Anmeldeinformationen, um den MQTT-Client deines Geräts zu konfigurieren.
Indem du diesen Schritten folgst, kann das Gerät die endgültigen Anmeldeinformationen erhalten und sich mit AWS IoT verbinden. Ein neues Ding wird automatisch in AWS IoT registriert und du kannst über MQTT mit deinem Gerät kommunizieren.
Wir freuen uns darauf, dein bevorstehendes IoT-Projekt zu besprechen und herauszufinden, wie wir dich bei der Erreichung deiner Ziele unterstützen können. Vereinbare hier einen Termin mit uns:
Kontaktiere uns .