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á.
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 para ações de Connect
e anexar o objeto à entidade principal usada para a conexão.
Nesta seção:
- Usar caracteres curinga nas políticas do MQTT e AWS IoT Core
- Políticas para publicar, assinar e receber/enviar mensagens de tópicos específicos
- Políticas para publicar, assinar e receber/enviar mensagens de tópicos com um prefixo específico
- Políticas para publicar, assinar e receber/enviar mensagens de tópicos específicos de cada dispositivo
- Políticas para publicar, assinar e receber/enviar mensagens de tópicos com o atributo de objeto no nome do tópico
- Políticas para negar a publicação de mensagens em subtópicos do nome de um tópico
- Políticas para negar o recebimento de mensagens de subtópicos do nome de um tópico
- Políticas para assinar tópicos usando caracteres curinga do MQTT
- Políticas para HTTP e WebSocket clientes
Usar caracteres curinga nas políticas do MQTT e AWS IoT Core
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 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. 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 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 |
---|---|---|---|---|
# |
Sim | some/# |
Não | N/D |
+ |
Sim | some/+/topic |
Não | N/D |
* |
Não | N/D | Sim |
|
? |
Não | N/D | Sim |
|
Políticas para publicar, assinar e receber/enviar mensagens de tópicos específicos
Veja a seguir exemplos de dispositivos registrados e não registrados para publicar, assinar e receber/enviar mensagens do tópico chamado “some_specific_topic”. Os exemplos também destacam que Publish
e Receive
usam "topic" como recurso, enquanto Subscribe
usa "topicfilter".
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_specific_topic”.
{
"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"
]
}
]
}
Políticas para publicar, assinar e receber/enviar mensagens de tópicos com um prefixo específico
Veja a seguir exemplos de dispositivos registrados e não registrados para publicar, assinar e receber/enviar mensagens de tópicos com "topic_prefix".
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.
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_prefix”.
{
"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*"
]
}
]
}
Políticas para publicar, assinar e receber/enviar mensagens de tópicos específicos de cada dispositivo
Veja a seguir exemplos de dispositivos registrados e não registrados para publicar, assinar e receber/enviar mensagens de tópicos específicos do dispositivo em questão.
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}"
]
}
]
}
Políticas para publicar, assinar e receber/enviar mensagens de tópicos com o atributo de objeto no nome do tópico
A seguir, é mostrado um exemplo de dispositivos registrados para publicar, assinar e receber/enviar mensagens de tópicos cujos nomes incluem atributos de objetos.
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.
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
elocation=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]}"
]
}
]
}
Políticas para negar a publicação de mensagens em subtópicos do nome de um tópico
Veja a seguir exemplos de dispositivos registrados e não registrados para publicar mensagens em todos os tópicos, exceto em determinados subtópicos.
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"
]
}
]
}
Políticas para negar o recebimento de mensagens de subtópicos do nome de um tópico
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.
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_prefix". Ao usar NotResource
na declaração foriot: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_prefix/topic1" and even "topic_prefix/restricted",
however, they will only receive messages from the topic
"topic_prefix/topic1" and no messages from the topic
"topic_prefix/restrictedtópico_”.
{
"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/*"
}
]
}
Políticas para assinar tópicos usando caracteres curinga do MQTT
Os caracteres curinga MQTT + e # 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, + e # 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.
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/+/employees" e "location/#". Como + e # são tratados como cadeias de caracteres literais nas AWS IoT Core políticas, os dispositivos podem se inscrever no tópico “departamento/+/funcionários”, mas também não no tópico "". department/engineering/employees". Similarly, devices can subscribe to the topic "location/#" but not to the topic "location/Seattle". However, once the device subscribes to the topic "department/+/employees", the policy will allow them to receive messages from the topic "department/engineering/employees". Similarly, once the device subscribes to the topic "location/#", 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/*"
}
]
}
Políticas para HTTP e WebSocket clientes
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.
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 a 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
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
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.