

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
<a name="cog-iot-policies"></a>

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
<a name="cog-iot-policies-auth-unauth-examples"></a>

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 exemplodevice/DEVICE\$1ID/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
<a name="cog-iot-policies-github"></a>

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.
+ [Uso do aplicativo web MQTT publish/subscribe React AWS Amplify e o AWS IoT Device SDK for JavaScript](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-cp)
+ [Aplicativo web MQTT publish/subscribe React usando AWS AmplifyAWS IoT Device SDK for JavaScript, a e uma função Lambda](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-lambda)

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](https://docs.amplify.aws/).

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.

1. 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.

1. 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.](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-cp/blob/d1c307b36357be934db9dda020140fa337709cd9/src/AuthDisplay.js#L45)

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](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-lambda/blob/e493039581d2aff0faa3949086deead20a2c5385/amplify/backend/function/amplifyiotlambda/src/app.js#L50).

**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.   
[AWS Lambda objeto de contexto em Node.js](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-context.html)
[AWS Lambda objeto de contexto em Python](https://docs.aws.amazon.com/lambda/latest/dg/python-context.html)
[AWS Lambda objeto de contexto em Ruby](https://docs.aws.amazon.com/lambda/latest/dg/ruby-context.html)
[AWS Lambda objeto de contexto em Java](https://docs.aws.amazon.com/lambda/latest/dg/java-context.html)
[AWS Lambda objeto de contexto em Go](https://docs.aws.amazon.com/lambda/latest/dg/golang-context.html)
[AWS Lambda objeto de contexto em C\$1](https://docs.aws.amazon.com/lambda/latest/dg/csharp-context.html)
[AWS Lambda objeto de contexto em PowerShell](https://docs.aws.amazon.com/lambda/latest/dg/powershell-context.html)