Autorización con identidades de Amazon Cognito - AWS IoT Core

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Autorización con identidades de Amazon Cognito

Hay dos tipos de identidades de Amazon Cognito: autenticadas y sin autenticar. Si la aplicación admite identidades de Amazon Cognito no autenticadas, no se realiza ninguna autenticación, por lo que no se sabe quién es el usuario.

Identidades no autenticadas: en el caso de las identidades de Amazon Cognito no autenticadas, se conceden permisos asociando un rol de IAM a un grupo de identidades no autenticadas. Le recomendamos que solo conceda acceso a aquellos recursos que desee que estén disponibles para usuarios desconocidos.

importante

Para los usuarios de Amazon Cognito no autenticados que se conecten AWS IoT Core a, le recomendamos que dé acceso a recursos muy limitados en las políticas de IAM.

Identidades autenticadas: para las identidades autenticadas de Amazon Cognito, debe especificar los permisos en dos lugares.

  • Asocie una política de IAM al grupo autenticado de identidades de Amazon Cognito y

  • Adjunte una AWS IoT Core política a Amazon Cognito Identity (usuario autenticado).

Ejemplos de políticas para usuarios de Amazon Cognito autenticados y no autenticados que se conectan a AWS IoT Core

El siguiente ejemplo muestra los permisos tanto en la política de IAM como en la política de IoT de una identidad de Amazon Cognito. El usuario autenticado quiere publicar en un tema específico del dispositivo (por ejemplo, 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" ] } ] }

El siguiente ejemplo muestra los permisos en una política de IAM de un rol no autenticado de Amazon Cognito. El usuario no autenticado desea publicar en temas no específicos de un dispositivo que no requieren autenticación.

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

Los siguientes ejemplos de aplicaciones web GitHub muestran cómo incorporar políticas adjuntas a los usuarios autenticados en el proceso de registro y autenticación de los usuarios.

Amplify es un conjunto de herramientas y servicios que le ayuda a crear aplicaciones web y móviles que se integran con AWS los servicios. Para obtener más información acerca de Amplify, consulte la Documentación de Amplify Framework.

En los dos ejemplos se realizan los siguientes pasos.

  1. Cuando un usuario se registra para obtener una cuenta, la aplicación crea una identidad y un grupo de usuarios de Amazon Cognito.

  2. Cuando un usuario se autentica, la aplicación crea y asocia una política a la identidad. Esto otorga al usuario permisos de publicación y suscripción.

  3. El usuario puede utilizar la aplicación para publicar temas de MQTT y suscribirse a ellos.

El primer ejemplo utiliza la operación de la API AttachPolicy directamente dentro de la operación de autenticación. El siguiente ejemplo muestra cómo implementar esta llamada a la API dentro de una aplicación web de React que usa Amplify y el SDK de AWS IoT Device para 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); } }); }

Este código aparece en el AuthDisplayarchivo.js.

El segundo ejemplo implementa la operación de la API AttachPolicy en una función de Lambda. El siguiente ejemplo muestra cómo Lambda utiliza esta llamada a la 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}); } });

Este código aparece dentro de la función iot.GetPolicy en el archivo app.js.

nota

Cuando llama a la función con AWS las credenciales que obtiene a través de los grupos de identidades de Amazon Cognito, el objeto de contexto de la función Lambda contiene un valor para. context.cognito_identity_id Para obtener más información, consulte lo siguiente.