Autorização com identidades do Amazon Cognito - AWS IoT Core

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Autorização com identidades do Amazon Cognito

Existem dois tipos de identidades do Amazon Cognito: autenticadas e não autenticadas. Se o aplicativo for compatível com identidades do Amazon Cognito não autenticadas, nenhuma autenticação será executada, para que você não saiba quem é o usuário.

Identidades não autenticadas: para identidades não autenticadas do Amazon Cognito, é possível conceder permissões anexando um perfil do IAM a um banco de identidades não autenticadas. Recomendamos conceder acesso somente aos recursos que você deseja disponibilizar para usuários desconhecidos.

Importante

Para usuários não autenticados do Amazon Cognito que se conectam AWS IoT Core ao, recomendamos que você conceda acesso a recursos muito limitados nas políticas do IAM.

Identidades autenticadas: para identidades autenticadas do Amazon Cognito, é necessário especificar as permissões em dois lugares:

  • Anexar uma política do IAM ao banco de identidades autenticadas do Amazon Cognito e

  • Anexe uma AWS IoT Core política à Identidade do Amazon Cognito (usuário autenticado).

Exemplos de políticas para usuários não autenticados e autenticados do Amazon Cognito que se conectam ao AWS IoT Core

O exemplo a seguir mostra as permissões na política do IAM e na política de IoT de uma identidade do Amazon Cognito. O usuário autenticado deseja publicar em um tópico específico do dispositivo (por exemplo, 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" ] } ] }

O exemplo a seguir mostra as permissões em uma política do IAM em um perfil não autenticado do Amazon Cognito. O usuário não autenticado deve publicar em tópicos não específicos do dispositivo que não exijam autenticação.

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

Os exemplos de aplicativos da web a seguir GitHub mostram como incorporar a anexação de políticas a usuários autenticados no processo de inscrição e autenticação do usuário.

Amplify é um conjunto de ferramentas e serviços que ajuda você a criar aplicativos web e móveis que se integram aos AWS serviços. Para obter mais informações sobre o Amplify, consulte a Documentação do Amplify Framework.

Os dois exemplos executam as seguintes etapas.

  1. Quando um usuário se inscreve em uma conta, o aplicativo cria um grupo de usuários e uma identidade do Amazon Cognito.

  2. Quando um usuário se autentica, o aplicativo cria e anexa uma política à identidade. Isso dá ao usuário permissões de publicação e assinatura.

  3. O usuário pode usar o aplicativo para publicar e assinar tópicos do MQTT.

O primeiro exemplo usa a operação de API AttachPolicy diretamente dentro da operação de autenticação. O exemplo a seguir demonstra como implementar essa chamada de API em um aplicativo web React que usa Amplify e o AWS IoT Device SDK for 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); } }); }

Esse código aparece no AuthDisplayarquivo.js.

O segundo exemplo implementa a operação da API AttachPolicy em uma função do Lambda. O exemplo a seguir mostra como o Lambda usa essa chamada de 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}); } });

Esse código aparece dentro da função iot.GetPolicy no arquivo app.js.

nota

Quando você chama a função com AWS as credenciais obtidas por meio dos pools de identidade do Amazon Cognito, o objeto de contexto na sua função Lambda contém um valor para. context.cognito_identity_id Para obter mais informações, consulte.