Autorisation avec les identités Amazon Cognito - AWS IoT Core

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Autorisation avec les identités Amazon Cognito

Il existe deux types d'identités Amazon Cognito : non authentifiées et authentifiées. Si votre application prend en charge les identités Amazon Cognito non authentifiées, aucune authentification n'est effectuée, vous ne sauriez donc pas qui est l'utilisateur.

Unauthenticated Identities : Pour les identités Amazon Cognito non authentifiées, vous accordez des autorisations en attachant un rôle IAM à une réserve d'identités non authentifiées. Nous vous recommandons d'accorder uniquement l'accès aux ressources que vous souhaitez rendre accessibles aux utilisateurs inconnus.

Important

Pour les utilisateurs non authentifiés d'Amazon Cognito qui se connectent AWS IoT Coreà, nous vous recommandons de donner accès à des ressources très limitées dans les politiques IAM.

Identités authentifiées : pour les identités Amazon Cognito authentifiées, vous devez spécifier les autorisations à deux endroits :

  • Attachez une Politique IAM au réserve d'identités Amazon Cognito authentifié et

  • Associez une AWS IoT Core politique à l'identité Amazon Cognito (utilisateur authentifié).

Exemples de stratégie pour les utilisateurs Amazon Cognito non authentifiés et authentifiés se connectant à AWS IoT Core

L'exemple suivant montre les autorisations dans la Politique IAM et IoT d'une identité Amazon Cognito. L'utilisateur authentifié souhaite publier sur un sujet spécifique à l'appareil (par exemple, 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" ] } ] }

L'exemple suivant montre les autorisations dans une Politique IAM d'un rôle non authentifié Amazon Cognito. L'utilisateur non authentifié souhaite publier sur des rubriques non spécifiques à un appareil qui ne nécessitent pas d'authentification.

{ "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 exemples

Les exemples d'applications Web suivants GitHub montrent comment intégrer l'attachement aux politiques des utilisateurs authentifiés dans le processus d'inscription et d'authentification des utilisateurs.

Amplify est un ensemble d'outils et de services qui vous aident à créer des applications Web et mobiles qui s'intègrent aux AWS services. Pour plus d’informations sur Amplify, consultez Documentation du Cadre Amplify,.

Les deux exemples effectuent les étapes suivantes.

  1. Lorsqu'un utilisateur crée un compte, l'application crée un groupe d'utilisateurs et une identité Amazon Cognito.

  2. Lorsqu'un utilisateur s'authentifie, l'application crée et attache une stratégie à l'identité. Cela donne à l'utilisateur des autorisations de publication et d'abonnement.

  3. L'utilisateur peut utiliser l'application pour publier et s'abonner à des rubriques MQTT.

Le premier exemple utilise l’opération API AttachPolicy directement dans l’opération d’authentification. L'exemple suivant montre comment implémenter cet appel d'API dans une application Web React qui utilise Amplify et le Kit SDK des appareils AWS IoT pour JavaScript.

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); } }); }

Ce code apparaît dans le fichier AuthDisplay.js.

Le deuxième exemple implémente l'opération API AttachPolicy dans une fonction Lambda. L'exemple suivant montre comment Lambda utilise cet appel d'API.

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}); } });

Ce code apparaît à l'intérieur de la fonction iot.GetPolicy dans le fichier app.js.

Note

Lorsque vous appelez la fonction avec les AWS informations d'identification que vous obtenez via les pools Amazon Cognito Identity, l'objet de contexte de votre fonction Lambda contient une valeur pour. context.cognito_identity_id Pour plus d’informations, consultez les rubriques suivantes.