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.
Autorisierung direkter Anrufe an AWS Dienste mithilfe des AWS IoT Core Anmeldeinformationsanbieters
Geräte können X.509-Zertifikate verwenden, um mithilfe von gemeinsamen TLS-Authentifizierungsprotokollen eine Verbindung mit AWS IoT Core herzustellen. Andere AWS Dienste unterstützen keine zertifikatsbasierte Authentifizierung, sie können jedoch mit AWS Anmeldeinformationen im AWSSignature Version 4-Format aufgerufen werden. Der Signature Version 4-Algorithmus erfordert normalerweise eine Zugriffsschlüssel-ID und einen geheimen Zugriffsschlüssel. AWS IoT Coreverfügt über einen Anbieter von Anmeldeinformationen, mit dem Sie das integrierte X.509-Zertifikat als eindeutige Geräteidentität zur Authentifizierung AWS von Anfragen verwenden können. Damit ist es nicht mehr erforderlich, eine Zugriffsschlüssel-ID und einen geheimen Zugriffsschlüssel auf Ihrem Gerät zu speichern.
Der Anmeldeinformationsanbieter authentifiziert ein Anrufer unter Verwendung eines X.509-Zertifikats und stellt ein temporäres Sicherheits-Token mit eingeschränkten Berechtigungen aus. Das Token kann verwendet werden, um jede AWS Anfrage zu signieren und zu authentifizieren. Diese Art der Authentifizierung Ihrer AWS Anfragen erfordert, dass Sie eine AWS Identity and Access Management(IAM-) Rolle erstellen und konfigurieren und der Rolle entsprechende IAM-Richtlinien zuordnen, damit der Anbieter der Anmeldeinformationen die Rolle in Ihrem Namen übernehmen kann. Weitere Informationen zu AWS IoT Core und IAM finden Sie unterIdentity and Access Management für AWS IoT.
AWS IoT erfordert, dass die Geräte die SNI-Erweiterung (Server Name Indication)host_name
die vollständige Endpunktadresse angeben. Im Feld host_name
muss der Endpunkt angegeben sein. Dabei muss es sich um Folgendes handeln:
-
Sie sind
endpointAddress
zurückgekehrt vonaws iot describe-endpoint
.--endpoint-type iot:CredentialProvider
Verbindungsversuche von Geräten ohne den richtigen host_name
Wert schlagen fehl.
Das folgende Diagramm veranschaulicht den Workflow des Anmeldeinformationsanbieters.

-
Das AWS IoT Core-Gerät stellt eine HTTPS-Anfrage an den Anmeldeinformationsanbieter, um ein Sicherheits-Token zu erhalten. Die Anfrage enthält das X.509-Zertifikat des Geräts für die Authentifizierung.
-
Der Anmeldeinformationsanbieter leitet die Anfrage an das AWS IoT Core-Authentifizierungs- und Autorisierungsmodul weiter, um das Zertifikat zu validieren und zu überprüfen, ob das Gerät über die Berechtigung zum Anfordern des Sicherheits-Tokens verfügt.
-
Wenn das Zertifikat gültig ist und über die Berechtigung verfügt, ein Sicherheits-Token anzufordern, gibt das AWS IoT Core-Authentifizierungs- und -Autorisierungsmodul eine Erfolgsmeldung zurück. Andernfalls sendet es eine Ausnahme an das Gerät.
-
Nach der erfolgreichen Validierung des Zertifikats ruft der Anmeldeinformationsanbieter AWS Security Token Service (AWS STS) auf, um die IAM-Rolle anzunehmen, die Sie für ihn erstellt haben.
-
AWS STS gibt ein temporäres Sicherheits-Token mit eingeschränkten Berechtigungen an den Anmeldeinformationsanbieter zurück.
-
Der Anmeldeinformationsanbieter gibt das Sicherheits-Token an das Gerät zurück.
-
Das Gerät verwendet das Sicherheitstoken, um eine AWS Anfrage mit AWS Signature Version 4 zu signieren.
-
Der angeforderte Service ruft IAM auf, um die Signatur zu validieren und die Anforderung anhand der Zugriffsrichtlinien zu autorisieren, die der IAM-Rolle zugeordnet sind, die Sie für den Anmeldeinformationsanbieter erstellt haben.
-
Wenn IAM die Signatur erfolgreich validiert und die Anfrage autorisiert, ist die Anfrage erfolgreich. Andernfalls sendet IAM eine Ausnahme.
Im folgenden Abschnitt wird beschrieben, wie Sie ein Zertifikat verwenden, um ein Sicherheits-Token abzurufen. Es ist in der Annahme geschrieben, dass Sie bereits ein Gerät registriert haben und für es ein eigenes Zertifikat erstellt und aktiviert haben.
So verwenden Sie ein Zertifikat zum Abrufen eines Sicherheits-Tokens
-
Konfigurieren Sie die IAM-Rolle, die der Anmeldeinformationsanbieter im Namen Ihres Geräts annimmt. Fügen Sie der Rolle die folgende Vertrauensrichtlinie hinzu.
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Service": "credentials.iot.amazonaws.com"}, "Action": "sts:AssumeRole" } }
Fügen Sie der Rolle für jeden AWS Dienst, den Sie aufrufen möchten, eine Zugriffsrichtlinie hinzu. Der Anmeldeinformationsanbieter unterstützt die folgenden Richtlinienvariablen:
-
credentials-iot:ThingName
-
credentials-iot:ThingTypeName
-
credentials-iot:AwsCertificateId
Wenn das Gerät den Dingnamen in seiner Anfrage an einen AWS Dienst angibt, fügt der Anbieter der Anmeldeinformationen dem Sicherheitstoken
credentials-iot:ThingName
undcredentials-iot:ThingTypeName
als Kontextvariablen hinzu. Der Anmeldeinformationsanbieter stelltcredentials-iot:AwsCertificateId
als Kontextvariable bereit, auch wenn das Gerät den Dingnamen nicht in der Anfrage angibt. Sie übergeben den Dingnamen als Wert desx-amzn-iot-thingname
HTTP-Anfrage-Headers.Diese drei Variablen funktionieren nur für IAM-Richtlinien, nicht für AWS IoT Core-Richtlinien.
-
-
Stellen Sie sicher, dass der Benutzer, der den nächsten Schritt ausführt (Anlegen eines Rollenalias), die Berechtigung hat, die neu erstellte Rolle an AWS IoT Core zu übergeben. Die folgende Richtlinie erteilt einem AWS Benutzer
iam:GetRole
sowohliam:PassRole
Berechtigungen als auch Berechtigungen. Dieiam:GetRole
-Berechtigung ermöglicht es dem Benutzer, Informationen über die Rolle zu abzurufen, die Sie gerade erstellt haben. Dieiam:PassRole
Berechtigung ermöglicht es dem Benutzer, die Rolle an einen anderen AWS Dienst zu übergeben.{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::
your AWS-Konto id
:role/your role name
" } } -
Erstellen Sie einen AWS IoT Core-Rollenalias. Das Gerät, das direkte Anrufe an AWS Dienste tätigen soll, muss wissen, mit welcher ARN-Rolle es eine Verbindung herstellen sollAWS IoT Core. Eine Hartcodierung des Rollen-ARN stellt jedoch keine gute Lösung dar, da Sie das Gerät bei jeder Änderung des Rollen-ARN aktualisieren müssten. Eine bessere Lösung ist es, mit der
CreateRoleAlias
-API einen Rollenalias zu erstellen, der auf den Rollen-ARN verweist. Wenn sich der Rollen-ARN ändert, können Sie einfach den Rollenalias aktualisieren. Auf dem Gerät ist keine Änderung erforderlich. Diese API verwendet die folgenden Parameter:roleAlias
-
Erforderlich. Eine beliebige Zeichenfolge, die den Rollenalias identifiziert. Sie dient als Primärschlüssel im Rollenalias-Datenmodell. Sie hat 1-128 Zeichen und darf nur alphanumerische Zeichen und die Symbole =, @ und - enthalten. Großbuchstaben und Kleinbuchstaben sind zulässig.
roleArn
-
Erforderlich. Der ARN der Rolle, auf den sich der Rollenalias bezieht.
credentialDurationSeconds
-
Optional. Die Gültigkeitsdauer (in Sekunden) der Anmeldeinformationen. Die Mindestwert beträgt 900 Sekunden (15 Minuten). Der maximale Wert ist 43200 Sekunden (12 Stunden). Der Standardwert ist 3.600 Sekunden (1 Stunde).
Anmerkung
Der Anbieter der AWS IoT Core Anmeldeinformationen kann einen Ausweis mit einer maximalen Gültigkeitsdauer von 43.200 Sekunden (12 Stunden) ausstellen. Wenn die Anmeldeinformationen bis zu 12 Stunden gültig sind, kann die Anzahl der Anrufe beim Anbieter der Anmeldeinformationen reduziert werden, indem die Anmeldeinformationen länger zwischengespeichert werden.
Der
credentialDurationSeconds
Wert muss kleiner oder gleich der maximalen Sitzungsdauer der IAM-Rolle sein, auf die der Rollenalias verweist.
Weitere Informationen über diese API finden Sie unter CreateRoleAlias.
-
Anfügen einer Richtlinie an das Gerätezertifikat. Die an das Gerätezertifikat angefügte Richtlinie muss dem Gerät die Berechtigung erteilen, die Rolle zu übernehmen. Dies erreichen Sie, indem Sie dem Rollenalias die Berechtigung für die Aktion
iot:AssumeRoleWithCertificate
erteilen, wie im folgenden Beispiel gezeigt.{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"iot:AssumeRoleWithCertificate", "Resource":"arn:aws:iot:your region:your_aws_account_id:rolealias/your role alias" } ] }
-
Stellen Sie eine HTTPS-Anfrage an den Anmeldeinformationsanbieter, um ein Sicherheits-Token zu erhalten. Geben Sie die folgenden Informationen an:
-
Zertifikat: Da es sich um eine HTTP-Anfrage zur gegenseitigen TLS-Authentifizierung handelt, müssen Sie Ihrem Client bei der Anfrage das Zertifikat und den privaten Schlüssel zur Verfügung stellen. Verwenden Sie dasselbe Zertifikat und denselben privaten Schlüssel, den Sie bei der Registrierung Ihres Zertifikats bei AWS IoT Core verwendet haben.
Um sicherzustellen, dass Ihr Gerät mit AWS IoT Core kommuniziert (und nicht mit einem Service, der sich dafür ausgibt), lesen Sie Serverauthentifizierung, folgen Sie den Links, um die entsprechenden CA-Zertifikate herunterzuladen, und kopieren Sie sie dann auf Ihr Gerät.
-
RoleAlias: Der Name des Rollenalias, den Sie für den Anbieter der Anmeldeinformationen erstellt haben.
-
ThingName: Der Dingname, den Sie bei der Registrierung Ihres Dings erstellt AWS IoT Core haben. Dieser wird als Wert des
x-amzn-iot-thingname
HTTP-Headers übergeben. Dieser Wert ist nur erforderlich, wenn Sie in AWS IoT Core- oder IAM-Richtlinien Objektattribute als Richtlinienvariablen verwenden.Anmerkung
Die ThingName, die Sie angeben,
x-amzn-iot-thingname
muss mit dem Namen der AWS IoT Thing-Ressource übereinstimmen, die einem Zertifikat zugewiesen ist. Wenn es nicht übereinstimmt, wird ein 403-Fehler zurückgegeben.
Führen Sie den folgenden Befehl in der ausAWS CLI, um den Endpunkt des Anbieters der Anmeldeinformationen für Ihren abzurufenAWS-Konto. Weitere Informationen über diese API finden Sie unter DescribeEndpoint.
aws iot describe-endpoint --endpoint-type iot:CredentialProvider
Das folgende JSON-Objekt ist die Beispielausgabe des describe-endpoint-Befehls. Es enthält die
endpointAddress
, die Sie verwenden, um ein Sicherheits-Token anzufordern.{ "endpointAddress": "
your_aws_account_specific_prefix
.credentials.iot.your region
.amazonaws.com" }Verwenden Sie den Endpunkt, um eine HTTPS-Anfrage an den Anmeldeinformationsanbieter zu stellen, ein Sicherheits-Token zurückzugeben. Der folgende Beispielbefehl verwendet
curl
, aber Sie können jeden beliebigen HTTP-Client verwenden.curl --cert
your certificate
--keyyour device certificate key pair
-H "x-amzn-iot-thingname:your thing name
" --cacert AmazonRootCA1.pem https://your endpoint
/role-aliases/your role alias
/credentialsDieser Befehl gibt ein Sicherheits-Token-Objekt zurück, das einen
accessKeyId
, einensecretAccessKey
, einsessionToken
, und einen Ablaufzeitpunkt enthält. Das folgende JSON-Objekt ist die Beispielausgabe descurl
-Befehls.{"credentials":{"accessKeyId":"
access key
","secretAccessKey":"secret access key
","sessionToken":"session token
","expiration":"2018-01-18T09:18:06Z"}}Anschließend können Sie die
sessionToken
WerteaccessKeyId
, und verwendensecretAccessKey
, um Anfragen an AWS Dienste zu signieren. Eine vollständige Demonstration finden Sie im Blogbeitrag How to Eliminate the Need of Hardcoded AWS Credentials in Devices by Using the AWS IoT Credential Provider im SecurityBlog. AWS -