Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
La política que utilices depende de la forma a la que te conectes AWS IoT Core. Puedes conectarte AWS IoT Core mediante un cliente MQTT, HTTP o WebSocket. Al conectarse con un cliente MQTT, se autenticará con un certificado X.509. Cuando se conecta a través de HTTP o el WebSocket protocolo, se autentica con Signature Version 4 y Amazon Cognito.
nota
En el caso de los dispositivos registrados, recomendamos que utilice variables de política de objetos para las acciones de Connect
y que los asocie a la entidad principal que se utiliza para la conexión.
En esta sección:
Uso de caracteres comodín en MQTT y en las políticas de AWS IoT Core
Políticas para publicar, suscribirse y recibir mensajes hacia/desde temas específicos
Políticas para publicar, suscribirse y recibir mensajes hacia/desde temas con un prefijo específico
Políticas para denegar la publicación de mensajes en subtemas del nombre de un tema
Políticas para denegar la recepción de mensajes de subtemas del nombre de un tema
Políticas para suscribirse a temas con caracteres comodín de MQTT
Uso de caracteres comodín en MQTT y en las políticas de AWS IoT Core
El MQTT y AWS IoT Core las políticas tienen caracteres comodín diferentes y debe elegirlos tras considerarlos detenidamente. En MQTT, los caracteres comodín se #
utilizan en +
los filtros de temas de MQTT para suscribirse a varios nombres de temas. AWS IoT Core las políticas utilizan *
y ?
como caracteres comodín y siguen las convenciones de las políticas de IAM. En un documento de política el *
representa cualquier combinación de caracteres y un signo de interrogación ?
representa cualquier carácter único. En los documentos de política, los caracteres comodín MQTT +
y #
se consideran caracteres sin ningún significado especial. Para describir varios nombres de temas y filtros de temas en el atributo resource
de una política, utilice los caracteres comodín *
y ?
en lugar de los caracteres comodín de MQTT.
Al elegir caracteres comodín para usarlos en un documento de política, tenga en cuenta que el carácter *
no se limita a un único nivel de tema. El carácter +
se limita a un único nivel de tema en un filtro de temas de MQTT. Para limitar una especificación de comodín a un único nivel de filtro de temas de MQTT, considere la posibilidad de utilizar varios caracteres ?
. Para obtener más información sobre el uso de caracteres comodín en un recurso de políticas y más ejemplos de sus coincidencias, consulte Uso de caracteres comodín en un recurso. ARNs
En la siguiente tabla se muestran los distintos caracteres comodín que se utilizan en MQTT y en las políticas de AWS IoT Core de los clientes de MQTT.
Carácter comodín | ¿Es un carácter comodín de MQTT? | Ejemplo en MQTT | ¿Es un carácter AWS IoT Core comodín de política | Ejemplo de AWS IoT Core políticas para clientes MQTT |
---|---|---|---|---|
# |
Sí | some/# |
No | N/A |
+ |
Sí | some/+/topic |
No | N/A |
* |
No | N/A | Sí |
|
? |
No | N/A | Sí |
|
Políticas para publicar, suscribirse y recibir mensajes hacia/desde temas específicos
A continuación se muestran ejemplos de dispositivos registrados y no registrados para publicar, suscribirse y recibir mensajes hacia/desde el tema denominado «some_specific_topic». Los ejemplos también destacan que Publish
y Receive
utilizan “topic” como recurso y Subscribe
utiliza “topicfilter” como recurso.
Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten con un ClientiD que coincida con el nombre de un elemento del registro. También proporciona permisos Publish
, Subscribe
y Receive
para el tema denominado “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, suscribirse y recibir mensajes hacia/desde temas con un prefijo específico
A continuación se muestran ejemplos de dispositivos registrados y no registrados para publicar, suscribirse y recibir mensajes hacia/desde temas con el prefijo «topic_prefix».
nota
Observe el uso del carácter comodín *
en este ejemplo. Si bien el carácter comodín *
es útil para permitir el uso de varios nombres de temas en una sola instrucción, puede tener consecuencias imprevistas, ya que proporciona a los dispositivos más privilegios de los necesarios. Por lo tanto, le recomendamos que utilice únicamente el carácter comodín *
después de considerarlo detenidamente.
Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten con un ClientiD que coincida con el nombre de un elemento del registro. También proporciona permisos Publish
, Subscribe
y Receive
para los temas con el prefijo «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, suscribirse y recibir mensajes hacia/desde temas específicos de cada dispositivo
A continuación se muestran ejemplos de dispositivos registrados y no registrados para publicar, suscribirse y recibir mensajes hacia/desde temas específicos de un determinado dispositivo.
Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten con un ClientiD que coincida con el nombre de un elemento del registro. Da permiso para publicar en un tema de objeto específico (sensor/device/${iot:Connection.Thing.ThingName}
) y también para suscribirse y recibir información del tema de objeto específico (command/device/${iot:Connection.Thing.ThingName}
). Si el nombre del elemento en el registro es «cosa1", el dispositivo podrá publicar en el tema" 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, suscribirse y recibir mensajes hacia/desde temas con un atributo en el nombre del tema
A continuación se muestra un ejemplo de dispositivos registrados para publicar, suscribirse y recibir mensajes hacia/desde temas cuyos nombres incluyen atributos de objetos.
nota
Los atributos de objeto solo existen para los dispositivos registrados en el registro de AWS IoT Core . No existe un ejemplo correspondiente a los dispositivos no registrados.
Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten con un ClientiD que coincida con el nombre de un elemento del registro. Da permiso para publicar en el tema (sensor/${iot:Connection.Thing.Attributes[version]}
) y suscribirse y recibir información del tema (command/${iot:Connection.Thing.Attributes[location]}
) si el nombre del tema incluye atributos de objeto. Si el nombre del objeto en el registro es «version=v1
y»location=Seattle
, el dispositivo podrá publicar en el tema "»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 denegar la publicación de mensajes en subtemas del nombre de un tema
A continuación, se muestran ejemplos de dispositivos registrados y no registrados para publicar mensajes en todos los temas, excepto en algunos subtemas.
Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten con un ClientiD que coincida con el nombre de un elemento del registro. Da permiso para publicar en todos los temas con el prefijo «departament/», pero no en el subtema «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 denegar la recepción de mensajes de subtemas del nombre de un tema
A continuación se muestran ejemplos para que dispositivos registrados y no registrados se suscriban y reciban mensajes de temas con prefijos específicos, excepto determinados subtemas.
Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten con un ClientiD que coincida con el nombre de un elemento del registro. La política permite a los dispositivos suscribirse a cualquier tema con el prefijo «topic_prefix». Al utilizarla NotResource
en la declaración foriot:Receive
, permitimos que el dispositivo reciba mensajes de todos los temas a los que esté suscrito, excepto los temas con el prefijo «topic_». 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/restricted
{
"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 suscribirse a temas con caracteres comodín de MQTT
Los caracteres comodín + y # de MQTT se tratan como cadenas literales, pero no se tratan como caracteres comodín cuando se utilizan en políticas. AWS IoT Core En MQTT, + y # se tratan como caracteres comodín solo cuando se suscribe a un filtro de tema, pero se tratan como cadenas literales en todos los demás contextos. Le recomendamos que utilice estos caracteres comodín de MQTT únicamente como parte de AWS IoT Core las políticas tras considerarlos detenidamente.
A continuación se muestran ejemplos de elementos registrados y no registrados que utilizan caracteres comodín de MQTT en las políticas. AWS IoT Core Estos caracteres comodín se tratan como cadenas literales.
Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten con un ClientiD que coincida con el nombre de un elemento del registro. La política permite que los dispositivos se suscriban a los temas «department/+/employees» y «location/#». Como los términos + y # se consideran cadenas literales en AWS IoT Core las políticas, los dispositivos pueden suscribirse al tema «departamento/+/empleados», pero no también al tema «». 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 y clientes WebSocket
Cuando se conecta a través de HTTP o el WebSocket protocolo, se autentica con Signature Version 4 y Amazon Cognito. Las identidades de Amazon Cognito pueden ser autenticadas o no autenticadas. Las identidades autenticadas pertenecen a los usuarios que se han autenticado mediante un proveedor de identidad compatible. Las identidades no autenticadas suelen pertenecer a usuarios invitados que no se autentiquen con un proveedor de identidades. Amazon Cognito proporciona un identificador y AWS credenciales únicos para admitir identidades no autenticadas. Para obtener más información, consulte Autorización con identidades de Amazon Cognito.
Para las siguientes operaciones, AWS IoT Core utiliza AWS IoT Core políticas asociadas a las identidades de Amazon Cognito a través de la AttachPolicy
API. Esto reduce los permisos asociados al grupo de identidades de Amazon Cognito con identidades autenticadas.
-
iot:Connect
-
iot:Publish
-
iot:Subscribe
-
iot:Receive
-
iot:GetThingShadow
-
iot:UpdateThingShadow
-
iot:DeleteThingShadow
Esto significa que una identidad de Amazon Cognito necesita el permiso de la política de rol de IAM y la política de AWS IoT Core . La política de roles de IAM se adjunta al grupo y la AWS IoT Core política a Amazon Cognito Identity a través AWS IoT Core
AttachPolicy
de la API.
Los usuarios autenticados y no autenticados son tipos de identidad diferentes. Si no adjuntas una AWS IoT política a Amazon Cognito Identity, un usuario autenticado no podrá obtener la autorización AWS IoT y no tendrá acceso a AWS IoT los recursos ni a las acciones.
nota
Para otras AWS IoT Core operaciones o para identidades no autenticadas, AWS IoT Core no limita los permisos asociados a la función del grupo de identidades de Amazon Cognito. Para las identidades autenticadas y sin autenticar, esta es la política más permisiva que recomendamos asociar al rol del grupo de Amazon Cognito.
HTTP
Para permitir que identidades de Amazon Cognito sin autenticar publiquen mensajes sobre HTTP en un tema específico de la identidad de Amazon Cognito, asocie la política de IAM siguiente al rol de grupo de identidades de 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 la autenticación de usuarios, asocie la política anterior al rol del grupo de Amazon Cognito Identity y a Amazon Cognito Identity mediante la API. AWS IoT Core AttachPolicy
nota
Al autorizar las identidades de Amazon Cognito AWS IoT Core , tiene en cuenta ambas políticas y concede los privilegios mínimos especificados. Solo se permite una acción si ambas políticas permiten la acción solicitada. Si una de ellas no permite una acción, esa acción no se autoriza.
MQTT
Para permitir que las identidades de Amazon Cognito no autenticadas publiquen mensajes de MQTT WebSocket sobre un tema específico de Amazon Cognito Identity en su cuenta, adjunte la siguiente política de IAM al rol del grupo de Amazon Cognito Identity:
{
"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 la autenticación de usuarios, asocie la política anterior al rol del grupo de Amazon Cognito Identity y a Amazon Cognito Identity mediante la API. AWS IoT Core AttachPolicy
nota
Al autorizar las identidades de Amazon Cognito AWS IoT Core , tiene en cuenta ambas y concede los privilegios mínimos especificados. Solo se permite una acción si ambas políticas permiten la acción solicitada. Si una de ellas no permite una acción, esa acción no se autoriza.