Bereitstellen von Geräten ohne Gerätezertifikate mithilfe der Flottenbereitstellung - AWS IoT Core

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.

Bereitstellen von Geräten ohne Gerätezertifikate mithilfe der Flottenbereitstellung

Mithilfe von AWS IoT Fleet Provisioning AWS IoT können Gerätezertifikate und private Schlüssel generiert und sicher an Ihre Geräte gesendet werden, wenn diese AWS IoT zum ersten Mal eine Verbindung herstellen. AWS IoT stellt Client-Zertifikate bereit, die von der Amazon Root Certificate Authority (CA) signiert wurden.

Es gibt zwei Möglichkeiten, die Flottenbereitstellung zu verwenden:

Bereitstellung durch Anspruch

Geräte können mit einem Bereitstellungsantragszertifikat und einem privaten Schlüssel (bei denen es sich um spezielle Anmeldeinformationen handelt) hergestellt werden. Wenn diese Zertifikate bei registriert sind AWS IoT, kann der Service sie gegen eindeutige Gerätezertifikate eintauschen, die das Gerät für den regulären Betrieb verwenden kann. Dieser Prozess umfasst die folgenden Schritte:

Vor der Geräteauslieferung
  1. Rufen Sie CreateProvisioningTemplate auf, um eine Bereitstellungsvorlage zu erstellen. Diese API gibt einen Vorlagen-ARN zurück. Weitere Informationen finden Sie unter MQTT-API für die Gerätebereitstellung.

    Sie können in der AWS IoT Konsole auch eine Vorlage für die Flottenbereitstellung erstellen.

    1. Wählen Sie im Navigationsbereich Verbinden und dann Bereitstellungsvorlagen für Flotten.

    2. Wählen Sie Vorlage erstellen und folgen Sie den Anweisungen.

  2. Erstellen Sie Zertifikate und zugehörige private Schlüssel, die als Bereitstellungsantragszertifikate verwendet werden sollen.

  3. Registrieren Sie diese Zertifikate mit AWS IoT und verknüpfen Sie sie mit einer IoT-Richtlinie, die die Verwendung der Zertifikate einschränkt. Die folgende IoT-Beispielrichtlinie beschränkt die Verwendung des Zertifikats, das dieser Richtlinie zugeordnet ist, auf Bereitstellungsgeräte.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["iot:Connect"], "Resource": "*" }, { "Effect": "Allow", "Action": ["iot:Publish","iot:Receive"], "Resource": [ "arn:aws:iot:aws-region:aws-account-id:topic/$aws/certificates/create/*", "arn:aws:iot:aws-region:aws-account-id:topic/$aws/provisioning-templates/templateName/provision/*" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:aws-region:aws-account-id:topicfilter/$aws/certificates/create/*", "arn:aws:iot:aws-region:aws-account-id:topicfilter/$aws/provisioning-templates/templateName/provision/*" ] } ] }
  4. Erteilen Sie dem AWS IoT Dienst die Erlaubnis, IoT-Ressourcen wie Dinge und Zertifikate in Ihrem Konto zu erstellen oder zu aktualisieren, wenn Sie Geräte bereitstellen. Fügen Sie dazu die AWSIoTThingsRegistration verwaltete Richtlinie einer IAM-Rolle (der sogenannten Bereitstellungsrolle) hinzu, die dem Dienstprinzipal vertraut. AWS IoT

  5. Stellen Sie das Gerät mit dem sicher darin eingebetteten Bereitstellungsantragszertifikat her.

Das Gerät kann nun an den Ort geliefert werden, an dem es zur Verwendung installiert wird.

Wichtig

Private Schlüssel für Bereitstellungsanträge sollten jederzeit gesichert werden, auch auf dem Gerät. Wir empfehlen Ihnen, anhand von AWS IoT CloudWatch Metriken und Protokollen nach Hinweisen auf Missbrauch zu suchen. Wenn Sie einen Missbrauch feststellen, deaktivieren Sie das Bereitstellungsantragszertifikat, damit es nicht für die Gerätebereitstellung verwendet werden kann.

So initialisieren Sie das Gerät für die Verwendung
  1. Das Gerät verwendet dasAWS IoT Geräte-SDKs , Mobile SDKs und Geräte-Client AWS IoT, um sich AWS IoT mit dem auf dem Gerät installierten Provisioning Claim Certificate zu verbinden und sich damit zu authentifizieren.

    Anmerkung

    Aus Sicherheitsgründen wird das certificateOwnershipToken von CreateCertificateFromCsr zurückgesendet und CreateKeysAndCertificate läuft nach einer Stunde ab. RegisterThing muss aufgerufen werden, bevor das certificateOwnershipToken abläuft. Wenn das von CreateCertificateFromCsr oder CreateKeysAndCertificate erstellte Zertifikat nicht aktiviert und bis zum Ablauf des Tokens noch nicht an eine Richtlinie oder ein Objekt angehängt wurde, wird das Zertifikat gelöscht. Wenn das Token abläuft, kann das Gerät CreateCertificateFromCsr oder CreateKeysAndCertificate erneut aufrufen, um ein neues Zertifikat zu generieren.

  2. Das Gerät erhält ein permanentes Zertifikat und einen privaten Schlüssel mithilfe einer dieser Optionen. Das Gerät verwendet das Zertifikat und den Schlüssel für alle future Authentifizierungen mit AWS IoT.

    1. Rufen Sie CreateKeysAndCertificatean, um mithilfe der Zertifizierungsstelle ein neues Zertifikat und einen neuen privaten Schlüssel zu erstellen. AWS

      Oder

    2. Rufen Sie CreateCertificateFromCsr auf, um ein Zertifikat aus einer Zertifikatsignieranforderung zu generieren, das seinen privaten Schlüssel schützt.

  3. Rufen Sie vom Gerät aus RegisterThing auf, um das Gerät in AWS IoT zu registrieren und Cloud-Ressourcen zu erstellen.

    Der Fleet-Provisioning-Service verwendet Bereitstellungsvorlagen, um Cloud-Ressourcen wie IoT-Objekte zu definieren und zu erstellen. Die Vorlage kann Attribute und Gruppen angeben, denen das Objekt angehört. Die Objektgruppen müssen vorhanden sein, damit das neue Objekt hinzugefügt werden kann.

  4. Nach dem Speichern des permanenten Zertifikats auf dem Gerät muss das Gerät die Verbindung von der Sitzung trennen, die es mit dem Bereitstellungsantragszertifikat initiiert hat, und die Verbindung mit dem permanenten Zertifikat erneut herstellen.

Das Gerät ist jetzt bereit, normal mit dem Gerät zu kommunizieren AWS IoT.

Bereitstellung durch vertrauenswürdigen Benutzer

In vielen Fällen stellt ein Gerät AWS IoT zum ersten Mal eine Verbindung her, wenn ein vertrauenswürdiger Benutzer, z. B. ein Endbenutzer oder Installationstechniker, eine mobile App verwendet, um das Gerät an seinem Einsatzort zu konfigurieren.

Wichtig

Sie müssen den Zugriff und die Berechtigung des vertrauenswürdigen Benutzers verwalten, um dieses Verfahren auszuführen. Eine Möglichkeit besteht darin, vertrauenswürdigen Benutzern ein Konto bereitzustellen und für sie zu verwalten, mit dem sie authentifiziert werden und Zugriff auf die AWS IoT -Funktionen und API-Operationen erhalten, die für dieses Vorgehen erforderlich sind.

Vor der Geräteauslieferung
  1. Rufen Sie CreateProvisioningTemplate auf, um eine Bereitstellungsvorlage zu erstellen und ihre templateArn- und templateName-Elemente zurückzugeben.

  2. Erstellen Sie eine IAM-Rolle, die von vertrauenswürdigen Benutzern verwendet wird, um den Bereitstellungsprozess zu initiieren. Mit der Bereitstellungsvorlage kann nur dieser Benutzer ein Gerät bereitstellen. Beispielsweise:

    { "Effect": "Allow", "Action": [ "iot:CreateProvisioningClaim" ], "Resource": [ "arn:aws:iot:aws-region:aws-account-id:provisioningtemplate/templateName" ] }
  3. Erteilen Sie dem AWS IoT Dienst die Erlaubnis, IoT-Ressourcen wie Dinge und Zertifikate in Ihrem Konto zu erstellen oder zu aktualisieren, wenn Sie Geräte bereitstellen. Dazu fügen Sie die AWSIoTThingsRegistration verwaltete Richtlinie einer IAM-Rolle (der sogenannten Bereitstellungsrolle) hinzu, die dem Dienstprinzipal vertraut. AWS IoT

  4. Stellen Sie die Mittel zur Identifizierung Ihrer vertrauenswürdigen Benutzer bereit, indem Sie ihnen beispielsweise ein Konto zur Verfügung stellen, mit dem sie authentifiziert und ihre Interaktionen mit den AWS API-Vorgängen autorisiert werden können, die für die Registrierung ihrer Geräte erforderlich sind.

So initialisieren Sie das Gerät für die Verwendung
  1. Der vertrauenswürdige Benutzer meldet sich bei der mobilen App oder dem Webservice für die Bereitstellung an.

  2. Die mobile App oder Webanwendung verwendet die IAM-Rolle und ruft CreateProvisioningClaim auf, um ein temporäres Bereitstellungsantragszertifikat von AWS IoT abzurufen.

    Anmerkung

    Aus Sicherheitsgründen läuft das von CreateProvisioningClaim zurückgegebene temporäre Bereitstellungsantragszertifikat nach fünf Minuten ab. Die folgenden Schritte müssen erfolgreich ein gültiges Zertifikat zurückgeben, bevor das temporäre Bereitstellungsantragszertifikat abläuft. Temporäre Bereitstellungsantragszertifikate werden nicht in der Zertifikatliste Ihres Kontos angezeigt.

  3. Die mobile App oder Webanwendung stellt dem Gerät das temporäre Bereitstellungsantragszertifikat zusammen mit allen erforderlichen Konfigurationsinformationen, z. B. WLAN-Anmeldeinformationen, zur Verfügung.

  4. Das Gerät verwendet das temporäre Bereitstellungsantragszertifikat, um eine Verbindung zu AWS IoT mit dem AWS IoT Geräte-SDKs , Mobile SDKs und Geräte-Client AWS IoT herzustellen.

  5. Das Gerät erhält ein permanentes Zertifikat und einen privaten Schlüssel, indem es innerhalb von fünf Minuten nach der Verbindung AWS IoT mit dem temporären Bereitstellungsanforderungszertifikat eine dieser Optionen verwendet. Das Gerät verwendet das Zertifikat und den Schlüssel, mit dem diese Optionen zurückgegeben werden, für alle future Authentifizierungen AWS IoT.

    1. Rufen Sie CreateKeysAndCertificatean, um mithilfe der Zertifizierungsstelle ein neues Zertifikat und einen neuen privaten Schlüssel zu erstellen. AWS

      Oder

    2. Rufen Sie CreateCertificateFromCsr auf, um ein Zertifikat aus einer Zertifikatsignieranforderung zu generieren, das seinen privaten Schlüssel schützt.

    Anmerkung

    Denken Sie daran, ein gültiges Zertifikat innerhalb von fünf Minuten nach der Verbindung AWS IoT mit dem temporären Bereitstellungsanspruch zurückzugeben CreateKeysAndCertificateoder CreateCertificateFromCsrmüssen Sie es zurückgeben.

  6. Das Gerät ruft RegisterThingauf, um das Gerät bei Cloud-Ressourcen zu registrieren AWS IoT und diese zu erstellen.

    Der Fleet-Provisioning-Service verwendet Bereitstellungsvorlagen, um Cloud-Ressourcen wie IoT-Objekte zu definieren und zu erstellen. Die Vorlage kann Attribute und Gruppen angeben, denen das Objekt angehört. Die Objektgruppen müssen vorhanden sein, damit das neue Objekt hinzugefügt werden kann.

  7. Nach dem Speichern des permanenten Zertifikats auf dem Gerät muss das Gerät die Verbindung von der Sitzung trennen, die es mit dem temporären Bereitstellungsantragszertifikat initiiert hat, und erneut eine Verbindung mit dem permanenten Zertifikat herstellen.

Das Gerät ist jetzt bereit, normal mit dem Gerät zu kommunizieren AWS IoT.

Verwenden von Pre-Provisioning-Hooks mit der AWS -CLI

Im folgenden Verfahren wird eine Bereitstellungsvorlage mit Pre-Provisioning-Hooks erstellt. Die hier verwendete Lambda-Funktion ist ein Beispiel, das geändert werden kann.

So erstellen Sie Pre-Provisioning-Hooks und übernehmen Sie für eine Bereitstellungsvorlage
  1. Erstellen Sie eine Lambda-Funktion mit definierter Eingabe und Ausgabe. Lambda-Funktionen sind hochgradig anpassbar. Für die Erstellung von Pre-Provisioning-Hooks sind allowProvisioning und parameterOverrides erforderlich. Weitere Informationen zum Erstellen von Lambda-Funktionen finden Sie unter AWS Lambda Mit der AWS Befehlszeilenschnittstelle verwenden.

    Im Folgenden sehen Sie ein Beispiel für eine Lambda-Funktionsausgabe:

    { "allowProvisioning": True, "parameterOverrides": { "incomingKey0": "incomingValue0", "incomingKey1": "incomingValue1" } }
  2. AWS IoT verwendet ressourcenbasierte Richtlinien, um Lambda aufzurufen. Sie müssen also die AWS IoT Erlaubnis zum Aufrufen Ihrer Lambda-Funktion erteilen.

    Wichtig

    Achten Sie darauf, das source-arn oder source-account in die globalen Bedingungskontextschlüssel der Richtlinien aufzunehmen, die mit Ihrer Lambda-Aktion verknüpft sind, damit Berechtigungen nicht manipuliert werden können. Weitere Informationen hierzu finden Sie unter Serviceübergreifende Confused-Deputy-Prävention.

    Es folgt ein Beispiel dafür, wie Sie IoT mit add-permission die Berechtigung zum Aufrufen Ihrer Lambda-Funktion erteilen.

    aws lambda add-permission \ --function-name myLambdaFunction \ --statement-id iot-permission \ --action lambda:InvokeFunction \ --principal iot.amazonaws.com
  3. Fügen Sie einer Vorlage mit dem Befehl create-provisioning-template oder update-provisioning-template einen Pre-Provisioning-Hook hinzu.

    Im folgenden CLI-Beispiel wird create-provisioning-template verwendet, um eine Bereitstellungsvorlage zu erstellen, die Pre-Provisioning-Hooks enthält:

    aws iot create-provisioning-template \ --template-name myTemplate \ --provisioning-role-arn arn:aws:iam:us-east-1:1234564789012:role/myRole \ --template-body file://template.json \ --pre-provisioning-hook file://hooks.json

    Die Ausgabe dieses Befehls sieht wie folgt aus:

    { "templateArn": "arn:aws:iot:us-east-1:1234564789012:provisioningtemplate/myTemplate", "defaultVersionId": 1, "templateName": myTemplate }

    Sie können einen Parameter auch aus einer Datei laden, statt ihn als Befehlszeilen-Parameterwert einzugeben, um Zeit zu sparen. Weitere Informationen finden Sie unter Laden von AWS CLI -Parametern aus einer Datei. Im Folgenden wird der Parameter template im erweiterten JSON-Format gezeigt:

    { "Parameters" : { "DeviceLocation": { "Type": "String" } }, "Mappings": { "LocationTable": { "Seattle": { "LocationUrl": "https://example.aws" } } }, "Resources" : { "thing" : { "Type" : "AWS::IoT::Thing", "Properties" : { "AttributePayload" : { "version" : "v1", "serialNumber" : "serialNumber" }, "ThingName" : {"Fn::Join":["",["ThingPrefix_",{"Ref":"SerialNumber"}]]}, "ThingTypeName" : {"Fn::Join":["",["ThingTypePrefix_",{"Ref":"SerialNumber"}]]}, "ThingGroups" : ["widgets", "WA"], "BillingGroup": "BillingGroup" }, "OverrideSettings" : { "AttributePayload" : "MERGE", "ThingTypeName" : "REPLACE", "ThingGroups" : "DO_NOTHING" } }, "certificate" : { "Type" : "AWS::IoT::Certificate", "Properties" : { "CertificateId": {"Ref": "AWS::IoT::Certificate::Id"}, "Status" : "Active" } }, "policy" : { "Type" : "AWS::IoT::Policy", "Properties" : { "PolicyDocument" : { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action":["iot:Publish"], "Resource": ["arn:aws:iot:us-east-1:504350838278:topic/foo/bar"] }] } } } }, "DeviceConfiguration": { "FallbackUrl": "https://www.example.com/test-site", "LocationUrl": { "Fn::FindInMap": ["LocationTable",{"Ref": "DeviceLocation"}, "LocationUrl"]} } }

    Im Folgenden wird der Parameter pre-provisioning-hook im erweiterten JSON-Format gezeigt:

    { "targetArn" : "arn:aws:lambda:us-east-1:765219403047:function:pre_provisioning_test", "payloadVersion" : "2020-04-01" }