Autorisieren von direkten Aufrufen von - AWS Services mit AWS IoT Core Anmeldeinformationsanbieter - 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.

Autorisieren von direkten Aufrufen von - AWS Services mit AWS IoT Core Anmeldeinformationsanbieter

Geräte können X.509-Zertifikate verwenden, um AWS IoT Core mithilfe von TLS-Protokollen für gegenseitige Authentifizierung eine Verbindung zu herzustellen. Andere - AWS Services unterstützen keine zertifikatbasierte Authentifizierung, aber sie können mit AWS Anmeldeinformationen im AWS Signature Version 4-Format aufgerufen werden. Der Signature Version 4-Algorithmus erfordert normalerweise, dass der Aufrufer über eine Zugriffsschlüssel-ID und einen geheimen Zugriffsschlüssel verfügt. AWS IoT Core verfügt über einen Anmeldeinformationsanbieter, mit dem Sie das integrierte X.509-Zertifikat als eindeutige Geräteidentität zur Authentifizierung von AWS Anforderungen 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 Anforderung zu signieren und zu authentifizieren. Für diese Art der Authentifizierung Ihrer AWS Anfragen müssen Sie eine AWS Identity and Access Management (IAM)-Rolle erstellen und konfigurieren und der Rolle entsprechende IAM-Richtlinien anfügen, damit der Anmeldeinformationsanbieter die Rolle in Ihrem Namen übernehmen kann. Weitere Informationen zu AWS IoT Core und IAM finden Sie unter Identity and Access Management für AWS IoT.

AWS IoT erfordert, dass Geräte die Server Name Indication (SNI)-Erweiterung an das Transport Layer Security (TLS)-Protokoll senden und die vollständige Endpunktadresse im host_name Feld angeben. Im Feld host_namemuss der Endpunkt angegeben sein. Dabei muss es sich um Folgendes handeln:

  • Die von aws iot describe-endpoint --endpoint-type iot:CredentialProvider zurückgegebene endpointAddress.

Verbindungsversuche von Geräten ohne den richtigen Wert für host_name werden fehlschlagen.

Das folgende Diagramm veranschaulicht den Workflow des Anmeldeinformationsanbieters.


                AWS IoT Core -Anmeldeinformationsanbieter-Workflow.
  1. Das AWS IoT Core Gerät stellt eine HTTPS-Anfrage an den Anbieter der Anmeldeinformationen für ein Sicherheitstoken. Die Anfrage enthält das X.509-Zertifikat des Geräts für die Authentifizierung.

  2. Der Anmeldeinformationsanbieter leitet die Anforderung 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 Sicherheitstokens verfügt.

  3. Wenn das Zertifikat gültig ist und die Berechtigung hat, ein Sicherheitstoken anzufordern, gibt das AWS IoT Core Authentifizierungs- und Autorisierungsmodul Erfolg 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 Sicherheitstoken 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 Anforderung autorisiert, ist die Anforderung 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 Service, den Sie aufrufen möchten, eine Zugriffsrichtlinie an. Der Anmeldeinformationsanbieter unterstützt die folgenden Richtlinienvariablen:

    • credentials-iot:ThingName

    • credentials-iot:ThingTypeName

    • credentials-iot:AwsCertificateId

    Wenn das Gerät den Objektnamen in seiner Anforderung an einen AWS -Service bereitstellt, fügt der Anmeldeinformationsanbieter dem Sicherheits-Token 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 sowohl iam:GetRole - als auch -iam:PassRoleBerechtigungen. Die iam:GetRole-Berechtigung ermöglicht es dem Benutzer, Informationen über die Rolle zu abzurufen, die Sie gerade erstellt haben. Die -iam:PassRoleBerechtigung ermöglicht es dem Benutzer, die Rolle an einen anderen - AWS Service 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 Aufrufe an - AWS Services tätigen wird, muss wissen, welcher Rollen-ARN für die Verbindung mit verwendet werden soll AWS 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 Höchstwert beträgt 43.200 Sekunden (12 Stunden). Der Standardwert ist 3.600 Sekunden (1 Stunde).

    Anmerkung

    Der AWS IoT Core Anbieter von Anmeldeinformationen kann Anmeldeinformationen mit einer maximalen Lebensdauer von 43.200 Sekunden (12 Stunden) ausstellen. Wenn die Anmeldeinformationen bis zu 12 Stunden gültig sind, kann die Anzahl der Anrufe beim Anmeldeinformationsanbieter reduziert werden, da 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 verwendet haben AWS IoT Core.

      Um sicherzustellen, dass Ihr Gerät mit kommuniziert AWS IoT Core (und nicht mit einem Service, der es imitiert), 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 Anmeldeinformationsanbieter erstellt haben.

    • ThingName: Der Objektname, den Sie bei der Registrierung Ihres AWS IoT Core Objekts erstellt haben. Dieser wird als Wert des x-amzn-iot-thingname HTTP-Headers übergeben. Dieser Wert ist nur erforderlich, wenn Sie Objektattribute als Richtlinienvariablen in AWS IoT Core oder IAM-Richtlinien verwenden.

      Anmerkung

      Die ThingName, die Sie in angeben, x-amzn-iot-thingname muss mit dem Namen der AWS IoT Objektressource übereinstimmen, die einem Zertifikat zugewiesen ist. Wenn sie nicht übereinstimmen, wird ein 403-Fehler zurückgegeben.

    Führen Sie den folgenden Befehl in der aus AWS CLI , um den Anmeldeinformationsanbieter-Endpunkt für Ihr abzurufen AWS-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 Werte accessKeyId, und verwendensecretAccessKey, um Anfragen an - AWS Services zu signieren. Eine end-to-end Demonstration finden Sie im Blog-Beitrag zum - AWS Anmeldeinformationsanbieter im -Sicherheitsblog unter Verwendung des - AWS IoT Anmeldeinformationsanbieters. AWS