Autorisierung mit Amazon-Cognito-Identitäten - 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 mit Amazon-Cognito-Identitäten

Es gibt zwei Arten von Amazon–Cognito-Identitäten: nicht authentifiziert und authentifiziert. Wenn Ihre App nicht authentifizierte Amazon-Cognito-Identitäten unterstützt, wird keine Authentifizierung durchgeführt, sodass Sie nicht wissen, wer der Benutzer:in ist.

Nicht authentifizierte Identitäten: Für nicht authentifizierte Amazon Cognito Cognito-Identitäten gewähren Sie Berechtigungen, indem Sie eine Rolle an einen nicht authentifizierten Identitätspool anhängen. IAM Wir empfehlen, nur jenen Ressourcen Zugriff gewähren, die Sie für unbekannte Benutzer verfügbar haben möchten.

Wichtig

Für nicht authentifizierte Amazon Cognito Cognito-Benutzer AWS IoT Core, die eine Verbindung herstellen, empfehlen wir, in Richtlinien Zugriff auf sehr begrenzte Ressourcen zu gewähren. IAM

Authentifizierte Identitäten: Für authentifizierte Amazon-Cognito-Identitäten müssen Sie Berechtigungen an zwei Stellen angeben:

  • Hängen Sie eine IAM Richtlinie an den authentifizierten Amazon Cognito Identity-Pool an und

  • Hängen Sie der Amazon Cognito Identity (authentifizierter Benutzer) eine AWS IoT Core Richtlinie an.

Richtlinienbeispiele für nicht authentifizierte und authentifizierte Amazon-Cognito-Benutzer, die eine Verbindung zu AWS IoT Core herstellen

Das folgende Beispiel zeigt Berechtigungen sowohl in der IAM Richtlinie als auch in der IoT-Richtlinie einer Amazon Cognito Cognito-Identität. Der authentifizierte Benutzer möchte zu einem gerätespezifischen Thema veröffentlichen (z. B. DEVICE device/ _ID/Status).

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/Client_ID" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/device/Device_ID/status" ] } ] }

Das folgende Beispiel zeigt die Berechtigungen in einer IAM Richtlinie für eine nicht authentifizierte Amazon Cognito Cognito-Rolle. Der nicht authentifizierte Benutzer möchte Inhalte zu nicht gerätespezifischen Topics veröffentlichen, für die keine Authentifizierung erforderlich ist.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/*" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/non_device_specific_topic" ] } ] }

GitHub Beispiele

In den folgenden Beispiel-Webanwendungen wird GitHub gezeigt, wie das Anhängen von Richtlinien an authentifizierte Benutzer in den Benutzeranmelde- und Authentifizierungsprozess integriert werden kann.

Amplify ist eine Reihe von Tools und Diensten, mit denen Sie Web- und Mobilanwendungen erstellen können, die sich in AWS Dienste integrieren lassen. Weitere Informationen zu Amplify finden Sie in der Amplify-Framework-Dokumentation.

In beiden Beispielen werden die folgenden Schritte ausgeführt.

  1. Wenn sich ein/e Benutzer:in für ein Konto anmeldet, erstellt die Anwendung einen Amazon-Cognito-Benutzerpool und eine Identität.

  2. Wenn sich ein/e Benutzer:in authentifiziert, erstellt die Anwendung eine Richtlinie und fügt sie der Identität an. Dadurch erhält der/die Benutzer:in Veröffentlichungs- und Abonnementberechtigungen.

  3. Der Benutzer kann die Anwendung verwenden, um MQTT Themen zu veröffentlichen und zu abonnieren.

Im ersten Beispiel wird der AttachPolicy API Vorgang direkt innerhalb des Authentifizierungsvorgangs verwendet. Das folgende Beispiel zeigt, wie dieser API Aufruf in einer React-Webanwendung implementiert wird, die Amplify und the AWS IoT Device SDK for JavaScript verwendet.

function attachPolicy(id, policyName) { var Iot = new AWS.Iot({region: AWSConfiguration.region, apiVersion: AWSConfiguration.apiVersion, endpoint: AWSConfiguration.endpoint}); var params = {policyName: policyName, target: id}; console.log("Attach IoT Policy: " + policyName + " with cognito identity id: " + id); Iot.attachPolicy(params, function(err, data) { if (err) { if (err.code !== 'ResourceAlreadyExistsException') { console.log(err); } } else { console.log("Successfully attached policy with the identity", data); } }); }

Dieser Code erscheint in der AuthDisplay.js-Datei.

Das zweite Beispiel implementiert die AttachPolicy API Operation in einer Lambda-Funktion. Das folgende Beispiel zeigt, wie Lambda diesen API Aufruf verwendet.

iot.attachPolicy(params, function(err, data) { if (err) { if (err.code !== 'ResourceAlreadyExistsException') { console.log(err); res.json({error: err, url: req.url, body: req.body}); } } else { console.log(data); res.json({success: 'Create and attach policy call succeed!', url: req.url, body: req.body}); } });

Dieser Code erscheint in der iot.GetPolicy-Funktion in der Datei app.js.

Anmerkung

Wenn Sie die Funktion mit AWS Anmeldeinformationen aufrufen, die Sie über Amazon Cognito Identity-Pools erhalten, enthält das Kontextobjekt in Ihrer Lambda-Funktion einen Wert für. context.cognito_identity_id Weitere Informationen finden Sie unter den folgenden Topics.