Autorisieren von direkten Aufrufen von AWS Diensten mithilfe des AWS IoT Core Credential Providers - 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 Diensten mithilfe des AWS IoT Core Credential Providers

Geräte können X.509-Zertifikate verwenden, um AWS IoT Core mithilfe von TLS-Protokollen für die gegenseitige Authentifizierung eine Verbindung herzustellen. Andere AWS Dienste unterstützen keine zertifikatsbasierte Authentifizierung, sie können jedoch mithilfe von AWS Anmeldeinformationen im AWS Signature Version 4-Format aufgerufen werden. Der Signature Version 4-Algorithmus erfordert normalerweise, dass der Anrufer über eine Zugriffsschlüssel-ID und einen geheimen Zugriffsschlüssel verfügt. AWS IoT Core verfügt über einen Anbieter für 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 Anfrage zu signieren und zu authentifizieren. AWS 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 zuordnen, damit der Anbieter der Anmeldeinformationen die Rolle in Ihrem Namen übernehmen kann. Weitere Informationen zu AWS IoT Core und IAM finden Sie unter Identitäts- und Zugriffsmanagement 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 vor Ort angeben. host_name 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 Workflow für den Anbieter von Anmeldeinformationen.
  1. Das AWS IoT Core Gerät sendet eine HTTPS-Anfrage an den Anbieter für Anmeldeinformationen nach einem Sicherheitstoken. Die Anfrage enthält das X.509-Zertifikat des Geräts für die Authentifizierung.

  2. Der Anbieter für Anmeldeinformationen 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 berechtigt ist, das Sicherheitstoken anzufordern.

  3. Wenn das Zertifikat gültig ist und berechtigt ist, ein Sicherheitstoken anzufordern, meldet das AWS IoT Core Authentifizierungs- und Autorisierungsmodul Erfolg. 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 Rechten 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 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 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 gewährt 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, zu welcher Rolle der ARN für die Verbindung verwendet AWS IoT Core werden soll. 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).

    Wichtig

    Der AWS IoT Core Credential Provider 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 finden Sie unter Ändern der maximalen Sitzungsdauer (AWS API) einer Rolle im AWS Identity and Access Management-Benutzerhandbuch.

    Weitere Informationen zu dieser 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, mit dem Sie Ihr Zertifikat registriert haben AWS IoT Core.

      Um sicherzustellen, dass Ihr Gerät mit AWS IoT Core (und nicht mit einem Dienst, der sich als solches ausgibt) kommuniziert, finden Sie weitere Informationen unter 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 Name des Dings, 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 Ding-Attribute als Richtlinienvariablen in AWS IoT Core oder IAM-Richtlinien verwenden.

      Anmerkung

      Der Wert ThingName, den Sie angeben, x-amzn-iot-thingname muss mit dem Namen der Dingressource AWS IoT ü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 Endpunkt des Anmeldeinformationsanbieters für Ihren AWS-Konto zu erhalten. Weitere Informationen zu dieser 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 end-to-end Demonstration finden Sie im Blogbeitrag So vermeiden Sie fest codierte AWS Anmeldeinformationen auf Geräten mithilfe des AWS IoT Credential Providers im AWS Security Blog.