Autorizzazione con identità Amazon Cognito - AWS IoT Core

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Autorizzazione con identità Amazon Cognito

Esistono due tipi di identità di Amazon Cognito: non autenticate e autenticate. Se l'app supporta identità Amazon Cognito non autenticate, non viene eseguita alcuna autenticazione in modo da non sapere chi è l'utente.

Identità non autenticate: per le identità Amazon Cognito non autenticate, viene concessa l'autorizzazione collegando un ruolo IAM a un pool di identità non autenticato. Consigliamo di concedere l'accesso solo alle risorse che si desidera rendere disponibili agli utenti sconosciuti.

Importante

Per gli utenti non autenticati che si connettono AWS IoT Core ad Amazon Cognito, consigliamo di concedere l'accesso a risorse molto limitate nelle policy IAM.

Identità autenticate: per le identità Amazon Cognito autenticate, è necessario specificare autorizzazioni in due posizioni:

  • Collega una policy IAM al pool di identità di Amazon Cognito autenticato e

  • Allega una AWS IoT Core policy all'identità di Amazon Cognito (utente autenticato).

Esempi di policy per utenti Amazon Cognito non autenticati e autenticati che si connettono a AWS IoT Core

Nell'esempio seguente vengono illustrate le autorizzazioni nella policy IAM e nella policy IoT di un'identità Amazon Cognito. L'utente autenticato desidera pubblicare in un argomento specifico del dispositivo (ad esempio, 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'esempio seguente mostra le autorizzazioni in una policy IAM di un ruolo non autenticato di Amazon Cognito. L'utente non autenticato desidera pubblicare in argomenti non specifici del dispositivo che non richiedono l'autenticazione.

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

I seguenti esempi di applicazioni web GitHub mostrano come incorporare l'allegato delle policy agli utenti autenticati nel processo di registrazione e autenticazione degli utenti.

Amplify è un insieme di strumenti e servizi che ti aiuta a creare applicazioni web e mobili che si integrano con i servizi. AWS Per ulteriori informazioni su Amplify, consulta Amplify Framework Documentation (Documentazione Amplify Framework).

Entrambi gli esempi eseguono la seguente procedura.

  1. Quando un utente si registra per un account, l'applicazione crea un bacino d'utenza e un'identità di Amazon Cognito.

  2. Quando un utente si autentica, l'applicazione crea e allega una policy all'identità. Ciò consente all'utente di pubblicare e sottoscrivere le autorizzazioni.

  3. L'utente può utilizzare l'applicazione per pubblicare e iscriversi ad argomenti MQTT.

Il primo esempio utilizza l'operazione API AttachPolicy direttamente all'interno dell'operazione di autenticazione. Nell'esempio seguente viene illustrato come implementare questa chiamata API all'interno di un'applicazione Web React che utilizza Amplify e SDK per dispositivi AWS IoT per 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); } }); }

Questo codice viene visualizzato nel AuthDisplayfile.js.

Il secondo esempio implementa l'operazione API AttachPolicy in una funzione Lambda. Nell'esempio seguente viene illustrato in che modo Lambda utilizza questa chiamata 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}); } });

Questo codice viene visualizzato all'interno della funzione iot.GetPolicy nel fileapp.js.

Nota

Quando chiami la funzione con AWS le credenziali ottenute tramite i pool di identità di Amazon Cognito, l'oggetto di contesto nella funzione Lambda contiene un valore per. context.cognito_identity_id Per ulteriori informazioni, consulta gli argomenti seguenti.