

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

Autorização é o processo de concessão de permissões a uma identidade autenticada. Você concede permissões no AWS IoT Core uso AWS IoT Core e nas políticas do IAM. Este tópico aborda políticas do AWS IoT Core . Para obter mais informações sobre políticas do IAM, consulte [Gerenciamento de identidade e acesso para AWS IoT](security-iam.md) e [Como AWS IoT funciona com o IAM](security_iam_service-with-iam.md).

AWS IoT Core as políticas determinam o que uma identidade autenticada pode fazer. A identidade autenticada é usada por dispositivos, aplicativos móveis, aplicativos web e aplicativos de desktop. Uma identidade autenticada pode até mesmo ser um usuário digitando comandos CLI AWS IoT Core . Uma identidade só pode executar AWS IoT Core operações se tiver uma política que conceda permissão para essas operações.

Tanto AWS IoT Core as políticas quanto as políticas do IAM são usadas AWS IoT Core para controlar as operações que uma identidade (também chamada de *principal*) pode realizar. O tipo de política que você usa depende do tipo de identidade com AWS IoT Core a qual você está usando para se autenticar. 

AWS IoT Core as operações são divididas em dois grupos: 
+ A API de plano de controle permite executar tarefas administrativas, como criar ou atualizar certificados, objetos, regras, e assim por diante.
+ A API do plano de dados permite que você envie e receba dados de AWS IoT Core. 

O tipo de política usada depende se você estiver usando a API de plano de controle ou de plano de dados.

A tabela a seguir mostra os tipos de identidade, os protocolos usados e os tipos de política que podem ser usados para a autorização.


**AWS IoT Core API do plano de dados e tipos de políticas**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/iot-authorization.html)


**AWS IoT Core API do plano de controle e tipos de políticas**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/iot-authorization.html)

AWS IoT Core as políticas são anexadas a certificados X.509, identidades do Amazon Cognito ou grupos de coisas. As políticas do IAM são anexadas a um usuário, grupo ou perfil do IAM. Se você usa o AWS IoT console ou a AWS IoT Core CLI para anexar a política (a um certificado, Amazon Cognito Identity ou grupo de coisas), você usa uma política. AWS IoT Core Caso contrário, você usa uma política do IAM. AWS IoT Core as políticas associadas a um grupo de coisas se aplicam a qualquer coisa dentro desse grupo de coisas. Para que a AWS IoT Core política entre em vigor, o nome `clientId` e o nome da coisa devem corresponder.

A autorização com base em políticas é uma ferramenta poderosa. Ela oferece controle total sobre o que um dispositivo, um usuário ou um aplicativo pode fazer no AWS IoT Core. Por exemplo, considere um dispositivo conectado AWS IoT Core a um certificado. Você pode permitir que o dispositivo acesse todos os tópicos MQTT ou pode restringir seu acesso a um único tópico. Em outro exemplo, considere que um usuário digite comandos CLI na linha de comando. Ao usar uma política, você pode permitir ou negar o acesso a qualquer comando ou AWS IoT Core recurso para o usuário. Você também pode controlar o acesso de um aplicativo aos recursos do AWS IoT Core .

As alterações feitas em uma política podem levar alguns minutos para entrarem em vigor devido à forma como o AWS IoT armazena em cache os documentos de política. Ou seja, pode levar alguns minutos para acessar um recurso que recebeu acesso recentemente, e um recurso pode ficar acessível por vários minutos após seu acesso ter sido revogado.

## AWS treinamento e certificação
<a name="iot-authorization-training"></a>

Para obter informações sobre autorização AWS IoT Core, faça o curso [Deep Dive into AWS IoT Core Authentication and Authorization](https://www.aws.training/Details/Curriculum?id=42335) no site de AWS Treinamento e Certificação.

# AWS IoT Core políticas
<a name="iot-policies"></a>

AWS IoT Core políticas são documentos JSON. Elas seguem as mesmas convenções das políticas do IAM. AWS IoT Core suporta políticas nomeadas para que muitas identidades possam fazer referência ao mesmo documento de política. As políticas nomeadas são versionadas para que possam ser facilmente restabelecidas.

AWS IoT Core as políticas permitem que você controle o acesso ao plano AWS IoT Core de dados. O plano de dados do AWS IoT Core consiste em operações que permitem que você se conecte ao agente de mensagens do AWS IoT Core , envie e receba mensagens MQTT e obtenha ou atualize a sombra do dispositivo de um objeto.

Uma AWS IoT Core política é um documento JSON que contém uma ou mais declarações de política. Cada instrução contém:
+ `Effect`, que especifica se a ação é permitida ou negada.
+ `Action`, que especifica a ação que a política está permitindo ou negando.
+ `Resource`, que especifica o recurso ou os recursos nos quais a ação é permitida ou negada.

As alterações feitas em uma política podem levar de 6 a 8 minutos para entrarem em vigor devido à forma como os documentos de política são armazenados em AWS IoT cache. Ou seja, pode levar alguns minutos para acessar um recurso que recebeu acesso recentemente, e um recurso pode ficar acessível por vários minutos após seu acesso ter sido revogado.

AWS IoT Core as políticas podem ser anexadas a certificados X.509, identidades do Amazon Cognito e grupos de coisas. As políticas associadas a um grupo de objetos se aplicam a qualquer objeto dentro desse grupo. Para que a política entre em vigor, o `clientId` e o nome do objeto devem coincidir. As políticas do AWS IoT Core seguem a mesma lógica de avaliação de políticas das políticas do IAM. Por padrão, todas as políticas são implicitamente negadas. Uma permissão explícita em qualquer política baseada em recurso ou identidade substitui o comportamento padrão. Uma negação explícita em qualquer política substitui todas as permissões. Para obter mais informações, consulte [Lógica da avaliação de políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow) no *Guia do usuário do AWS Identity and Access Management *.

**Topics**
+ [AWS IoT Core ações políticas](iot-policy-actions.md)
+ [AWS IoT Core recursos de ação](iot-action-resources.md)
+ [AWS IoT Core variáveis de política](iot-policy-variables.md)
+ [Prevenção contra o ataque do “substituto confuso” em todos os serviços](cross-service-confused-deputy-prevention.md)
+ [AWS IoT Core exemplos de políticas](example-iot-policies.md)
+ [Autorização com identidades do Amazon Cognito](cog-iot-policies.md)

# AWS IoT Core ações políticas
<a name="iot-policy-actions"></a>

As ações de política a seguir são definidas pelo AWS IoT Core:Ações da política MQTT

`iot:Connect`  
Representa a permissão para se conectar ao agente de AWS IoT Core mensagens. A permissão `iot:Connect` é verificada sempre que uma solicitação `CONNECT` é enviada ao operador. O agente de mensagens não permite que dois clientes com o mesmo ID de cliente permaneçam conectados ao mesmo tempo. Depois que o segundo cliente se conectar, o agente fechará a conexão existente. Use a permissão `iot:Connect` para garantir que apenas clientes autorizados usando um ID de cliente específico possam se conectar.

`iot:DeleteConnection`  
Representa a permissão para desconectar do AWS IoT Core um cliente do MQTT conectado. A permissão `iot:DeleteConnection` é conferida sempre que é feita uma solicitação para desconectar um cliente à força. Quando você desconecta um cliente, AWS IoT Core fecha a conexão de rede do cliente e, opcionalmente, limpa o estado da sessão.

`iot:GetRetainedMessage`  
Representa a permissão para obter o conteúdo de uma única mensagem retida. As mensagens retidas são as mensagens que foram publicadas com o sinalizador RETAIN definido e armazenadas por AWS IoT Core. Para receber permissão para obter uma lista de todas as mensagens retidas da conta, consulte [iot:ListRetainedMessages](#action_listretainedmessages).

`iot:ListRetainedMessages`  
Representa a permissão para recuperar informações resumidas sobre as mensagens retidas da conta, mas não o conteúdo das mensagens. As mensagens retidas são as mensagens que foram publicadas com o sinalizador RETAIN definido e armazenadas por AWS IoT Core. O ARN do recurso especificado para essa ação deve ser `*`. Para receber permissão para obter o conteúdo de uma única mensagem retida, consulte [iot:GetRetainedMessage](#action_getretainpublish).

`iot:Publish`  
Representa a permissão para publicar um tópico MQTT. Essa permissão é verificada sempre que uma solicitação PUBLICAR é enviada ao operador. Isso pode ser usado para permitir que os clientes publiquem padrões de tópicos específicos.  
Para conceder a permissão `iot:Publish`, conceda também a permissão `iot:Connect`.

`iot:Receive`  
Representa a permissão para receber uma mensagem de AWS IoT Core. A permissão `iot:Receive` é confirmada sempre que uma mensagem é entregue a um cliente. Uma vez que essa permissão é verificada em cada entrega, você pode usá-la para revogar permissões para clientes que estejam inscritos em um tópico.

`iot:RetainPublish`  
Representa a permissão para publicar uma mensagem MQTT com o sinalizador RETAIN definido.  
Para conceder a permissão `iot:RetainPublish`, conceda também a permissão `iot:Publish`.

`iot:Subscribe`  
Representa a permissão para se inscrever em um filtro de tópico. Essa permissão é verificada sempre que uma solicitação SUBSCRIBE é enviada ao operador. Use para permitir que os clientes se inscrevam em tópicos que correspondam a padrões de tópico específicos.  
Para conceder a permissão `iot:Subscribe`, conceda também a permissão `iot:Connect`.Ações da política de sombra do dispositivo

`iot:DeleteThingShadow`  
Representa a permissão para excluir a sombra do dispositivo de um objeto. A permissão `iot:DeleteThingShadow` é verificada sempre que é feita uma solicitação para excluir o conteúdo da sombra do dispositivo de um objeto.

`iot:GetThingShadow`  
Representa a permissão para recuperar a sombra do dispositivo de um objeto. A permissão `iot:GetThingShadow` é verificada sempre que é feita uma solicitação para recuperar o conteúdo da sombra do dispositivo de um objeto.

`iot:ListNamedShadowsForThing`  
Representa a permissão para listar as sombras nomeadas de um objeto. A permissão `iot:ListNamedShadowsForThing` é verificada sempre que é feita uma solicitação para listar as sombras nomeadas de um objeto.

`iot:UpdateThingShadow`  
Representa a permissão para atualizar uma shadow de dispositivo. A permissão `iot:UpdateThingShadow` é verificada sempre que é feita uma solicitação para atualizar o conteúdo da sombra do dispositivo de um objeto.

**nota**  
As ações da política de execução de trabalhos se aplicam apenas ao endpoint HTTP TLS. Se você usar o endpoint MQTT, deverá usar as ações de política do MQTT definidas neste tópico.  
Para ver um exemplo de uma política de execução de tarefas que demonstra isso, consulte o [Exemplo básico de políticas de trabalho](basic-jobs-example.md) que funciona com o protocolo MQTT.Ações da AWS IoT Core Política de Execução de Job

`iotjobsdata:DescribeJobExecution`  
Representa a permissão para recuperar uma execução de trabalho para uma determinado objeto. A permissão `iotjobsdata:DescribeJobExecution` é verificada sempre que é feita uma solicitação para obter uma execução de tarefa.

`iotjobsdata:GetPendingJobExecutions`  
Representa a permissão para recuperar a lista de trabalhos que não estão em status terminal para um objeto. A permissão `iotjobsdata:GetPendingJobExecutions` é verificada sempre que é feita uma solicitação para recuperar a lista. 

`iotjobsdata:UpdateJobExecution`  
Representa a permissão para atualizar uma execução de trabalho. A permissão `iotjobsdata:UpdateJobExecution` é verificada sempre que é feita uma solicitação para atualizar o estado de uma execução de trabalho.

`iotjobsdata:StartNextPendingJobExecution`  
Representa a permissão para obter e iniciar a próxima execução de trabalho pendente para um objeto. (Isto é, para atualizar uma execução de tarefa com status QUEUED para IN\$1PROGRESS). A permissão `iotjobsdata:StartNextPendingJobExecution` é verificada sempre que é feita uma solicitação para iniciar a próxima execução de trabalho pendente.AWS IoT Core Ação da política do provedor de credenciais

`iot:AssumeRoleWithCertificate`  
Representa a permissão para chamar o provedor de AWS IoT Core credenciais para assumir uma função do IAM com autenticação baseada em certificado. A `iot:AssumeRoleWithCertificate` permissão é verificada sempre que uma solicitação é feita ao provedor de AWS IoT Core credenciais para assumir uma função.

# AWS IoT Core recursos de ação
<a name="iot-action-resources"></a>

Para especificar um recurso para uma ação AWS IoT Core política, use o Amazon Resource Name (ARN) do recurso. Todos os recursos ARNs seguem o seguinte formato:

```
arn:partition:iot:region:AWS-account-ID:Resource-type/Resource-name
```

A tabela a seguir mostra o recurso a ser especificado para cada tipo de ação. Os exemplos de ARN são para o ID da conta `123456789012`, na partição `aws`, e específicos para a região `us-east-1`. Para obter mais informações sobre os formatos para ARNs, consulte [Amazon Resource Names (ARNs)](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference-arns.html) no Guia AWS Identity and Access Management do usuário.


| Ação | Tipo de atributo | Nome do recurso | Exemplo de ARN | 
| --- | --- | --- | --- | 
| iot:Connect | client |  O ID do cliente  | arn:aws:iot:us-east-1:123456789012:client/myClientId | 
| iot:DeleteConnection | client |  O ID do cliente  | arn:aws:iot:us-east-1:123456789012:client/myClientId | 
| iot:DeleteThingShadow | thing |  O nome do objeto e da sombra, se aplicável  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iotjobsdata:DescribeJobExecution | thing |  O nome do objeto  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iotjobsdata:GetPendingJobExecutions | thing |  O nome do objeto  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:GetRetainedMessage | topic |  Um tópico de mensagem retida  |  arn:aws:iot:us-east-1:123456789012:topic/myTopicName  | 
| iot:GetThingShadow | thing |  O nome do objeto e da sombra, se aplicável  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iot:ListNamedShadowsForThing | Todos | Todos |  \$1 | 
| iot:ListRetainedMessages | Todos | Todos |  \$1 | 
| iot:Publish | topic |  Uma string de tópico  | arn:aws:iot:us-east-1:123456789012:topic/myTopicName | 
| iot:Receive | topic |  Uma string de tópico  | arn:aws:iot:us-east-1:123456789012:topic/myTopicName | 
| iot:RetainPublish | topic |  Um tópico para publicar com o sinalizador RETAIN definido  |  arn:aws:iot:us-east-1:123456789012:topic/myTopicName  | 
| iotjobsdata:StartNextPendingJobExecution | thing |  O nome do objeto  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:Subscribe | topicfilter | Uma string de filtro de tópico | arn:aws:iot:us-east-1:123456789012:topicfilter/myTopicFilter | 
| iotjobsdata:UpdateJobExecution | thing |  O nome do objeto  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:UpdateThingShadow | thing |  O nome do objeto e da sombra, se aplicável  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iot:AssumeRoleWithCertificate | rolealias |  Um alias do perfil que aponta para um ARN de perfil  |  arn:aws:iot:us-east-1:123456789012:rolealias/CredentialProviderRole\$1alias | 

# AWS IoT Core variáveis de política
<a name="iot-policy-variables"></a>

AWS IoT Core define variáveis de política que podem ser usadas em AWS IoT Core políticas no `Condition` bloco `Resource` or. Quando uma política é avaliada, as variáveis da política são substituídas por valores reais. Por exemplo, se um dispositivo estiver conectado ao agente de AWS IoT Core mensagens com uma ID de cliente de 100-234-3456, a variável de política será substituída no documento `iot:ClientId` de política por 100-234-3456.

AWS IoT Core as políticas podem usar caracteres curinga e seguir uma convenção semelhante às políticas do IAM. A inserção de um `*` (asterisco) na string pode ser tratada como um curinga, correspondendo a qualquer caractere. Por exemplo, você pode usar `*` para descrever vários nomes de tópicos do MQTT no atributo do `Resource` de uma política. Os caracteres `+` e `#` são tratados como sequências literais em uma política. Para ver um exemplo de política que mostra como usar curingas, consulte [Usando caracteres curinga no MQTT e nas políticas AWS IoT Core](pub-sub-policy.md#pub-sub-policy-cert).

Você também pode usar variáveis de políticas predefinidas com valores fixos para representar caracteres que, de outra forma, têm um significado especial. Esses caracteres especiais incluem `$(*)`, `$(?)` e `$($)`. Para obter mais informações sobre variáveis de política e os caracteres especiais, consulte [Elementos de política do IAM: variáveis e tags](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html) e [Criação de uma condição com várias chaves ou valores](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html).

**Topics**
+ [Variáveis AWS IoT Core políticas básicas](basic-policy-variables.md)
+ [Variáveis de política de objetos](thing-policy-variables.md)
+ [Variáveis de política de certificado AWS IoT Core X.509](cert-policy-variables.md)

# Variáveis AWS IoT Core políticas básicas
<a name="basic-policy-variables"></a>

AWS IoT Core define as seguintes variáveis básicas de política:
+ `aws:SourceIp`: o endereço IP do cliente conectado ao agente de AWS IoT Core mensagens.
+ `iot:ClientId`: o ID do cliente usado para se conectar ao agente de mensagens do AWS IoT Core .
+ `iot:DomainName`: o nome de domínio do cliente conectado AWS IoT Core a.

**Topics**
+ [Exemplos de variáveis de política `ClientId` e `SourceIp`](#basic-policy-variables-example)
+ [Exemplos de variável de política `iot:DomainName`](#basic-policy-variables-example-domain)

## Exemplos de variáveis de política `ClientId` e `SourceIp`
<a name="basic-policy-variables-example"></a>

A AWS IoT Core política a seguir mostra uma política que usa variáveis de política. `aws:SourceIp`pode ser usado no elemento Condição da sua política para permitir que os diretores façam solicitações de API somente dentro de um intervalo de endereços específico. Para obter exemplos, consulte [Autorizando usuários e serviços em nuvem a usar o Jobs AWS IoT](iam-policy-users-jobs.md).

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/clientid1"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}"
			],
			"Condition": {
				"IpAddress": {
					"aws:SourceIp": "123.45.167.89"
				}
			}
		}
	]
}
```

Nesses exemplos, `${iot:ClientId}` é substituído pelo ID do cliente conectado ao agente de AWS IoT Core mensagens quando a política é avaliada. Quando você usa variáveis de políticas, como `${iot:ClientId}`, você pode abrir acidentalmente o acesso a tópicos não intencionais. Por exemplo, se você usa uma política que usa `${iot:ClientId}` para especificar um filtro de tópico:

```
{
	"Effect": "Allow",
	"Action": [
		"iot:Subscribe"
	],
	"Resource": [
		"arn:aws:iot:us-east-1:123456789012:topicfilter/my/${iot:ClientId}/topic"
	]
}
```

Um cliente pode se conectar usando `+` como o ID do cliente. Isso permitiria que o usuário se inscrevesse em qualquer tópico que correspondesse ao filtro de tópico `my/+/topic`. Para se proteger contra essas falhas de segurança, use a ação `iot:Connect` de política para controlar qual cliente IDs pode se conectar. Por exemplo, essa política permite que apenas clientes cujo ID é `clientid1` se conectem:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/clientid"
			]
		}
	]
}
```

**nota**  
Não é recomendável usar a variável de política `${iot:ClientId}` com `Connect`. Não há verificação do valor de `ClientId`; portanto, um anexador com um ID de cliente diferente pode passar na validação, mas causar a desconexão. Como qualquer `ClientId` é permitido, definir um ID de cliente aleatório pode ignorar as políticas do grupo de objetos.

## Exemplos de variável de política `iot:DomainName`
<a name="basic-policy-variables-example-domain"></a>

Você pode adicionar a variável de política `iot:DomainName` para restringir quais domínios podem ser usados. Adicionar a variável de política `iot:DomainName` permite que os dispositivos se conectem apenas a endpoints configurados específicos.

A política a seguir permite que os dispositivos se conectem ao domínio especificado.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": {
		"Sid": "AllowConnectionsToSpecifiedDomain",
		"Effect": "Allow",
		"Action": [
			"iot:Connect"
		],
		"Resource": "arn:aws:iot:us-east-1:123456789012:client/clientid",
		"Condition": {
			"StringEquals": {
				"iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com"
			}
		}
	}
}
```

A política a seguir nega que os dispositivos se conectem ao domínio especificado.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": {
		"Sid": "DenyConnectionsToSpecifiedDomain",
		"Effect": "Deny",
		"Action": [
			"iot:Connect"
		],
		"Resource": "arn:aws:iot:us-east-1:123456789012:client/clientid",
		"Condition": {
			"StringEquals": {
				"iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com"
			}
		}
	}
}
```

Para obter mais informações sobre operadores de condição de política, consulte [Elementos de política JSON do IAM: operadores de condição](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_condition_operators.html). Para obter mais informações sobre configurações de domínio, consulte [O que é uma configuração de domínio?](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html).

# Variáveis de política de objetos
<a name="thing-policy-variables"></a>

As variáveis de política de coisas permitem que você escreva AWS IoT Core políticas que concedam ou neguem permissões com base em propriedades de coisas, como nomes de coisas, tipos de coisas e valores de atributos de coisas. Você pode usar variáveis de política de coisas para aplicar a mesma política para controlar vários AWS IoT Core dispositivos. Para obter mais informações sobre o provisionamento de dispositivos, consulte [Provisionamento de dispositivos](iot-provision.html).

Se você usa uma associação de coisa não exclusiva, pode anexar o mesmo certificado a várias coisas. Para manter uma associação clara e evitar possíveis conflitos, você deve combinar seu ID de cliente com o nome da coisa. Nesse caso, você obtém o nome da coisa do ID do cliente na `Connect` mensagem MQTT enviada quando uma coisa se conecta a. AWS IoT Core

Lembre-se do seguinte ao usar variáveis de política de objetos em políticas do AWS IoT Core .
+ Use a [AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html)API para anexar certificados ou entidades principais (identidades autenticadas do Amazon Cognito) a uma coisa.
+ Se houver uma associação de coisa exclusiva implementada, quando você estiver substituindo nomes de coisas por variáveis de política de coisas, o valor de `clientId` na mensagem de conexão do MQTT ou a conexão TLS deverá corresponder exatamente ao nome da coisa.

As variáveis de política de objetos a seguir estão disponíveis:
+ `iot:Connection.Thing.ThingName`

  Isso se resume ao nome da coisa no AWS IoT Core registro para a qual a política está sendo avaliada. AWS IoT Core usa o certificado que o dispositivo apresenta ao se autenticar para determinar qual coisa usar para verificar a conexão. Essa variável de política só está disponível quando um dispositivo se conecta pelo MQTT ou pelo MQTT pelo WebSocket protocolo.
+ `iot:Connection.Thing.ThingTypeName`

  Isso resolve o tipo de objeto associado ao objeto para a qual a política está sendo avaliada. O ID do cliente da WebSocket conexão MQTT/ deve ser igual ao nome da coisa. Essa variável de política está disponível somente ao se conectar pelo MQTT ou pelo MQTT pelo WebSocket protocolo.
+ `iot:Connection.Thing.Attributes[attributeName]`

  Isso resolve o valor do atributo especificado associado ao objeto para a qual a política está sendo avaliada. Um objeto pode ter até 50 atributos. Cada atributo está disponível como uma variável de política: `iot:Connection.Thing.Attributes[attributeName]` onde *attributeName* está o nome do atributo. O ID do cliente da MQTT/WebSocket conexão deve ser igual ao nome da coisa. Essa variável de política só está disponível ao se conectar pelo MQTT ou pelo MQTT pelo WebSocket protocolo.
+ `iot:Connection.Thing.IsAttached`

  `iot:Connection.Thing.IsAttached: ["true"]`determina que somente os dispositivos registrados AWS IoT e conectados ao principal possam acessar as permissões dentro da política. Você pode usar essa variável para impedir que um dispositivo se conecte AWS IoT Core se ele apresentar um certificado que não esteja anexado a uma coisa de IoT no AWS IoT Core registro. Essa variável tem valores `true` ou `false` indica que a coisa conectada está anexada ao certificado ou à identidade do Amazon Cognito no registro usando a API. [AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html) O nome do objeto é usado como ID do cliente. 

Se o ID do cliente corresponder ao nome da coisa ou se você anexar seu certificado exclusivamente a uma coisa, o uso de variáveis na definição da política pode simplificar o gerenciamento de políticas. Em vez de criar políticas individuais para cada coisa da IoT, você pode definir uma única política usando as variáveis de política da coisa. É possível aplicar essa política a todos os dispositivos de forma dinâmica. Veja a seguir um exemplo de política para mostrar como funciona. Para obter mais informações, consulte [Associando qualquer AWS IoT coisa a uma conexão de cliente MQTT](exclusive-thing.md).

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Condition": {
				"StringLike": {
					"iot:ClientId": "*${iot:Connection.Thing.Attributes[envType]}"
				}
			},
			"Effect": "Allow",
			"Action": "iot:Connect",
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/*"
		}
	]
}
```

Esse exemplo de política permite que as coisas se conectem AWS IoT Core se o ID do cliente terminar com o valor do `envType` atributo. Somente coisas com um padrão de ID de cliente correspondente poderão se conectar.

# Variáveis de política de certificado AWS IoT Core X.509
<a name="cert-policy-variables"></a>

As variáveis de política de certificado X.509 ajudam na criação AWS IoT Core de políticas. Essas políticas concedem permissões com base nos atributos do certificado X.509. As seções a seguir descrevem como usar essas variáveis de política de certificado.

**Importante**  
Se seu certificado X.509 não incluir um atributo de certificado específico, mas a variável de política de certificado correspondente for usada em seu documento de política, a avaliação da política poderá levar a um comportamento inesperado.

## CertificateId
<a name="cert-policy-variables-certid"></a>

Na [RegisterCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCertificate.html)API, o `certificateId` aparece no corpo da resposta. Para obter informações sobre seu certificado, use o `certificateId` in [DescribeCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeCertificate.html).

## Atributos de emissor
<a name="issuer-attributes"></a>

As variáveis AWS IoT Core de política a seguir oferecem suporte à permissão ou negação de permissões, com base nos atributos do certificado definidos pelo emissor do certificado.
+ `iot:Certificate.Issuer.DistinguishedNameQualifier`
+ `iot:Certificate.Issuer.Country`
+ `iot:Certificate.Issuer.Organization`
+ `iot:Certificate.Issuer.OrganizationalUnit`
+ `iot:Certificate.Issuer.State`
+ `iot:Certificate.Issuer.CommonName`
+ `iot:Certificate.Issuer.SerialNumber`
+ `iot:Certificate.Issuer.Title`
+ `iot:Certificate.Issuer.Surname`
+ `iot:Certificate.Issuer.GivenName`
+ `iot:Certificate.Issuer.Initials`
+ `iot:Certificate.Issuer.Pseudonym`
+ `iot:Certificate.Issuer.GenerationQualifier` 

## Atributos de assunto
<a name="subject-attributes"></a>

As variáveis AWS IoT Core de política a seguir oferecem suporte à concessão ou negação de permissões, com base nos atributos do titular do certificado definidos pelo emissor do certificado.
+ `iot:Certificate.Subject.DistinguishedNameQualifier`
+ `iot:Certificate.Subject.Country`
+ `iot:Certificate.Subject.Organization`
+ `iot:Certificate.Subject.OrganizationalUnit`
+ `iot:Certificate.Subject.State`
+ `iot:Certificate.Subject.CommonName`
+ `iot:Certificate.Subject.SerialNumber`
+ `iot:Certificate.Subject.Title`
+ `iot:Certificate.Subject.Surname`
+ `iot:Certificate.Subject.GivenName`
+ `iot:Certificate.Subject.Initials`
+ `iot:Certificate.Subject.Pseudonym`
+ `iot:Certificate.Subject.GenerationQualifier` 

Os certificados X.509 dão a esses atributos a opção de conter um ou mais valores. Por padrão, as variáveis de política para cada atributo multivalor retornam o primeiro valor. Por exemplo, o atributo `Certificate.Subject.Country` pode conter uma lista de nomes de países, mas, quando avaliado em uma política, `iot:Certificate.Subject.Country` é substituído pelo primeiro nome do país.

É possível solicitar um valor de atributo específico diferente do primeiro valor usando um índice baseado em um. Por exemplo, `iot:Certificate.Subject.Country.1` é substituído pelo segundo nome de país no atributo `Certificate.Subject.Country`. Se você especificar um valor de índice que não existe (por exemplo, se você solicitar um terceiro valor quando há apenas dois valores atribuídos ao atributo), nenhuma substituição será feita e haverá falha na autorização. Você pode usar o sufixo `.List` no nome da variável de política para especificar todos os valores do atributo.

## Atributos de nome alternativo do emissor
<a name="issuer-alternate-name-attributes"></a>

As variáveis AWS IoT Core de política a seguir oferecem suporte à concessão ou negação de permissões, com base nos atributos de nome alternativo do emissor definidos pelo emissor do certificado.
+ `iot:Certificate.Issuer.AlternativeName.RFC822Name`
+ `iot:Certificate.Issuer.AlternativeName.DNSName`
+ `iot:Certificate.Issuer.AlternativeName.DirectoryName`
+ `iot:Certificate.Issuer.AlternativeName.UniformResourceIdentifier`
+ `iot:Certificate.Issuer.AlternativeName.IPAddress`

## Atributos de nome alternativo do assunto
<a name="subject-alternate-name-attributes"></a>

As variáveis AWS IoT Core de política a seguir oferecem suporte à concessão ou negação de permissões, com base nos atributos de nome alternativo do sujeito definidos pelo emissor do certificado.
+ `iot:Certificate.Subject.AlternativeName.RFC822Name`
+ `iot:Certificate.Subject.AlternativeName.DNSName`
+ `iot:Certificate.Subject.AlternativeName.DirectoryName`
+ `iot:Certificate.Subject.AlternativeName.UniformResourceIdentifier`
+ `iot:Certificate.Subject.AlternativeName.IPAddress`

## Outros atributos
<a name="other-attributes"></a>

Você pode usar `iot:Certificate.SerialNumber` para permitir ou negar acesso aos AWS IoT Core recursos, com base no número de série de um certificado. A variável de política `iot:Certificate.AvailableKeys` contém o nome de todas as variáveis de política de certificado que contenham valores.

# Usar variáveis de política do certificado X.509
<a name="use-policy-variables"></a>

Este tópico fornece detalhes sobre como usar variáveis de política de certificados. As variáveis de política do certificado X.509 são essenciais quando você cria políticas do AWS IoT Core que dão permissões com base em atributos do certificado X.509. Se seu certificado X.509 não incluir um atributo de certificado específico, mas a variável de política de certificado correspondente for usada em seu documento de política, a avaliação da política poderá levar a um comportamento inesperado. Isso ocorre porque a variável de política ausente não é avaliada na declaração de política.

**Topics**
+ [Exemplo de certificado X.509](#certificate-example)
+ [Usar atributos do emissor de certificados como variáveis de política de certificados](#issuer-attributes-policy)
+ [Usar atributos do sujeito do certificado como variáveis de política de certificados](#subject-attributes-policy)
+ [Usar atributos de nome alternativo do emissor de certificados como variáveis de política de certificados](#issuer-alternate-name-attributes-policy)
+ [Usar atributos de nome alternativo do sujeito do certificado como variáveis de política de certificados](#subject-alternate-name-attributes-policy)
+ [Usar outro atributo de certificado como uma variável de política de certificado](#other-attributes-policy)
+ [Limitações das variáveis de política de certificado X.509](#policy-limits)
+ [Exemplo de políticas usando variáveis de política de certificado](#example-attributes-policy)

## Exemplo de certificado X.509
<a name="certificate-example"></a>

Um certificado X.509 típico pode aparecer da seguinte forma. Este exemplo de certificado inclui atributos de certificado. Durante a avaliação das políticas do AWS IoT Core , os seguintes atributos de certificado serão preenchidos como variáveis de política de certificado: `Serial Number`, `Issuer`, `Subject`, `X509v3 Issuer Alternative Name` e `X509v3 Subject Alternative Name`.

```
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            92:12:85:cb:b7:a5:e0:86
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=IoT Devices, OU=SmartHome, ST=WA, CN=IoT Devices Primary CA, 
				GN=Primary CA1/initials=XY/dnQualifier=Example corp,
				SN=SmartHome/ title=CA1/pseudonym=Primary_CA/generationQualifier=2/serialNumber=987		
        Validity
            Not Before: Mar 26 03:25:40 2024 GMT
            Not After : Apr 28 03:25:40 2025 GMT
        Subject: C=US, O=IoT Devices, OU=LightBulb, ST=NY, CN=LightBulb Device Cert, 
				GN=Bulb/initials=ZZ/dnQualifier=Bulb001, 
				SN=Multi Color/title=RGB/pseudonym=RGB Device/generationQualifier=4/serialNumber=123
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    << REDACTED >>
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Key Usage: 
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Subject Alternative Name: 
                DNS:example.com, IP Address:1.2.3.4, URI:ResourceIdentifier001, email:device1@example.com, DirName:/C=US/O=IoT/OU=SmartHome/CN=LightBulbCert
            X509v3 Issuer Alternative Name: 
                DNS:issuer.com, IP Address:5.6.7.8, URI:PrimarySignerCA, email:primary@issuer.com, DirName:/C=US/O=Issuer/OU=IoT Devices/CN=Primary Issuer CA
    Signature Algorithm: sha256WithRSAEncryption
         << REDACTED >>
```

## Usar atributos do emissor de certificados como variáveis de política de certificados
<a name="issuer-attributes-policy"></a>

A tabela a seguir fornece detalhes de como os atributos do emissor do certificado serão preenchidos em uma AWS IoT Core política.


**Atributos do emissor a serem preenchidos em uma política**  

| Atributos do emissor do certificado | Variáveis de política do certificado | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/use-policy-variables.html)  | 

## Usar atributos do sujeito do certificado como variáveis de política de certificados
<a name="subject-attributes-policy"></a>

A tabela a seguir fornece detalhes de como os atributos do titular do certificado serão preenchidos em uma AWS IoT Core política.


**Atributos do sujeito a serem preenchidos em uma política**  

| Atributos do sujeito do certificado | Variáveis de política do certificado | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/use-policy-variables.html)  | 

## Usar atributos de nome alternativo do emissor de certificados como variáveis de política de certificados
<a name="issuer-alternate-name-attributes-policy"></a>

A tabela a seguir fornece detalhes de como os atributos de nome alternativo do emissor do certificado serão preenchidos em uma política do AWS IoT Core .


**Atributos de nome alternativo do emissor a serem preenchidos em uma política**  

| Nome alternativo do emissor X509v3 | Atributo em uma política | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/use-policy-variables.html)  | 

## Usar atributos de nome alternativo do sujeito do certificado como variáveis de política de certificados
<a name="subject-alternate-name-attributes-policy"></a>

A tabela a seguir fornece detalhes de como os atributos de nome alternativo do sujeito do certificado serão preenchidos em uma política do AWS IoT Core .


**Atributos de nome alternativo do sujeito a serem preenchidos em uma política**  

| Nome alternativo do assunto X509v3 | Atributo em uma política | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/use-policy-variables.html)  | 

## Usar outro atributo de certificado como uma variável de política de certificado
<a name="other-attributes-policy"></a>

A tabela a seguir fornece detalhes de como outros atributos do certificado serão preenchidos em uma AWS IoT Core política.


**Outros atributos a serem preenchidos em uma política**  

| Outro atributo do certificado | Variável de política do certificado | 
| --- | --- | 
|  `Serial Number: 92:12:85:cb:b7:a5:e0:86`  |  `iot:Certificate.SerialNumber = 10525622389124227206`  | 

## Limitações das variáveis de política de certificado X.509
<a name="policy-limits"></a>

As limitações a seguir se aplicam às variáveis de política de certificado X.509:

Variáveis de política ausentes  
Se seu certificado X.509 não incluir um atributo de certificado específico, mas a variável de política de certificado correspondente for usada em seu documento de política, a avaliação da política poderá levar a um comportamento inesperado. Isso ocorre porque a variável de política ausente não é avaliada na declaração de política.

 SerialNumber Formato do certificado  
AWS IoT Core trata o número de série do certificado como a representação em cadeia de um número inteiro decimal. Por exemplo, se uma política só permite conexões com a ID do cliente correspondente ao número de série do certificado, o ID do cliente deve ser o número de série em formato decimal.

Curingas  
Se caracteres curinga estiverem presentes em atributos de certificado, a variável de política não será substituída pelo valor do atributo do certificado. Isso deixará o texto `${policy-variable}` no documento de política. Isso pode causar falha de autorização. Os seguintes caracteres curinga podem ser usados: `*`, `$`, `+`, `?` e `#`.

Campos da matriz  
Os atributos de certificado que contêm matrizes estão limitados a cinco itens. Os itens adicionais são ignorados.

Tamanho da segmento  
Todos os valores de string são limitados a 1024 caracteres. Se um atributo de certificado tiver uma sequência com mais de 1024 caracteres, a variável de política não será substituída pelo valor do atributo do certificado. Isso deixará o `${policy-variable}` no documento de política. Isso pode causar falha de autorização.

Caracteres especiais  
Qualquer caractere especial, como `,`, `"`, `\`, `+`, `=`, `<`, `>` e `;`, deve ser prefixado com uma barra invertida (`\`) quando usado em uma variável de política. Por exemplo, `Amazon Web Services O=Amazon.com Inc. L=Seattle ST=Washington C=US` torna-se `Amazon Web Service O\=Amazon.com Inc. L\=Seattle ST\=Washington C\=US`.

## Exemplo de políticas usando variáveis de política de certificado
<a name="example-attributes-policy"></a>

O documento de política a seguir permite conexões com o ID do cliente que corresponde ao número de série do certificado e a publicação no tópico que corresponde ao padrão: `${iot:Certificate.Subject.Organization}/device-stats/${iot:ClientId}/*`. 

**Importante**  
Se seu certificado X.509 não incluir um atributo de certificado específico, mas a variável de política de certificado correspondente for usada em seu documento de política, a avaliação da política poderá levar a um comportamento inesperado. Isso ocorre porque a variável de política ausente não é avaliada na declaração de política. Por exemplo, se você anexar o seguinte documento de política a um certificado que não contém o atributo `iot:Certificate.Subject.Organization`, as variáveis da política do certificado `iot:Certificate.Subject.Organization` não serão preenchidas durante a avaliação da política.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Certificate.SerialNumber}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.Organization}/device-stats/${iot:ClientId}/*"
			]
		}
	]
}
```

Você também pode usar o [operador de condição Null](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null) para garantir que as variáveis de política de certificado usadas em uma política sejam preenchidas durante a avaliação da política. O documento de política a seguir permite `iot:Connect` com certificados somente quando os atributos Número de Série do Certificado e Nome Comum do Assunto do Certificado estão presentes.

Todas as variáveis da política de certificado têm valores String, portanto, há suporte para todos os [Operadores de condição string](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String).

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/*"
			],
			"Condition": {
				"Null": {
					"iot:Certificate.SerialNumber": "false",
					"iot:Certificate.Subject.CommonName": "false"
				}
			}
		}
	]
}
```

# Prevenção contra o ataque do “substituto confuso” em todos os serviços
<a name="cross-service-confused-deputy-prevention"></a>

O *problema “confused deputy”* é um problema de segurança em que uma entidade que não tem permissão para executar uma ação pode coagir uma entidade mais privilegiada a executá-la. Em AWS, a falsificação de identidade entre serviços pode resultar no problema confuso do deputado. A personificação entre serviços pode ocorrer quando um serviço (o *serviço de chamada*) chama outro serviço (o *serviço chamado*). O serviço de chamada pode ser manipulado de modo a usar suas permissões para atuar nos recursos de outro cliente de uma forma na qual ele não deveria ter permissão para acessar. Para evitar isso, a AWS fornece ferramentas que ajudam você a proteger seus dados para todos os serviços com entidades principais de serviço que receberam acesso aos recursos em sua conta. 

Para limitar as permissões que AWS IoT concedem outro serviço ao recurso, recomendamos usar as chaves de contexto de condição [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)global [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)e as chaves de contexto nas políticas de recursos. Se você utilizar ambas as chaves de contexto de condição global, o valor `aws:SourceAccount` e a conta `aws:SourceArn` no valor deverão utilizar o mesmo ID de conta quando utilizados na mesma instrução de política.

A maneira mais eficaz de se proteger contra o problema substituto confuso é usar a chave de contexto de condição global `aws:SourceArn` com o nome do recurso da Amazon (ARN) completo do recurso. Para AWS IoT, você `aws:SourceArn` deve estar em conformidade com o formato: `arn:aws:iot:region:account-id:resource-type/resource-id` para permissões específicas de recursos ou`arn:aws:iot:region:account-id:*`. O resource-id pode ser o nome ou ID do recurso permitido ou uma declaração curinga do recurso permitido. IDs Certifique-se de que *region* corresponda à sua AWS IoT região e que *account-id* corresponda ao ID da sua conta de cliente. 

O exemplo a seguir mostra como evitar o confuso problema adjunto usando as chaves de contexto de condição `aws:SourceAccount` global `aws:SourceArn` e as chaves de contexto na política de confiança da AWS IoT função. Para obter mais exemplos, consulte [Exemplos detalhados de prevenção contra representante confuso](#cross-service-confused-deputy-prevention-examples).

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:*"
        }
         }
      }
   ]
}
```

**nota**  
Se você receber erros de negação de acesso, talvez a integração do serviço com o AWS Security Token Service (STS) não aceite as chaves de contexto `aws:SourceArn` e `aws:SourceAccount`.

## Exemplos detalhados de prevenção contra representante confuso
<a name="cross-service-confused-deputy-prevention-examples"></a>

**Esta seção fornece exemplos detalhados de como evitar o confuso problema adjunto usando as chaves de contexto de condição `aws:SourceAccount` global `aws:SourceArn` e as chaves de contexto na política de confiança da AWS IoT função.**
+ [Provisionamento de frotas](#cross-service-confused-deputy-prevention-fleet-provision)
+ [JITP](#cross-service-confused-deputy-prevention-JITP)
+ [Provedor de credencial](#cross-service-confused-deputy-prevention-credential-provider)

### Provisionamento de frotas
<a name="cross-service-confused-deputy-prevention-fleet-provision"></a>

Você pode configurar o [provisionamento da frota](https://docs.aws.amazon.com/iot/latest/developerguide/iot-provision.html) usando um recurso de modelo de provisionamento. Quando um modelo de provisionamento faz referência a uma função de provisionamento, a política de confiança dessa função pode incluir as chaves de condição `aws:SourceArn` e `aws:SourceAccount`. Essas chaves limitam os recursos para os quais a configuração pode invocar a solicitação `sts:AssumeRole`.

A função com a política de confiança a seguir só pode ser assumida pela entidade principal de IoT (`iot.amazonaws.com`) para o modelo de provisionamento especificado no `SourceArn`.

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:provisioningtemplate/example_template"
        }
         }
      }
   ]
}
```

### JITP
<a name="cross-service-confused-deputy-prevention-JITP"></a>

No [just-in-time provisionamento (JITP)](https://docs.aws.amazon.com//iot/latest/developerguide/jit-provisioning.html), você pode usar o modelo de provisionamento como um recurso separado da CA ou definir o corpo do modelo e a função como parte da configuração do certificado da CA. O valor da política de confiança `aws:SourceArn` na AWS IoT função depende de como você define o modelo de provisionamento.

#### Definir o modelo de provisionamento como um recurso separado
<a name="cross-service-confused-deputy-prevention-JITP-template"></a>

Se você definir seu modelo de provisionamento como um recurso separado, o valor de `aws:SourceArn` poderá ser `"arn:aws:iot:region:account-id:provisioningtemplate/example_template"`. Você pode usar o mesmo exemplo de política em [Provisionamento de frotas](#cross-service-confused-deputy-prevention-fleet-provision).

#### Definir o modelo de provisionamento em um certificado de CA
<a name="cross-service-confused-deputy-prevention-JITP-CA"></a>

Se você definir seu modelo de provisionamento em um recurso de certificado de CA, o valor de `aws:SourceArn` poderá ser `"arn:aws:iot:region:account-id:cacert/cert_id"` ou `"arn:aws:iot:region:account-id:cacert/*"`. Você pode usar um caractere curinga quando o identificador do recurso, como a ID de um certificado de CA, é desconhecido no momento da criação.

A função com a política de confiança a seguir só pode ser assumida pela entidade principal de IoT (`iot.amazonaws.com`) para o certificado de CA especificado no `SourceArn`.

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:cacert/8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e"
        }
         }
      }
   ]
}
```

Ao criar um certificado de CA, você pode referenciar uma função de provisionamento na configuração do registro. A política de confiança da função de provisionamento pode usar `aws:SourceArn` para restringir para quais recursos a função pode ser assumida. [No entanto, durante a CACertificate chamada de registro inicial para registrar o certificado CA, você não teria o ARN do certificado CA para especificar na `aws:SourceArn` condição.](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html)

Para contornar isso, ou seja, especificar a política de confiança da função de aprovisionamento para o certificado de CA específico registrado AWS IoT Core, você pode fazer o seguinte:
+ Primeiro, chame [Register CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) sem fornecer o `RegistrationConfig` parâmetro.
+ Depois que o certificado CA for registrado AWS IoT Core, chame [Atualizar CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html) nele.

  Na CACertificate chamada de atualização, forneça uma `RegistrationConfig` que inclua a política de confiança da função de provisionamento `aws:SourceArn` definida como o ARN do certificado CA recém-registrado.

### Provedor de credencial
<a name="cross-service-confused-deputy-prevention-credential-provider"></a>

Para [provedor de AWS IoT Core credenciais](https://docs.aws.amazon.com//iot/latest/developerguide/authorizing-direct-aws.html), use o mesmo Conta da AWS que você usa para criar o alias de função em `aws:SourceAccount` e especifique uma instrução que corresponda ao ARN do recurso do tipo de recurso rolealias em. `aws:SourceArn` Ao criar uma função do IAM para uso com o provedor de AWS IoT Core credenciais, você deve incluir na `aws:SourceArn` condição todos os aliases ARNs de função que possam precisar assumir a função, autorizando assim a solicitação entre serviços. `sts:AssumeRole`

A função com a seguinte política de confiança só pode ser assumida pela entidade principal do provedor de credenciais do AWS IoT Core (`credentials.iot.amazonaws.com`) para o roleAlias especificado no `SourceArn`. Se uma entidade principal tentar recuperar as credenciais de um alias de função diferente do especificado na condição `aws:SourceArn`, a solicitação será negada, mesmo que esse outro alias de função faça referência ao mesmo perfil do IAM.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "credentials.iot.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:iot:us-east-1:123456789012:rolealias/example_rolealias"
        }
      }
    }
  ]
}
```

# AWS IoT Core exemplos de políticas
<a name="example-iot-policies"></a>

Os exemplos de políticas nesta seção ilustram os documentos de política usados para concluir tarefas comuns no AWS IoT Core. Você pode usá-los como exemplos para começar a criar as políticas para suas soluções.<a name="example-iot-policies-elements"></a>

Os exemplos desta seção usam as seguintes etapas:
+ [AWS IoT Core ações políticas](iot-policy-actions.md)
+ [AWS IoT Core recursos de ação](iot-action-resources.md)
+ [AWS IoT exemplos de políticas baseadas em identidade](security_iam_id-based-policy-examples.md)
+ [Variáveis AWS IoT Core políticas básicas](basic-policy-variables.md)
+ [Variáveis de política de certificado AWS IoT Core X.509](cert-policy-variables.md)

**Topics**
+ [Exemplos de política de conexão](connect-policy.md)
+ [Exemplos de política de publicação/inscrição](pub-sub-policy.md)
+ [Exemplos de política para conectar e publicar](connect-and-pub.md)
+ [Exemplos de políticas de mensagens retidas](retained-message-policy-examples.md)
+ [Exemplos de política de certificado](certificate-policy-examples.md)
+ [Exemplos de política de objetos](thing-policy-examples.md)
+ [Exemplo básico de políticas de trabalho](basic-jobs-example.md)

# Exemplos de política de conexão
<a name="connect-policy"></a>

A política a seguir nega permissão ao cliente IDs `client1` e à conexão AWS IoT Core, `client2` ao mesmo tempo em que permite que os dispositivos se conectem usando uma ID de cliente. O ID do cliente corresponde ao nome de uma coisa registrada no AWS IoT Core registro e anexada ao principal usado para conexão:

**nota**  
Para dispositivos registrados, recomendamos usar [variáveis de política de objetos](thing-policy-variables.md) para ações de `Connect` e anexar o objeto à entidade principal usada para a conexão.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/client1",
				"arn:aws:iot:us-east-1:123456789012:client/client2"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		}
	]
}
```

A política a seguir concede permissão para se conectar AWS IoT Core com o ID do cliente`client1`. Este exemplo de política é para dispositivos não registrados.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/client1"
			]
		}
	]
}
```

## Exemplos de políticas de sessões persistentes do MQTT
<a name="persistent-sessions-examples"></a>

O `connectAttributes` permite que você especifique quais atributos deseja usar na mensagem de conexão em suas políticas do IAM, como `PersistentConnect` e `LastWill`. Para obter mais informações, consulte [Uso do ConnectAttributes](mqtt.md#connect-attribute).

A política a seguir permite se conectar ao atributo `PersistentConnect`:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		}
	]
}
```

A política a seguir não permite `PersistentConnect`; outros atributos são permitidos:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringNotEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		}
	]
}
```

A política acima também pode ser expressa usando `StringEquals`; qualquer outro atributo é permitido, incluindo um novo:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1"
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

A política a seguir permite a conexão por `PersistentConnect` e `LastWill`; nenhum outro atributo novo é permitido:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect",
						"LastWill"
					]
				}
			}
		}
	]
}
```

A política a seguir permite a conexão limpa por clientes com ou sem `LastWill`; nenhum outro atributo será permitido:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "iot:Connect"
        ],
        "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
        "Condition": {
            "StringEquals": {
                "iot:ConnectAttributes": "LastWill"
        }
        }
    }]
}
```

A política a seguir só permite a conexão usando atributos padrão:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": []
				}
			}
		}
	]
}
```

A política a seguir permite a conexão somente com `PersistentConnect`; qualquer atributo novo é permitido, desde que a conexão use `PersistentConnect`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

A política a seguir afirma que a conexão deve usar `PersistentConnect` e `LastWill`; nenhum atributo novo é permitido:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect",
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": []
				}
			}
		}
	]
}
```

A política a seguir não pode ter `PersistentConnect`, mas pode ter `LastWill`; nenhum outro atributo novo é permitido:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "iot:ConnectAttributes": [
                        "LastWill"
                    ]
            }
        }
        }
    ]
}
```

A política a seguir permite a conexão somente por clientes que tenham um `LastWill` com o tópico `"my/lastwill/topicName"`; qualquer atributo é permitido, desde que use o tópico `LastWill`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ArnEquals": {
                "iot:LastWillTopic": "arn:aws:iot:us-east-1:123456789012:topic/my/lastwill/topicName"
            }
        }
        }
    ]
}
```

A política a seguir só permite a conexão limpa usando um `LastWillTopic`; qualquer atributo é permitido, desde que use o `LastWillTopic`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ArnEquals": {
                "iot:LastWillTopic": "arn:aws:iot:us-east-1:123456789012:topic/my/lastwill/topicName"
            }
        }
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

# Exemplos de política de publicação/inscrição
<a name="pub-sub-policy"></a>

A política que você usa depende de como você está se conectando AWS IoT Core. Você pode se conectar AWS IoT Core usando um cliente MQTT, HTTP ou WebSocket. Ao se conectar a um cliente MQTT, você está se autenticando com um certificado X.509. Ao se conectar via HTTP ou pelo WebSocket protocolo, você está se autenticando com o Signature versão 4 e o Amazon Cognito. 

**nota**  
Para dispositivos registrados, recomendamos usar [variáveis de política de objetos](thing-policy-variables.md) para ações de `Connect` e anexar o objeto à entidade principal usada para a conexão. 

**Topics**
+ [Usando caracteres curinga no MQTT e nas políticas AWS IoT Core](#pub-sub-policy-cert)
+ [Políticas para publicar, assinar e receber mensagens sobre tópicos to/from específicos](#pub-sub-specific-topic)
+ [Políticas para publicar, assinar e receber to/from tópicos de mensagens com um prefixo específico](#pub-sub-policy-specific-topic-prefix)
+ [Políticas para publicar, assinar e receber mensagens, to/from tópicos específicos para cada dispositivo](#pub-sub-specific-topic-device)
+ [Políticas para publicar, assinar e receber to/from tópicos de mensagens com o atributo thing no nome do tópico](#pub-sub-topic-attribute)
+ [Políticas para negar a publicação de mensagens em subtópicos do nome de um tópico](#pub-sub-deny-publish)
+ [Políticas para negar o recebimento de mensagens de subtópicos do nome de um tópico](#pub-sub-deny-receive)
+ [Políticas para assinar tópicos usando caracteres curinga do MQTT](#pub-sub-topic-wildcard)
+ [Políticas para HTTP e WebSocket clientes](#pub-sub-policy-cognito)

## Usando caracteres curinga no MQTT e nas políticas AWS IoT Core
<a name="pub-sub-policy-cert"></a>

O MQTT e AWS IoT Core as políticas têm caracteres curinga diferentes e você deve escolhê-los após uma análise cuidadosa. No MQTT, os caracteres `+` curinga `#` são usados nos [filtros de tópicos do MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html#topicfilters) para assinar vários nomes de tópicos. AWS IoT Core as políticas usam `*` e `?` como caracteres curinga e seguem as convenções das políticas do [IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html#policies-grammar-json). Em um documento de política, o `*` representa qualquer combinação caracteres, e um ponto de interrogação `?` representa qualquer caractere único. Em documentos de política, os caracteres curinga do MQTT `+` e `#` são tratados como aqueles caracteres sem significado especial. Para descrever vários nomes de tópicos e filtros de tópicos no atributo `resource` de uma política, use os caracteres curinga `*` e `?` no lugar dos caracteres curinga do MQTT.

Ao escolher caracteres curinga para usar em um documento de política, considere que o caractere `*` não está confinado a um único nível de tópico. O caractere `+` está confinado a um só nível de tópico em um filtro de tópicos MQTT. Para ajudar a restringir uma especificação de curinga a um único nível de filtro de tópico do MQTT, considere usar vários caracteres `?`. Para obter mais informações sobre o uso de caracteres curinga em um recurso de política e mais exemplos de sua correspondência, consulte [Usando curingas no](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_resource.html#reference_policies_elements_resource_wildcards) recurso. ARNs

A tabela abaixo mostra os diferentes caracteres curinga usados nas políticas do MQTT e do AWS IoT Core para clientes MQTT.


| Caractere curinga | É um caractere curinga do MQTT | Exemplo no MQTT | A AWS IoT Core política é um caractere curinga | Exemplo de AWS IoT Core políticas para clientes MQTT | 
| --- | --- | --- | --- | --- | 
| \$1 | Sim | some/\$1 | Não | N/D | 
| \$1 | Sim | some/\$1/topic | Não | N/D | 
| \$1 | Não | N/D | Sim | `topicfilter/some/*/topic` `topicfilter/some/sensor*/topic`  | 
| ? | Não | N/D | Sim |  `topic/some/?????/topic` `topicfilter/some/sensor???/topic`  | 

## Políticas para publicar, assinar e receber mensagens sobre tópicos to/from específicos
<a name="pub-sub-specific-topic"></a>

A seguir, são mostrados exemplos de dispositivos registrados e não registrados para publicar, assinar e receber mensagens sobre to/from o tópico chamado “some\$1specific\$1topic”. Os exemplos também destacam que `Publish` e `Receive` usam "topic" como recurso, enquanto `Subscribe` usa "topicfilter".

------
#### [ Registered devices ]

Para dispositivos registrados no AWS IoT Core registro, a política a seguir permite que os dispositivos se conectem com ClientID que corresponda ao nome de uma coisa no registro. Ele também fornece permissões de `Publish`, `Subscribe` e `Receive` para o tópico chamado “some\$1specific\$1topic”.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/some_specific_topic"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Para dispositivos não registrados no AWS IoT Core registro, a política a seguir permite que os dispositivos se conectem usando ClientID1, ClientID2 ou ClientId3. Ele também fornece permissões de `Publish`, `Subscribe` e `Receive` para o tópico chamado “some\$1specific\$1topic”.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/some_specific_topic"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
            ]
        }
    ]
}
```

------

## Políticas para publicar, assinar e receber to/from tópicos de mensagens com um prefixo específico
<a name="pub-sub-policy-specific-topic-prefix"></a>

Veja a seguir exemplos de to/from tópicos de dispositivos registrados e não registrados para publicar, assinar e receber mensagens com o prefixo “topic\$1prefix”.

**nota**  
Observe o uso do caractere curinga `*` neste exemplo. Embora o `*` seja útil para fornecer permissões para vários nomes de tópicos em uma única instrução, ele pode levar a consequências inesperadas ao fornecer mais privilégios aos dispositivos do que o necessário. Portanto, recomendamos que você use o caractere curinga `*` somente após uma análise cuidadosa.

------
#### [ Registered devices ]

Para dispositivos registrados no AWS IoT Core registro, a política a seguir permite que os dispositivos se conectem com ClientID que corresponda ao nome de uma coisa no registro. Ele também fornece permissões de `Publish`, `Subscribe` e `Receive` para tópicos com o prefixo “topic\$1prefix”.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/topic_prefix*"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix*"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Para dispositivos não registrados no AWS IoT Core registro, a política a seguir permite que os dispositivos se conectem usando ClientID1, ClientID2 ou ClientId3. Ele também fornece permissões de `Publish`, `Subscribe` e `Receive` para tópicos com o prefixo “topic\$1prefix”.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish",
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix*"
            ]
        }
    ]
}
```

------

## Políticas para publicar, assinar e receber mensagens, to/from tópicos específicos para cada dispositivo
<a name="pub-sub-specific-topic-device"></a>

Veja a seguir exemplos de to/from tópicos específicos de dispositivos registrados e não registrados para publicar, assinar e receber mensagens específicas de um determinado dispositivo.

------
#### [ Registered devices ]

Para dispositivos registrados no AWS IoT Core registro, a política a seguir permite que os dispositivos se conectem com ClientID que corresponda ao nome de uma coisa no registro. Ela fornece permissão para publicar no tópico específico do objeto (`sensor/device/${iot:Connection.Thing.ThingName}`) e também assinar e receber do tópico específico do objeto (`command/device/${iot:Connection.Thing.ThingName}`). Se o nome da coisa no registro for “coisa1", o dispositivo poderá publicar no tópico" 1"sensor/device/thing1". The device will also be able to subscribe to and receive from the topic "command/device/thing.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/sensor/device/${iot:Connection.Thing.ThingName}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/command/device/${iot:Connection.Thing.ThingName}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/command/device/${iot:Connection.Thing.ThingName}"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Para dispositivos não registrados no AWS IoT Core registro, a política a seguir permite que os dispositivos se conectem usando ClientID1, ClientID2 ou ClientId3. Ela fornece permissão para publicar no tópico específico do cliente (`sensor/device/${iot:ClientId}`) e também assinar e receber do tópico específico do cliente (`command/device/${iot:ClientId}`). Se o dispositivo se conectar ao ClientID como ClientId1, ele poderá publicar no tópico "1". sensor/device/clientId O dispositivo também poderá se inscrever e receber do tópico `device/clientId1/command`.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/sensor/device/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/command/device/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/command/device/${iot:Connection.Thing.ThingName}"
            ]
        }
    ]
}
```

------

## Políticas para publicar, assinar e receber to/from tópicos de mensagens com o atributo thing no nome do tópico
<a name="pub-sub-topic-attribute"></a>

A seguir, é mostrado um exemplo de to/from tópicos de dispositivos registrados para publicar, assinar e receber mensagens cujos nomes incluem atributos de coisas.

**nota**  
Os atributos de objeto existem apenas para dispositivos registrados no Registro do AWS IoT Core . Não há um exemplo correspondente para dispositivos não registrados.

------
#### [ Registered devices ]

Para dispositivos registrados no AWS IoT Core registro, a política a seguir permite que os dispositivos se conectem com ClientID que corresponda ao nome de uma coisa no registro. Ela fornece permissão para publicar no tópico (`sensor/${iot:Connection.Thing.Attributes[version]}`) e assinar e receber do tópico (`command/${iot:Connection.Thing.Attributes[location]}`), onde o nome do tópico inclui atributos de objeto. Se o nome da coisa no registro tiver `version=v1` e`location=Seattle`, o dispositivo poderá publicar no tópico "sensor/v1", and subscribe to and receive from the topic "command/Seattle”.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/sensor/${iot:Connection.Thing.Attributes[version]}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/command/${iot:Connection.Thing.Attributes[location]}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/command/${iot:Connection.Thing.Attributes[location]}"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Uma vez que os atributos de objeto existem apenas para dispositivos registrados no Registro do AWS IoT Core , não há um exemplo correspondente paro objetos não registradas.

------

## Políticas para negar a publicação de mensagens em subtópicos do nome de um tópico
<a name="pub-sub-deny-publish"></a>

Veja a seguir exemplos de dispositivos registrados e não registrados para publicar mensagens em todos os tópicos, exceto em determinados subtópicos.

------
#### [ Registered devices ]

Para dispositivos registrados no AWS IoT Core registro, a política a seguir permite que os dispositivos se conectem com ClientID que corresponda ao nome de uma coisa no registro. Ela fornece permissão para publicar em todos os tópicos com o prefixo "department/", mas não no subtópico "department/admins".

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/department/*"
			]
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/department/admins"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Para dispositivos não registrados no AWS IoT Core registro, a política a seguir permite que os dispositivos se conectem usando ClientID1, ClientID2 ou ClientId3. Ela fornece permissão para publicar em todos os tópicos com o prefixo "department/", mas não no subtópico "department/admins".

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/department/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/department/admins"
            ]
        }
    ]
}
```

------

## Políticas para negar o recebimento de mensagens de subtópicos do nome de um tópico
<a name="pub-sub-deny-receive"></a>

Veja a seguir exemplos de dispositivos registrados e não registrados para publicar e receber mensagens de tópicos com prefixos específicos, exceto determinados subtópicos.

------
#### [ Registered devices ]

Para dispositivos registrados no AWS IoT Core registro, a política a seguir permite que os dispositivos se conectem com ClientID que corresponda ao nome de uma coisa no registro. A política permite que os dispositivos assinem qualquer tópico com o prefixo "topic\$1prefix". Ao usar `NotResource` na declaração for`iot:Receive`, permitimos que o dispositivo receba mensagens de todos os tópicos nos quais o dispositivo se inscreveu, exceto os tópicos prefixados com “prefix/restricted". For example, with this policy, devices can subscribe to "topic\$1prefix/topic1" and even "topic\$1prefix/restricted", however, they will only receive messages from the topic "topic\$1prefix/topic1" and no messages from the topic "topic\$1prefix/restrictedtópico\$1”.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix/*"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Receive",
			"NotResource": "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix/restricted/*"
		}
	]
}
```

------
#### [ Unregistered devices ]

Para dispositivos não registrados no AWS IoT Core registro, a política a seguir permite que os dispositivos se conectem usando ClientID1, ClientID2 ou ClientId3. A política permite que os dispositivos assinem qualquer tópico com o prefixo "topic\$1prefix". Ao usar `NotResource` na declaração for`iot:Receive`, permitimos que o dispositivo receba mensagens de todos os tópicos nos quais o dispositivo se inscreveu, exceto tópicos prefixados com “prefix/restricted". For example, with this policy, devices can subscribe to "topic\$1prefix/topic1" and even "topic\$1prefix/restricted". However, they will only receive messages from the topic "topic\$1prefix/topic1" and no messages from the topic "topic\$1prefix/restrictedtópico\$1”.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix/*"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "NotResource": "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix/restricted/*"
        }
    ]
}
```

------

## Políticas para assinar tópicos usando caracteres curinga do MQTT
<a name="pub-sub-topic-wildcard"></a>

Os caracteres curinga MQTT \$1 e \$1 são tratados como cadeias de caracteres literais, mas não são tratados como curingas quando usados em políticas. AWS IoT Core No MQTT, \$1 e \$1 são tratados como curingas somente ao assinar um filtro de tópico, mas como uma string literal em todos os outros contextos. Recomendamos que você use esses curingas do MQTT somente como parte das AWS IoT Core políticas após uma análise cuidadosa.

A seguir, mostramos exemplos de itens registrados e não registrados usando curingas MQTT nas políticas. AWS IoT Core Esses curingas são tratados como strings literais.

------
#### [ Registered devices ]

Para dispositivos registrados no AWS IoT Core registro, a política a seguir permite que os dispositivos se conectem com ClientID que corresponda ao nome de uma coisa no registro. A política permite que os dispositivos assinem os tópicos "department/\$1/employees" e "location/\$1". Como \$1 e \$1 são tratados como cadeias de caracteres literais nas AWS IoT Core políticas, os dispositivos podem se inscrever no tópico “departamento/\$1/funcionários”, mas também não no tópico "". department/engineering/employees". Similarly, devices can subscribe to the topic "location/\$1" but not to the topic "location/Seattle". However, once the device subscribes to the topic "department/\$1/employees", the policy will allow them to receive messages from the topic "department/engineering/employees". Similarly, once the device subscribes to the topic "location/\$1", they will receive messages from the topic "location/Seattle

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/department/+/employees"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/location/#"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Receive",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topic/*"
		}
	]
}
```

------
#### [ Unregistered devices ]

Para dispositivos não registrados no AWS IoT Core registro, a política a seguir permite que os dispositivos se conectem usando ClientID1, ClientID2 ou ClientId3. A política permite que os dispositivos assinem os tópicos "department/\$1/employees" e "location/\$1". Como \$1 e \$1 são tratados como cadeias de caracteres literais nas AWS IoT Core políticas, os dispositivos podem se inscrever no tópico “departamento/\$1/funcionários”, mas também não no tópico "". department/engineering/employees". Similarly, devices can subscribe to the topic "location/\$1" but not "location/Seattle". However, once the device subscribes to the topic "department/\$1/employees", the policy will allow them to receive messages from the topic "department/engineering/employees". Similarly, once the device subscribes to the topic "location/\$1", they will receive messages from the topic "location/Seattle

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/department/+/employees"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/location/#"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/*"
        }
    ]
}
```

------

## Políticas para HTTP e WebSocket clientes
<a name="pub-sub-policy-cognito"></a>

Ao se conectar via HTTP ou pelo WebSocket protocolo, você está se autenticando com o Signature versão 4 e o Amazon Cognito. As identidades do Amazon Cognito podem ser autenticadas ou não autenticadas. As identidades autenticadas pertencem a usuários que são autenticados por qualquer provedor de identidades. As identidades não autenticadas geralmente pertencem a usuários convidados que não são autenticados com um provedor de identidade. O Amazon Cognito fornece um identificador e AWS credenciais exclusivos para oferecer suporte a identidades não autenticadas. Para obter mais informações, consulte [Autorização com identidades do Amazon Cognito](cog-iot-policies.md).

Para as seguintes operações, AWS IoT Core usa AWS IoT Core políticas anexadas às identidades do Amazon Cognito por meio da API. `AttachPolicy` Isso define as permissões anexadas ao banco de identidades do Amazon Cognito com identidades autenticadas.
+ `iot:Connect`
+ `iot:Publish`
+ `iot:Subscribe`
+ `iot:Receive`
+ `iot:GetThingShadow`
+ `iot:UpdateThingShadow`
+ `iot:DeleteThingShadow`

A identidade do Amazon Cognito precisa da permissão da política de perfil do IAM e da política do AWS IoT Core . Você anexa a política de função do IAM ao pool e a AWS IoT Core política à Identidade do Amazon Cognito por meio da AWS IoT Core `AttachPolicy` API.

Usuários autenticados e não autenticados são tipos de identidade diferentes. Se você não anexar uma AWS IoT política à Identidade do Amazon Cognito, um usuário autenticado falhará na autorização AWS IoT e não terá acesso aos AWS IoT recursos e ações.

**nota**  
Para outras AWS IoT Core operações ou para identidades não autenticadas, AWS IoT Core não define o escopo das permissões associadas à função do grupo de identidades do Amazon Cognito. Para as identidades autenticadas e não autenticadas, esta é a política mais permissiva que recomendamos anexar ao perfil do banco do Amazon Cognito.

**HTTP**

Para permitir que as identidades do Amazon Cognito não autenticadas publiquem mensagens via HTTP em um tópico específico da identidade do Amazon Cognito, anexe a seguinte política do IAM ao perfil do banco de identidades do Amazon Cognito:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/${cognito-identity.amazonaws.com:sub}"
            ]
        }
    ]
}
```

Para permitir usuários autenticados, anexe a política anterior à função do pool de Identidade do Amazon Cognito e à Identidade do Amazon Cognito usando a API. AWS IoT Core [AttachPolicy](https://docs.aws.amazon.com//iot/latest/apireference/API_AttachPolicy.html)

**nota**  
Ao autorizar as identidades do Amazon Cognito AWS IoT Core , considere as duas políticas e conceda os menores privilégios especificados. Uma ação será permitida somente se as duas políticas permitirem a ação solicitada. Se uma das políticas não permitir uma ação, essa ação não será autorizada.

**MQTT**

Para permitir que identidades não autenticadas do Amazon Cognito publiquem mensagens MQTT WebSocket sobre um tópico específico da identidade do Amazon Cognito em sua conta, anexe a seguinte política do IAM à função do pool de identidade do Amazon Cognito:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${cognito-identity.amazonaws.com:sub}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${cognito-identity.amazonaws.com:sub}"]
        }
    ]
}
```

Para permitir usuários autenticados, anexe a política anterior à função do pool de Identidade do Amazon Cognito e à Identidade do Amazon Cognito usando a API. AWS IoT Core [AttachPolicy](https://docs.aws.amazon.com//iot/latest/apireference/API_AttachPolicy.html)

**nota**  
Ao autorizar as identidades do Amazon Cognito AWS IoT Core , considere ambas e conceda os menores privilégios especificados. Uma ação será permitida somente se as duas políticas permitirem a ação solicitada. Se uma das políticas não permitir uma ação, essa ação não será autorizada.

# Exemplos de política para conectar e publicar
<a name="connect-and-pub"></a>

Para dispositivos registrados como itens no AWS IoT Core registro, a política a seguir concede permissão para se conectar AWS IoT Core com um ID de cliente que corresponda ao nome do item e restringe o dispositivo à publicação em um tópico MQTT específico do ID do cliente ou do nome do item. Para que uma conexão seja bem-sucedida, o nome da coisa deve ser registrado no AWS IoT Core registro e autenticado usando uma identidade ou principal anexada à coisa:

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.ThingName}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
      ]
    }
  ]
}
```

Para dispositivos não registrados como itens no AWS IoT Core registro, a política a seguir concede permissão para se conectar AWS IoT Core com o ID do cliente `client1` e restringe o dispositivo à publicação em um tópico MQTT específico do cliente:

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topic/${iot:ClientId}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:client/client1"
      ]
    }
  ]
}
```

# Exemplos de políticas de mensagens retidas
<a name="retained-message-policy-examples"></a>

O uso [de mensagens retidas](mqtt.md#mqtt-retain) requer políticas específicas. As mensagens retidas são mensagens MQTT publicadas com o sinalizador RETAIN definido e armazenadas por. AWS IoT Core Esta seção apresenta exemplos de políticas que permitem o uso comum de mensagens retidas.

**Topics**
+ [Política para conectar e publicar mensagens retidas](#retained-message-policy-examples-publish)
+ [Política para conectar e publicar mensagens Will retidas](#retained-message-policy-examples-publish-lwt)
+ [Política para listar e receber mensagens retidas](#retained-message-policy-examples-list-get)

## Política para conectar e publicar mensagens retidas
<a name="retained-message-policy-examples-publish"></a>

Para que um dispositivo publique mensagens retidas, ele deve ser capaz de se conectar, publicar (qualquer mensagem MQTT) e publicar mensagens retidas em MQTT. A política a seguir concede essas permissões para o tópico: `device/sample/configuration` ao cliente **device1**. Para ver outro exemplo que concede permissão para conexão, consulte [Exemplos de política para conectar e publicar](connect-and-pub.md).

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/device1"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:RetainPublish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/device/sample/configuration"
			]
		}
	]
}
```

## Política para conectar e publicar mensagens Will retidas
<a name="retained-message-policy-examples-publish-lwt"></a>

Os clientes podem configurar uma mensagem que AWS IoT Core será publicada quando o cliente se desconectar inesperadamente. O MQTT chama essa mensagem de [mensagem *Will*](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag). Um cliente deve ter uma condição adicional adicionada à sua permissão de conexão para incluí-la. 

O documento de política a seguir concede a todos os clientes permissão para se conectar e publicar uma mensagem Will, identificada por seu tópico, `will`, que o AWS IoT Core também reterá.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/device1"
			],
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:RetainPublish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/will"
			]
		}
	]
}
```

## Política para listar e receber mensagens retidas
<a name="retained-message-policy-examples-list-get"></a>

Serviços e aplicativos podem acessar mensagens retidas sem a necessidade de oferecer suporte a um cliente MQTT chamando [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html) e [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html). Os serviços e aplicativos que chamam essas ações devem ser autorizados usando uma política como o exemplo a seguir.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:ListRetainedMessages"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/device1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:GetRetainedMessage"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/foo"
            ]
        }
    ]
}
```

# Exemplos de política de certificado
<a name="certificate-policy-examples"></a>

Para dispositivos registrados no AWS IoT Core registro, a política a seguir concede permissão para se conectar AWS IoT Core com um ID de cliente que corresponda ao nome de um item e publicar em um tópico cujo nome seja igual ao `certificateId` do certificado que o dispositivo usou para se autenticar:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:CertificateId}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        }
    ]
}
```

Para dispositivos não registrados no AWS IoT Core registro, a política a seguir concede permissão para se conectar AWS IoT Core com o cliente IDs `client1``client2`,,, `client3` e publicar em um tópico cujo nome é igual ao `certificateId` do certificado que o dispositivo usou para se autenticar:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:CertificateId}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        }
    ]
}
```

Para dispositivos registrados no AWS IoT Core registro, a política a seguir concede permissão para se conectar AWS IoT Core com um ID de cliente que corresponda ao nome do item e publicar em um tópico cujo nome seja igual ao `CommonName` campo do assunto do certificado que o dispositivo usou para se autenticar:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.CommonName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        }
    ]
}
```

**nota**  
Neste exemplo, o nome comum do assunto do certificado é usado como o identificador do tópico, supondo-se que o nome comum do assunto seja exclusivo para cada certificado registrado. Se os certificados forem compartilhados entre vários dispositivos, o nome comum do assunto será o mesmo para todos os dispositivos que compartilham esse certificado, permitindo assim privilégios de publicação para o mesmo tópico em vários dispositivos (não recomendado).

Para dispositivos não registrados no AWS IoT Core registro, a política a seguir concede permissão para se conectar AWS IoT Core com o cliente IDs `client1``client2`,,, `client3` e publicar em um tópico cujo nome é igual ao `CommonName` campo do assunto do certificado que o dispositivo usou para se autenticar:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.CommonName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        }
    ]
}
```

**nota**  
Neste exemplo, o nome comum do assunto do certificado é usado como o identificador do tópico, supondo-se que o nome comum do assunto seja exclusivo para cada certificado registrado. Se os certificados forem compartilhados entre vários dispositivos, o nome comum do assunto será o mesmo para todos os dispositivos que compartilham esse certificado, permitindo assim privilégios de publicação para o mesmo tópico em vários dispositivos (não recomendado).

Para dispositivos registrados no AWS IoT Core registro, a política a seguir concede permissão para se conectar AWS IoT Core com um ID de cliente que corresponda ao nome do item e publicar em um tópico cujo nome é prefixado `admin/` quando o certificado usado para autenticar o dispositivo tem seu `Subject.CommonName.2` campo definido como: `Administrator`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/*"],
            "Condition": {
                "StringEquals": {
                    "iot:Certificate.Subject.CommonName.2": "Administrator"
            }
        }
        }
    ]
}
```

Para dispositivos não registrados no AWS IoT Core registro, a política a seguir concede permissão para se conectar AWS IoT Core com o cliente IDs `client1` `client3` e publicar em um tópico cujo nome é prefixado com `admin/` quando o certificado usado para autenticar o dispositivo tem seu `Subject.CommonName.2` campo definido como: `client2` `Administrator`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/*"],
            "Condition": {
                "StringEquals": {
                    "iot:Certificate.Subject.CommonName.2": "Administrator"
            }
        }
        }
    ]
}
```

Para dispositivos registrados no AWS IoT Core registro, a política a seguir permite que um dispositivo use seu nome para publicar em um tópico específico, `admin/` seguido pelo `ThingName` quando o certificado usado para autenticar o dispositivo tem qualquer um de seus `Subject.CommonName` campos definido como: `Administrator`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/${iot:Connection.Thing.ThingName}"],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:Certificate.Subject.CommonName.List": "Administrator"
            }
        }
        }
    ]
}
```

Para dispositivos não registrados no AWS IoT Core registro, a política a seguir concede permissão para AWS IoT Core se conectar ao cliente IDs `client1` `client3` e publicar no tópico `admin` quando o certificado usado para autenticar o dispositivo tem qualquer um de seus `Subject.CommonName` campos definido como: `client2` `Administrator`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin"],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:Certificate.Subject.CommonName.List": "Administrator"
            }
        }
        }
    ]
}
```

# Exemplos de política de objetos
<a name="thing-policy-examples"></a>

A política a seguir permite que um dispositivo se conecte se o certificado usado para autenticação AWS IoT Core estiver anexado à coisa para a qual a política está sendo avaliada:

****  

```
{  
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {  
            "Effect":"Allow",
            "Action":["iot:Connect"],
            "Resource":[ "*" ],
            "Condition": {
                "Bool": {
                    "iot:Connection.Thing.IsAttached": ["true"]
            }
        }
        }
    ]
}
```

A política a seguir permite que um dispositivo publique se o certificado estiver anexado a um objeto com um determinado tipo e se o objeto tiver um atributo de `attributeName` com valor `attributeValue`. Para obter mais informações sobre variáveis da política de objeto, consulte [Variáveis da política de objeto](thing-policy-variables.md).

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/device/stats",
      "Condition": {
        "StringEquals": {
          "iot:Connection.Thing.Attributes[attributeName]": "attributeValue",
          "iot:Connection.Thing.ThingTypeName": "Thing_Type_Name"
        },
        "Bool": {
          "iot:Connection.Thing.IsAttached": "true"
        }
      }
    }
  ]
}
```

A política a seguir permite que um dispositivo publique em um tópico que começa com um atributo do objeto. Se o certificado do dispositivo não estiver associado ao objeto, essa variável não será resolvida e resultará em um erro de acesso negado. Para obter mais informações sobre variáveis da política de objeto, consulte [Variáveis da política de objeto](thing-policy-variables.md).

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.Attributes[attributeName]}/*"
    }
  ]
}
```

# Exemplo básico de políticas de trabalho
<a name="basic-jobs-example"></a>

Este exemplo mostra as instruções de política necessárias para que um destino de trabalho que é um único dispositivo receba uma solicitação de trabalho e comunique o status de execução do trabalho com AWS IoT.

*us-west-2:57EXAMPLE833*Substitua por seu Região da AWS, um caractere de dois pontos (:) e seu Conta da AWS número de 12 dígitos e, em seguida, *uniqueThingName* substitua pelo nome do recurso que representa o dispositivo em. AWS IoT

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:client/uniqueThingName"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/test/dc/pubtopic",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/job/*",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/jobExecution/*",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topicfilter/test/dc/subtopic",
                "arn:aws:iot:us-west-2:123456789012:topicfilter/$aws/events/jobExecution/*",
                "arn:aws:iot:us-west-2:123456789012:topicfilter/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/test/dc/subtopic",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iotjobsdata:DescribeJobExecution",
                "iotjobsdata:GetPendingJobExecutions",
                "iotjobsdata:StartNextPendingJobExecution",
                "iotjobsdata:UpdateJobExecution"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName"
            ]
        }
    ]
}
```

# 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)

# Autorizando chamadas diretas para AWS serviços usando o provedor de AWS IoT Core credenciais
<a name="authorizing-direct-aws"></a>

Os dispositivos podem usar certificados X.509 para se conectar AWS IoT Core usando protocolos de autenticação mútua TLS. Outros AWS serviços não oferecem suporte à autenticação baseada em certificado, mas podem ser chamados usando AWS credenciais no formato [AWS Signature](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) Version 4. O [algoritmo Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) normalmente exige que o chamador tenha um ID de chave de acesso e uma chave de acesso secreta. AWS IoT Core tem um provedor de credenciais que permite que você use o [certificado X.509 incorporado](x509-client-certs.html) como a identidade exclusiva do dispositivo para autenticar solicitações. AWS Isso elimina a necessidade de armazenar um ID de chave de acesso e uma chave de acesso secreta em seu dispositivo.

O provedor de credenciais autentica um chamador usando um certificado X.509 e emite um token de segurança temporário e de privilégio limitado. O token pode ser usado para assinar e autenticar qualquer AWS solicitação. Essa forma de autenticar suas AWS solicitações exige que você crie e configure uma [função AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/service-authorization/latest/reference/id_roles.html) e anexe políticas apropriadas do IAM à função para que o provedor de credenciais possa assumir a função em seu nome. Para obter mais informações sobre AWS IoT Core e o IAM, consulte [Gerenciamento de identidade e acesso para AWS IoT](security-iam.md).

 AWS IoT exige que os dispositivos enviem a [extensão Server Name Indication (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) para o protocolo Transport Layer Security (TLS) e forneçam o endereço completo do endpoint no campo. `host_name` O campo `host_name` deve conter o endpoint que você está chamando e deve ser:
+ O `endpointAddress` retornado por `aws iot [describe-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-endpoint.html) --endpoint-type iot:CredentialProvider`.

As conexões tentadas por dispositivos sem o valor `host_name` correto não funcionarão.

O diagrama a seguir mostra o fluxo de trabalho do provedor de credenciais.

![\[AWS IoT Core fluxo de trabalho do provedor de credenciais.\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/images/credentials-provider-diagram.png)


1. O AWS IoT Core dispositivo faz uma solicitação HTTPS ao provedor de credenciais para obter um token de segurança. A solicitação inclui o dispositivo certificado X.509 para autenticação.

1. O provedor de credenciais encaminha a solicitação ao módulo de AWS IoT Core autenticação e autorização para validar o certificado e verificar se o dispositivo tem permissão para solicitar o token de segurança.

1. Se o certificado for válido e tiver permissão para solicitar um token de segurança, o módulo de AWS IoT Core autenticação e autorização retornará sucesso. Do contrário, envia uma exceção ao dispositivo.

1. Depois de validar o certificado, o provedor de credenciais chama o [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) para assumir o perfil do IAM que você criou para ele.

1. AWS STS retorna um token de segurança temporário com privilégios limitados para o provedor de credenciais.

1. O provedor de credenciais retorna o token de segurança para o dispositivo.

1. O dispositivo usa o token de segurança para assinar uma AWS solicitação com o AWS Signature Version 4.

1. O serviço solicitado chama o IAM para validar a assinatura e autorizar a solicitação comparativamente às políticas de acesso anexadas à perfil do IAM que você criou para o provedor de credenciais.

1. Se o IAM validar a assinatura e autorizar a solicitação, a solicitação será concluída com êxito. Do contrário, o IAM envia uma exceção.

A seção a seguir descreve como se deve usar um certificado para obter um token de segurança. Ele é escrito com a suposição de que você já tenha [registrado um dispositivo](register-device.html) e [criado e ativado seu próprio certificado](device-certs-your-own.html) para ele.

## Como usar um certificado para obter um token de segurança
<a name="authorizing-direct-aws.walkthrough"></a>

1. Configure o perfil do IAM que o provedor de credenciais assume em nome de seu dispositivo. Anexe à função as políticas de confiança a seguir.   
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Principal": {"Service": "credentials.iot.amazonaws.com"},
           "Action": "sts:AssumeRole"
       }
   }
   ```

   Para cada AWS serviço que você deseja chamar, anexe uma política de acesso à função. O provedor de credenciais comporta as seguintes variáveis de política:
   + `credentials-iot:ThingName`
   + `credentials-iot:ThingTypeName`
   + `credentials-iot:AwsCertificateId`

   Quando o dispositivo fornece o nome do objeto em sua solicitação a um serviço da AWS , o provedor de credenciais adiciona `credentials-iot:ThingName` e `credentials-iot:ThingTypeName` como variáveis de contexto ao token de segurança. O provedor de credenciais fornece `credentials-iot:AwsCertificateId` como uma variável de contexto, mesmo que o dispositivo não forneça o nome do objeto na solicitação. Você passa o nome do objeto como o valor do cabeçalho da solicitação HTTP `x-amzn-iot-thingname`.

   Essas três variáveis funcionam apenas para políticas do IAM, e não para políticas da AWS IoT Core .

1. O usuário que executar a próxima etapa (criar um alias de função) deve ter permissão para transmitir a função recém-criada ao AWS IoT Core. A política a seguir concede ambas `iam:GetRole` e `iam:PassRole` permissões a um AWS usuário. A permissão `iam:GetRole` permite que o usuário obtenha informações sobre a função que você acabou de criar. A `iam:PassRole` permissão permite que o usuário passe a função para outro AWS serviço.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Action": [
               "iam:GetRole",
               "iam:PassRole"
           ],
           "Resource": "arn:aws:iam::123456789012:role/your role name"
       }
   }
   ```

1. Crie um alias de AWS IoT Core função. O dispositivo que fará chamadas diretas para AWS os serviços deve saber a qual função ARN usar ao se conectar. AWS IoT Core Fixar o ARN da função no código não é uma boa solução porque isso requer que você atualize o dispositivo toda vez que o ARN da função for alterado. Uma solução mais adequada é usar a API `CreateRoleAlias` para criar um alias de função que aponte para o ARN da função. Se o ARN da função for alterado, basta atualizar o alias da função. Nenhuma alteração é necessária no dispositivo. Essa API usa os seguintes parâmetros:  
`roleAlias`  
Obrigatório. Uma string arbitrária que identifica o alias da função. Funciona como chave primária no modelo de dados do alias da função. Contém de 1 a 128 caracteres e deve incluir apenas caracteres alfanuméricos e os símbolos =, @ e -. Caracteres alfabéticos em maiúsculas e minúsculas são permitidos. Os nomes de alias de perfil diferenciam maiúsculas de minúsculas.  
`roleArn`  
Obrigatório. O ARN da função ao qual o alias da função se refere.  
`credentialDurationSeconds`  
Opcional. Por quanto tempo (em segundos) a credencial é válida. O valor mínimo é 900 segundos (15 minutos). O valor máximo é de 43.200 segundos (12 horas). O valor padrão é de 3.600 segundos (uma hora).   
O provedor de AWS IoT Core credenciais pode emitir uma credencial com uma vida útil máxima de 43.200 segundos (12 horas). Ter a credencial válida por até 12 horas pode ajudar a reduzir o número de chamadas para o provedor de credenciais, armazenando a credencial em cache por mais tempo.  
O valor `credentialDurationSeconds` deve ser menor que ou igual à duração máxima da sessão do perfil do IAM à qual o alias do perfil faz referência. Para obter mais informações, consulte [Modificar a duração máxima da sessão (AWS API) de uma função](https://docs.aws.amazon.com//IAM/latest/UserGuide/roles-managingrole-editing-api.html#roles-modify_max-session-duration-api) no Guia do usuário do AWS Identity and Access Management.

   Para obter mais informações sobre essa API, consulte [CreateRoleAlias](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateRoleAlias.html). 

1. Anexe uma política a um certificado de dispositivo. A política anexada ao certificado do dispositivo deve conceder permissão ao dispositivo para assumir a função. Para isso, conceda permissão para a ação `iot:AssumeRoleWithCertificate` do alias da função, como no exemplo a seguir.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iot:AssumeRoleWithCertificate",
               "Resource": "arn:aws:iot:us-east-1:123456789012:rolealias/your role alias"
           }
       ]
   }
   ```

1. Faça uma solicitação HTTPS ao provedor de credenciais para receber um token de segurança. Forneça as informações a seguir:
   + *Certificado*: como se trata de uma solicitação HTTP por meio de autenticação TLS mútua, é necessário fornecer o certificado e a chave privada para o cliente quando estiver fazendo a solicitação. Use o mesmo certificado e chave privada que você usou quando registrou seu certificado AWS IoT Core.

     Para garantir que seu dispositivo esteja se comunicando com AWS IoT Core (e não um serviço que se faça passar por ele), consulte [Autenticação do servidor](x509-client-certs.html#server-authentication), siga os links para baixar os certificados CA apropriados e copie-os para o seu dispositivo.
   + *RoleAlias*: o nome do alias de função que você criou para o provedor de credenciais. Os nomes de alias de função diferenciam maiúsculas de minúsculas e devem corresponder ao alias de função criado em. AWS IoT Core
   + *ThingName*: O nome da coisa que você criou quando registrou sua AWS IoT Core coisa. Ele é passado como o valor do cabeçalho HTTP `x-amzn-iot-thingname`. Esse valor é necessário somente se você estiver usando atributos de coisas como variáveis de política AWS IoT Core ou políticas do IAM.
**nota**  
O *ThingName*que você fornece `x-amzn-iot-thingname` deve corresponder ao nome do recurso AWS IoT Thing atribuído a um certificado. Se não corresponder, um erro 403 será retornado.

   Execute o comando a seguir no AWS CLI para obter o endpoint do provedor de credenciais para o seu. Conta da AWS Para obter mais informações sobre essa API, consulte [DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html). Para endpoints habilitados para FIPS, consulte [AWS IoT Core: endpoints do provedor de credenciais](iot-connect-fips.md#iot-connect-fips-credential).

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   O objeto JSON a seguir é uma saída de exemplo do comando **describe-endpoint**. Ele contém o `endpointAddress` que você usa para solicitar um token de segurança.

   ```
   {
       "endpointAddress": "your_aws_account_specific_prefix.credentials.iot.your region.amazonaws.com"
   }
   ```

   Use o endpoint para fazer uma solicitação HTTPS ao provedor de credenciais para que retorne um token de segurança. O comando de exemplo a seguir usa `curl`, mas é possível usar qualquer cliente HTTP.
**nota**  
O nome *RoleAlias* diferencia maiúsculas de minúsculas e deve corresponder ao alias de função criado em. AWS IoT

   ```
   curl --cert your certificate --key your private key -H "x-amzn-iot-thingname: your thing name" --cacert AmazonRootCA1.pem https://your endpoint /role-aliases/your role alias/credentials
   ```

   Esse comando retorna um objeto de token de segurança que contém um `accessKeyId`, uma `secretAccessKey`, um `sessionToken` e uma expiração. O objeto JSON a seguir é uma saída de exemplo do comando `curl`.

   ```
       {"credentials":{"accessKeyId":"access key","secretAccessKey":"secret access key","sessionToken":"session token","expiration":"2018-01-18T09:18:06Z"}}
   ```

   Em seguida, você pode usar os `sessionToken` valores `accessKeyId``secretAccessKey`, e para assinar solicitações aos AWS serviços. *Para ver uma end-to-end demonstração, consulte [Como eliminar a necessidade de AWS credenciais codificadas em dispositivos usando o AWS IoT Credential Provider no](https://aws.amazon.com/blogs/security/how-to-eliminate-the-need-for-hardcoded-aws-credentials-in-devices-by-using-the-aws-iot-credentials-provider/) blog Security Blog.AWS *

# Acesso entre contas com o IAM
<a name="cross-account-access"></a>

AWS IoT Core permite que você permita que um diretor publique ou assine um tópico definido como Conta da AWS não pertencente ao diretor. É possível configurar o acesso entre contas criando uma política e perfil do IAM e, em seguida, anexando a política ao perfil.

Primeiro, crie uma política do IAM gerenciada pelo cliente, conforme descrito em [Como criar políticas do IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_create.html), assim como você faria com outros usuários e certificados em sua Conta da AWS. 

Para dispositivos registrados no AWS IoT Core registro, a política a seguir concede permissão para que os dispositivos se conectem AWS IoT Core usando uma ID de cliente que corresponda ao nome do item do dispositivo e publiquem no nome do item `my/topic/thing-name ` onde *thing-name* está o dispositivo:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:Connection.Thing.ThingName}"
            ]
        }
    ]
}
```

Para dispositivos não registrados no AWS IoT Core registro, a política a seguir concede permissão a um dispositivo para usar o nome do item `client1` registrado no registro da sua conta (123456789012) para se conectar AWS IoT Core e publicar em um tópico específico AWS IoT Core do ID do cliente cujo nome esteja prefixado com: `my/topic/`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}"
            ]
        }
    ]
}
```

Em seguida, siga as etapas em [Criação de um perfil para delegar permissões a um usuário do IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html). Insira o ID da Conta da AWS com a qual você deseja compartilhar o acesso. Em seguida, na etapa final, anexe a política recém-criada à função. Se, posteriormente, for necessário modificar o ID de conta da AWS ao qual você está concedendo acesso, você poderá usar o formato de política de confiança a seguir para fazer isso: 

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { 
                "AWS": "arn:aws:iam::567890123456:user/MyUser"
        },
            "Action": "sts:AssumeRole"
        }
    ]
}
```