Autorisierung direkter Anrufe an AWS Dienste mithilfe des AWS IoT Core Anmeldeinformationsanbieters - 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.

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) an das Transport Layer Security (TLS)-Protokoll senden und im Feld host_name die vollständige Endpunktadresse angeben. Im Feld host_namemuss 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.


                AWS IoT CoreArbeitsablauf beim Anbieter von Anmeldeinformationen.
  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. AWS STS gibt ein temporäres Sicherheits-Token mit eingeschränkten Berechtigungen an den Anmeldeinformationsanbieter zurück.

  6. Der Anmeldeinformationsanbieter gibt das Sicherheits-Token an das Gerät zurück.

  7. Das Gerät verwendet das Sicherheitstoken, um eine AWS Anfrage mit AWS Signature Version 4 zu signieren.

  8. 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.

  9. 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

  1. 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 und credentials-iot:ThingTypeName als Kontextvariablen hinzu. Der Anmeldeinformationsanbieter stellt credentials-iot:AwsCertificateId als Kontextvariable bereit, auch wenn das Gerät den Dingnamen nicht in der Anfrage angibt. Sie übergeben den Dingnamen als Wert des x-amzn-iot-thingname HTTP-Anfrage-Headers.

    Diese drei Variablen funktionieren nur für IAM-Richtlinien, nicht für AWS IoT Core-Richtlinien.

  2. 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 sowohl iam:PassRole Berechtigungen als auch Berechtigungen. Die iam:GetRole-Berechtigung ermöglicht es dem Benutzer, Informationen über die Rolle zu abzurufen, die Sie gerade erstellt haben. Die iam: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" } }
  3. 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.

  4. 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" } ] }
  5. 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 --key your device certificate key pair -H "x-amzn-iot-thingname: your thing name" --cacert AmazonRootCA1.pem https://your endpoint /role-aliases/your role alias/credentials

    Dieser Befehl gibt ein Sicherheits-Token-Objekt zurück, das einen accessKeyId, einen secretAccessKey, ein sessionToken, und einen Ablaufzeitpunkt enthält. Das folgende JSON-Objekt ist die Beispielausgabe des curl-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 Security Blog. AWS