Wie kann ich JITP mit AWS IoT Core verwenden?

Lesedauer: 10 Minute
0

Ich möchte eine Just-In-Time Provisioning (JITP)-Umgebung einrichten, die über eine benutzerdefinierte, bei AWS IoT Core registrierte Stammzertifizierungsstelle (Certificate Authority, CA) verfügt. Wie richte ich JITP mit AWS IoT Core ein?

Kurzbeschreibung

Wenn Sie eine JITP-Umgebung mit AWS IoT Core einrichten möchten, müssen Sie zunächst Ihre Zertifizierungsstelle bei AWS IoT Core registrieren. Anschließend müssen Sie Ihrer Zertifizierungsstelle eine Bereitstellungsvorlage zuordnen.

Behebung

**Hinweis:**Sollten beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.

Erstellen einer selbstsignierten Stammzertifizierungsstelle und eines Bestätigungszertifikats

1.Installieren Sie OpenSSL, falls es noch nicht installiert ist.

2.Führen Sie den folgenden OpenSSL-Befehl aus, um einen privaten Schlüssel der Stammzertifizierungsstelle des Geräts zu erstellen:

$ openssl genrsa -out deviceRootCA.key 2048

3.Erstellen Sie mit dem VIM-Text-Editor eine benutzerdefinierte Datei vom Typ „OpenSSL.conf“. Gehen Sie wie folgt vor, um eine benutzerdefinierte Datei vom Typ „OpenSSL.conf“ zu erstellen und zu bearbeiten:
Führen Sie den folgenden VIM-Befehl aus, um eine benutzerdefinierte Datei vom Typ „OpenSSL.conf“ zu erstellen:

$ vi deviceRootCA_openssl.conf

Drücken Sie i auf der Tastatur, um die CONF-Datei zu bearbeiten. Kopieren Sie dann Folgendes und fügen Sie es in die Datei ein:

[ req ]
distinguished_name       = req_distinguished_name
extensions               = v3_ca
req_extensions           = v3_ca

[ v3_ca ]
basicConstraints         = CA:TRUE

[ req_distinguished_name ]
countryName              = Country Name (2 letter code)
countryName_default      = IN
countryName_min          = 2
countryName_max          = 2
organizationName         = Organization Name (eg, company)
organizationName_default = AMZ

Drücken Sie ESC auf Ihrer Tastatur, gefolgt von :wq!, um die CONF-Datei zu speichern. Drücken Sie dann die Eingabetaste, um die Datei zu verlassen.
**Hinweis:**Durch Ausführen des folgenden Linux-Befehls können Sie sich vergewissern, dass die Datei „OpenSSL.conf“ erstellt wurde:

$ cat deviceRootCA_openssl.conf

4.Führen Sie den folgenden OpenSSL-Befehl aus, um eine Certificate Signing Request (CSR) für die Stammzertifizierungsstelle des Geräts zu erstellen:

$ openssl req -new -sha256 -key deviceRootCA.key -nodes -out deviceRootCA.csr -config deviceRootCA_openssl.conf

5.Führen Sie den folgenden OpenSSL-Befehl aus, um ein Zertifikat der Stammzertifizierungsstelle des Geräts zu erstellen:

$ openssl x509 -req -days 3650 -extfile deviceRootCA_openssl.conf -extensions v3_ca -in deviceRootCA.csr -signkey deviceRootCA.key -out deviceRootCA.pem

6.Führen Sie den folgenden AWS-CLI-Befehl aus, um den Registrierungscode für die AWS-Region abzurufen, in der Sie JITP verwenden möchten:

**Wichtig:**Ersetzen Sie us-east-2 durch die Region, in der Sie JITP verwenden möchten.

$ aws iot get-registration-code --region us-east-2

7.Führen Sie den folgenden OpenSSL-Befehl aus, um einen Bestätigungsschlüssel zu erstellen:

$ openssl genrsa -out verificationCert.key 2048

8.Führen Sie den folgenden OpenSSL-Befehl aus, um eine Bestätigungszertifikat-CSR zu erstellen:

$ openssl req -new -key verificationCert.key -out verificationCert.csr

Geben Sie dann den Registrierungscode in das Feld Common Name ein. Beispiel: Common Name (FQDN des Servers oder IHR Name) []: xxxxxxxx8a33da. Lassen Sie die anderen Felder leer.

9.Führen Sie den folgenden OpenSSL-Befehl aus, um das Bestätigungszertifikat zu erstellen:

$ openssl x509 -req -in verificationCert.csr -CA deviceRootCA.pem -CAkey deviceRootCA.key -CAcreateserial -out verificationCert.crt -days 500 -sha256

**Wichtig:**Der Registrierungscode der Region Ihrer Stammzertifizierungsstelle ist erforderlich, damit das Bestätigungszertifikat von AWS IoT Core zertifiziert werden kann.

Weitere Informationen finden Sie unter Just-in-time provisioning (Just-In-Time-Bereitstellung).

Erstellen einer JITP-Vorlage

1.Erstellen Sie eine AWS Identity and Access Management (AWS IAM)-Rolle für Ihren AWS-IoT-Core-Service und nennen Sie sie JITPRole. Eine entsprechende Anleitung finden Sie in den ersten beiden Schritten unter Create a logging role (Erstellen einer Protokollierungsrolle).

**Wichtig:**Schließen Sie den Amazon-Ressourcennamen (ARN) der IAM-Rolle in die folgende JITP-Vorlage ein.

2.Erstellen Sie mit dem VIM-Text-Editor eine JITP-Vorlage in Form einer JSON-Datei. Gehen Sie dazu wie folgt vor:
Führen Sie den folgenden VIM-Befehl aus, um eine JITP-Vorlage in Form einer JSON-Datei zu erstellen:

$ vi jitp_template.json

Wichtig: Speichern Sie die Vorlage mit dem Dateinamen jitp_template.json.
Drücken Sie i auf der Tastatur, um die JITP-Vorlage zu bearbeiten. Kopieren Sie dann die folgende JITP-Vorlage und fügen Sie sie in die Datei ein:

{
 "templateBody":"{ \"Parameters\" : { \"AWS::IoT::Certificate::CommonName\" : { \"Type\" : \"String\" },\"AWS::IoT::Certificate::Country\" : { \"Type\" : \"String\" }, \"AWS::IoT::Certificate::Id\" : { \"Type\" : \"String\" }}, \"Resources\" : { \"thing\" : { \"Type\" : \"AWS::IoT::Thing\", \"Properties\" : { \"ThingName\" : {\"Ref\" : \"AWS::IoT::Certificate::CommonName\"}, \"AttributePayload\" : { \"version\" : \"v1\", \"country\" : {\"Ref\" : \"AWS::IoT::Certificate::Country\"}} } }, \"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:Connect\\\" ], \\\"Resource\\\": [ \\\"arn:aws:iot:us-east-2:<ACCOUNT_ID>:client\\\/${iot:Connection.Thing.ThingName}\\\" ] }, { \\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [ \\\"iot:Publish\\\", \\\"iot:Receive\\\" ], \\\"Resource\\\": [ \\\"arn:aws:iot:us-east-2:<ACCOUNT_ID>:topic\\\/${iot:Connection.Thing.ThingName}\\\/*\\\" ] }, { \\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": [ \\\"iot:Subscribe\\\" ], \\\"Resource\\\": [ \\\"arn:aws:iot:us-east-2:<ACCOUNT_ID>:topicfilter\\\/${iot:Connection.Thing.ThingName}\\\/*\\\" ] } ] }\" } } } }",
 "roleArn":"arn:aws:iam::<ACCOUNT_ID>:role/JITPRole"
}

**Wichtig:**Ersetzen Sie den Wert roleArn durch den ARN der IAM-Rolle für Ihren AWS-IoT-Core-Service. Ersetzen Sie den Wert <ACCOUNT_ID> durch Ihre AWS-Konto-ID. Ersetzen Sie us-east-2 durch die von Ihnen verwendete AWS-Region. Drücken Sie ESC auf Ihrer Tastatur, gefolgt von :wq!, um die JITP-Vorlagendatei zu speichern. Drücken Sie die Eingabetaste, um die Datei zu verlassen.

Hinweis: Die JITP-Beispielvorlage enthält folgende IAM-Richtlinien:

Sie müssen bei Ihrem AWS-Konto angemeldet sein, um die Links für die Richtlinien öffnen zu können. Weitere Informationen finden Sie unter Provisioning templates.

Registrieren Ihres selbstsignierten Stammzertifizierungsstellen-Zertifikats bei AWS IoT Core

Führen Sie den folgenden AWS-CLI-Befehl vom Typ register-ca-certificate aus, um die Stammzertifizierungsstelle des Geräts als Zertifizierungsstellenzertifikat bei AWS IoT Core zu registrieren:

**Wichtig:**Ersetzen Sie us-east-2 durch die Region, in der Sie JITP verwenden möchten.

$ aws iot register-ca-certificate --ca-certificate file://deviceRootCA.pem --verification-cert file://verificationCert.crt --set-as-active --allow-auto-registration --registration-config file://jitp_template.json --region us-east-2

**Hinweis:**Durch Hinzufügen des Parameters --registration-config wird die von Ihnen erstellte JITP-Vorlage dem Zertifizierungsstellenzertifikat zugeordnet. In der Befehlsantwort wird der ARN des Zertifizierungsstellenzertifikats zurückgegeben.

Weitere Informationen finden Sie unter Register your CA certificate.

Erstellen von Gerätezertifikaten und Durchführen von JITP

**Wichtig:**Verwenden Sie das gleiche Verzeichnis, in dem Sie auch die ursprünglichen Dateien der Stammzertifizierungsstelle des Geräts erstellt haben.

1.Laden Sie das Element RootCA1 herunter und speichern Sie es unter dem Dateinamen awsRootCA.pem.
**Hinweis:**RootCA1 wird für die serverseitige Authentifizierung von Veröffentlichungsanforderungen verwendet, die an AWS IoT Core gesendet werden. Weitere Informationen finden Sie unter CA certificates for server authentication (Zertifizierungsstellenzertifikate für die Serverauthentifizierung).

2.Führen Sie den folgenden OpenSSL-Befehl aus, um einen privaten Schlüssel des Geräts zu erstellen:

$ openssl genrsa -out deviceCert.key 2048

3.Führen Sie den folgenden OpenSSL-Befehl aus, um eine Geräte-CSR zu erstellen:

$ openssl req -new -key deviceCert.key -out deviceCert.csr

**Wichtig:**In der JITP-Beispielvorlage muss der Wert ThingName dem Wert CommonName des Zertifikats entsprechen. Außerdem muss der Wert CountryName dem Wert Country aus dem Zertifizierungsstellenzertifikat entsprechen. Beispiel:

Country Name (two-letter code) []:IN
Common Name (eg. server FQDN or YOUR name) []: DemoThing

Die in diesem Artikel bereitgestellte JITP-Vorlage enthält auch den Zertifikatparameter AWS::IoT::Certificate::Country, für den Sie einen Wert hinzufügen müssen. Weitere mögliche Zertifikatparameter: AWS::IoT::Certificate::Country AWS::IoT::Certificate::Organization AWS::IoT::Certificate::OrganizationalUnit AWS::IoT::Certificate::DistinguishedNameQualifier AWS::IoT::Certificate::StateName AWS::IoT::Certificate::CommonName AWS::IoT::Certificate::SerialNumber AWS::IoT::Certificate::Id

4.Führen Sie den folgenden OpenSSL-Befehl aus, um ein Gerätezertifikat zu erstellen:

$ openssl x509 -req -in deviceCert.csr -CA deviceRootCA.pem -CAkey deviceRootCA.key -CAcreateserial -out deviceCert.crt -days 365 -sha256

5.Führen Sie den folgenden Befehl aus, um das Stammzertifizierungsstellen-Zertifikat und das Gerätezertifikat zu kombinieren:

$ cat deviceCert.crt deviceRootCA.pem > deviceCertAndCACert.crt

6.Verwenden Sie Eclipse Mosquitto, um einen Testveröffentlichungsaufruf an AWS IoT Core zu übermitteln und den JITP-Prozess zu initiieren.

**Hinweis:**Sie können auch das AWS IoT Device SDK verwenden, um Veröffentlichungsaufrufe an AWS IoT Core zu übermitteln.

Exemplarischer Eclipse-Mosquitto-Befehl zum Testen von Veröffentlichungsaufrufen

**Wichtig:**Ersetzen Sie a27icbrpsxxx-ats.iot.us-east-2.amazonaws.com durch Ihren eigenen Endpunkt, bevor Sie den Befehl ausführen. Öffnen Sie zum Überprüfen Ihres eigenen Endpunkts die AWS-IoT-Core-Konsole. Wählen Sie Settings aus. Ihr Endpunkt ist im Bereich Custom endpoint (Benutzerdefinierter Endpunkt) angegeben.

$ mosquitto_pub --cafile awsRootCA.pem --cert deviceCertAndCACert.crt --key deviceCert.key -h a27icbrpsxxx-ats.iot.us-east-2.amazonaws.com -p 8883 -q 1 -t  foo/bar -i  anyclientID --tls-version tlsv1.2 -m "Hello" -d

Exemplarische Antwort des Eclipse-Mosquitto-Befehls zum Testen von Veröffentlichungsaufrufen

Client anyclientID sending CONNECT  
  Error: The connection was lost. // The error is expected for the first connect call

**Hinweis:**Der Testveröffentlichungsaufruf ist beim ersten Mal nicht erfolgreich. Wenn AWS IoT Core den Testveröffentlichungsaufruf empfängt, werden ein Zertifikat, eine Richtlinie und ein Objekt erstellt. Außerdem wird die Richtlinie dem Zertifikat und das Zertifikat anschließend dem Objekt zugeordnet. Bei der nächsten JITP wird die IoT-Richtlinie verwendet, die zuerst erstellt wurde. Es wird keine neue IoT-Richtlinie erstellt.

7.Gehen Sie wie folgt vor, um sich zu vergewissern, dass die erforderlichen Ressourcen erstellt wurden: Öffnen Sie die AWS-IoT-Core-Konsole. Wählen Sie Manage (Verwalten) aus. Wählen Sie Things.(Objekte) und anschließend die folgende Option aus: ** DemoThing.**
Vergewissern Sie sich, dass das Zertifikat erstellt wurde und sich im Zustand ACTIVE (AKTIV) befindet.
Wählen Sie dann Policies (Richtlinien) aus und vergewissern Sie sich, dass die IAM-Richtlinie zugeordnet ist.

Verwenden von Gerätezertifikaten im regulären Betrieb

**Hinweis:**Der im Veröffentlichungsbefehl hinzugefügte Wert für die Client-ID muss mit dem Wert von ThingName übereinstimmen, der im Rahmen des JITP-Prozesses erstellt wurde. Der dem Veröffentlichungsbefehl hinzugefügte Themenname muss ebenfalls dem Format ThingName/* entsprechen. Beim nächsten Veröffentlichungsaufruf können Sie deviceCert.crt anstelle von deviceCertAndCACert.crt verwenden.

1.Öffnen Sie die AWS-IoT-Core-Konsole.

2.Wählen Sie Test (Testen) aus.

3.Geben Sie unter Subscription Topic (Abonnementthema) Folgendes ein: DemoThing/test.

4.Führen Sie den folgenden Veröffentlichungsaufrufbefehl von Eclipse Mosquitto für AWS IoT Core aus:

**Wichtig:**Ersetzen Sie a27icbrpsxxx-ats.iot.us-east-2.amazonaws.com durch Ihren eigenen Endpunkt, bevor Sie den Befehl ausführen. Öffnen Sie zum Überprüfen Ihres eigenen Endpunkts die AWS-IoT-Core-Konsole. Wählen Sie Settings aus. Ihr Endpunkt wird im Bereich Custom endpoint (Benutzerdefinierter Endpunkt) angezeigt. Achten Sie außerdem darauf, dass Sie die benutzerdefinierten Gerätezertifikate verwenden, die von Ihrer benutzerdefinierten Stammzertifizierungsstelle generiert wurden.

$ mosquitto_pub --cafile awsRootCA.pem --cert deviceCert.crt --key deviceCert.key -h a27icbrpsxxx-ats.iot.us-east-2.amazonaws.com -p 8883 -q 1 -t  DemoThing/test -i  DemoThing --tls-version tlsv1.2 -m "Hello" -d

Nach Ausführung des Befehls sehen Sie, dass die Nachricht bei der Testkonsole von AWS IoT Core eingeht.

Erstellen zusätzlicher Gerätezertifikate

Wiederholen Sie die Schritte, die im Abschnitt Erstellen von Gerätezertifikaten und Durchführen von JITP beschrieben sind, um weitere Gerätezertifikate zu erstellen und bei AWS IoT Core zu registrieren.

Weitere JITP-Vorlagen

Verwenden Sie die folgende JITP-Vorlage, um den Wert ThingName aus dem Feld CommonName des Zertifikats abzurufen und Administratorberechtigungen in der Richtlinie bereitzustellen:

{
 "templateBody":"{ \"Parameters\" : { \"AWS::IoT::Certificate::CommonName\" : { \"Type\" : \"String\" },\"AWS::IoT::Certificate::Country\" : { \"Type\" : \"String\" }, \"AWS::IoT::Certificate::Id\" : { \"Type\" : \"String\" }}, \"Resources\" : { \"thing\" : { \"Type\" : \"AWS::IoT::Thing\", \"Properties\" : { \"ThingName\" : {\"Ref\" : \"AWS::IoT::Certificate::CommonName\"}, \"AttributePayload\" : { \"version\" : \"v1\", \"country\" : {\"Ref\" : \"AWS::IoT::Certificate::Country\"}} } }, \"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:*\\\",\\\"Resource\\\":\\\"*\\\"}]}\" } } } }",
 "roleArn":"arn:aws:iam::<ACCOUNT_ID>:role/JITPRole"
}

Verwenden Sie die folgende JITP-Vorlage, um den Wert ThingName aus dem Feld CommonName des Zertifikats abzurufen und einen vordefinierten Richtliniennamen anzugeben:

{
 "templateBody":"{ \"Parameters\" : { \"AWS::IoT::Certificate::CommonName\" : { \"Type\" : \"String\" },\"AWS::IoT::Certificate::Country\" : { \"Type\" : \"String\" }, \"AWS::IoT::Certificate::Id\" : { \"Type\" : \"String\" }}, \"Resources\" : { \"thing\" : { \"Type\" : \"AWS::IoT::Thing\", \"Properties\" : { \"ThingName\" : {\"Ref\" : \"AWS::IoT::Certificate::CommonName\"}, \"AttributePayload\" : { \"version\" : \"v1\", \"country\" : {\"Ref\" : \"AWS::IoT::Certificate::Country\"}} } }, \"certificate\" : { \"Type\" : \"AWS::IoT::Certificate\", \"Properties\" : { \"CertificateId\": {\"Ref\" : \"AWS::IoT::Certificate::Id\"}, \"Status\" : \"ACTIVE\" } }, \"policy\" :  {\"Type\" : \"AWS::IoT::Policy\", \"Properties\" : { \"PolicyName\" :  \"Policy_Name\"} } } }",
 "roleArn":"arn:aws:iam::<ACCOUNT_ID>:role/JITPRole"
}

Wichtig: Ersetzen Sie Policy_Name durch den gewünschten Richtliniennamen.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren