View a markdown version of this page

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-Identitäten gewähren Sie Berechtigungen, indem Sie eine IAM-Rolle an einen nicht authentifizierten Identitätspool anfügen. Wir empfehlen, nur jenen Ressourcen Zugriff gewähren, die Sie für unbekannte Benutzer verfügbar haben möchten.

Wichtig

Unauthentifizierten Amazon Cognito-Benutzern, die eine Verbindung herstellen, empfehlen wir AWS IoT Core, in den IAM-Richtlinien den Zugriff auf sehr begrenzte Ressourcen zu gewähren.

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

  • Fügen Sie dem authentifizierten Amazon-Cognito-Identitätspool eine IAM-Richtlinie an und

  • Hängen Sie eine AWS IoT Core Richtlinie an die Amazon Cognito-Identität an (authentifizierter Benutzer).

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

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

{ "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 Berechtigungen sowohl in der IAM-Richtlinie einer nicht authentifizierten Amazon-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

Die folgenden Beispiel-Webanwendungen GitHub zeigen, 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 in Dienste integriert werden können. AWS 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/Die Benutzer:in kann die Anwendung verwenden, um MQTT-Thopics zu veröffentlichen und zu abonnieren.

Im ersten Beispiel wird die AttachPolicy-API-Operation direkt in der Authentifizierungsoperation verwendet. Im folgenden Beispiel wird gezeigt, wie dieser API-Aufruf in einer React-Webanwendung implementiert wird, die Amplify und das 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.

Im zweiten Beispiel wird die AttachPolicy-API-Operation in einer Lambda-Funktion implementiert. Im folgenden Beispiel wird gezeigt, 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-Identitätspools 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.