Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Las marcas comerciales y la imagen comercial de Amazon no se pueden utilizar en relación con ningún producto o
servicio que no sea de Amazon de ninguna manera que pueda causar confusión entre los clientes y que menosprecie
o desacredite a Amazon. Todas las demás marcas comerciales que no sean propiedad de Amazon son propiedad de
sus respectivos propietarios, que pueden o no estar afiliados, conectados o patrocinados por Amazon.
AWS IoT Core Guía para desarrolladores
Table of Contents
¿Qué es AWS IoT? ............................................................................................................................ 1
Cómo acceden tus dispositivos y aplicacionesAWS IoT .................................................................... 1
QuéAWS IoTpuede hacer ............................................................................................................ 2
IoT en la industria .............................................................................................................. 2
IoT en la automatización del hogar ....................................................................................... 3
Cómo funciona AWS IoT ............................................................................................................. 3
El universo IoT ................................................................................................................... 3
AWS IoTdescripción general de los servicios .......................................................................... 6
Servicios de AWS IoT Core ................................................................................................. 9
Obtener más información sobre AWS IoT ..................................................................................... 12
Recursos de formación paraAWS IoT .................................................................................. 12
AWS IoTrecursos y guías .................................................................................................. 12
AWS IoTen las redes sociales ............................................................................................ 13
AWSservicios utilizados porAWS IoT Coremotor de reglas ...................................................... 13
Protocolos de comunicación compatibles conAWS IoT Core .................................................... 14
Novedades de laAWS IoT consola de de de de de de la de de ........................................................ 14
Leyenda .......................................................................................................................... 16
Introducción a AWS IoT Core ............................................................................................................. 18
Conecta tu primer dispositivo aAWS IoT Core ............................................................................... 18
Configura tuCuenta de AWS ...................................................................................................... 19
Registro en una Cuenta de AWS ........................................................................................ 19
Crear un usuario administrativo ........................................................................................... 20
Abra elAWS IoTconsola ..................................................................................................... 20
Pruebe elAWS IoT Coretutorial interactivo .................................................................................... 21
Conexión de dispositivos de IoT ......................................................................................... 21
Guardar el estado del dispositivo sin conexión ...................................................................... 22
Enrutamiento de los datos del dispositivo a los servicios ......................................................... 23
Pruebe elAWS IoTconexión rápida .............................................................................................. 23
Paso 1. Iniciar el tutorial .................................................................................................... 24
Paso 2. Crea una cosa (objeto) .......................................................................................... 24
Paso 3. Descarga archivos a tu dispositivo ........................................................................... 27
Paso 4. Ejecute la muestra ................................................................................................ 29
Paso 5. Explore más ......................................................................................................... 33
Probar la conectividad con el terminal de datos de su dispositivo ............................................. 33
ExploreAWS IoT Coreservicios en un tutorial práctico ..................................................................... 37
¿Qué opción de dispositivo es la mejor para ti? .................................................................... 38
CrearAWS IoTrecursos ...................................................................................................... 39
Configuración del dispositivo .............................................................................................. 42
Ver los mensajes MQTT con el cliente MQTT de AWS IoT .............................................................. 69
Visualización de mensajes MQTT en el cliente MQTT ............................................................ 69
Publicación de mensajes MQTT desde el cliente MQTT .......................................................... 71
Prueba de suscripciones compartidas en el cliente MQTT ....................................................... 72
Conexión a AWS IoT Core ................................................................................................................. 74
AWS IoT Core- puntos finales del plano de control ........................................................................ 74
AWS IoTpuntos finales del dispositivo .......................................................................................... 75
AWS IoT CoreporLoRaPuertas de enlace y dispositivos WAN .......................................................... 76
Conectarse aAWS IoT Corepuntos finales de servicio .................................................................... 77
AWS CLI para AWS IoT Core ............................................................................................ 77
SDK de AWS ................................................................................................................... 78
AWS Mobile SDK ............................................................................................................. 82
API REST delAWS IoT Coreservicios .................................................................................. 82
Conexión de dispositivos aAWS IoT ............................................................................................ 83
AWS IoTpuntos finales de servicio y datos del dispositivo ....................................................... 83
SDK de dispositivos de AWS IoT ........................................................................................ 85
iii
AWS IoT Core Guía para desarrolladores
iv
AWS IoT Core Guía para desarrolladores
v
AWS IoT Core Guía para desarrolladores
vi
AWS IoT Core Guía para desarrolladores
vii
AWS IoT Core Guía para desarrolladores
viii
AWS IoT Core Guía para desarrolladores
ix
AWS IoT Core Guía para desarrolladores
x
AWS IoT Core Guía para desarrolladores
xi
AWS IoT Core Guía para desarrolladores
xii
AWS IoT Core Guía para desarrolladores
xiii
AWS IoT Core Guía para desarrolladores
xiv
AWS IoT Core Guía para desarrolladores
xv
AWS IoT Core Guía para desarrolladores
Cómo acceden tus dispositivos y aplicacionesAWS IoT
Para una introducción práctica aAWS IoT, visitaIntroducción a AWS IoT Core (p. 18).
AWS IoTle permite seleccionar la más adecuada yup-to-datetecnologías para su solución. Para ayudarlo a
administrar y brindar soporte a sus dispositivos de IoT sobre el terreno,AWS IoT Coreadmite los siguientes
protocolos:
ElAWS IoT CoreEl corredor de mensajes admite dispositivos y clientes que utilizan los protocolos MQTT
y MQTT a través de WSS para publicar mensajes y suscribirse a ellos. También es compatible con
dispositivos y clientes que utilizan el protocolo HTTPS para publicar mensajes.
1
AWS IoT Core Guía para desarrolladores
QuéAWS IoTpuede hacer
• AWS IoTSDK de dispositivos—Cree aplicaciones en sus dispositivos que envíen mensajes y reciban
mensajes desdeAWS IoT. Para obtener más información, consulte AWS IoTSDK para dispositivos, SDK
para dispositivos móviles yAWS IoTCliente de dispositivo (p. 1489).
• AWS IoT CoreporLoRaMENDIGO—Conecte y administre su WAN de largo alcance (LoRadispositivos y
puertas de enlace (WAN) medianteAWS IoT CoreporLoRaMENDIGO (p. 1272).
• AWS Command Line Interface (AWS CLI): ejecuta comandos para AWS IoT en Windows, macOS X y
Linux. Estos comandos le permiten crear y administrar objetos, certificados, reglas, trabajos y políticas.
Para empezar, consulte la AWS Command Line Interface Guía de usuario de . Para obtener más
información acerca de los comandos deAWS IoT, consultemotínen elAWS CLIReferencia de comando.
• AWS IoT API - Cree sus aplicaciones IoT mediante solicitudes HTTP o HTTPS. Estas acciones de la
API le permiten crear y administrar objetos, certificados, reglas y políticas de manera programática. Para
obtener más información acerca de las acciones de la API para AWS IoT, consulte las acciones en las
referencias de API de AWS IoT.
• AWSSDK—Cree sus aplicaciones de IoT mediante API específicas para cada idioma. Estos SDK
integran las API de HTTP/HTTPS y le permiten programar en cualquiera de los lenguajes admitidos.
Para obtener más información, consulte SDK y herramientas de AWS.
También puedes accederAWS IoTa través delAWS IoTconsola, que proporciona una interfaz gráfica de
usuario (GUI) a través de la cual puede configurar y administrar los objetos, los certificados, las reglas, los
trabajos, las políticas y otros elementos de sus soluciones de IoT.
IoT en la industria
Estos son algunos ejemplos deAWS IoTsoluciones paracasos de uso industrialque aplican tecnologías de
IoT para mejorar el rendimiento y la productividad de los procesos industriales.
Vea cómoAWS IoTpuede recopilar y analizar datos de operaciones industriales para crear modelos
predictivos de calidad. Más información
• UsaAWS IoTpara respaldar el mantenimiento predictivo en las operaciones industriales
Vea cómoAWS IoTpuede ayudar a planificar el mantenimiento preventivo para reducir el tiempo de
inactividad no planificado. Más información
2
AWS IoT Core Guía para desarrolladores
IoT en la automatización del hogar
Estos son algunos ejemplos deAWS IoTsoluciones paracasos de uso de automatización del hogarque
aplican tecnologías de IoT para crear aplicaciones de IoT escalables que automaticen las actividades del
hogar mediante dispositivos domésticos conectados.
Para obtener una lista de soluciones para casos de uso industrial, comercial y de consumo, consulteAWS
IoTRepositorio de soluciones.
El universo IoT
En general, el Internet de las cosas (IoT) se compone de los componentes clave que se muestran en este
diagrama.
3
AWS IoT Core Guía para desarrolladores
El universo IoT
móviles
Las aplicaciones permiten a los usuarios finales acceder a los dispositivos de IoT y a las funciones que
proporcionan los servicios en la nube a los que están conectados esos dispositivos.
Servicios en la nube
Los servicios en la nube son servicios de almacenamiento y procesamiento de datos distribuidos y a gran
escala que están conectados a Internet. Entre los ejemplos se incluyen:
Comunicaciones
Los dispositivos se comunican con los servicios en la nube mediante diversas tecnologías y protocolos.
Entre los ejemplos se incluyen:
4
AWS IoT Core Guía para desarrolladores
El universo IoT
Dispositivos
Un dispositivo es un tipo de hardware que administra las interfaces y las comunicaciones. Los dispositivos
suelen estar ubicados muy cerca de las interfaces del mundo real que supervisan y controlan. Los
dispositivos pueden incluir recursos informáticos y de almacenamiento, como microcontroladores, CPU y
memoria. Entre los ejemplos se incluyen:
• Raspberry Pi
• Arduino
• Asistentes de interfaz de voz
• LoRaWAN y dispositivos
• Dispositivos Amazon Sidewalk
• Dispositivos IoT personalizados
Interfaces
Una interfaz es un componente que conecta un dispositivo con el mundo físico.
• Interfaces de usuario
Componentes que permiten que los dispositivos y los usuarios se comuniquen entre sí.
• Interfaces de entrada
Componentes de entrada que miden o detectan algo en el mundo exterior de una manera que un
dispositivo entiende. Entre los ejemplos se incluyen:
• Sensor de temperatura (convierte la temperatura en una señal analógica o digital)
• Sensor de humedad (convierte la humedad relativa en una señal analógica o digital)
• Convertidor analógico a digital (convierte una tensión analógica en un valor numérico)
• Unidad de medición de distancia por ultrasonidos (convierte una distancia en un valor numérico)
• Sensor óptico (convierte un nivel de luz en un valor numérico)
• Cámara (convierte los datos de imagen en datos digitales)
• Actuadores
Componentes de salida que el dispositivo puede usar para controlar algo en el mundo exterior. Entre los
ejemplos se incluyen:
• Motores paso a paso (convierten las señales eléctricas en movimiento)
• Relés (controlan altas tensiones y corrientes eléctricas)
5
AWS IoT Core Guía para desarrolladores
AWS IoTdescripción general de los servicios
ElAWS IoTSDK para dispositivos y dispositivos móviles (p. 1489)le ayudan a conectar sus dispositivos
de manera eficiente aAWS IoT. Los de AWS IoT para dispositivos y móviles contienen bibliotecas de
código abierto, guías para desarrolladores con ejemplos y guías de portabilidad para que pueda crear
innovadores productos y soluciones de IoT en las plataformas de hardware que prefiera.
AWS IoT Device Tester
AWS IoT Device Testerpara FreeRTOS yAWS IoT Greengrasses una herramienta de automatización
de pruebas para microcontroladores.AWS IoT Device Testerprueba su dispositivo para determinar si
ejecutará FreeRTOS oAWS IoT Greengrasse interoperar conAWS IoTservicios.
AWS IoT ExpressLink
AWS IoT Greengrassse extiendeAWS IoTa dispositivos periféricos para que puedan actuar localmente
en función de los datos que generan, ejecutar predicciones basadas en modelos de aprendizaje
automático y filtrar y agregar los datos de los dispositivos.AWS IoT Greengrasspermite que sus
6
AWS IoT Core Guía para desarrolladores
AWS IoTdescripción general de los servicios
dispositivos recopilen y analicen datos más cerca de donde se generan esos datos, reaccionen de
forma autónoma ante los eventos locales y se comuniquen de forma segura con otros dispositivos de
la red local. Puedes usarAWS IoT Greengrasspara crear aplicaciones periféricas mediante módulos de
software prediseñados, denominados componentes, que pueden conectar sus dispositivos periféricos
aAWSservicios o servicios de terceros.
FreeRTOS
RTOS gratuitoses un sistema operativo de código abierto y en tiempo real para microcontroladores
que le permite incluir dispositivos periféricos pequeños y de bajo consumo en su solución de IoT.
FreeRTOS incluye un núcleo y un conjunto creciente de bibliotecas de software que admiten muchas
aplicaciones. Los sistemas FreeRTOS pueden conectar de forma segura sus dispositivos pequeños y
de bajo consumo aAWS IoTy admiten la ejecución de dispositivos periféricos más potentesAWS IoT
Greengrass.
AWS IoT Corees un servicio de nube gestionado que permite a los dispositivos conectados interactuar
de forma segura con las aplicaciones en la nube y otros dispositivos.AWS IoT Corepuede admitir
muchos dispositivos y mensajes, y puede procesar y enrutar esos mensajes aAWS IoTpuntos finales
y otros dispositivos. ConAWS IoT Core, tus aplicaciones pueden interactuar con todos tus dispositivos
incluso cuando no estén conectados.
AWS IoT Core Device Advisor
AWS IoT CoreAsesor de dispositivoses una capacidad de prueba totalmente gestionada y basada en
la nube para validar los dispositivos de IoT durante el desarrollo del software del dispositivo. Device
Advisor proporciona pruebas prediseñadas que puede utilizar para validar los dispositivos de IoT y
lograr una conectividad confiable y segura conAWS IoT Core, antes de implementar los dispositivos en
producción.
AWS IoT Device Defender
AWS IoTDefensor de dispositivosle ayuda a proteger su flota de dispositivos de IoT.AWS IoT Device
Defender audita continuamente sus configuraciones de IoT para asegurarse de que no se desvíen
de las mejores prácticas de seguridad.AWS IoT Device Defender envía una alerta cuando detecta
cualquier brecha en la configuración de IoT que pueda suponer un riesgo para la seguridad, como
certificados de identidad que se comparten en varios dispositivos o un dispositivo con un certificado de
identidad revocado que intenta conectarse aAWS IoT Core.
AWS IoTAdministración de dispositivos
7
AWS IoT Core Guía para desarrolladores
AWS IoTdescripción general de los servicios
Transmisiones de vídeo de Amazon Kinesisle permite transmitir vídeo en directo desde dispositivos
aAWSLa nube, donde se almacena, cifra e indexa de forma duradera, lo que le permite acceder a
sus datos a través deeasy-to-useAPIs. Puede utilizar Amazon Kinesis Video Streams para capturar
enormes cantidades de datos de vídeo en directo de millones de fuentes, incluidos teléfonos
inteligentes, cámaras de seguridad, cámaras web, cámaras integradas en automóviles, drones y otras
fuentes. Amazon Kinesis Video Streams le permite reproducir vídeos para verlos en directo y bajo
demanda, y crear rápidamente aplicaciones que aprovechen la visión artificial y el análisis de vídeo
mediante la integración con Amazon Rekognition Video y bibliotecas para marcos de aprendizaje
automático. También puede enviar datos serializados en el tiempo que no sean de vídeo, como, por
ejemplo, datos de audio, imágenes térmicas, datos de profundidad, datos de radar y mucho más.
Transmisiones de vídeo de Amazon Kinesis con WebRTC
AWS IoTEventosdetecta y responde a los eventos de los sensores y aplicaciones de IoT. Los eventos
son patrones de datos que identifican circunstancias más complicadas de lo esperado, como los
detectores de movimiento que utilizan señales de movimiento para activar las luces y las cámaras de
seguridad.AWS IoT Events monitorea continuamente los datos de múltiples sensores y aplicaciones
de IoT y se integra con otros servicios, comoAWS IoT Core, Internet de las cosasSiteWise, DynamoDB
y otros para permitir la detección temprana y obtener información única.
AWS IoT FleetWise
AWS IoT FleetWisees un servicio gestionado que puede utilizar para recopilar y transferir datos
de vehículos a la nube prácticamente en tiempo real. ConAWS IoT FleetWise, puede recopilar y
organizar fácilmente datos de vehículos que utilizan diferentes protocolos y formatos de datos.AWS
IoT FleetWiseayuda a transformar los mensajes de bajo nivel en valores legibles por humanos y
a estandarizar el formato de los datos en la nube para el análisis de datos. También puede definir
esquemas de recopilación de datos para controlar qué datos recopilar en los vehículos y cuándo
transferirlos a la nube.
AWS IoT SiteWise
AWS IoT SiteWiserecopila, almacena, organiza y monitorea los datos transmitidos desde los equipos
industriales mediante mensajes o API de MQTT a gran escala, proporcionando un software que se
ejecuta en una puerta de enlace en sus instalaciones. La pasarela se conecta de forma segura a los
servidores de datos locales y automatiza el proceso de recopilación y organización de los datos y su
envío alAWSNube.
8
AWS IoT Core Guía para desarrolladores
Servicios de AWS IoT Core
AWS IoT TwinMakerconstruye gemelos digitales operativos de sistemas físicos y digitales.AWS IoT
TwinMakercrea visualizaciones digitales mediante mediciones y análisis de una variedad de sensores,
cámaras y aplicaciones empresariales del mundo real para ayudarlo a realizar un seguimiento de
su fábrica física, edificio o planta industrial. Puede utilizar datos del mundo real para supervisar las
operaciones, diagnosticar y corregir errores y optimizar las operaciones.
En la siguiente sección se describe cada uno de losAWS IoT Coreservicios que se muestran en la
ilustración.
Gateway de dispositivos
Permite a los dispositivos comunicarse de forma segura y eficaz con AWS IoT. La comunicación del
dispositivo está protegida por protocolos seguros que utilizan certificados X.509.
Agente de mensajes
Proporciona un mecanismo seguro para que los dispositivos y las aplicaciones de AWS IoT publiquen
y reciban mensajes entre sí. Puede utilizar el protocolo MQTT directamente o MQTT a través
deWebSocketpara publicar y suscribirse. Para obtener más información sobre los protocolos queAWS
IoTsoportes, consultethe section called “Protocolos de comunicación de dispositivos” (p. 87). Los
dispositivos y los clientes también pueden usar la interfaz HTTP REST para publicar datos en el
intermediario de mensajes.
El agente de mensajes distribuye los datos del dispositivo a los dispositivos que se han suscrito a él y
a otrosAWS IoT Coreservicios, como el servicio Device Shadow y el motor de reglas.
9
AWS IoT Core Guía para desarrolladores
Servicios de AWS IoT Core
AWS IoT CoreporLoRaLa WAN permite configurar una red privadaLoRaRed WAN mediante la
conexión de suLoRaDispositivos WAN y puertas de enlace aAWSsin la necesidad de desarrollar y
operar unLoRaServidor de red WAN (LNS). Mensajes recibidos deLoRaLos dispositivos WAN se
envían al motor de reglas, donde se pueden formatear y enviar a otrosAWS IoTservicios.
Motor de reglas
El motor de reglas conecta los datos del intermediario de mensajes con otrosAWS IoTservicios de
almacenamiento y procesamiento adicional. Por ejemplo, puede insertar, actualizar o consultar una
tabla de DynamoDB o invocar una función de Lambda en función de una expresión que haya definido
en el motor de reglas. Puede utilizar un lenguaje basado en SQL para seleccionar datos de las cargas
de mensajes y, a continuación, procesarlos y enviarlos a otros servicios, como Amazon Simple
Storage Service (Amazon S3), Amazon DynamoDB yAWS Lambda. También puede crear reglas que
vuelvan a publicar los mensajes en el intermediario de mensajes y en otros suscriptores. Para obtener
más información, consulte Reglas para AWS IoT (p. 516).
Le permite aprovisionar dispositivos mediante una plantilla que describe los recursos necesarios para
su dispositivo: aobjeto objeto, un certificado y una o más políticas. Un objeto objeto es una entrada del
registro que contiene atributos que describen un dispositivo. Los dispositivos usan certificados para
realizar la autenticación con AWS IoT. Las políticas determinan qué operaciones pueden realizar los
dispositivos en AWS IoT.
Las plantillas contienen variables que se sustituirán por los valores en un diccionario (mapa).
Puede usar la misma plantilla para aprovisionar varios dispositivos tan solo pasando diferentes
valores para las variables de la plantilla en el diccionario. Para obtener más información, consulte
Aprovisionamiento de dispositivos (p. 886).
Registro de grupos
Los grupos permiten administrar varios dispositivos a la vez clasificándolos en grupos. Los grupos
también pueden contener grupos; puede crear una jerarquía de grupos. Cualquier acción que realice
en un grupo principal se aplicará a sus grupos secundarios. La misma acción también se aplica
a todos los dispositivos del grupo principal y a todos los dispositivos de los grupos secundarios.
Los permisos concedidos a un grupo se aplicarán a todos los dispositivos del grupo y a todos sus
grupos secundarios. Para obtener más información, consulte Administración de dispositivos con AWS
IoT (p. 281).
Servicio de Jobs
Permite definir un conjunto de operaciones remotas que se envían y se ejecutan en uno o más
dispositivos conectados aAWS IoT. Por ejemplo, puede definir un trabajo que indique a un conjunto de
10
AWS IoT Core Guía para desarrolladores
Servicios de AWS IoT Core
Para crear un trabajo, especifique una descripción de las operaciones remotas que se van a realizar y
una lista de destinos que deben realizarlas. Los destinos pueden ser dispositivos individuales, grupos
o ambos. Para obtener más información, consulte Trabajos (p. 731).
Registry (Registro)
Organiza los recursos asociados a cada dispositivo enAWSNube. Es necesario registrar los
dispositivos y asociar hasta tres atributos personalizados a cada uno. También es posible asociar
certificados e ID de cliente MQTT a cada dispositivo para poder administrarlos y solucionar los
problemas que presenten con mayor facilidad. Para obtener más información, consulte Administración
de dispositivos con AWS IoT (p. 281).
Servicio de seguridad e identidad
Documento JSON utilizado para almacenar y recuperar información del estado actual de un
dispositivo.
Servicio Device Shadow
El servicio Device Shadow mantiene el estado del dispositivo para que las aplicaciones puedan
comunicarse con él, ya sea que el dispositivo esté en línea o no. Cuando un dispositivo está
desconectado, el servicio Device Shadow administra los datos de las aplicaciones conectadas.
Cuando el dispositivo se vuelve a conectar, sincroniza su estado con el de su sombra en el servicio
Device Shadow. Los dispositivos también pueden publicar su estado actual en una sombra para
que las aplicaciones u otros dispositivos que no estén conectados todo el tiempo. Para obtener más
información, consulte Servicio Device Shadow de AWS IoT (p. 683).
Amazon Sidewalkes una red compartida que mejora las opciones de conectividad para ayudar a que
los dispositivos funcionen mejor juntos. Amazon Sidewalk es compatible con una amplia gama de
dispositivos de los clientes, como los que localizan mascotas u objetos de valor, los que proporcionan
un control inteligente de la seguridad del hogar y la iluminación, y los que proporcionan diagnósticos
remotos para electrodomésticos y herramientas. Integración con Amazon Sidewalk paraAWS IoT
Corepermite a los fabricantes de dispositivos añadir su flota de dispositivos Sidewalk a laAWS
IoTNube.
Para obtener más información, consulte AWS IoT Core para Amazon Sidewalk (p. 1397)
11
AWS IoT Core Guía para desarrolladores
Obtener más información sobre AWS IoT
Un curso avanzado que explora los conceptos deAWS IoTautenticación y autorización. Aprenderá a
autenticar y autorizar a los clientes a acceder alAWS IoTAPI de plano de control y plano de datos.
• Serie básica de Internet de las cosas
Una ruta de aprendizaje de módulos de aprendizaje electrónico de IoT sobre diferentes tecnologías y
funciones de IoT.
Un documento que describe las mejores prácticas para diseñar la arquitectura de sus aplicaciones de
IoT enAWS.
• Diseño de temas de MQTT paraAWS IoT Core
Un documento técnico que describe las mejores prácticas para diseñar temas de MQTT enAWS IoT
Corey apalancamientoAWS IoT Corefunciones con MQTT.
• Resumen e introducción
Un documento PDF que describe las diferentes formas en queAWS IoTpermite aprovisionar grandes
flotas de dispositivos.
• AWS IoT Core Device Advisor
AWS IoT CoreDevice Advisor proporciona pruebas prediseñadas que puede utilizar para validar los
dispositivos de IoT y obtener las mejores prácticas de conectividad confiable y segura conAWS IoT Core,
antes de implementar los dispositivos en producción.
• Recursos de AWS IoT
Los recursos específicos del IoT, como guías técnicas, arquitecturas de referencia, libros electrónicos y
publicaciones de blog seleccionadas, se presentan en un índice con capacidad de búsqueda.
• Atlas de IoT
Información general sobre cómo resolver problemas comunes de diseño de IoT. ElAtlas de
IoTproporciona un análisis detallado de los desafíos de diseño que probablemente encontrará al
desarrollar su solución de IoT.
12
AWS IoT Core Guía para desarrolladores
AWS IoTen las redes sociales
• Amazon DynamoDB
Amazon DynamoDB es un servicio de base de datos NoSQL escalable que proporciona un rendimiento
de base de datos rápido y predecible.
• Amazon Kinesis
AWS Lambda le permite ejecutar código sin aprovisionar ni administrar servidores. Puedes configurar
tu código para que se active automáticamente desdeAWS IoTdatos y eventos o llámalo directamente
desde una aplicación web o móvil.
• Amazon Simple Storage Service
Amazon Simple Storage Service (Amazon S3) puede almacenar y recuperar cualquier cantidad de datos
en cualquier momento y desde cualquier lugar de la web.AWS IoTlas reglas pueden enviar datos a
Amazon S3 para su almacenamiento.
• Amazon Simple Notification Service
Amazon Simple Notification Service (Amazon SNS) es un servicio web que permite a las aplicaciones,
los usuarios finales y los dispositivos enviar y recibir notificaciones desde la nube.
• Amazon Simple Queue Service
13
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación compatibles conAWS IoT Core
Amazon Simple Queue Service (Amazon SQS) es un servicio de colas de mensajes que desacopla y
escala los microservicios, los sistemas distribuidos y las aplicaciones sin servidor.
• AmazonOpenSearchServicio
La página principal del sitio MQTT.org donde puede encontrar las especificaciones del protocolo MQTT.
Para obtener más información sobre cómoAWS IoTadmite MQTT, consulteMQTT (p. 90).
• HTTPS (Protocolo de transferencia de hipertexto - Seguro)
LoRaLos dispositivos WAN y las puertas de enlace se pueden conectar aAWS IoT Coremediante el
usoAWS IoT CoreporLoRaMENDIGO.
• TLS (Transport Layer Security) v1.2
La especificación del TLS v1.2 (RFC 5246).AWS IoTusa TLS v1.2 para establecer conexiones seguras
entre dispositivos yAWS IoT.
Esta tabla muestra el estado de las áreas individuales de la interfaz de usuario de laAWS IoT consola al 27
de enero de 2022.
14
AWS IoT Core Guía para desarrolladores
Novedades de laAWS IoT consola
de de de de de de la de de
15
AWS IoT Core Guía para desarrolladores
Leyenda
Leyenda
Valores de estado
• Disponible
16
AWS IoT Core Guía para desarrolladores
Leyenda
Se está trabajando en la nueva experiencia de interfaz de usuario, pero aún no está lista.
• En curso
17
AWS IoT Core Guía para desarrolladores
Conecta tu primer dispositivo aAWS IoT Core
• MirainternoAWS IoTy sus componentes enCómo funciona AWS IoT (p. 3).
• Aprendemás sobreAWS IoT (p. 12)de nuestra colección de materiales y vídeos de formación. Este tema
también incluye una lista de servicios queAWS IoTpuede conectarse a enlaces de redes sociales y
enlaces a las especificaciones del protocolo de comunicación.
• the section called “Conecta tu primer dispositivo aAWS IoT Core” (p. 18).
• Desarrollarsus soluciones de IoT medianteConexión a AWS IoT Core (p. 74)y explorando elTutoriales
de AWS IoT (p. 139).
• Probar y validarsus dispositivos de IoT para una comunicación segura y confiable mediante elAsesor de
dispositivos (p. 1148).
• Administrarsu solución mediante el uso deAWS IoT Coreservicios de administración comoIndexación de
flota (p. 921),Trabajos (p. 731), yAWS IoT Device Defender (p. 966).
• Analizalos datos de sus dispositivos mediante elServicios de datos de AWS IoT (p. 7).
Esta sección presenta un recorrido por elAWS IoT Corepara presentar sus servicios clave y ofrece varios
ejemplos de cómo conectar un dispositivo aAWS IoT Corey pasar mensajes entre ellos. La transmisión de
mensajes entre los dispositivos y la nube es fundamental para todas las soluciones de IoT y es la forma en
que sus dispositivos pueden interactuar con otrasAWSservicios.
Antes de poder usarAWS IoTservicios, debe configurar unCuenta de AWS. Si ya tienes unCuenta de
AWSy un usuario de IAM para usted, puede usarlos y omitir este paso.
• Prueba el tutorial interactivo (p. 21)
18
AWS IoT Core Guía para desarrolladores
Configura tuCuenta de AWS
Esta demostración es la mejor si quieres ver qué es lo básicoAWS IoTla solución puede funcionar
sin conectar un dispositivo ni descargar ningún software. El tutorial interactivo presenta una solución
simulada basada enAWS IoT Coreservicios que ilustran cómo interactúan.
• Prueba el tutorial de conexión rápida (p. 23)
Este tutorial es el mejor si quieres empezar rápidamente conAWS IoTy vea cómo funciona en un
escenario limitado. En este tutorial, necesitarás un dispositivo e instalarás algunosAWS IoTsoftware
que contiene. Si no tienes un dispositivo de IoT, puedes usar tu ordenador personal Windows, Linux o
macOS como dispositivo para este tutorial. Si quieres probarAWS IoT, pero no tienes un dispositivo,
prueba la siguiente opción.
• ExploreAWS IoT Coreservicios con un tutorial práctico (p. 37)
Este tutorial es ideal para los desarrolladores que quieren empezar conAWS IoTpara que puedan seguir
explorando otrosAWS IoT Corefunciones como el motor de reglas y las sombras. Este tutorial sigue
un proceso similar al tutorial de conexión rápida, pero proporciona más detalles sobre cada paso para
permitir una transición más sencilla a los tutoriales más avanzados.
• Vea los mensajes MQTT conAWS IoTCliente MQTT (p. 69)
Aprenda a usar el cliente de prueba de MQTT para ver cómo su primer dispositivo publica mensajes
MQTT enAWS IoT. El cliente de prueba MQTT es una herramienta útil para monitorear y solucionar
problemas de conexiones de dispositivos.
Note
Si quieres probar más de uno de estos tutoriales de introducción o repetir el mismo tutorial, debes
eliminar el objeto thing que creaste de un tutorial anterior antes de empezar otro. Si no eliminas
el objeto objeto de un tutorial anterior, tendrás que usar un nombre diferente para los tutoriales
posteriores. Esto se debe a que el nombre de la cosa debe ser único en tu cuenta yRegión de
AWS.
Para obtener más información acerca de AWS IoT Core, consulte ¿Qué es AWS IoT Core? (p. 1).
Temas
• Registro en una Cuenta de AWS (p. 19)
• Crear un usuario administrativo (p. 20)
• Abra elAWS IoTconsola (p. 20)
1. Abra https://portal.aws.amazon.com/billing/signup.
2. Siga las instrucciones en línea.
Parte del procedimiento de inscripción consiste en recibir una llamada telefónica e indicar un código de
verificación en el teclado del teléfono.
19
AWS IoT Core Guía para desarrolladores
Crear un usuario administrativo
Al registrase en una Cuenta de AWS, se crea un Usuario raíz de la cuenta de AWS. El usuario raíz
tiene acceso a todos los recursos y Servicios de AWS de esa cuenta. Como práctica recomendada de
seguridad, asigne acceso administrativo a un usuario administrativo y utilice únicamente el usuario raíz
para realizar la ejecución tareas que requieren acceso de usuario raíz.
AWS le enviará un email de confirmación luego de completar el proceso de registro. Puede ver la actividad
de la cuenta y administrar la cuenta en cualquier momento entrando en https://aws.amazon.com/ y
seleccionando My Account (Mi cuenta).
1. Inicie sesión en AWS Management Console como propietario de cuenta eligiendo Usuario raíz e
ingrese el email de su Cuenta de AWS. En la siguiente página, escriba su contraseña.
Para obtener ayuda para iniciar sesión con el usuario raíz, consulte Signing in as the root user (Iniciar
sesión como usuario raíz) en la Guía del usuario de AWS Sign-In.
2. Active la autenticación multifactor (MFA) para el usuario raíz.
Para obtener instrucciones, consulte Habilitar un dispositivo MFA virtual para el usuario raíz Cuenta de
AWS (consola) en la Guía del usuario de IAM.
• Para las tareas administrativas diarias, conceda acceso administrativo a un usuario administrativo en
AWS IAM Identity Center.
Para obtener instrucciones, consulte Introducción en la Guía del usuario de AWS IAM Identity Center.
• Para iniciar sesión con el usuario del Centro de identidades de IAM, utilice la URL de inicio de sesión
que se envió a la dirección de correo electrónico cuando creó el usuario del Centro de identidades de
IAM.
Para obtener ayuda para iniciar sesión con un usuario del Centro de identidades de IAM, consulte
Iniciar sesión en el portal de acceso de AWS en la Guía del usuario de AWS Sign-In.
Si ya tienes unCuenta de AWSy un usuario para ti, puedes usarlos y pasar athe section called “Abra
elAWS IoTconsola” (p. 20).
20
AWS IoT Core Guía para desarrolladores
Pruebe elAWS IoT Coretutorial interactivo
Para ejecutar la demostración, primero debethe section called “Configura tuCuenta de AWS” (p. 19). El
tutorial, sin embargo, no requiere ningunaAWS IoTrecursos, software adicional o cualquier código.
21
AWS IoT Core Guía para desarrolladores
Guardar el estado del dispositivo sin conexión
La animación de este paso muestra cómo dos dispositivos, el dispositivo de control de la izquierda y una
lámpara inteligente de la casa a la derecha, se conectan y se comunican conAWS IoT Coreen la nube. La
animación muestra los dispositivos que se comunican conAWS IoT Corey reaccionando a los mensajes
que reciben.
Para obtener más información sobre la conexión de dispositivos aAWS IoT Core, consulteConexión a AWS
IoT Core (p. 74).
La animación de este paso muestra cómo el servicio Device Shadow enAWS IoT Coreguarda la
información del estado del dispositivo para el dispositivo de control y la lámpara inteligente. Mientras la
lámpara inteligente está desconectada, Device Shadow guarda los comandos del dispositivo de control.
22
AWS IoT Core Guía para desarrolladores
Enrutamiento de los datos del dispositivo a los servicios
Cuando la lámpara inteligente se vuelva a conectar aAWS IoT Core, recupera esos comandos. Cuando el
dispositivo de control está desconectado, Device Shadow guarda la información de estado de la lámpara
inteligente. Cuando el dispositivo de control se vuelve a conectar, recupera el estado actual de la lámpara
inteligente para actualizar su pantalla.
Para obtener más información sobre Device Shadows, consulteServicio Device Shadow de AWS
IoT (p. 683).
La animación de este paso muestra cómoAWS IoT Coreenvía datos de los dispositivos a
otrosAWSservicios mediante el uso deAWS IoTreglas.AWS IoTlas reglas se suscriben a mensajes
específicos de los dispositivos, interpretan los datos de esos mensajes y enrutan los datos interpretados
a otros servicios. En este ejemplo, unAWS IoTLa regla interpreta los datos de un sensor de movimiento
y envía los comandos a un Device Shadow, que luego los envía a la bombilla inteligente. Como en el
ejemplo anterior, Device Shadow almacena la información del estado del dispositivo de control.
Para obtener más información acerca de las reglas del AWS IoT, consulte Reglas para AWS IoT (p. 516).
Este tutorial es el mejor para las personas que desean comenzar rápidamente conAWS IoTpara ver cómo
funciona en un escenario limitado. Si estás buscando un ejemplo que te ayude a empezar a explorar más
funciones y servicios, pruebaExploreAWS IoT Coreservicios en un tutorial práctico (p. 37).
23
AWS IoT Core Guía para desarrolladores
Paso 1. Iniciar el tutorial
ser un dispositivo de IoT, como una Raspberry Pi, o también puede ser un ordenador que ejecute
Linux, OS y OSX o Windows. Si desea conectar una WAN de largo alcance (LoRadispositivo
WAN (a) paraAWS IoT, consulte el tutorialConexión de dispositivos y puertas de enlace aAWS IoT
CoreporLoRaMENGUAR (p. 1272).
Si el dispositivo admite un navegador que pueda ejecutar elAWS IoTconsola, le recomendamos que
complete este tutorial en ese dispositivo.
Note
El tutorial requiere que su dispositivo de IoT se comunique con el puerto 8443 de suCuenta de AWSpunto
final de datos del dispositivo. Para comprobar si puede acceder a ese puerto, pruebe los procedimientos
deProbar la conectividad con el terminal de datos de su dispositivo (p. 33).
Para iniciar el tutorial, inicie sesión enAWS IoTconsola. En elAWS IoTpágina principal de la consola, a la
izquierda, eligeConectary luego eligeConectar un dispositivo.
24
AWS IoT Core Guía para desarrolladores
Paso 2. Crea una cosa (objeto)
25
AWS IoT Core Guía para desarrolladores
Paso 2. Crea una cosa (objeto)
Asegúrese de consultar la lista del software necesario para el SDK que haya elegido en la
parte inferior de la página de la consola.
Debe tener el software necesario instalado en el equipo de destino antes de continuar con el
siguiente paso.
26
AWS IoT Core Guía para desarrolladores
Paso 3. Descarga archivos a tu dispositivo
1. Cuando esté listo para continuar, elijaDescargue el kit de conexión parabotón para descargar el kit de
conexión para la plataforma que eligió anteriormente.
27
AWS IoT Core Guía para desarrolladores
Paso 3. Descarga archivos a tu dispositivo
2. Si ejecuta este procedimiento en el dispositivo, guarde el archivo del kit de conexión en un directorio
desde el que pueda ejecutar los comandos de línea de comandos.
Si no está ejecutando este procedimiento en el dispositivo, guarde el archivo del kit de conexión en un
directorio local y, a continuación, transfiera el archivo al dispositivo.
3. En elDescomprime el kit de conexión en tu dispositivosección, introduzcaunzip
connect_device_package.zipen el directorio donde se encuentran los archivos del kit de conexión.
28
AWS IoT Core Guía para desarrolladores
Paso 4. Ejecute la muestra
1. En una terminal o ventana de comandos del dispositivo, en el directorio que contiene el archivo del kit
de conexión, siga los pasos que se muestran enAWS IoTconsola.
29
AWS IoT Core Guía para desarrolladores
Paso 4. Ejecute la muestra
2. Después de introducir el comando desdePaso 2en la consola, deberías ver una salida en la terminal o
ventana de comandos del dispositivo similar a la siguiente. Esta salida proviene de los mensajes a los
que el programa envía y luego recibe de vuelta.AWS IoT Core.
30
AWS IoT Core Guía para desarrolladores
Paso 4. Ejecute la muestra
3. Para volver a ejecutar el programa de ejemplo, puede repetir los comandos dePaso 2en la consola de
este procedimiento.
4. (Opcional) Si desea ver los mensajes de su cliente de IoT en elAWS IoTconsola, abra elcliente de
prueba MQTTen elPruebapágina delAWS IoTconsola. Si eligió el SDK de Python, entonces encliente
de prueba MQTT, enFiltro de temas, introduzca el tema, comosdk/test/pythonpara suscribirse
a los mensajes de su dispositivo. Los filtros de temas distinguen entre mayúsculas y minúsculas y
dependen del lenguaje de programación del SDK que haya elegido enPaso 1. Para obtener más
información sobre la suscripción y la publicación de temas, consulta el ejemplo de código del SDK que
hayas elegido.
5. Después de suscribirse al tema de prueba, ejecute./start.shen tu dispositivo. Para obtener más
información, consulte the section called “Ver los mensajes MQTT con el cliente MQTT de AWS
IoT” (p. 69).
{
"message": "Hello World!" [1]
}
Elsequencenúmero incluido en[]aumenta en uno cada vez que se crea un nuevoHello World!se
recibe el mensaje y se detiene al finalizar el programa.
6. Para finalizar el tutorial y ver un resumen, enAWS IoTconsola, eligeContinuar.
31
AWS IoT Core Guía para desarrolladores
Paso 4. Ejecute la muestra
32
AWS IoT Core Guía para desarrolladores
Paso 5. Explore más
Desde elAWS IoTconsola, puede abrir elCliente MQTTen elPruebapágina delAWS IoTconsola. En
elcliente de prueba MQTT, suscríbete a#, y luego, en tu dispositivo, ejecuta el programa./start.shcomo
se describe en el paso anterior. Para obtener más información, consulte the section called “Ver los
mensajes MQTT con el cliente MQTT de AWS IoT” (p. 69).
• Realiza pruebas en tus dispositivos conAsesor de dispositivos
Utilice Device Advisor para comprobar si sus dispositivos pueden conectarse de forma segura y
confiable e interactuar con,AWS IoT.
• the section called “Pruebe elAWS IoT Coretutorial interactivo” (p. 21)
Este inicio rápido le ofrece solo una muestra deAWS IoT. Si quieres explorarAWS IoTcontinúe y conozca
las características que la convierten en una poderosa plataforma de soluciones de IoT, comience a
preparar su plataforma de desarrollo de la siguiente manera:ExploreAWS IoT Coreservicios en un tutorial
práctico (p. 37).
Realice estos procedimientos en el dispositivo que desee probar o mediante una sesión de terminal SSH
conectada al dispositivo que desee probar.
33
AWS IoT Core Guía para desarrolladores
Probar la conectividad con el
terminal de datos de su dispositivo
Si desea probar la conectividad con el puerto específico que utilizarán sus dispositivos, omita este
procedimiento y continúe conHaz que la aplicación pruebe la conexión al puerto y al punto final de datos
de tu dispositivo (p. 34).
1. En una ventana de terminal o línea de comandos del dispositivo, sustituya el extremo de datos del
dispositivo de ejemplo (a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com) con el terminal
de datos del dispositivo de su cuenta y, a continuación, introduzca este comando.
Linux
ping -c 5 a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com
Windows
ping -n 5 a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com
Si desea probar la conectividad con el puerto específico utilizado porAWS IoT, continúe conHaz que la
aplicación pruebe la conexión al puerto y al punto final de datos de tu dispositivo (p. 34).
3. Sipingno devolvió un resultado correcto, compruebe el valor del punto final para asegurarse de que
tiene el punto final correcto y compruebe la conexión del dispositivo a Internet.
34
AWS IoT Core Guía para desarrolladores
Probar la conectividad con el
terminal de datos de su dispositivo
1. En una ventana de terminal o línea de comandos del dispositivo que desea probar, introduzca este
comando para comprobar sinmapestá instalado.
nmap --version
Linux
Este procedimiento requiere que tenga permiso para instalar el software en el equipo.
1. En una ventana de terminal o línea de comandos del dispositivo, introduce el comando que
corresponda a la versión de Linux que esté ejecutando.
a. Debian o Ubuntu:
b. CentOS o RHEL:
nmap --version
macOS
Este procedimiento requiere que tenga permiso para instalar el software en el equipo.
35
AWS IoT Core Guía para desarrolladores
Probar la conectividad con el
terminal de datos de su dispositivo
nmap --version
Windows
Este procedimiento requiere que tenga permiso para instalar el software en el equipo.
No necesitas la aplicación Npcap para esta prueba. Puedes deseleccionar esa opción si no
quieres instalarla.
4. EnCommand, pruebe la instalación con este comando.
nmap --version
36
AWS IoT Core Guía para desarrolladores
ExploreAWS IoT Coreservicios en un tutorial práctico
1. En una ventana de terminal o línea de comandos del dispositivo, sustituya el extremo de datos del
dispositivo de ejemplo (a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com) con el terminal
de datos del dispositivo de su cuenta y, a continuación, introduzca este comando.
3. Sinmapno arrojó un resultado correcto, compruebe el valor del punto de conexión para asegurarse de
que tiene el punto de conexión correcto y compruebe la conexión del dispositivo a Internet.
Puede probar otros puertos del terminal de datos del dispositivo, como el puerto 443, el puerto HTTPS
principal, sustituyendo el puerto utilizado en el paso 1,8443, con el puerto que desea probar.
Puede esperar dedicar entre 20 y 30 minutos a este tutorial. Si utilizas un dispositivo IoT o una Raspberry
Pi, este tutorial puede tardar más si, por ejemplo, necesitas instalar el sistema operativo y configurar el
dispositivo.
37
AWS IoT Core Guía para desarrolladores
¿Qué opción de dispositivo es la mejor para ti?
Este tutorial es ideal para los desarrolladores que quieren empezar conAWS IoT Corepara que puedan
seguir explorando funciones más avanzadas, comomotor de reglasysombras. Este tutorial lo prepara para
seguir aprendiendo sobreAWS IoT Corey cómo interactúa con otrosAWSservicios explicando los pasos
con mayor detalle queel tutorial de inicio rápido (p. 23). Si estás buscando algo rápido,Hola mundo,
experimenta, prueba elPruebe elAWS IoTconexión rápida (p. 23).
Después de configurar suCuenta de AWSyAWS IoTconsola, seguirás estos pasos para ver cómo conectar
un dispositivo y hacer que envíe mensajes aAWS IoT Core.
Pasos siguientes
Para obtener más información acerca de AWS IoT Core, consulte ¿Qué es AWS IoT Core? (p. 1).
Opción Esta podría ser una buena Puede que esta no sea una
opción si: buena opción si:
the section called “Cree un • No tienes tu propio dispositivo • No te sientes cómodo usando
dispositivo virtual con Amazon para probar. los comandos de la línea de
EC2” (p. 42) • No querrás instalar ningún comandos.
software en tu propio sistema. • No querrás incurrir en ningún
• Desea realizar una prueba en gasto adicionalAWScargos.
un sistema operativo Linux. • No querrás realizar pruebas en
un sistema operativo Linux.
the section called “Utilice • No querrás incurrir en ningún • No querrás instalar ningún
su PC o Mac con Windows gasto adicionalAWScargos. software en tu ordenador
personal.
38
AWS IoT Core Guía para desarrolladores
CrearAWS IoTrecursos
Opción Esta podría ser una buena Puede que esta no sea una
opción si: buena opción si:
o Linux comoAWS • No desea configurar ningún • Quieres una plataforma de
IoTdispositivo” (p. 50) dispositivo adicional. pruebas más representativa.
CrearAWS IoTrecursos
En este tutorial, crearás elAWS IoTrecursos a los que un dispositivo necesita conectarseAWS IoT Coree
intercambiar mensajes.
1. Crea unAWS IoTdocumento de política, que autorizará al dispositivo a interactuar conAWS IoTservicios.
2. Crea un objeto objeto enAWS IoTy su certificado de dispositivo X.509 y, a continuación, adjunte
el documento de política. La cosa objeto es la representación virtual de su dispositivo en elAWS
IoTregistro. El certificado autentica el dispositivo paraAWS IoT Core, y el documento de política autoriza
al dispositivo a interactuar conAWS IoT.
Note
39
AWS IoT Core Guía para desarrolladores
CrearAWS IoTrecursos
En este tutorial se utiliza elAWS IoTconsola para crear elAWS IoTrecursos. Si su dispositivo admite un
navegador web, puede ser más fácil ejecutar este procedimiento en el navegador web del dispositivo,
ya que podrá descargar los archivos de certificado directamente en su dispositivo. Si ejecuta este
procedimiento en otro equipo, tendrá que copiar los archivos de certificado a su dispositivo para que la
aplicación de ejemplo pueda utilizarlos.
Siga los pasos para crear una política que permita a su dispositivo realizar laAWS IoToperaciones
necesarias para ejecutar el programa de ejemplo. Debe crear elAWS IoTpolítica antes de poder adjuntarla
al certificado del dispositivo, que crearás más adelante.
Note
En este inicio rápido, se utiliza el carácter comodín (*) por motivos de simplicidad. Para
mayor seguridad, debe restringir los clientes (dispositivos) que pueden conectarse
y publicar mensajes especificando un ARN de cliente en lugar del carácter comodín
como recurso. Los ARN de los clientes siguen este formato:arn:aws:iot:your-
region:your-aws-account:client/my-client-id.
40
AWS IoT Core Guía para desarrolladores
CrearAWS IoTrecursos
Sin embargo, primero debe crear el recurso (como un dispositivo cliente o una sombra
de objetos) antes de poder asignar su ARN a una política. Para obtener más información,
consulteAWS IoT Corerecursos de acción.
4. Después de introducir la información de tu póliza, eligeCrear.
Para obtener más información, consulte Cómo AWS IoT funciona con IAM (p. 411).
Elige los nombres de las cosas con cuidado, porque no podrás cambiarlas más adelante.
Para cambiar el nombre de un objeto, debe crear otro objeto nueva, asignarle el nuevo nombre y
eliminar después el objeto anterior.
Note
1. Descargue cada uno de los archivos de certificado y clave y guárdelos para más adelante. Deberás
instalar estos archivos en tu dispositivo.
Cuando guarde los archivos de certificados, asígneles los nombres de la tabla siguiente. Estos son
los nombres de archivo que se utilizan en los ejemplos posteriores.
41
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Debe guardar los archivos de certificados antes de salir de esta página. Al salir de esta
página en la consola, ya no tendrá acceso a los archivos de certificados.
Si olvidó descargar los archivos de certificado que creó en este paso, debe salir de la
pantalla de la consola, ir a la lista de elementos de la consola, eliminar el objeto de cosa
que creó y, a continuación, reiniciar este procedimiento desde el principio.
3. Seleccione Done (Listo).
Después de completar este procedimiento, debería ver el nuevo objeto objeto en la lista de cosas.
Selecciona la mejor opción de dispositivo para probarlaAWS IoT Core. Por supuesto, puedes probarlas
todas, pero solo una a la vez. Si no estás seguro de qué opción de dispositivo es la mejor para ti, consulta
cómo elegirqué opción de dispositivo es la mejor (p. 38)y, a continuación, vuelve a esta página.
Opciones de dispositivo
Para completar este tutorial, necesitas unCuenta de AWS. Si no tiene uno, complete los pasos que se
describen enConfigura tuCuenta de AWS (p. 19)antes de continuar.
42
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Si es la primera vez que crea una instancia de Amazon EC2, puede encontrar las instrucciones
enComience a utilizar las instancias de Amazon EC2Linuxpara ser más útil.
No elija elContinuar sin un par de clavesopción. Si lanza la instancia sin un par de claves, no
podrá conectarse a ella.
7. En elAjustes de redsección y elConfigurar el almacenamientosección, puede mantener la
configuración predeterminada. Cuando esté listo, elijaLanzar instancias.
8. Verá una página de confirmación que indicará que la instancia se está lanzando. Elija View Instances
para cerrar la página de confirmación y volver a la consola.
9. Puede ver el estado del lanzamiento en la pantalla Instances (Instancias). La instancia tarda poco
tiempo en lanzarse. Al lanzar una instancia, su estado inicial es pending. Una vez iniciada la
instancia, el estado cambia a running y recibe un nombre de DNS público. (Si la columna Public
DNS (IPv4) (DNS público (IPv4)) está oculta, elija Show/Hide Columns (Mostrar/ocultar columnas)
(el icono con forma de engranaje) en la esquina superior derecha de la página y, a continuación,
seleccione Public DNS (IPv4) (DNS público (IPv4))).
10. Puede que transcurran unos minutos hasta que la instancia esté lista para conectarse a ella.
Compruebe que la instancia haya superado las comprobaciones de estado; puede ver esta
información en la columna Status Checks.
Una vez que la nueva instancia haya superado las comprobaciones de estado, continúe con el
siguiente procedimiento y conéctese a ella.
Para conectarse a una instancia mediante el cliente basado en el navegador, seleccione la instancia en la
consola de Amazon EC2 y elija conectarse mediante Amazon EC2 Instance Connect. Instance Connect
gestiona los permisos y proporciona una conexión exitosa.
43
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Ahora deberías tener unConexión de instancias de Amazon EC2ventana que está registrada en su nueva
instancia de Amazon EC2.
3. Para comprobar si se ha instalado Git y la versión actual de Git, ejecuta el siguiente comando:
git --version
Utilizaremos nvm para instalar Node.js, ya que nvm puede instalar varias versiones de Node.js y
permitirle alternar entre ellas.
2. En tuConexión de instancias de Amazon EC2ventana, active nvm con este comando.
. ~/.nvm/nvm.sh
3. En tuConexión de instancias de Amazon EC2ventana, utilice nvm para instalar la versión más reciente
de Node.js mediante este comando.
nvm install 16
Note
Si instala Node.js también instalará el administrador de paquetes de nodos (npm) para poder instalar
módulos adicionales según sea necesario.
4. En tuConexión de instancias de Amazon EC2ventana, compruebe que Node.js esté instalado y
funcionando correctamente mediante este comando.
44
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Este tutorial requiere Node v10.0 o posterior. Para obtener más información, consulteTutorial:
Configuración de Node.js en una instancia de Amazon EC2.
Su instancia de Amazon EC2 viene precargada conAWS CLI. Sin embargo, debe completar suAWS
CLIperfil. Para obtener más información sobre cómo configurar la CLI, consulteConfiguración delAWS CLI.
1. En el ejemplo siguiente se muestran los valores de ejemplo. Sustitúyalos por tus propios valores.
Puede encontrar estos valores en suAWSconsola en la información de tu cuenta, enCredenciales de
seguridad.
aws configure
A continuación, introduzca los valores de su cuenta siguiendo las instrucciones que aparecen.
Si tuAWS CLIestá configurado correctamente, el comando debe devolver una dirección de punto final
de suCuenta de AWS.
45
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
{
"thingArn": "arn:aws:iot:your-region:your-aws-account:thing/MyIotThing",
"thingName": "MyIotThing",
"thingId": "6cf922a8-d8ea-4136-f3401EXAMPLE"
}
1. En tuConexión de instancias de Amazon EC2ventana, cree un directorio para almacenar los archivos
de certificados y claves.
mkdir ~/certs
curl -o ~/certs/Amazon-root-CA-1.pem \
https://www.amazontrust.com/repository/AmazonRootCA1.pem
3. En tuConexión de instancias de Amazon EC2ventana, ejecute el siguiente comando para crear sus
archivos de clave privada, clave pública y certificado X.509. Este comando también registra y activa el
certificado conAWS IoT.
La respuesta tiene este aspecto: Guarde elcertificateArnpara que pueda usarlo en comandos
posteriores. Lo necesitarás para adjuntar tu certificado a lo tuyo y para adjuntar la política al certificado
en pasos posteriores.
{
"certificateArn": "arn:aws:iot:us-
west-2:123456789012:cert/9894ba17925e663f1d29c23af4582b8e3b7619c31f3fbd93adcb51ae54b83dc2",
"certificateId":
"9894ba17925e663f1d29c23af4582b8e3b7619c31f3fbd93adcb51ae54b83dc2",
"certificatePem": "
-----BEGIN CERTIFICATE-----
MIICiTCCEXAMPLE6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgEXAMPLEAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSEXAMPLE2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYEXAMPLEb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCEXAMPLEJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDAEXAMPLEsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEXAMPLE25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+aEXAMPLE
EXAMPLEfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZEXAMPLELG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
46
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Ibb3OhjZnzcvQAEXAMPLEWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9qEXAMPLEyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDEXAMPLEBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE=
-----END CERTIFICATE-----\n",
"keyPair": {
"PublicKey": "-----BEGIN PUBLIC
KEY-----\nMIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h
\nMMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/
gHr99VEEXAMPLE5VF13\n59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo
+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE
\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\nhJLXkX3rHU2xbxJSq7D
+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\nFQIDAQAB\n-----END PUBLIC KEY-----\n",
"PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nkey omitted for security
reasons\n-----END RSA PRIVATE KEY-----\n"
}
}
nano ~/policy.json
Pegue el documento de política parapolicy.jsonen él. Introduzca ctrl-x para salir denanoeditor y
guarde el archivo.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish",
"iot:Subscribe",
"iot:Receive",
"iot:Connect"
],
"Resource": [
"*"
]
}
]
}
47
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Salida:
{
"policyName": "MyIotThingPolicy",
"policyArn": "arn:aws:iot:your-region:your-aws-account:policy/MyIotThingPolicy",
"policyDocument": "{
\"Version\": \"2012-10-17\",
\"Statement\": [
{
\"Effect\": \"Allow\",
\"Action\": [
\"iot:Publish\",
\"iot:Receive\",
\"iot:Subscribe\",
\"iot:Connect\"
],
\"Resource\": [
\"*\"
]
}
]
}",
"policyVersionId": "1"
}
cd ~
git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
cd aws-iot-device-sdk-js-v2
48
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
npm install
cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
npm install
La aplicación de muestra:
49
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
{"message":"Hello world!","sequence":1}
Publish received. topic:"topic_1" dup:false qos:1 retain:false
{"message":"Hello world!","sequence":2}
Publish received. topic:"topic_1" dup:false qos:1 retain:false
{"message":"Hello world!","sequence":3}
Publish received. topic:"topic_1" dup:false qos:1 retain:false
{"message":"Hello world!","sequence":4}
Publish received. topic:"topic_1" dup:false qos:1 retain:false
{"message":"Hello world!","sequence":5}
Publish received. topic:"topic_1" dup:false qos:1 retain:false
{"message":"Hello world!","sequence":6}
Publish received. topic:"topic_1" dup:false qos:1 retain:false
{"message":"Hello world!","sequence":7}
Publish received. topic:"topic_1" dup:false qos:1 retain:false
{"message":"Hello world!","sequence":8}
Publish received. topic:"topic_1" dup:false qos:1 retain:false
{"message":"Hello world!","sequence":9}
Publish received. topic:"topic_1" dup:false qos:1 retain:false
{"message":"Hello world!","sequence":10}
Si tienes problemas para ejecutar la aplicación de muestra, consultathe section called “Solución de
problemas con la aplicación de muestra” (p. 67).
1. Consulte Ver los mensajes MQTT con el cliente MQTT de AWS IoT (p. 69). Esto le ayuda a
aprender a usar elcliente de prueba MQTTen elAWS IoTconsolapara ver los mensajes MQTT a
medida que pasan por el intermediario de mensajes.
2. Abra elcliente de prueba MQTTen elAWS IoTconsola.
3. EnSuscríbete a un tema, Suscríbete al tema,tema_1.
4. En tuConexión de instancias de Amazon EC2ventana, vuelva a ejecutar la aplicación de muestra y vea
los mensajes en elcliente de prueba MQTTen elAWS IoTconsola.
cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/
certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
Para obtener más información sobre MQTT y cómoAWS IoT Coreadmite el protocolo, consulteMATT.
50
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Antes de continuar con el paso siguiente, asegúrese de poder abrir una ventana de línea de comandos en
su ordenador. Usacmd.exeen un PC con Windows. En un PC Linux o Mac, utiliceTerminal.
1. Comprueba si tienes Git instalado en tu ordenador. Introduzca este comando en la línea de comandos.
git --version
Si el comando muestra la versión de Git, significa que Git está instalado y puede continuar con el paso
siguiente.
python -V
Note
Si este comando da un error:Python was not found, puede deberse a que su sistema
operativo llama al ejecutable Python v3.x comoPython3. En ese caso, sustituya todas las
instancias depythonconpython3y continúe con el resto de este tutorial.
Si el comando muestra la versión de Python, Python ya está instalado. Este tutorial requiere Python
v3.7 o posterior.
3. Si Python está instalado, puede omitir el resto de los pasos de esta sección. Si no, continúa.
4. Abrirhttps://www.python.org/downloads/y descarga el instalador para tu ordenador.
5. Si la descarga no se inicia automáticamente, ejecuta el programa descargado para instalar Python.
6. Compruebe la instalación de Python.
python -V
Confirme que el comando muestre la versión de Python. Si no aparece la versión de Python, intenta
descargar e instalar Python de nuevo.
51
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Linux/macOS
cd ~
git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
Windows
En Windows, puede encontrar elcasaruta del directorio mediante la ejecución de este comando
en elcmdventana.
echo %USERPROFILE%
cd %USERPROFILE%
git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
Note
echo $home
Los comandos de la siguiente sección asumen que los archivos de claves y certificados están
almacenados en el dispositivo, tal como se muestra en esta tabla.
Linux/macOS
Ejecute este comando para crearcertssubdirectorio que usará cuando ejecute las aplicaciones
de ejemplo.
52
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
mkdir ~/certs
En el nuevo subdirectorio, copie los archivos a las rutas de los archivos de destino que se
muestran en la tabla siguiente.
Ejecute este comando para enumerar los archivos delcertsdirectorio y compárelos con los que
figuran en la tabla.
ls -l ~/certs
Windows
Ejecute este comando para crearcertssubdirectorio que usará cuando ejecute las aplicaciones
de ejemplo.
mkdir %USERPROFILE%\certs
En el nuevo subdirectorio, copie los archivos a las rutas de los archivos de destino que se
muestran en la tabla siguiente.
Ejecute este comando para enumerar los archivos delcertsdirectorio y compárelos con los que
figuran en la tabla.
dir %USERPROFILE%\certs
53
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
script muestra cómo el dispositivo usa la biblioteca MQTT para publicar mensajes MQTT y suscribirse a
ellos.
Antes de ejecutar el script, asegúrate de que la política de tu aplicación proporcione permisos para que el
script de ejemplo se conecte, se suscriba, publique y reciba.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish",
"iot:Receive"
],
"Resource": [
"arn:aws:iot:region:account:topic/test/topic"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
54
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
],
"Resource": [
"arn:aws:iot:region:account:topicfilter/test/topic"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Connect"
],
"Resource": [
"arn:aws:iot:region:account:client/test-*"
]
}
]
}
Linux/macOS
cd ~/aws-iot-device-sdk-python-v2/samples
Windows
cd %USERPROFILE%\aws-iot-device-sdk-python-v2\samples
El script de ejemplo:
55
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Connected!
Subscribing to topic 'test/topic'...
Subscribed with QoS.AT_LEAST_ONCE
Sending 10 message(s)
Publishing message to topic 'test/topic': Hello World! [1]
Received message from topic 'test/topic': b'"Hello World! [1]"'
Publishing message to topic 'test/topic': Hello World! [2]
Received message from topic 'test/topic': b'"Hello World! [2]"'
Publishing message to topic 'test/topic': Hello World! [3]
Received message from topic 'test/topic': b'"Hello World! [3]"'
Publishing message to topic 'test/topic': Hello World! [4]
Received message from topic 'test/topic': b'"Hello World! [4]"'
Publishing message to topic 'test/topic': Hello World! [5]
Received message from topic 'test/topic': b'"Hello World! [5]"'
Publishing message to topic 'test/topic': Hello World! [6]
Received message from topic 'test/topic': b'"Hello World! [6]"'
Publishing message to topic 'test/topic': Hello World! [7]
Received message from topic 'test/topic': b'"Hello World! [7]"'
Publishing message to topic 'test/topic': Hello World! [8]
Received message from topic 'test/topic': b'"Hello World! [8]"'
Publishing message to topic 'test/topic': Hello World! [9]
Received message from topic 'test/topic': b'"Hello World! [9]"'
Publishing message to topic 'test/topic': Hello World! [10]
Received message from topic 'test/topic': b'"Hello World! [10]"'
10 message(s) received.
Disconnecting...
Disconnected!
Si tienes problemas para ejecutar la aplicación de muestra, consultathe section called “Solución de
problemas con la aplicación de muestra” (p. 67).
También puede añadir el--verbosity Debugparámetro de la línea de comandos para que la aplicación
de ejemplo muestre mensajes detallados sobre lo que está haciendo. Esa información podría ayudarle a
corregir el problema.
1. Consulte Ver los mensajes MQTT con el cliente MQTT de AWS IoT (p. 69). Esto le ayuda a
aprender a usar elcliente de prueba MQTTen elAWS IoTconsolapara ver los mensajes MQTT a
medida que pasan por el intermediario de mensajes.
2. Abra elcliente de prueba MQTTen elAWS IoTconsola.
3. EnSuscríbete a un tema, suscríbete al tema,prueba/tema.
4. En la ventana de línea de comandos, vuelva a ejecutar la aplicación de ejemplo y observe los
mensajes delCliente MQTTen elAWS IoTconsola.
Linux/macOS
cd ~/aws-iot-device-sdk-python-v2/samples
python3 pubsub.py --topic test/topic --ca_file ~/certs/Amazon-root-CA-1.pem --cert
~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
Windows
cd %USERPROFILE%\aws-iot-device-sdk-python-v2\samples
56
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Para obtener más información sobre MQTT y cómoAWS IoT Coreadmite el protocolo, consulteMATT.
1. Para ejecutar el ejemplo de suscripción compartida, debes configurar la política de tu producto tal y
como se indica enSuscripción compartida a MQTT 5.
2. Para ejecutar el ejemplo de suscripción compartida, ejecute los siguientes comandos.
Linux/macOS
cd ~/aws-iot-device-sdk-python-v2/samples
Windows
cd %USERPROFILE%\aws-iot-device-sdk-python-v2\samples
57
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Note
58
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
59
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Esto suele tardar unos 20 minutos, pero puede tardar más si tiene que instalar muchas actualizaciones del
software del sistema.
Important
Adaptar estas instrucciones a otros dispositivos y sistemas operativos puede resultar difícil.
Deberás entender tu dispositivo lo suficientemente bien como para poder interpretar estas
instrucciones y aplicarlas al dispositivo.
Si tiene dificultades al configurar el dispositivo paraAWS IoT, puede probar una de las otras
opciones del dispositivo como alternativa, comoCree un dispositivo virtual con Amazon
EC2 (p. 42)oUtilice su PC o Mac con Windows o Linux comoAWS IoTdispositivo (p. 50).
Configura tu dispositivo
El objetivo de este paso es recopilar lo que necesitará para configurar el dispositivo de modo que pueda
iniciar el sistema operativo (SO), conectarse a Internet y permitirle interactuar con él en una interfaz de
línea de comandos.
• Una Cuenta de AWS. Si no tiene uno, complete los pasos que se describen enConfigura tuCuenta de
AWS (p. 19)antes de continuar.
• UNRaspberry Pi 3 modelo Bo modelo más reciente. Esto podría funcionar en versiones anteriores de
Raspberry Pi, pero no se han probado.
• Sistema operativo Raspberry Pi (32 bits)o más adelante. Recomendamos utilizar la versión más reciente
del sistema operativo Raspberry Pi. Es posible que las versiones anteriores del sistema operativo
funcionen, pero no se han probado.
Para ejecutar este ejemplo, no necesita instalar el escritorio con la interfaz gráfica de usuario (GUI);
sin embargo, si es la primera vez que utiliza la Raspberry Pi y su hardware de Raspberry Pi la admite,
podría resultarle más fácil utilizar el escritorio con la GUI.
• Ethernet oWiFiconexión.
• Teclado, ratón, monitor, cables, fuentes de alimentación y demás hardware que necesite el dispositivo.
Important
Antes de continuar con el paso siguiente, el dispositivo debe tener el sistema operativo instalado,
configurado y en ejecución. El dispositivo debe estar conectado a Internet y tendrás que
poder acceder al dispositivo mediante su interfaz de línea de comandos. El acceso a la línea
de comandos puede realizarse a través de un teclado, un ratón y un monitor conectados
directamente, o mediante una interfaz remota de terminal SSH.
60
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Si ejecuta un sistema operativo en su Raspberry Pi que tiene una interfaz gráfica de usuario (GUI),
abra una ventana de terminal en el dispositivo y siga las siguientes instrucciones en esa ventana. De
lo contrario, si te conectas a tu dispositivo mediante un terminal remoto, como PuTTY, abre un terminal
remoto en tu dispositivo y úsalo.
Antes de instalar unAWS IoTSDK del dispositivo: ejecute estos comandos en una ventana de terminal
del dispositivo para actualizar el sistema operativo e instalar las bibliotecas necesarias.
2. Instalar Git
Si el sistema operativo de tu dispositivo no viene con Git instalado, debes instalarlo para instalar
elAWS IoTSDK de dispositivos paraJavaScript.
git --version
b. Si el comando anterior devuelve la versión de Git, significa que Git ya está instalado y puedes
saltar al paso 3.
c. Si aparece un error al ejecutar elgitcomando, instala Git ejecutando este comando.
git --version
e. Si Git está instalado, continúa con la siguiente sección. De lo contrario, solucione y corrija el error
antes de continuar. Necesitas Git para instalar elAWS IoTSDK de dispositivos paraJavaScript.
Python
En esta sección, instalará Python, sus herramientas de desarrollo yAWS IoTEl SDK de dispositivos
para Python está en tu dispositivo. Estas instrucciones son para una Raspberry Pi que ejecute el
61
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
último sistema operativo Raspberry Pi. Si tienes otro dispositivo o utilizas otro sistema operativo, es
posible que tengas que adaptar estas instrucciones para tu dispositivo.
ElAWS IoTEl SDK de dispositivos para Python requiere que Python v3.5 o posterior esté instalado
en tu Raspberry Pi.
python3 --version
4. Ejecute este comando para confirmar que ya está instalada la versión correcta de Python.
python3 --version
2. Prueba de pip3
pip3 --version
pip3 --version
Instale elAWS IoTDevice SDK para Python y descarga las aplicaciones de muestra en tu
dispositivo.
cd ~
python3 -m pip install awsiotsdk
62
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
JavaScript
En esta sección, instalará Node.js, el administrador de paquetes npm yAWS IoTSDK de dispositivos
paraJavaScripten tu dispositivo. Estas instrucciones son para una Raspberry Pi que ejecuta el sistema
operativo Raspberry Pi. Si tienes otro dispositivo o utilizas otro sistema operativo, es posible que
tengas que adaptar estas instrucciones para tu dispositivo.
a. Descargue la versión más reciente del repositorio de Node ingresando este comando.
cd ~
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
node -v
Confirme que el comando muestre la versión de Node. Este tutorial requiere Node v10.0 o
posterior. Si no aparece la versión de Node, intenta descargar de nuevo el repositorio de
Node.
d. Verifique la instalación de npm.
npm -v
sudo shutdown -r 0
cd ~
git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
63
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
cd ~/aws-iot-device-sdk-js-v2
npm install
La aplicación de ejemplo requiere que los archivos de certificado que autentican el dispositivo estén
instalados en el dispositivo.
Para instalar los archivos de certificado del dispositivo para la aplicación de muestra
cd ~
mkdir certs
La forma de copiar los archivos de certificado al dispositivo depende del dispositivo y del sistema
operativo y no se describe aquí. Sin embargo, si el dispositivo admite una interfaz gráfica de usuario
(GUI) y tiene un navegador web, puede realizar el procedimiento descrito enthe section called
“CrearAWS IoTrecursos” (p. 39)desde el navegador web de su dispositivo para descargar los
archivos resultantes directamente a su dispositivo.
Los comandos de la siguiente sección suponen que los archivos de clave y certificado se almacenan
en el dispositivo como se muestra en esta tabla.
64
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Python
cd ~/aws-iot-device-sdk-python-v2/samples
65
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Si tienes problemas para ejecutar la aplicación de muestra, consultathe section called “Solución
de problemas con la aplicación de muestra” (p. 67).
JavaScript
cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
npm install
66
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
{"message":"Hello world!","sequence":8}
Publish received on topic topic_1
{"message":"Hello world!","sequence":9}
Publish received on topic topic_1
{"message":"Hello world!","sequence":10}
Si tienes problemas para ejecutar la aplicación de muestra, consultathe section called “Solución
de problemas con la aplicación de muestra” (p. 67).
1. Consulte Ver los mensajes MQTT con el cliente MQTT de AWS IoT (p. 69). Esto le ayuda a
aprender a usar elcliente de prueba MQTTen elAWS IoTconsolapara ver los mensajes MQTT a
medida que pasan por el intermediario de mensajes.
2. Abra elcliente de prueba MQTTen elAWS IoTconsola.
3. Suscríbete al tema,tema_1.
4. En la ventana de línea de comandos, vuelva a ejecutar la aplicación de ejemplo y observe los
mensajes delCliente MQTTen elAWS IoTconsola.
Python
cd ~/aws-iot-device-sdk-python-v2/samples
python3 pubsub.py --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/
certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
JavaScript
cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/
certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
Compruebe el certificado
Si el certificado no está activo,AWS IoTno aceptará ningún intento de conexión que lo utilice para la
autorización. Al crear su certificado, es fácil pasar por alto elActivarbotón. Afortunadamente, puede activar
su certificado desdeAWS IoTconsola.
67
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
2. En la lista de certificados, busque el certificado que creó para el ejercicio y compruebe su estado en
elEstadocolumna.
Si no recuerda el nombre del certificado, compruebe si hay alguno que lo seaInactivopara ver si
pueden ser los que estás usando.
Elija el certificado de la lista para abrir su página de detalles. En la página de detalles, puedes ver
suFecha de creaciónpara ayudarle a identificar el certificado.
3. Para activar un certificado inactivo, en la página de detalles del certificado, elijaAccionesy luego
eligeActivar.
Si has encontrado el certificado correcto y está activo, pero sigues teniendo problemas para ejecutar la
aplicación de muestra, comprueba su política tal y como se describe en el paso siguiente.
También puede intentar crear algo nuevo y un certificado nuevo siguiendo los pasos dethe section called
“Crea una cosa (objeto)” (p. 41). Si creas algo nuevo, tendrás que darle un nombre nuevo y descargar
los nuevos archivos de certificado a tu dispositivo.
1. Busque el certificado tal y como se describe en el elemento anterior y abra su página de detalles.
2. En el menú de la izquierda de la página de detalles del certificado, elijaPolíticaspara ver las políticas
adjuntas al certificado.
3. Si no hay políticas adjuntas al certificado, añada una seleccionando laAccionesmenú y, a
continuación, elegirPolítica de adjuntos.
Elija la política que creó anteriormente enthe section called “CrearAWS IoTrecursos” (p. 39).
4. Si hay una política adjunta, seleccione el icono de la política para abrir su página de detalles.
Es posible que algunos sistemas requieran que los nombres de los archivos estén entre comillas para
funcionar correctamente.
68
AWS IoT Core Guía para desarrolladores
Ver los mensajes MQTT con el cliente MQTT de AWS IoT
En caso de duda, vuelve a instalar el SDK en tu dispositivo. En la mayoría de los casos, es cuestión de
encontrar la sección del tutorial tituladaInstale elAWS IoTSDK de dispositivos paraIdioma del SDKy
siguiendo de nuevo el procedimiento.
Si está utilizando elAWS IoTSDK de dispositivos paraJavaScript, recuerde instalar las aplicaciones de
muestra antes de intentar ejecutarlas. La instalación del SDK no instala automáticamente las aplicaciones
de muestra. Las aplicaciones de muestra se deben instalar manualmente después de instalar el SDK.
Los dispositivos publican mensajes MQTT que se identifican contemas (p. 112)para comunicar su
estado aAWS IoT, yAWS IoTpublica mensajes MQTT para informar a los dispositivos y aplicaciones de
los cambios y eventos. Puede utilizar el cliente MQTT para suscribirse a estos temas y ver los mensajes a
medida que aparecen. También puede utilizar el cliente de prueba MQTT para publicar mensajes MQTT en
los dispositivos y servicios suscritos en suCuenta de AWS.
Contenido
• Visualización de mensajes MQTT en el cliente MQTT (p. 69)
• Publicación de mensajes MQTT desde el cliente MQTT (p. 71)
• Prueba de suscripciones compartidas en el cliente MQTT (p. 72)
69
AWS IoT Core Guía para desarrolladores
Visualización de mensajes MQTT en el cliente MQTT
3. En el#página de registro de mensajes, también puedes publicar mensajes en un tema, pero tendrás
que especificar el nombre del tema. No puede publicar en#tema.
Los mensajes publicados en los temas suscritos aparecen en el registro de mensajes a medida que se
reciben, con el mensaje más reciente primero.
Si tus mensajes no aparecen en el registro de mensajes como esperabas, prueba a suscribirte a un filtro
de temas comodín, tal y como se describe enFiltros de temas (p. 114). El filtro de temas comodín de
varios niveles de MQTT es el signo hash o libra (#) y se puede utilizar como filtro de temas enTema de
suscripcióncampo.
Suscribirse a la#El filtro de temas se suscribe a todos los temas recibidos por el agente de mensajes.
Puede reducir el filtro sustituyendo los elementos de la ruta del filtro del tema por un#comodín de varios
niveles o comodín de un solo nivel «+».
• El carácter comodín de varios niveles debe ser el último carácter del filtro de temas.
70
AWS IoT Core Guía para desarrolladores
Publicación de mensajes MQTT desde el cliente MQTT
• La ruta del filtro de temas solo puede tener un carácter comodín de un solo nivel por nivel de tema.
Por ejemplo:
Para obtener más información sobre los filtros de temas, consulteFiltros de temas (p. 114).
Los nombres y filtros de temas de MQTT distinguen entre mayúsculas y minúsculas. Si, por ejemplo,
su dispositivo publica mensajes enTopic_1(con mayúscula)T) en lugar detopic_1, el tema al que se
suscribió, sus mensajes no aparecerían en el cliente de prueba de MQTT. Sin embargo, si te suscribes al
filtro de temas comodín, se mostrará que el dispositivo está publicando mensajes y que está utilizando un
nombre de tema diferente al que esperabas.
No utilice información de identificación personal en los nombres de los temas, ya sea que los
utilice en el cliente de prueba de MQTT o en la implementación de su sistema. Los nombres
de los temas pueden aparecer en comunicaciones e informes no cifrados.
2. En la ventana de carga del mensaje, introduzca el siguiente JSON:
{
"message": "Hello, world",
"clientType": "MQTT test client"
}
71
AWS IoT Core Guía para desarrolladores
Prueba de suscripciones compartidas en el cliente MQTT
Puede publicar mensajes MQTT en otros temas cambiando laNombre del temaen elNombre del
temacampo y seleccionando elPublicarbotón.
72
AWS IoT Core Guía para desarrolladores
Prueba de suscripciones compartidas en el cliente MQTT
$share/{ShareName}/{TopicFilter}
3. Abre otro navegador web y repite los pasos 1 y 2. De esta forma, está simulando dos clientes MQTT
diferentes que comparten la misma suscripción.$share/group1/topic1.
4. Elija un cliente MQTT, enPublicar en un temapestaña, enNombre del temacampo, introduzca
elNombre del temade tu mensaje. En este ejemplo, use topic1. Intenta publicar el mensaje
varias veces. Desde elSuscripcioneslista de ambos clientes de MQTT, debería poder ver que los
clientes reciben el mensaje mediante una distribución aleatoria. En este ejemplo, publicamos el mismo
mensaje «Hola desdeAWS IoTconsola» tres veces. El cliente MQTT de la izquierda recibió el mensaje
dos veces y el cliente MQTT de la derecha lo recibió una vez.
73
AWS IoT Core Guía para desarrolladores
AWS IoT Core- puntos finales del plano de control
Hay varias formas de interactuar conAWS IoT. Las aplicaciones y los servicios pueden utilizar elAWS
IoT Core- puntos finales del plano de control (p. 74)y los dispositivos pueden conectarse aAWS IoT
Coremediante elAWS IoTpuntos finales del dispositivo (p. 75)oAWS IoT CoreporLoRaPuertas de enlace
y dispositivos WAN (p. 76).
• Puntos de conexión
ElAWS IoT Core- plano de controlyAWS IoT CorePlano de control de Device Advisorlos puntos finales
son específicos de la región y se enumeran enAWS IoT CoreCriterios de valoración y cuotas. Los
formatos de los puntos finales son los siguientes.
AWS IoT Core- plano de control iot.aws- AWS IoTAPI de plano de control
region.amazonaws.com
74
AWS IoT Core Guía para desarrolladores
AWS IoTpuntos finales del dispositivo
AWS IoT CoreDevice Advisor: api.iotdeviceadvisor.aws- AWS IoT CoreAPI del plano de
plano de control region.amazonaws.com control de Device Advisor
• SDK y herramientas
ElAWSSDKproporcionan soporte específico para cada idiomaAWS IoT CoreLas API y las API de
otrosAWSservicios. ElAWSSDK móvilesproporcionar a los desarrolladores de aplicaciones soporte
específico para la plataformaAWS IoT CoreAPI y otrosAWSservicios en dispositivos móviles.
ElAWS CLIproporciona acceso desde la línea de comandos a las funciones proporcionadas por elAWS
IoTpuntos finales de servicio.AWS Herramientas paraPowerShellproporciona herramientas para
gestionarAWSservicios y recursos en elPowerShellentorno de creación de scripts.
• Autenticación
Los puntos finales del servicio utilizan usuarios de IAM yAWScredenciales para autenticar a los usuarios.
• Más información
Para obtener más información y enlaces a las referencias del SDK, consultethe section called
“Conectarse aAWS IoT Corepuntos finales de servicio” (p. 77).
• Puntos de conexión
Los terminales del dispositivo admitenAWS IoT CoreyAWS IoT Device Managementfunciones. Son
específicos para suCuenta de AWSy puedes ver lo que son utilizando eldescribe-endpointcomando.
AWS IoT Core- plano de datos Consulte ??? (p. 83). AWS IoTAPI de plano de datos
AWS IoT Device Management- Consulte ??? (p. 83). AWS IoTAPI de plano de datos
datos de empleos de Jobs
Para obtener más información sobre estos puntos de conexión y las funciones que admiten, consultethe
section called “AWS IoTpuntos finales de servicio y datos del dispositivo” (p. 83).
• SDK
ElAWS IoTSDK de dispositivos (p. 85)proporcionan soporte específico para cada idioma para el
transporte telemétrico de mensajería en cola (MQTT) yWebSocketProtocolos seguros (WSS), con los
que se comunican los dispositivosAWS IoT.AWS Mobile SDK (p. 82)también brindan soporte para las
75
AWS IoT Core Guía para desarrolladores
AWS IoT CoreporLoRaPuertas
de enlace y dispositivos WAN
Los terminales del dispositivo utilizan certificados X.509 oAWSUsuarios de IAM con credenciales para
autenticar a los usuarios.
• Más información
Para obtener más información y enlaces a las referencias del SDK, consultethe section called “SDK de
dispositivos de AWS IoT” (p. 85).
• Puntos de conexión
AWS IoT CoreporLoRaLa WAN administra las conexiones de puerta de enlace a cuentas y regiones
específicasAWS IoT Corepuntos finales. Las puertas de enlace pueden conectarse al punto final
del servidor de configuración y actualización (CUPS) de su cuenta queAWS IoT CoreporLoRaWAN
proporciona.
• SDK
ElAWS IoTAPI inalámbrica queAWS IoT CoreporLoRaLa WAN se basa en el soporte deAWSSDK. Para
obtener más información, consulteAWSSDK y kits de herramientas.
• Autenticación
AWS IoT CoreporLoRaLas comunicaciones entre dispositivos WAN utilizan certificados X.509 para
proteger las comunicaciones conAWS IoT.
• Más información
76
AWS IoT Core Guía para desarrolladores
Conectarse aAWS IoT Corepuntos finales de servicio
Los dispositivos de IoT deben usarSDK de dispositivos de AWS IoT (p. 85). Los SDK de
dispositivos están optimizados para su uso en dispositivos y admiten la comunicación MQTT
conAWS IoT, y apoye elAWS IoTLas API más utilizadas por los dispositivos. Para obtener
más información sobre los SDK de dispositivos y las funciones que ofrecen, consulteSDK de
dispositivos de AWS IoT (p. 85).
Los dispositivos móviles deben utilizarAWS Mobile SDK (p. 82). Los SDK para dispositivos
móviles ofrecen soporte paraAWS IoTLas API, las comunicaciones entre dispositivos MQTT y las
API de otrosAWSservicios en dispositivos móviles. Para obtener más información sobre los SDK
para dispositivos móviles y las funciones que ofrecen, consulteAWS Mobile SDK (p. 82).
En las siguientes secciones se describen las herramientas y los SDK que puede utilizar para desarrollar e
interactuar con ellos.AWS IoTy otrosAWSservicios. Para ver la lista completa deAWSherramientas y kits
de desarrollo que están disponibles para crear y administrar aplicaciones enAWS, consulteHerramientas
sobre las que construirAWS.
• Instalación
Para obtener información sobre cómo instalar elAWS CLI, consulteInstalación delAWS CLI.
• Autenticación
Para obtener información sobre laAWS CLIcomandos para estosAWS IoT Coreservicios, consulte:
• AWS CLIReferencia de comandos para IoT
• AWS CLIReferencia de comandos para datos de IoT
• AWS CLIReferencia de comandos para datos de trabajos de IoT
• AWS CLIReferencia de comandos para túneles seguros de IoT
77
AWS IoT Core Guía para desarrolladores
SDK de AWS
SDK de AWS
ConAWSLos SDK, tus aplicaciones y dispositivos compatibles pueden llamarAWS IoTLas API y las API
de otrosAWSservicios. En esta sección se proporcionan enlaces a laAWSLos SDK y la documentación de
referencia de la API para las API delAWS IoT Coreservicios.
• AWS IoT
• AWS IoTPlano de datos
• AWS IoTPlano de datos de trabajos
• AWS IoTTúneles seguros
• AWS IoTinalámbrico
C++
Para instalar elAWS SDK for C++y úsalo para conectarte aAWS IoT:
Documentación para elAWS IoT Coreservicios que elAWS SDK for C++soporta
Go
Para instalar elAWS SDK for Goy úsalo para conectarte aAWS IoT:
78
AWS IoT Core Guía para desarrolladores
SDK de AWS
Documentación para elAWS IoT Coreservicios que elAWS SDK for Gosoporta
Java
Para instalar elAWS SDK for Javay úsalo para conectarte aAWS IoT:
Documentación para elAWS IoT Coreservicios que elAWS SDK for Javasoporta
• IotClientdocumentación de referencia
• IotDataPlaneClientdocumentación de referencia
• IotJobsDataPlaneClientdocumentación de referencia
• IoTSecureTunnelingClientdocumentación de referencia
JavaScript
Para instalar elAWS SDK for JavaScripty úsalo para conectarte aAWS IoT:
1. Siga las instrucciones deConfiguración delAWS SDK for JavaScript. Estas instrucciones se aplican
al uso delAWS SDK for JavaScripten el navegador y con Node.JS. Asegúrese de seguir las
instrucciones aplicables a la instalación.
Documentación para elAWS IoT Coreservicios que elAWS SDK for JavaScriptsoporta
79
AWS IoT Core Guía para desarrolladores
SDK de AWS
.NET
Para instalar elAWS SDK for .NETy úsalo para conectarte aAWS IoT:
Documentación para elAWS IoT Coreservicios que elAWS SDK for .NETsoporta
PHP
Para instalar elAWS SDK for PHPy úsalo para conectarte aAWS IoT:
Documentación para elAWS IoT Coreservicios que elAWS SDK for PHPsoporta
Python
Para instalar elAWS SDK for Python (Boto3)y úsalo para conectarte aAWS IoT:
80
AWS IoT Core Guía para desarrolladores
SDK de AWS
Este programa muestra las opciones de registro configuradas actualmente en la cuenta. Después
de instalar el SDK y configurarlo para su cuenta, debería poder ejecutar este programa.
import boto3
import json
# initialize client
iot = boto3.client('iot')
# get current logging levels, format them as JSON, and write them to stdout
response = iot.get_v2_logging_options()
print(json.dumps(response, indent=4))
Para obtener más información sobre la función utilizada en este ejemplo, consultethe section called
“Configuración de registros de AWS IoT” (p. 459).
Documentación para elAWS IoT Coreservicios que elAWS SDK for Python (Boto3)soporta
Ruby
Para instalar elAWS SDK for Rubyy úsalo para conectarte aAWS IoT:
Documentación para elAWS IoT Coreservicios que elAWSCompatible con SDK para Ruby
81
AWS IoT Core Guía para desarrolladores
AWS Mobile SDK
Android
ElAWS Mobile SDK for Androidcontiene una biblioteca, ejemplos y documentación para que los
desarrolladores puedan crear aplicaciones móviles conectadas medianteAWS. Este SDK también
incluye soporte para las comunicaciones entre dispositivos MQTT y para llamar a las API delAWS IoT
Coreservicios. Para obtener más información, consulte lo siguiente:
iOS
ElAWS Mobile SDK for iOSes un kit de desarrollo de software de código abierto, distribuido bajo
una licencia Apache Open Source. El SDK para iOS proporciona una biblioteca, ejemplos de
código y documentación para ayudar a los desarrolladores a crear aplicaciones móviles conectadas
medianteAWS. Este SDK también incluye soporte para las comunicaciones entre dispositivos MQTT y
para llamar a las API delAWS IoT Coreservicios. Para obtener más información, consulte lo siguiente:
Los puntos finales del servicio que exponen las API REST delAWS IoT Corelos servicios varían según
la región y se enumeran enAWS IoT CoreCriterios de valoración y cuotas. Debe utilizar el punto final
de la región que tiene elAWS IoTrecursos a los que desea acceder, porqueAWS IoTlos recursos son
específicos de la región.
• Autenticación
Las API REST delAWS IoT Coreuso de serviciosAWSCredenciales de IAM para la autenticación. Para
obtener más información, consulteFirmandoAWSSolicitudes de APIen elAWSReferencia general.
• Referencia de la API
Para obtener información sobre las funciones específicas que proporcionan las API REST delAWS IoT
Coreservicios, consulte:
82
AWS IoT Core Guía para desarrolladores
Conexión de dispositivos aAWS IoT
El intermediario de mensajes
Puede almacenar en caché o almacenar los puntos finales en su dispositivo. Esto significa que no
necesitará consultar elDescribeEndpointAPI cada vez que se conecta un dispositivo nuevo.
Los puntos finales no cambiarán despuésAWS IoT Corelos crea para tu cuenta.
Cada cuenta tiene varios terminales de dispositivo que son exclusivos de la cuenta y admiten funciones
de IoT específicas. ElAWS IoTlos extremos de datos del dispositivo admiten un protocolo de publicación
o suscripción diseñado para las necesidades de comunicación de los dispositivos de IoT; sin embargo,
otros clientes, como aplicaciones y servicios, también pueden usar esta interfaz si su aplicación requiere
las funciones especializadas que proporcionan estos puntos finales. ElAWS IoTlos terminales de servicio
de dispositivos permiten el acceso centrado en el dispositivo a los servicios de seguridad y administración.
Para conocer el extremo de datos del dispositivo de tu cuenta, puedes encontrarlo enAjustespágina de
tuAWS IoT Coreconsola.
Para conocer el punto final del dispositivo de tu cuenta para un propósito específico, incluido el
extremo de datos del dispositivo, utiliza eldescribe-endpointEl comando CLI que se muestra aquí, o
elDescribeEndpointAPI REST y proporcione laendpointTypevalor de parámetro de la siguiente tabla.
83
AWS IoT Core Guía para desarrolladores
AWS IoTpuntos finales de servicio y datos del dispositivo
Cada cliente tiene uniot:Data-ATSy uniot:Datapunto final. Cada terminal usa un certificado X.509
para autenticar el cliente. Recomendamos a los clientes que utilicen el tipo de punto de enlace iot:Data-
ATS más reciente para evitar problemas relacionados con la desconfianza generalizada en las entidades
de certificación de Symantec. Proporcionamos eliot:Datapunto final para que los dispositivos recuperen
datos de puntos finales antiguos que utilizanVeriSigncertificados de compatibilidad con versiones
anteriores. Para obtener más información, consulte Autenticación del servidor.
iot:Data-ATSdevuelve un
punto final de datos firmado por
ATS.
84
AWS IoT Core Guía para desarrolladores
SDK de dispositivos de AWS IoT
ElAWS IoTLos SDK de dispositivos difieren de losAWSSDK en el sentido de que elAWS IoTLos SDK
de dispositivos satisfacen las necesidades de comunicación especializadas de los dispositivos de IoT,
pero no admiten todos los servicios compatibles conAWSSDK. ElAWS IoTLos SDK de dispositivos son
compatibles conAWSSDK que admiten todos losAWSservicios; sin embargo, utilizan diferentes métodos
de autenticación y se conectan a diferentes puntos finales, lo que podría hacer que el uso delAWSLos SDK
no son prácticos en un dispositivo de IoT.
Dispositivos móviles
Elthe section called “AWS Mobile SDK” (p. 82)admiten las comunicaciones de ambos dispositivos
MQTT, algunos de losAWS IoTlas API de servicio y las API de otrasAWSservicios. Si desarrolla en un
dispositivo móvil compatible, revise su SDK para ver si es la mejor opción para desarrollar su solución de
IoT.
C++
ElAWS IoTEl SDK de dispositivos C++ permite a los desarrolladores crear aplicaciones conectadas
medianteAWSy las API delAWS IoT Coreservicios. En concreto, este SDK se diseñó para los
dispositivos que no tienen limitación de recursos y requieren características avanzadas, como la
puesta en cola de mensajes, la compatibilidad con varios procesos y las características de idioma más
actualizadas. Para obtener más información, consulte lo siguiente:
Python
ElAWS IoTEl SDK de dispositivos para Python permite a los desarrolladores escribir scripts de
Python para utilizar sus dispositivos para acceder aAWS IoTplataforma a través de MQTT o MQTT
85
AWS IoT Core Guía para desarrolladores
SDK de dispositivos de AWS IoT
a través delWebSocketProtocolo seguro (WSS). Al conectar sus dispositivos a las API delAWS IoT
Coreservicios, los usuarios pueden trabajar de forma segura con el agente de mensajes, las reglas
y el servicio Device Shadow queAWS IoT Coreproporciona y con otrosAWSservicios comoAWS
Lambda, Amazon Kinesis y Amazon S3, entre otros.
JavaScript
Java
ElAWS IoTEl SDK de dispositivos para Java permite a los desarrolladores de Java acceder a las API
delAWS IoT Corea través de MQTT o MQTT a través delWebSocketprotocolo. El SDK es compatible
con el servicio Device Shadow. Puede tener acceso a las sombras mediante los métodos GET,
UPDATE y DELETE de HTTP. El SDK también admite un modelo simplificado de acceso oculto,
que permite a los desarrolladores intercambiar datos con sombras mediante los métodos getter y
setter, sin tener que serializar ni deserializar ningún documento JSON. Para obtener más información,
consulte lo siguiente:
Embedded C
ElAWS IoT Device SDK para Embedded C(C-SDK) es una colección de archivos fuente en C bajo la
licencia de código abierto del MIT que se pueden utilizar en aplicaciones integradas para conectar
de forma segura dispositivos de IoT aAWSNúcleo de IoT. Incluye MQTT, JSON Parser yAWS
IoTBibliotecas Device Shadow y otras. Se distribuye en formato fuente y está previsto que se integre
86
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
en el firmware del cliente junto con el código de la aplicación, otras bibliotecas y, opcionalmente, un
RTOS (sistema operativo en tiempo real).
AWS IoT Device SDK para Embedded C generalmente se dirige a dispositivos con limitaciones de
recursos que requieren un tiempo de ejecución optimizado del lenguaje C. Puede usar el SDK en
cualquier sistema operativo y alojarlo en cualquier tipo de procesador (por ejemplo, MCU y MPU). Si el
dispositivo tiene suficientes recursos de memoria y procesamiento disponibles, le recomendamos que
utilice uno de los otrosAWS IoTSDK para dispositivos y dispositivos móviles, como elAWS IoTSDK de
dispositivos para C++, Java,JavaScript, o Python.
AWS IoT CoreusosTLS versión 1.2yTLS versión 1.3para cifrar todas las comunicaciones. Al conectar
dispositivos aAWS IoT Core, los clientes pueden enviar elExtensión de indicación del nombre del servidor
(SNI), que no es obligatorio pero sí muy recomendable. Para usar funciones comoregistro de múltiples
cuentas,dominios personalizados, yTerminales de VPC, debe utilizar la extensión SNI. Para obtener más
información, consulte Seguridad de transporte en AWS IoT.
ElSDK de dispositivos de AWS IoT (p. 85)admiten MQTT y MQTT a través de WSS y cumplen con los
requisitos de seguridad de las conexiones de los clientes. Se recomienda utilizar elSDK de dispositivos de
AWS IoT (p. 85)para conectar a los clientes conAWS IoT.
87
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
Los clientes se conectan a susCuenta de AWSpuntos finales del dispositivo. Consultethe section called
“AWS IoTpuntos finales de servicio y datos del dispositivo” (p. 83)para obtener información sobre cómo
encontrar los puntos de conexión de los dispositivos de tu cuenta.
Note
AWSLos SDK no requieren la URL completa. Solo requieren el nombre de host del punto final,
comopubsub.pymuestra paraAWS IoTSDK de dispositivos para Python enGitHub. Si se pasa la
URL completa tal y como se indica en la siguiente tabla, se puede generar un error, por ejemplo,
un nombre de servidor no válido.
MQTT iot-endpoint
HTTPS https://iot-endpoint/topics
88
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
clientIdsoporte de campo Sí No
Detección de desconexión de Sí No
dispositivos
La duración de la conexión MQTT depende de la función de autenticación que utilice. La siguiente tabla
muestra la duración máxima de la conexión en condiciones ideales para cada función.
*
No está garantizado
89
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
Con los certificados X.509 y la autenticación personalizada, la duración de la conexión no tiene un límite
estricto, pero puede ser de tan solo unos minutos. Las interrupciones de conexión pueden producirse por
varios motivos. La siguiente lista contiene algunos de los motivos más comunes.
Sus dispositivos deben implementar estrategias para detectar desconexiones y volver a conectarse.
Para obtener información sobre los eventos de desconexión y orientación sobre cómo gestionarlos,
consulte??? (p. 1268)en??? (p. 1267).
MQTT
MATT(Message Queue Telemetry Transport) es un protocolo de mensajería ligero y ampliamente
adoptado que está diseñado para dispositivos con restricciones.AWS IoT Coreel soporte para MQTT
se basa enEspecificación MQTT v3.1.1y elEspecificación MQTT v5.0, con algunas diferencias,
como se documenta enthe section called “AWS IoTdiferencias con respecto a las especificaciones
de MQTT” (p. 109). Como la última versión del estándar, MQTT 5 presenta varias funciones
clave que hacen que un sistema basado en MQTT sea más sólido, incluidas las nuevas mejoras de
escalabilidad, la mejora de la notificación de errores con las respuestas a los códigos de motivo, los
temporizadores de caducidad de los mensajes y las sesiones y los encabezados de los mensajes de
usuario personalizados. Para obtener más información sobre las funciones de MQTT 5 queAWS IoT
Coresoportes, consulteFunciones compatibles con MQTT 5 (p. 101).AWS IoT Coretambién admite la
comunicación entre versiones de MQTT (MQTT 3 y MQTT 5). Un publicador de MQTT 3 puede enviar un
mensaje de MQTT 3 a un suscriptor de MQTT 5 que recibirá un mensaje de publicación de MQTT 5, y
viceversa.
AWS IoT Coreadmite conexiones de dispositivos que utilizan el protocolo MQTT y el protocolo MQTT
a través de WSS y que se identifican mediante unID de cliente. ElSDK de dispositivos de AWS
IoT (p. 85)admiten ambos protocolos y son las formas recomendadas de conectar dispositivos aAWS
IoT Core. ElAWS IoTLos SDK de dispositivos admiten las funciones necesarias para que los dispositivos
y los clientes se conecten y accedanAWS IoTservicios. Los SDK de dispositivos admiten los protocolos
de autenticación que elAWS IoTlos servicios requieren y los requisitos de ID de conexión que requieren
el protocolo MQTT y los protocolos MQTT sobre WSS. Para obtener información sobre cómo conectarse
aAWS IoTutilizando elAWSSDK de dispositivos y enlaces a ejemplos deAWS IoTen los idiomas admitidos,
consultethe section called “Conectarse con MQTT mediante elAWS IoTSDK de dispositivos” (p. 91).
Para obtener más información sobre los métodos de autenticación y las asignaciones de puertos para los
mensajes MQTT, consulteProtocolos, mapeos de puertos y autenticación (p. 87).
Si bien recomendamos usar elAWS IoTSDK de dispositivos a los que conectarseAWS IoT, no son
obligatorios. Si no utiliza elAWS IoTSin embargo, los SDK de dispositivos deben proporcionar la seguridad
de conexión y comunicación necesaria. Los clientes deben enviar elExtensión TLS de indicación de
nombre de servidor (SNI)en la solicitud de conexión. Se rechazan los intentos de conexión que no incluyan
el SNI. Para obtener más información, consulte Seguridad de transporte en AWS IoT. Clientes que utilizan
usuarios de IAM yAWSlas credenciales para autenticar a los clientes deben proporcionar la información
correctaVersión de firma 4autenticación.
En este tema:
90
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
ElAWS IoTLos SDK de dispositivos han publicado un cliente MQTT 5 en la versión preliminar
para desarrolladores. Durante el período de previsualización, es posible que realicemos cambios
incompatibles con versiones anteriores en las API públicas y en los clientes del servicio delAWS
IoTLos SDK de dispositivos siguen utilizando el cliente MQTT 3.1.1.
C++
• Código fuente de una aplicación de muestra que muestra un ejemplo de conexión MQTT en C++
• AWS IoTSDK para dispositivos C++ v2 activadoGitHub
Python
• Código fuente de una aplicación de muestra que muestra un ejemplo de conexión MQTT en Python
• AWS IoTSDK de dispositivos para Python v2 activadoGitHub
JavaScript
• Código fuente de una aplicación de muestra que muestra un ejemplo de conexión MQTT
enJavaScript
• AWS IoTSDK de dispositivos paraJavaScriptv2 activadoGitHub
Java
• Código fuente de una aplicación de muestra que muestra un ejemplo de conexión MQTT en Java
91
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
Embedded C
• Código fuente de una aplicación de ejemplo que muestra un ejemplo de conexión MQTT en
Embedded C
• AWS IoTSDK de dispositivos para C integrado activadoGitHub
Esta tabla describe cómo afecta cada nivel de QoS a los mensajes publicados en y por el intermediario de
mensajes.
Nivel 0 de QoS Enviado cero o más veces Este nivel debe usarse para los
mensajes que se envían a través
de enlaces de comunicación
confiables o que pueden omitirse
sin problemas.
92
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
Clean Start= 1 Crea una sesión nueva y termina una sesión anterior si existe.
No se admiten sesiones persistentes entre las versiones MQTT (MQTT 3 y MQTT 5). Una sesión
persistente de MQTT 3 no se puede reanudar como una sesión de MQTT 5 y viceversa.
Una vez que el cliente se une a una sesión persistente, puede publicar mensajes y suscribirse a los filtros
de temas sin ningún indicador adicional en cada operación.
Una sesión persistente representa una conexión continua entre un cliente y un intermediario de mensajes
MQTT. Cuando un cliente se conecta al agente de mensajes mediante una sesión persistente, el agente
de mensajes guarda todas las suscripciones que el cliente realiza durante la conexión. Cuando el cliente
se desconecta, el agente de mensajes almacena los mensajes QoS 1 sin confirmar y los mensajes QoS 1
nuevos publicados en los temas a los que el cliente está suscrito. Los mensajes se almacenan según
el límite de la cuenta. Los mensajes que superen el límite se eliminarán. Para obtener más información
sobre los límites de mensajes persistentes, consulteAWS IoT Corepuntos finales y cuotas. Cuando el
93
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
cliente se vuelve a conectar a su sesión persistente, se restablecen todas las suscripciones y todos los
mensajes almacenados se envían al cliente a una velocidad máxima de 10 mensajes por segundo. En
MQTT 5, si una QoS1 saliente con el intervalo de caducidad del mensaje caduca cuando un cliente está
desconectado, una vez que se reanude la conexión, el cliente no recibirá el mensaje caducado.
Tras la reconexión, los mensajes almacenados se envían al cliente, a una velocidad limitada a 10
mensajes almacenados por segundo, junto con el tráfico de mensajes actual hasta quePublish
requests per second per connectionse ha alcanzado el límite. Dado que la velocidad de
entrega de los mensajes almacenados es limitada, se tardarán varios segundos en entregar todos los
mensajes almacenados si una sesión tiene más de 10 mensajes almacenados que entregar después de la
reconexión.
En MQTT 3, el valor predeterminado del tiempo de caducidad de las sesiones persistentes es de una hora,
y esto se aplica a todas las sesiones de la cuenta.
En MQTT 5, puede establecer el intervalo de caducidad de sesión para cada sesión en los paquetes
CONNECT y DISCONNECT.
Note
Los mensajes almacenados que esperan ser enviados al cliente al finalizar la sesión se descartan;
sin embargo, se siguen facturando con la tarifa de mensajería estándar, aunque no se hayan
podido enviar. Para obtener más información sobre los precios de los mensajes, consulteAWS IoT
CorePrecios. Puede configurar el intervalo de tiempo de caducidad.
Si un cliente no se vuelve a conectar a su sesión persistente antes de que caduque, la sesión finaliza
y los mensajes almacenados se descartan. Cuando un cliente se vuelve a conectar después de que la
sesión haya expirado con uncleanSessionmarcar a0, el servicio crea una nueva sesión persistente.
Las suscripciones o los mensajes de la sesión anterior no están disponibles para esta sesión porque se
descartaron al expirar la sesión anterior.
94
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
y se cargan nuevamente a tu cuenta. Para obtener más información sobre los precios de los mensajes,
consulteAWS IoT Coreprecios - Mensajería.
El tiempo de caducidad predeterminado de la sesión persistente de una hora se puede aumentar mediante
el proceso de aumento del límite estándar. Tenga en cuenta que aumentar el tiempo de caducidad de la
sesión podría aumentar los cargos por mensajes, ya que el tiempo adicional podría permitir almacenar más
mensajes para el dispositivo sin conexión y esos mensajes adicionales se cargarían a su cuenta según
la tarifa de mensajería estándar. El tiempo de caducidad de la sesión es aproximado y una sesión puede
persistir hasta 30 minutos más que el límite de la cuenta; sin embargo, una sesión no será inferior al límite
de la cuenta. Para obtener más información sobre los límites de sesión, consulteAWSCuotas de servicio.
Los mensajes retenidos de MQTT se envían a un cliente después de que el cliente se suscriba a un
tema. Si desea que todos los clientes que se suscriban a un tema reciban el mensaje retenido de
MQTT inmediatamente después de su suscripción, puede publicar un mensaje de configuración con
el indicador RETAIN activado. Los clientes que se suscriben también reciben actualizaciones de esa
configuración cada vez que se publica un nuevo mensaje de configuración.
• Como último mensaje de estado conocido
Los dispositivos pueden configurar el indicador RETAIN en los mensajes de estado actual para queAWS
IoT Corelos salvará. Cuando las aplicaciones se conecten o vuelvan a conectarse, pueden suscribirse a
este tema y obtener el último estado del que se informó inmediatamente después de suscribirse al tema
del mensaje conservado. De esta forma, pueden evitar tener que esperar hasta el siguiente mensaje del
dispositivo para ver el estado actual.
En esta sección:
• Tareas comunes con mensajes de MQTT retenidos enAWS IoT Core (p. 95)
• Mensajes de facturación y retenidos (p. 97)
• Comparación de los mensajes retenidos de MQTT y las sesiones persistentes de MQTT (p. 98)
• MQTT retuvo mensajes yAWS IoTSombras del dispositivo (p. 99)
Los mensajes retenidos de MQTT requieren acciones políticas específicas para autorizar a los clientes
a acceder a ellos. Para ver ejemplos del uso de políticas de mensajes retenidos, consulteEjemplos de
políticas de mensajes retenidos (p. 384).
En esta sección se describen las operaciones comunes que implican la retención de mensajes.
El cliente determina si un mensaje se conserva cuando publica un mensaje MQTT. Los clientes pueden
configurar el indicador RETAIN al publicar un mensaje mediante unSDK de dispositivos (p. 1489).
95
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
Las aplicaciones y los servicios pueden establecer el indicador RETAIN cuando utilizan
elPublishacciónpara publicar un mensaje MQTT.
Solo se conserva un mensaje por nombre de tema. Un mensaje nuevo con el marcador RETAIN
establecido publicado en un tema reemplaza cualquier mensaje retenido existente que se haya enviado
anteriormente al tema.
NOTA:No puedes publicar en untema reservado (p. 115)con el indicador RETAIN activado.
• Suscribirse a un tema de mensaje conservado
Los clientes se suscriben a los temas de mensajes retenidos como lo harían con cualquier otro tema
de mensajes de MQTT. Los mensajes retenidos que se reciben al suscribirse a un tema de mensajes
retenidos tienen el indicador RETAIN activado.
Los mensajes retenidos se eliminan deAWS IoT Corecuando un cliente publica un mensaje retenido con
una carga de mensajes de 0 bytes en el tema del mensaje retenido. Los clientes que se hayan suscrito
al tema del mensaje conservado también recibirán el mensaje de 0 bytes.
Suscribirse a un filtro de temas comodín que incluye un tema de mensaje retenido permite al cliente
recibir los mensajes posteriores publicados en el tema del mensaje retenido, pero no entrega el mensaje
retenido al suscribirse.
Los mensajes retenidos que se reciben al suscribirse a un tema de mensajes retenidos tienen el
indicador RETAIN activado. Los mensajes retenidos que recibe un cliente suscriptor después de la
suscripción no se conservan.
• Recuperar un mensaje retenido
Los mensajes retenidos se entregan a los clientes automáticamente cuando se suscriben al tema con
el mensaje retenido. Para que un cliente reciba el mensaje retenido al suscribirse, debe suscribirse al
nombre de tema exacto del mensaje retenido. Al suscribirse a un filtro de temas comodín que incluye un
tema de mensaje retenido, el cliente recibe los mensajes posteriores publicados en el tema del mensaje
retenido, pero no entrega el mensaje retenido al suscribirse.
Los servicios y las aplicaciones pueden enumerar y recuperar los mensajes retenidos
llamandoListRetainedMessagesyGetRetainedMessage.
Con MQTT 5, si un mensaje retenido tiene establecido el intervalo de caducidad del mensaje y el
mensaje retenido caduca, el nuevo suscriptor que se suscriba a ese tema no recibirá el mensaje retenido
una vez que la suscripción se haya realizado correctamente.
• Listar temas de mensajes retenidos
96
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
Los dispositivos, las aplicaciones y los servicios pueden eliminar un mensaje retenido publicando un
mensaje con el marcador RETAIN establecido y una carga de mensajes vacía (0 bytes) en el nombre del
tema del mensaje retenido que se va a eliminar. Estos mensajes eliminan el mensaje retenido deAWS
IoT Core, se envían a los clientes que tienen una suscripción al tema, pero no son retenidos porAWS IoT
Core.
Los mensajes retenidos también se pueden eliminar de forma interactiva accediendo al mensaje retenido
enAWS IoTconsola. Mensajes retenidos que se eliminan mediante elAWS IoTconsolatambién envía un
mensaje de 0 bytes a los clientes que se hayan suscrito al tema del mensaje retenido.
Los mensajes retenidos no se pueden restaurar después de eliminarlos. Un cliente tendría que publicar
un nuevo mensaje conservado para reemplazar el mensaje eliminado.
• Depuración y solución de problemas de mensajes retenidos
ElAWS IoTconsolaproporciona varias herramientas para ayudarle a solucionar problemas con los
mensajes retenidos:
• ElMensajes retenidospágina
ElMensajes retenidospágina en elAWS IoTla consola proporciona una lista paginada de los mensajes
retenidos que su cuenta ha almacenado en la región actual. Desde esta página, puede:
• Consulte los detalles de cada mensaje retenido, como la carga útil del mensaje, la QoS y la hora en
que se recibió.
• Actualiza el contenido de un mensaje conservado.
• Eliminar un mensaje retenido.
• Elcliente de prueba MQTT
Elcliente de prueba MQTTpágina en elAWS IoTla consola puede suscribirse y publicar temas de
MQTT. La opción de publicación le permite configurar el indicador RETAIN en los mensajes que
publique para simular el comportamiento de sus dispositivos.
Algunos resultados inesperados podrían deberse a estos aspectos de la forma en que se implementan
los mensajes retenidos enAWS IoT Core.
• Límites de mensajes retenidos
Cuando una cuenta ha almacenado el número máximo de mensajes retenidos,AWS IoT Coredevuelve
una respuesta restringida a los mensajes publicados con RETAIN configurado y a cargas superiores a
0 bytes hasta que se eliminen algunos mensajes retenidos y el recuento de mensajes retenidos caiga
por debajo del límite.
• Orden de entrega de mensajes retenida
Publicar mensajes con el indicador RETAIN establecido desde un cliente, medianteAWS IoTconsola o
llamandoPublishincurre en los cargos de mensajería adicionales descritos enAWS IoT Coreprecios -
Mensajería.
Para obtener más información sobre los costos de mensajería, consulteAWS IoT Coreprecios - Mensajería.
Los mensajes retenidos y las sesiones persistentes son características estándar de MQTT que permiten
a los dispositivos recibir mensajes publicados sin conexión. Los mensajes retenidos se pueden publicar
desde sesiones persistentes. En esta sección se describen los aspectos clave de estas funciones y cómo
funcionan juntas.
Mensajes recibidos en la Tras suscribirse a un tema con Tras suscribirse a un tema sin
suscripción inicial a un tema un mensaje retenido, se recibe el conservar ningún mensaje, no se
mensaje retenido más reciente. recibe ningún mensaje hasta que
se publique uno sobre el tema.
Temas suscritos después de la Sin una sesión persistente, el Los temas suscritos se restauran
reconexión cliente debe suscribirse a los tras la reconexión.
temas después de la reconexión.
Mensajes recibidos después de Tras suscribirse a un tema con Todos los mensajes publicados
la reconexión un mensaje retenido, se recibe el con un QOS = 1 y a los que se
mensaje retenido más reciente. haya suscrito con un QOS =1
mientras el dispositivo estaba
desconectado se envían después
de que el dispositivo se vuelva a
conectar.
98
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
Para obtener información sobre las sesiones persistentes, consultethe section called “Sesiones
persistentes de MQTT” (p. 92).
Con los mensajes retenidos, el cliente de publicación determina si un mensaje debe conservarse y
entregarse a un dispositivo después de que se conecte, si ha tenido una sesión anterior o no. El editor
elige almacenar un mensaje y el mensaje almacenado se entrega a todos los clientes actuales y futuros
que se suscriban con suscripciones de QoS 0 o QoS 1. Los mensajes retenidos guardan solo un mensaje
sobre un tema determinado a la vez.
Cuando una cuenta ha almacenado el número máximo de mensajes retenidos,AWS IoT Coredevuelve una
respuesta restringida a los mensajes publicados con RETAIN configurado y a cargas superiores a 0 bytes
hasta que se eliminen algunos mensajes retenidos y el recuento de mensajes retenidos caiga por debajo
del límite.
Tanto los mensajes retenidos como las sombras de dispositivos retienen datos de un dispositivo, pero se
comportan de manera diferente y tienen propósitos diferentes. En esta sección se describen sus similitudes
y diferencias.
La carga útil del mensaje tiene Según lo definido en la AWS IoTadmite una estructura
una estructura o esquema implementación. MQTT no de datos específica.
predefinidos especifica una estructura o
esquema para la carga de sus
mensajes.
La carga útil del mensaje está Los mensajes retenidos no se Las sombras del dispositivo
adjunta a un recurso de cosa adjuntan a ningún recurso. están asociadas a un recurso de
la cosa.
99
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
El cliente recibe los datos del El cliente recibe Los clientes pueden suscribirse
mensaje al suscribirse automáticamente un mensaje a las actualizaciones de Device
retenido después de suscribirse Shadow, pero deben solicitar
a un tema con un mensaje el estado actual de forma
retenido. deliberada.
El corredor almacenará los mensajes del testamento hasta que se produzca una desconexión no iniciada.
Cuando eso suceda, el corredor publicará los mensajes a todos los clientes que se suscribieron al Will
Topic para notificar la desconexión. Si el cliente se desconecta del corredor mediante una desconexión
iniciada por el cliente mediante el mensaje MQTT DISCONNECT, el corredor no publicará los mensajes
de LWT almacenados. En todos los demás casos, se enviarán los mensajes LWT. Para obtener una
lista completa de los escenarios de desconexión en los que el corredor enviará los mensajes de LWT,
consulteConectar o desconectar eventos.
Uso de connectAttributes
ConnectAttributesle permiten especificar los atributos que desea usar en su mensaje de conexión en
sus políticas de IAM, comoPersistentConnectyLastWill. ConConnectAttributes, puedes crear
políticas que no den a los dispositivos acceso a las nuevas funciones de forma predeterminada, lo que
puede resultar útil si un dispositivo se ve comprometido.
PersistentConnect
Utilice elPersistentConnectfunción para guardar todas las suscripciones que el cliente realiza
durante la conexión cuando se interrumpe la conexión entre el cliente y el corredor.
LastWill
100
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
De forma predeterminada, su política tiene una conexión no persistente y no se transfieren atributos para
esta conexión. Debe especificar una conexión persistente en su política de IAM si desea tener una.
Suscripciones compartidas
AWS IoT Coreadmite suscripciones compartidas para MQTT 3 y MQTT 5. Las suscripciones compartidas
permiten que varios clientes compartan una suscripción a un tema y solo un cliente recibirá los mensajes
publicados sobre ese tema mediante una distribución aleatoria. Las suscripciones compartidas pueden
equilibrar de manera efectiva la carga de los mensajes MQTT entre varios suscriptores. Por ejemplo,
supongamos que tiene 1000 dispositivos que publican sobre el mismo tema y 10 aplicaciones de fondo
que procesan esos mensajes. En ese caso, las aplicaciones de fondo pueden suscribirse al mismo
tema y cada una recibirá de forma aleatoria los mensajes publicados por los dispositivos en el tema
compartido. Esto es efectivamente «compartir» la carga de esos mensajes. Las suscripciones compartidas
también permiten una mayor resiliencia. Cuando alguna aplicación de backend se desconecta, el corredor
distribuye la carga entre los suscriptores restantes del grupo.
Para utilizar las suscripciones compartidas, los clientes se suscriben a una suscripción compartidafiltro de
temasde la siguiente manera:
$share/{ShareName}/{TopicFilter}
• $sharees una cadena literal para indicar el filtro de temas de una suscripción compartida, que debe
empezar por$share.
• {ShareName}es una cadena de caracteres para especificar el nombre compartido que utiliza un grupo
de suscriptores. El filtro de temas de una suscripción compartida debe contener unShareNamey será
seguido por el/personaje. El{ShareName}no debe incluir los siguientes caracteres:/,+, o#. El tamaño
máximo para{ShareName}es de 128 bytes.
• {TopicFilter}sigue lo mismofiltro de temassintaxis como suscripción no compartida. El tamaño
máximo para{TopicFilter}es de 256 bytes.
• Las dos barras obligatorias (/) para$share/{ShareName}/{TopicFilter}no están incluidos en
elNúmero máximo de barras en el tema y el filtro de temaslímite.
En las tablas siguientes se comparan las suscripciones no compartidas y las suscripciones compartidas:
101
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
102
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
En este ejemplo, hay tres suscripciones compartidas que coinciden con el tema de publicación de
MQTTsports/tennis. El intermediario de mensajes copia el mensaje publicado y lo envía a un cliente
aleatorio de cada grupo coincidente.
Para obtener más información sobre los límites de las suscripciones compartidas, consulteAWS IoT
Corepuntos finales y cuotasdesde elAWSReferencia general. Para probar las suscripciones compartidas
mediante elAWS IoTCliente MQTT en elAWS IoTconsola, consulte??? (p. 72). Para obtener más
información sobre las suscripciones compartidas, consulteSuscripciones compartidasde la especificación
MQTTV5.0.
Alias de temas
Puede sustituir el nombre de un tema por un alias de tema, que es un entero de dos bytes. El uso de
alias de temas puede optimizar la transmisión de los nombres de los temas para reducir potencialmente
los costos de datos en los servicios de datos medidos.AWS IoT Coretiene un límite predeterminado de
8 alias de temas. Para obtener más información, consulteAWS IoT Corepuntos finales y cuotasdesde
elAWSReferencia general.
En la salida, el suscriptor recibirá un mensaje con el tiempo restante restante en el intervalo de caducidad.
Por ejemplo, si un mensaje de publicación entrante tiene una caducidad de 30 segundos y se envía al
suscriptor transcurridos 20 segundos, el campo de caducidad del mensaje se actualizará a 10. Es posible
que el mensaje recibido por el suscriptor tenga un MEI actualizado de 0. Esto se debe a que tan pronto
como el tiempo restante sea de 999 ms o menos, se actualizará a 0.
EnAWS IoT Core, el intervalo mínimo de caducidad de los mensajes es 1. Si el intervalo se establece en 0
desde el lado del cliente, se ajustará a 1. El intervalo máximo de caducidad de los mensajes es 604800 (7
días). Los valores superiores a este se ajustarán al valor máximo.
103
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
por una sesión conectada a través de MQTT5 puede caducar para los dispositivos suscritos a sesiones
de MQTT3. La siguiente tabla muestra cómo la caducidad de los mensajes admite los siguientes tipos de
mensajes de publicación:
Ultimo El intervalo para los mensajes de última voluntad comienza cuando el cliente se
testamento desconecta y el servidor intenta entregar el mensaje de última voluntad a sus
suscriptores.
Mensajes en Si una QoS1 saliente con intervalo de caducidad de mensajes caduca cuando un
cola cliente está desconectado, después desesión persistente (p. 92)se reanuda, el
cliente no recibirá el mensaje caducado.
Cuando se produce una desconexión, el servidor puede enviar de forma proactiva al cliente un mensaje de
DESCONEXIÓN para notificar el cierre de la conexión con un código de motivo de la desconexión.
Solicitud/respuesta
Los editores pueden solicitar que el destinatario envíe una respuesta a un tema especificado por el editor
en el momento de la recepción.
El cliente y el servidor pueden especificar de forma independiente el tamaño máximo de paquete que
admiten.
Puede especificar el formato de carga (binario, texto) y el tipo de contenido cuando se publique un
mensaje. Se reenvían al receptor del mensaje.
Propiedades de MQTT 5
Las propiedades de MQTT 5 son adiciones importantes al estándar MQTT para soportar las nuevas
funciones de MQTT 5, como la caducidad de la sesión y el patrón de solicitud/respuesta. EnAWS IoT Core,
puedes crearreglasque puede reenviar las propiedades de los mensajes salientes o utilizarPublicación
HTTPpara publicar mensajes MQTT con algunas de las nuevas propiedades.
La siguiente tabla muestra todas las propiedades de MQTT 5 queAWS IoT Coresoportes.
Indicador de Un valor booleano que indica si la carga está Byte PUBLICAR, CONECTAR
formato de formateada como UTF-8.
carga
104
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
Content Type Cadena UTF-8 que describe el contenido de la Cadena PUBLICAR, CONECTAR
carga. UTF-8
Tema de Cadena UTF-8 que describe el tema en el que Cadena PUBLICAR, CONECTAR
respuesta el receptor debe publicar como parte del flujo UTF-8
de solicitud-respuesta. El tema no debe tener
caracteres comodín.
Datos de Datos binarios utilizados por el remitente del Binario PUBLICAR, CONECTAR
correlación mensaje de solicitud para identificar a qué
solicitud se dirige el mensaje de respuesta.
Tema Alias Este valor indica el valor más alto que Entero CONECTAR, CONECTAR
Maximum se aceptará como alias de tema. El valor de 2
predeterminado es 0. bytes
105
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
Retener Un valor booleano que indica siAWS IoT Coreel Byte CHIVATO
disponible corredor de mensajes admite los mensajes
retenidos. El valor predeterminado es 1.
Suscripción Un valor booleano que indica siAWS IoT CoreEl Byte CHIVATO
a Wildcard corredor de mensajes admite la suscripción
disponible Wildcard disponible. El valor predeterminado es
1.
Identificador Un valor booleano que indica siAWS IoT Coreel Byte CHIVATO
de suscripción corredor de mensajes admite el identificador de
disponible suscripción disponible. El valor predeterminado
es 0.
128 0x80 Error no El servidor no desea revelar el motivo del error o no se aplica
especificado ninguno de los otros códigos por los que se aplica.
133 0x85 Identificador de El identificador del cliente es una cadena válida, pero el servidor
cliente no válido no lo permite.
144 0x90 Nombre de tema El nombre del tema del testamento está formado correctamente,
no válido pero el servidor no lo acepta.
155 0x9B No se admite QoS El servidor no admite la QoS establecida en Will QoS.
106
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
144 0x90 Nombre de tema El nombre del tema no tiene un formato incorrecto, pero el
no válido cliente o el servidor no lo aceptan.
145 0x91 Identificador de El identificador del paquete ya está en uso. Esto podría indicar
paquete en uso una discrepancia en el estado de la sesión entre el cliente y el
servidor.
129 0x81 Paquete mal El paquete recibido no cumple con esta especificación.
formado
142 0x8E Sesión Se ha conectado otra conexión con el mismo ClientID, lo que
interrumpida hace que esta conexión se cierre.
143 0x8F Filtro de tema no El filtro de temas está configurado correctamente, pero el
válido servidor no lo acepta.
144 0x90 Nombre de tema El nombre del tema tiene el formato correcto, pero este cliente
no válido o servidor no lo acepta.
148 0x94 Alias de tema no El cliente o servidor ha recibido un paquete PUBLISH que
válido contiene un alias de tema superior al alias de tema máximo que
envió en el paquete CONNECT o CONNACK.
107
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
155 0x9B No se admite El cliente especificó una QoS superior a la QoS especificada en
QoS la QoS máxima del CONNACK.
0 0x00 QoS concedida: 0 Se acepta la suscripción y la QoS máxima enviada será QoS 0.
Es posible que se trate de una QoS inferior a la solicitada.
1 0x01 QoS 1 concedida Se acepta la suscripción y la QoS máxima enviada será QoS 1.
Es posible que se trate de una QoS inferior a la solicitada.
143 0x8F Filtro de tema no El filtro de temas está configurado correctamente, pero no está
válido permitido para este cliente.
143 0x8F Filtro de tema no El filtro de temas está configurado correctamente, pero no está
válido permitido para este cliente.
108
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
• AWS IoTno admite los siguientes paquetes para MQTT 3: PUBREC, PUBREL y PUBCOMP.
• AWS IoTno admite los siguientes paquetes para MQTT 5: PUBREC, PUBREL, PUBCOMP y AUTH.
• AWS IoTno admite la redirección del servidor MQTT 5.
• AWS IoTsolo admite los niveles 0 y 1 de calidad de servicio (QoS) de MQTT.AWS IoTno admite la
publicación ni la suscripción con el nivel 2 de QoS. Cuando se solicita el nivel 2 de QoS, el intermediario
de mensajes no envía ningún PUBACK ni un SUBACK.
• En AWS IoT, suscribirse a un tema con QoS nivel 0 significa que un mensaje se entrega cero o más
veces. Es posible que un mensaje se entregue más de una vez. Los mensajes que se entreguen más de
una vez pueden enviarse con otro ID de paquete. En tal caso, la marca DUP no se establece.
• Cuando responde a una solicitud de conexión, el agente de mensajes envía un mensaje CONNACK.
Este mensaje contiene una marca para indicar si la conexión reanuda una sesión anterior.
• Antes de enviar paquetes de control adicionales o una solicitud de desconexión, el cliente debe esperar
a que el mensaje CONNACK se reciba en su dispositivo desde elAWS IoTagente de mensajes.
• Cuando un cliente se suscribe a un tema, puede haber un retraso entre el momento en que el agente
de mensajes envía un SUBACK y el momento en que el cliente empieza a recibir nuevos mensajes
coincidentes.
• Cuando un cliente usa el carácter comodín#en el filtro de temas para suscribirse a un tema, coinciden
todas las cadenas en su nivel de la jerarquía de temas o por debajo de él. Sin embargo, el tema principal
no coincide. Por ejemplo, una suscripción al temasensor/#recibe los mensajes publicados en los
temassensor/,sensor/temperature,sensor/temperature/room1, pero no los mensajes
publicados ensensor. Para obtener más información sobre los comodines, consulteFiltros de
temas (p. 114).
• El agente de mensajes utiliza el ID de cliente para identificar a cada cliente. El ID de cliente se transfiere
desde el cliente al agente de mensajes como parte de la carga de MQTT. Dos clientes con el mismo
ID de cliente no se pueden conectar simultáneamente al agente de mensajes. Cuando un cliente se
conecta al agente de mensajes mediante un ID de cliente que otro cliente está utilizando, se acepta la
nueva conexión de cliente y se desconecta el cliente previamente conectado.
• En raras ocasiones, el agente de mensajes reenviará el mismo mensaje PUBLISH lógico con otro ID de
paquete.
• La suscripción a los filtros de temas que contienen un carácter comodín no puede recibir mensajes
retenidos. Para recibir un mensaje retenido, la solicitud de suscripción debe contener un filtro de tema
que coincida exactamente con el tema del mensaje retenido.
• El agente de mensajes no garantiza el orden en que se reciben los mensajes y el ACK.
• AWS IoTpueden tener límites diferentes a los de las especificaciones. Para obtener más información,
consulteAWS IoT Corelímites y cuotas del intermediario de mensajes y del protocolodesde elAWS
IoTGuía de referencia.
HTTPS
Los clientes pueden publicar mensajes realizando solicitudes a la API REST utilizando los protocolos
HTTP 1.0 o 1.1. Para obtener información sobre la autenticación y los mapeos de puertos utilizados por las
solicitudes HTTP, consulte Protocolos, mapeos de puertos y autenticación (p. 87).
Note
109
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1"
• Endpoint de datos de IoTes elAWS IoTpunto final de datos del dispositivo (p. 83). Puede
encontrar el punto final enAWS IoTconsola en la página de detalles del objeto o en el cliente mediante
elAWS CLIcomando:
import requests
import argparse
# make request
publish = requests.request('POST',
publish_url,
data=publish_msg,
cert=[args.cert, args.key])
# print results
print("Response status: ", str(publish.status_code))
if publish.status_code == 200:
110
AWS IoT Core Guía para desarrolladores
Protocolos de comunicación de dispositivos
import requests
import http.client
import json
import ssl
ssl_context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_CLIENT)
ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2
# make request
response = connection.getresponse()
# print results
print(response.read().decode())
CURL
Para usar curl para enviar un mensaje desde un dispositivo cliente de AWS IoT
1. Compruebe elcurlversión.
curl --help
En el texto de ayuda, busque las opciones TLS. Debería ver la opción --tlsv1.2.
b. Si ve la opción --tlsv1.2, continúe.
c. Si no ve el--tlsv1.2opción o obtienes uncommand not founderror, es posible que
tengas que actualizar o instalar curl en tu cliente o instalaropensslantes de continuar.
2. Instale los certificados en su cliente.
Copie los archivos de certificado que creó cuando registró su cliente (objeto) en la consola
de AWS IoT. Asegúrese de que tiene estos tres archivos de certificado en su cliente antes de
continuar.
curl --tlsv1.2 \
111
AWS IoT Core Guía para desarrolladores
Temas de MQTT
--cacert Amazon-root-CA-1.pem \
--cert device.pem.crt \
--key private.pem.key \
--request POST \
--data "{ \"message\": \"Hello, world\" }" \
"https://IoT_data_endpoint:8443/topics/topic?qos=1"
--tlsv1.2
Los datos de HTTP POST que quiere publicar. En este caso, es una cadena JSON, con las
comillas internas con el carácter de escape de barra invertida (\).
«https://Endpoint de datos de IoT: 8443/temas/tema? qos=1"
La URL de su clienteAWS IoTpunto final de datos del dispositivo, seguido del puerto
HTTPS,:8443, que luego va seguida de la palabra clave,/topics/y el nombre del
tema,topic, en este caso. Especifique la calidad de servicio como parámetro de consulta,?
qos=1.
4. Abra el cliente de prueba MQTT en elAWS IoTconsola.
Siga las instrucciones deVer los mensajes MQTT con el cliente MQTT de AWS IoT (p. 69)y
configure la consola para suscribirse a los mensajes con el nombre del tema detemautilizado en
sucurlcomando, o utilice el filtro de temas comodín de#.
5. Pruebe el comando.
Mientras monitorea el tema en el cliente de prueba de la consola de AWS IoT, vaya a su cliente y
ejecute la línea de comandos curl que creó en el paso 3. Debería ver los mensajes de su cliente
en la consola.
Temas de MQTT
Los temas de MQTT identificanAWS IoTmensajes.AWS IoTlos clientes identifican los mensajes que
publican asignando nombres de temas a los mensajes. Los clientes identifican los mensajes a los que
desean suscribirse (recibir) registrando un filtro de temas con AWS IoT Core. El agente de mensajes de
utiliza nombres y filtros de temas para dirigir los mensajes de los clientes de publicación a los clientes de
suscripción.
El agente de mensajes utiliza temas para identificar los mensajes enviados mediante MQTT y enviados
mediante HTTP alURL del mensaje HTTPS (p. 110).
112
AWS IoT Core Guía para desarrolladores
Temas de MQTT
Aunque AWS IoT admite algunos temas reservados del sistema (p. 115), la mayoría de los temas de
MQTT los crea y administra el diseñador del sistema. AWS IoT utiliza temas para identificar los mensajes
que se reciben de los clientes de publicación y para seleccionar los mensajes que se van a enviar a los
clientes suscriptores, tal y como se describe en las secciones siguientes. Antes de crear un espacio de
nombres de temas para el sistema, consulte las características de los temas de MQTT para crear la
jerarquía de nombres de temas que funcione mejor con su sistema de IoT.
Nombres de temas
Los nombres de los temas y los filtros de temas son cadenas codificadas por UTF-8. Pueden representar
una jerarquía de información utilizando el carácter de barra diagonal (/) para separar los niveles de la
jerarquía. Por ejemplo, este nombre de tema podría referirse a un sensor de temperatura en la sala 1:
• sensor/temperature/room1
En este ejemplo, también puede haber otros tipos de sensores en otras salas con nombres de temas
como:
• sensor/temperature/room2
• sensor/humidity/room1
• sensor/humidity/room2
Note
Cuando considere los nombres de los temas para los mensajes de su sistema, tenga en cuenta:
• Los nombres de temas y los filtros de temas distinguen entre mayúsculas y minúsculas.
• Los nombres de los temas no deben contener información de identificación personal.
• Los nombres de tema que comienzan por $ son temas reservados (p. 115) que debe utilizar
únicamente AWS IoT Core.
• AWS IoT Coreno puede enviar ni recibir mensajes entreCuenta de AWSs o regiones.
Para obtener más información sobre cómo diseñar los nombres de los temas y el espacio de nombres,
consulta nuestro documento técnico,Diseño de temas de MQTT paraAWS IoT Core.
Para ver ejemplos de cómo las aplicaciones pueden publicar mensajes y suscribirse a ellos, comienza
conIntroducción a AWS IoT Core (p. 18)yAWS IoTSDK para dispositivos, SDK para dispositivos móviles
yAWS IoTCliente de dispositivo (p. 1489).
Important
El espacio de nombres del tema está limitado aCuenta de AWSy región. Por ejemplo, elsensor/
temp/room1tema utilizado por unCuenta de AWSen una región es distinta de lasensor/temp/
room1tema utilizado por el mismoAWScuenta en otra región o utilizada por cualquier otraCuenta
de AWSen cualquier región.
ARN de tema
Todos los ARN (nombres de recursos de Amazon) de los temas tienen el siguiente formato:
arn:aws:iot:aws-region:AWS-account-ID:topic/Topic
Por ejemplo,arn:aws:iot:us-west-2:123EXAMPLE456:topic/application/topic/device/
sensores un ARN para el tema application/topic/device/sensor.
113
AWS IoT Core Guía para desarrolladores
Temas de MQTT
Filtros de temas
Los clientes suscriptores registran filtros de temas con el agente de mensajes de para especificar los
temas de mensajes que el agente de mensajes debe enviarles. Un filtro de tema puede ser un nombre de
tema único para suscribirse a un solo nombre de tema o puede incluir caracteres comodín para suscribirse
a varios nombres de temas al mismo tiempo.
Los clientes de publicación no pueden usar caracteres comodín en los nombres de los temas que publican.
En la tabla siguiente se enumeran los caracteres comodín que se pueden utilizar en un filtro de temas.
Comodines de tema
Carácter comodín Coincide Notas
arn:aws:iot:aws-region:AWS-account-ID:topicfilter/TopicFilter
Por ejemplo,arn:aws:iot:us-west-2:123EXAMPLE456:topicfilter/application/topic/+/
sensores un ARN para el filtro de temas application/topic/+/sensor.
El uso de un formato JSON para la carga de mensajes permite laAWS IoTmotor de reglas para analizar
sus mensajes y aplicarles consultas SQL. Si la aplicación no requiere que el motor de reglas aplique
114
AWS IoT Core Guía para desarrolladores
Temas de MQTT
consultas SQL a las cargas de mensajes, puede utilizar cualquier formato de datos que requiera la
aplicación. Para obtener información sobre las limitaciones y los caracteres reservados de un documento
JSON utilizado en las consultas SQL, consulteExtensiones JSON (p. 672).
Para obtener más información sobre el diseño de los temas de MQTT y sus correspondientes cargas de
mensajes, consulteDiseño de temas de MQTT paraAWS IoT Core.
Temas reservados
Los temas que comienzan por un signo de dólar ($) están reservados para su uso por parte de AWS IoT.
Puedes suscribirte a estos temas reservados y publicarlos en la medida en que lo permitan; sin embargo,
no puedes crear nuevos temas que comiencen por el signo del dólar. Las operaciones de publicación o
suscripción no admitidas a temas reservados pueden dar como resultado que se termine la conexión.
Para obtener más información, consulte Envío de métricas desde dispositivos (p. 1108).
115
AWS IoT Core Guía para desarrolladores
Temas de MQTT
116
AWS IoT Core Guía para desarrolladores
Temas de MQTT
Temas de eventos
117
AWS IoT Core Guía para desarrolladores
Temas de MQTT
118
AWS IoT Core Guía para desarrolladores
Temas de MQTT
119
AWS IoT Core Guía para desarrolladores
Temas de MQTT
Las operaciones del cliente se indican comoRecibiren esta tabla, indique los temas queAWS
IoTpublica directamente en el cliente que lo solicitó, independientemente de que el cliente se haya
suscrito al tema o no. Los clientes deben esperar recibir estos mensajes de respuesta incluso
si no se han suscrito a ellos. Estos mensajes de respuesta no pasan por el intermediario de
mensajes y no pueden suscribirse a ellos otros clientes ni reglas.
Estos mensajes admiten búferes de respuesta en formato de representación binaria concisa de objetos
(CBOR) yJavaScriptNotación de objetos (JSON), segúnformato de cargadel tema.
Para obtener más información, consulte API de MQTT de aprovisionamiento de dispositivos (p. 915).
120
AWS IoT Core Guía para desarrolladores
Temas de MQTT
$aws/certificados/create-from- Suscríbete, recibe AWS IoTpublica sobre este tema una llamada
csr/formato de carga/ exitosa a $aws/certificates/create-from-
aceptado csr/formato de carga.
$aws/certificados/create-from- Suscríbete, recibe AWS IoTpublica sobre este tema una llamada
csr/formato de carga/ fallida a $aws/certificates/create-from-
rechazado csr/formato de carga.
Temas de trabajos
Note
Las operaciones del cliente se indican comoRecibiren esta tabla, indique los temas queAWS
IoTpublica directamente en el cliente que lo solicitó, independientemente de que el cliente se haya
suscrito al tema o no. Los clientes deben esperar recibir estos mensajes de respuesta incluso si
no se han suscrito a ellos.
Estos mensajes de respuesta no pasan por el intermediario de mensajes y no pueden suscribirse
a ellos otros clientes ni reglas. Para suscribirse a los mensajes relacionados con la actividad
laboral, utilice elnotifyynotify-nexttemas.
Al suscribirse al trabajo yjobExecutiontemas de eventos para su solución de monitoreo de
flotas, primero debe habilitartrabajo y eventos de ejecución de trabajos (p. 1253)para recibir
cualquier evento en la nube.
Para obtener más información, consulte Operaciones de la API MQTT del dispositivo
Jobs (p. 817).
121
AWS IoT Core Guía para desarrolladores
Temas de MQTT
122
AWS IoT Core Guía para desarrolladores
Temas de MQTT
123
AWS IoT Core Guía para desarrolladores
Temas de MQTT
124
AWS IoT Core Guía para desarrolladores
Temas de MQTT
Temas de reglas
Temas de sombra
Las sombras con nombre y sin nombre utilizan los temas de esta sección. Los temas utilizados por cada
uno solo difieren en el prefijo del tema. Esta tabla muestra el prefijo de tema utilizado por cada tipo de
sombra.
125
AWS IoT Core Guía para desarrolladores
Temas de MQTT
126
AWS IoT Core Guía para desarrolladores
Temas de MQTT
127
AWS IoT Core Guía para desarrolladores
Terminales configurables
arn:aws:iot:aws-region:AWS-account-ID:topic/Topic
Por ejemplo,arn:aws:iot:us-west-2:123EXAMPLE456:topic/$aws/things/thingName/jobs/
get/acceptedes un ARN para el tema reservado$aws/things/thingName/jobs/get/accepted.
Terminales configurables
ConAWS IoT Core, puede configurar y administrar los comportamientos de sus extremos de datos
mediante configuraciones de dominio. Con las configuraciones de dominio, puede generar múltiplesAWS
IoT Corepuntos de enlace de datos, personalice los extremos de datos con sus propios nombres de
dominio completos (FQDN) y certificados de servidor asociados, y también asocie un autorizador
personalizado. Para obtener más información, consulte Autenticación y autorización a la medida (p. 337).
Note
Puede utilizar configuraciones de dominio para simplificar tareas como las siguientes.
AWS IoT Core utiliza la extensión TLS de indicación de nombre de servidor (SNI) para aplicar
configuraciones de dominio. Los dispositivos deben usar esta extensión cuando se conecten. También
128
AWS IoT Core Guía para desarrolladores
Terminales configurables
deben incluir un nombre de servidor que sea idéntico al nombre de dominio que especifique en
la configuración del dominio. Para probar este servicio, utilice la versión v2 delAWS IoTSDK de
dispositivosenGitHub.
Si crea varios puntos finales de datos en suCuenta de AWS, compartiránAWS IoT Corerecursos como
temas de MQTT, sombras de dispositivos y reglas.
Temas
• Creación y configuración de dominios administrados por AWS (p. 129)
• Creación y configuración de dominios personalizados (p. 129)
• Administrar configuraciones de dominio (p. 133)
• Configuración de los ajustes de TLS en las configuraciones de dominio (p. 134)
• domainConfigurationName
Un nombre definido por el usuario que identifique la configuración del dominio y el valor debe ser
exclusivo de suRegión de AWS. No puede usar nombres de configuración de dominio que comiencen
conIoT:porque están reservados para los puntos finales predeterminados.
• defaultAuthorizerName (opcional)
Un valor booleano que especifica si los dispositivos pueden anular el autorizador predeterminado
especificando un autorizador diferente en el encabezado HTTP de la solicitud. Este valor es obligatorio si
se especifica un valor para defaultAuthorizerName.
• serviceType
Objeto que especifica la configuración de TLS para un dominio. Para obtener más información, consulte
??? (p. 134).
El siguiente ejemploAWS CLIel comando crea una configuración de dominio para unDatapunto final.
129
AWS IoT Core Guía para desarrolladores
Terminales configurables
propios certificados de servidor para poder gestionar detalles, como la autoridad certificadora (CA) raíz
utilizada para firmar el certificado, el algoritmo de firma, la profundidad de la cadena de certificados y el
ciclo de vida del certificado.
El flujo de trabajo para establecer una configuración de dominio con un dominio personalizado consta de
las tres etapas siguientes.
Note
AWS IoT Core considera que un certificado está firmado por una entidad de certificación pública
(CA) si está incluido en el paquete de CA de confianza de Mozilla.
Requisitos de certificado
ConsulteRequisitos previos para la importación de certificadospara conocer los requisitos para importar
certificados a ACM. Además de estos requisitos,AWS IoT Coreañade los siguientes requisitos.
• El certificado foliar debe incluir elUso extendido de clavesextensión x509 v3 con un valor
deAutenticación del servidor(Autenticación de servidor web TLS). Si solicita el certificado a ACM, esta
extensión se agrega automáticamente.
• La profundidad máxima de la cadena de certificados es de 5 certificados.
• El tamaño máximo de la cadena de certificados es de 16 KB.
• El tamaño de la clave del certificado es 2048.
Si tiene previsto utilizar un certificado para cubrir varios subdominios, utilice un dominio comodín
en el campo Nombre común (CN) o Nombres alternativos del firmante (SAN). Por ejemplo, utilice
*.iot.example.com para cubrir dev.iot.example.com, qa.iot.example.com y prod.iot.example.com.
Cada FQDN requiere su propia configuración de dominio, pero varias configuraciones de dominio pueden
usar el mismo valor comodín. El CN o el SAN deben cubrir el FQDN que desea utilizar como dominio
personalizado. Si hay SAN, se ignora la CN y una SAN debe cubrir el FQDN que desea usar como dominio
personalizado. Esta cobertura puede ser una coincidencia exacta o una coincidencia de caracteres
comodín. Una vez validado y registrado un certificado comodín en una cuenta, se impide que otras cuentas
de la región creen dominios personalizados que se superpongan con el certificado.
En las siguientes secciones se describe cómo obtener cada tipo de certificado. Cada recurso de certificado
requiere un nombre de recurso de Amazon (ARN) registrado en ACM que utilice al crear la configuración
de su dominio.
130
AWS IoT Core Guía para desarrolladores
Terminales configurables
Si ya tienes un certificado de servidor firmado por una CA pública (una CA que se incluye en el paquete
de CA de confianza de Mozilla), puedes importar la cadena de certificados directamente a ACM
medianteImportCertificateAPI. Para obtener más información sobre esta tarea, los requisitos previos y los
requisitos de formato de certificado, consulte Importación de certificados.
Si ya tiene un certificado de servidor firmado por una CA privada o autofirmado, puede usar el certificado
para crear la configuración de su dominio, pero también debe crear un certificado público adicional en
ACM para validar la propiedad de su dominio. Para ello, registre la cadena de certificados de su servidor
en ACM mediante elImportCertificateAPI. Para obtener más información sobre esta tarea, los requisitos
previos y los requisitos de formato de certificado, consulte Importación de certificados.
Tras importar el certificado a ACM, genere un certificado público para su dominio personalizado mediante
elRequestCertificateAPI. Al generar un certificado de esta manera, ACM valida su propiedad del dominio
personalizado. Para obtener más información, consulte Solicitar un certificado público. Cuando cree la
configuración de dominio, utilice este certificado público como certificado de validación.
• domainConfigurationName
Nombre definido por el usuario que identifica la configuración del dominio. Los nombres de configuración
de dominio que comienzan por IoT: están reservados para los puntos de enlace predeterminados y no
se pueden usar. Además, este valor debe ser exclusivo de suRegión de AWS.
• domainName
El FQDN que utilizan sus dispositivos para conectarseAWS IoT Core.AWS IoT Coreaprovecha la
extensión TLS de indicación del nombre del servidor (SNI) para aplicar configuraciones de dominio. Los
dispositivos deben usar esta extensión al conectarse y pasar un nombre de servidor idéntico al nombre
de dominio especificado en la configuración del dominio.
• serverCertificateArns
El ARN de la cadena de certificados del servidor que registró en ACM.AWS IoT Coreactualmente solo
admite un certificado de servidor.
• validationCertificateArn
El ARN del certificado público que generó en ACM para validar la propiedad de su dominio
personalizado. Este argumento no es obligatorio si utiliza un certificado de servidor generado por ACM o
firmado públicamente.
• defaultAuthorizerName (optional)
131
AWS IoT Core Guía para desarrolladores
Terminales configurables
• allowAuthorizerOverride
Un valor booleano que especifica si los dispositivos pueden anular el autorizador predeterminado
especificando un autorizador diferente en el encabezado HTTP de la solicitud. Este valor es obligatorio si
se especifica un valor para defaultAuthorizerName.
• serviceType
AWS IoT Core actualmente solo admite el tipo de servicio DATA. Cuando especifiquesDATA,AWS
IoTdevuelve un punto final con un tipo de punto final deiot:Data-ATS.
• TlsConfig (opcional)
Objeto que especifica la configuración de TLS para un dominio. Para obtener más información, consulte
??? (p. 134).
El siguiente comando de la AWS CLI crea una configuración de dominio para iot.example.com.
Note
Después de crear la configuración de dominio, pueden pasar hasta 60 minutos hasta queAWS IoT
Coresirve sus certificados de servidor personalizados.
Cuando tenga el punto de enlace iot:Data-ATS, cree un registro CNAME en el dominio personalizado
para este punto de enlace de AWS IoT. Si creas varios dominios personalizados en el mismoCuenta de
AWS, ponerles el alias de este mismoiot:Data-ATSpunto final.
Solución de problemas
Si tienes problemas para conectar dispositivos a un dominio personalizado, asegúrate de queAWS IoT
Coreha aceptado y aplicado su certificado de servidor. Puedes verificarloAWS IoT Coreha aceptado su
certificado mediante elAWS IoT Coreconsola oAWS CLI.
Para utilizar elAWS IoT Coreconsola, navega hasta laAjustespágina y seleccione el nombre de
configuración del dominio. En elDetalles del certificado de servidorsección, compruebe el estado y los
detalles del estado. Si el certificado no es válido, sustitúyalo en ACM por un certificado que cumpla
conrequisitos de certificado (p. 130)listados en la sección anterior. Si el certificado tiene el mismo
ARN,AWS IoT Corelo recogerá y lo aplicará automáticamente.
Para comprobar el estado del certificado mediante elAWS CLI, llame alDescribeDomainConfigurationUtilice
la API y especifique el nombre de configuración de su dominio.
132
AWS IoT Core Guía para desarrolladores
Terminales configurables
Note
Si su certificado no es válido,AWS IoT Coreseguirá entregando el último certificado válido.
Puede comprobar qué certificado se entrega en su terminal mediante el siguiente comando openssl.
• ListDomainConfigurations
• DescribeDomainConfiguration
• UpdateDomainConfiguration
• DeleteDomainConfiguration
Ejemplo
Ejemplo
Ejemplo
Después de eliminar una configuración de dominio, AWS IoT Core ya no sirve el certificado de servidor
asociado a ese dominio personalizado.
133
AWS IoT Core Guía para desarrolladores
Terminales configurables
Note
AWS IoT Coresolo recoge las actualizaciones de los certificados en las siguientes condiciones.
La siguiente tabla describe las políticas de seguridad, sus versiones de TLS y las regiones compatibles:
IoTSecurityPolicy_TLS13_1_3_2022_10
TodosRegiones de AWS
IoTSecurityPolicy_TLS13_1_2_2022_10
TodosRegiones de AWS
IoTSecurityPolicy_TLS12_1_2_2022_10
TodosRegiones de AWS
IoTSecurityPolicy_TLS12_1_0_2016_01
ap-este-1, ap-norte-2, ap-sur-1, ap-sudeast-2, ca-central-1, cn-norte-1, cn-
noroeste-1, eu-norte1, eu-oeste-2, eu-oeste-3, me-sur-1, sa-este-2,us-gov-
west-1,us-gov-west-2, US-oeste-1
IoTSecurityPolicy_TLS12_1_0_2015_01
ap-nordeste-1, ap-sudeast-1, EU-centro-1, EU-oeste-1, EE. UU. Este-2
Los nombres de las políticas de seguridad enAWS IoT Coreincluyen información sobre la versión en
función del año y el mes en que se publicaron. Si crea una nueva configuración de dominio, la política de
seguridad se establecerá de forma predeterminada enIoTSecurityPolicy_TLS13_1_2_2022_10.
Para obtener una tabla completa de políticas de seguridad con detalles de los protocolos, los puertos TCP
y los cifrados, consultePolíticas de seguridad (p. 403).AWS IoT Coreno admite políticas de seguridad
personalizadas. Para obtener más información, consulte ??? (p. 402).
Para configurar los ajustes de TLS en las configuraciones de dominio, puede utilizar laAWS IoTconsola
oAWS CLI.
Contenido
• Configurar los ajustes de TLS en las configuraciones de dominio (consola) (p. 134)
• Configurar los ajustes de TLS en las configuraciones de dominio (CLI) (p. 135)
134
AWS IoT Core Guía para desarrolladores
Terminales configurables
2. Para configurar los ajustes de TLS al crear una nueva configuración de dominio, siga estos pasos.
{
"domainConfigurationName": "test",
"domainConfigurationArn": "arn:aws:iot:us-west-2:123456789012:domainconfiguration/
test/34ga9"
}
Si crea una nueva configuración de dominio sin especificar la política de seguridad, el valor
predeterminado será:IoTSecurityPolicy_TLS13_1_2_2022_10.
2. Para describir la configuración de TLS mediantedescribe-domain-configurationComando CLI:
Este comando puede devolver los detalles de configuración del dominio que incluyen la configuración de
TLS, como se muestra a continuación:
{
"tlsConfig": {
"securityPolicy": "IoTSecurityPolicy_TLS13_1_2_2022_10"
},
"domainConfigurationStatus": "ENABLED",
"serviceType": "DATA",
"domainType": "AWS_MANAGED",
135
AWS IoT Core Guía para desarrolladores
Conectarse aAWS IoTTerminales FIPS
"domainName": "d1234567890abcdefghij-ats.iot.us-west-2.amazonaws.com",
"serverCertificates": [],
"lastStatusChangeDate": 1678750928.997,
"domainConfigurationName": "test",
"domainConfigurationArn": "arn:aws:iot:us-west-2:123456789012:domainconfiguration/
test/34ga9"
}
{
"domainConfigurationName": "test",
"domainConfigurationArn": "arn:aws:iot:us-west-2:123456789012:domainconfiguration/
test/34ga9"
}
{
"domainConfigurationName": "iot:Data-ATS",
"domainConfigurationArn": "arn:aws:iot:us-west-2:123456789012:domainconfiguration/
iot:Data-ATS"
}
En las siguientes secciones se describe cómo acceder a la normativa FIPS.AWS IoTpuntos de conexión
mediante la API REST, un SDK o elAWS CLI.
Temas
• AWS IoT Core- puntos finales del plano de control (p. 137)
• AWS IoT Core- puntos finales del plano de datos (p. 137)
136
AWS IoT Core Guía para desarrolladores
AWS IoT Core- puntos finales del plano de control
• AWS IoT Device Management- puntos finales de datos de trabajos (p. 137)
• AWS IoT Device Management- Terminales Fleet Hub (p. 138)
• AWS IoT Device Management- puntos finales de tunelización seguros (p. 138)
Para utilizar el punto final que cumple con la FIPS al acceder alAWS IoToperaciones, utilice elAWSEl SDK
o la API REST con el punto de conexión adecuado para suRegión de AWS.
Para utilizar el punto de conexión compatible con FIPS cuando ejecutaaws iotComandos de CLI, añada el--
endpointparámetro con el punto final adecuado para suRegión de AWSal comando.
Puede utilizar el terminal compatible con FIPS para suRegión de AWScon un cliente compatible con
FIPS mediante elAWS IoTSDK del dispositivo y proporcionar el punto final a la función de conexión del
SDK en lugar de la predeterminada de tu cuentaAWS IoT Core- plano de datospunto final. La función de
conexión es específica deAWS IoTSDK de dispositivos. Para ver un ejemplo de una función de conexión,
consulteFunción de conexión en elAWS IoTSDK de dispositivos para Python.
Note
Para utilizar la norma FIPSAWS IoT Device Management- datos de empleospunto final cuando corresaws
iot-jobs-dataComandos CLI, añada el--endpointparámetro con el punto final adecuado para suRegión de
AWSal comando. También puede utilizar la API REST con este punto de conexión.
Puede utilizar el terminal compatible con FIPS para suRegión de AWScon un cliente compatible con FIPS
mediante elAWS IoTSDK del dispositivo y proporcionar el punto final a la función de conexión del SDK en
lugar de la predeterminada de tu cuentaAWS IoT Device Management- datos de empleospunto final. La
función de conexión es específica deAWS IoTSDK de dispositivos. Para ver un ejemplo de una función de
conexión, consulteFunción de conexión en elAWS IoTSDK de dispositivos para Python.
137
AWS IoT Core Guía para desarrolladores
AWS IoT Device Management- Terminales Fleet Hub
Para utilizar la norma FIPSAWS IoT Device Management- Centro de flotaspunto final cuando corresaws
iotfleethubComandos de CLI, añada el--endpointparámetro con el punto final adecuado para suRegión de
AWSal comando. También puede utilizar la API REST con este punto de conexión.
Para utilizar la norma FIPSAWS IoT Device Management- construcción segura de túnelespunto final
cuando corresaws iotsecuretunnelingComandos CLI, añada el--endpointparámetro con el punto final
adecuado para suRegión de AWSal comando. También puede utilizar la API REST con este punto de
conexión.
138
AWS IoT Core Guía para desarrolladores
Creación de demostraciones con
elAWS IoTCliente del dispositivo
Para demostrar tareas y aplicaciones comunes de IoT mediante elAWS IoTDevice Client en tus
dispositivos, sigue lathe section called “Creación de demostraciones con elAWS IoTCliente del
dispositivo” (p. 139)ruta de aprendizaje. LaAWS IoTDevice Client proporciona software de dispositivo
con el que puede aplicar sus propios recursos en la nube para demostrar un end-to-end solución con un
desarrollo mínimo.
Para obtener más información acerca de laAWS IoTDevice Client, consulte laAWS IoTCliente del
dispositivo.
• Desea aprender a crear software de producción para implementar su solución
Para crear su propio software de solución que cumpla con sus requisitos específicos mediante unAWS
IoTSDK del dispositivo, siga elthe section called “Creación de soluciones con elAWS IoTSDKs de
dispositivos” (p. 191)ruta de aprendizaje.
El objetivo de estos tutoriales es facilitar la exploración y la experimentación para que puedas estar seguro
de queAWS IoTes compatible con la solución antes de desarrollar el software del dispositivo.
• Cómo preparar un Raspberry Pi para usarlo como dispositivo IoT conAWS IoT
• Cómo demostrarAWS IoTfunciones mediante elAWS IoTDevice Client en el dispositivo
En esta ruta de aprendizaje, instalará elAWS IoTDevice Client en tu propio Raspberry Pi y crea elAWS
IoTrecursos en la nube para demostrar ideas de soluciones de IoT. Si bien los tutoriales de esta ruta
139
AWS IoT Core Guía para desarrolladores
Requisitos previos para crear demostraciones
con elAWS IoTCliente del dispositivo
de aprendizaje muestran características mediante el uso de una Raspberry Pi, explican los objetivos y
procedimientos para ayudarle a adaptarlos a otros dispositivos.
Puede utilizar su existenteCuenta de AWS, si tienes uno, pero es posible que tengas que añadir
funciones o permisos adicionales para usar elAWS IoTcaracterísticas que utilizan estos tutoriales.
Si necesita crear una nuevaCuenta de AWS, consultethe section called “Configura tuCuenta de
AWS” (p. 19).
• Raspberry Pi o dispositivo IoT compatible
Los tutoriales utilizan unRaspberry Piporque viene en diferentes factores de forma, es omnipresente y es
un dispositivo de demostración relativamente económico. Los tutoriales se han probado en laRaspberry
Pi 3 Modelo B+, elRaspberry Pi 4 Modelo By en una instancia de Amazon EC2 que ejecuta Ubuntu
Server 20.04 LTS (HVM). Para utilizar elAWS CLIy ejecute los comandos, le recomendamos que utilice
la última versión del Raspberry Pi OS (Raspberry Pi OS (64 bits)o OS Lite). Las versiones anteriores del
sistema operativo podrían funcionar, pero no lo hemos probado.
Note
Los tutoriales explican los objetivos de cada paso para ayudarle a adaptarlos al hardware
de IoT en el que no los hemos probado; sin embargo, no describen específicamente cómo
adaptarlos a otros dispositivos.
• Familiaridad con el sistema operativo del dispositivo IoT
En los pasos de estos tutoriales se supone que está familiarizado con el uso de comandos y operaciones
básicos de Linux desde la interfaz de línea de comandos compatible con Raspberry Pi. Si no estás
familiarizado con estas operaciones, tal vez quieras dedicarte más tiempo para completar los tutoriales.
Los tutoriales describen el software y el hardware necesarios; sin embargo, los tutoriales suponen
que podrá realizar operaciones que podrían no describirse explícitamente. Algunos ejemplos de este
hardware y operaciones incluyen:
140
AWS IoT Core Guía para desarrolladores
Preparación de los dispositivos para
elAWS IoTCliente del dispositivo
Para el Raspberry Pi, suele ser un ordenador personal o portátil que puede leer y escribir en tarjetas
de memoria microSD. El equipo host local debe:
• Conectarse a Internet.
• Tenga laAWS CLIinstalada y configurada.
• Disponer de un navegador web que admita laAWSconsola de .
• Una forma de conectar el equipo host local al dispositivo para comunicarse con él, introducir
comandos y transferir archivos
En Raspberry Pi, esto se hace a menudo utilizando SSH y SCP desde el equipo host local.
• Monitor y teclado para conectarse al dispositivo IoT
Estos pueden ser útiles, pero no son necesarios para completar los tutoriales.
• Una forma de que el equipo host local y los dispositivos IoT se conecten a Internet
Podría ser una conexión de red por cable o inalámbrica a un router o puerta de enlace que está
conectado a Internet. El host local también debe poder conectarse a Raspberry Pi. Esto podría
requerir que estén en la misma red de área local. Los tutoriales no pueden mostrarle cómo
configurarlo para la configuración de su dispositivo o dispositivo en particular, pero muestran cómo
puede probar esta conectividad.
• Acceso al enrutador de la red de área local para ver los dispositivos conectados
Para completar los tutoriales de esta ruta de aprendizaje, tendrás que poder encontrar la dirección IP
de tu dispositivo IoT.
En una red de área local, esto se puede hacer accediendo a la interfaz de administración del router de
red al que se conectan los dispositivos. Si puede asignar una dirección IP fija para su dispositivo en el
router, puede simplificar la reconexión cada vez que se reinicie el dispositivo.
Si ninguna de estas opciones es una opción, tendrás que encontrar una forma de identificar la
dirección IP del dispositivo después de cada vez que se reinicie.
Después de tener todos sus materiales, continúethe section called “Preparación de los dispositivos para
elAWS IoTCliente del dispositivo” (p. 141).
141
AWS IoT Core Guía para desarrolladores
Preparación de los dispositivos para
elAWS IoTCliente del dispositivo
El objetivo de este tutorial es instalar la versión actual del sistema operativo del dispositivo y asegurarse de
que puede comunicarse con el dispositivo en el contexto de su entorno de desarrollo.
• Haga que los artículos estén listados enthe section called “Requisitos previos para crear demostraciones
con elAWS IoTCliente del dispositivo” (p. 140)disponible y listo para su uso.
Después de completar este tutorial, el siguiente tutorial prepara el dispositivo para las demostraciones que
utilizan elAWS IoTCliente del dispositivo.
Después de completar esta sección, debería poder iniciar el dispositivo IoT y conectarse a él desde el
programa terminal de su equipo host local.
Equipo requerido:
Al seleccionar una tarjeta microSD para estos ejercicios, elija una que sea lo más grande que
sea necesario pero, lo más pequeña posible.
Una pequeña tarjeta SD será más rápida de realizar copias de seguridad y actualización. En
Raspberry Pi, no necesitarás más de una tarjeta microSD de 8 GB para estos tutoriales. Si
necesita más espacio para su aplicación específica, los archivos de imagen más pequeños que
guarde en estos tutoriales pueden cambiar el tamaño del sistema de archivos en una tarjeta
más grande para utilizar todo el espacio admitido de la tarjeta que elija.
142
AWS IoT Core Guía para desarrolladores
Preparación de los dispositivos para
elAWS IoTCliente del dispositivo
Equipamiento opcional:
1. En el equipo host local, descargue y descomprima la imagen del sistema operativo Raspberry Pi
que desea utilizar. Las últimas versiones están disponibles enhttps://www.raspberrypi.com/software/
operating-systems/
En este tutorial se utilizaRaspberry Pi OS Liteversión porque es la versión más pequeña que admite
estos tutoriales en esta ruta de aprendizaje. Esta versión del sistema operativo Raspberry Pi solo
tiene una interfaz de línea de comandos y no tiene interfaz gráfica de usuario. Una versión del último
sistema operativo Raspberry Pi con una interfaz gráfica de usuario también funcionará con estos
tutoriales; sin embargo, los procedimientos descritos en esta ruta de aprendizaje utilizan únicamente la
interfaz de línea de comandos para realizar operaciones en Raspberry Pi.
2. Inserte la tarjeta microSD en el equipo host local.
3. Con una herramienta de imagen de tarjetas SD, escriba el archivo de imagen del sistema operativo
descomprimido en la tarjeta microSD.
4. Después de escribir la imagen del sistema operativo Raspberry Pi en la tarjeta microSD:
a. Abra la partición BOOT de la tarjeta microSD en una ventana de línea de comandos o en una
ventana del explorador de archivos.
b. En la partición BOOT de la tarjeta microSD, en el directorio raíz, cree un archivo vacío
denominadosshsin extensión de archivo ni contenido. Esto indica a Raspberry Pi que active las
comunicaciones SSH la primera vez que se inicia.
5. Expulsa la tarjeta microSD y quítala de forma segura del equipo host local.
Su tarjeta microSD está lista parathe section called “Inicie su dispositivo IoT con el nuevo sistema
operativo” (p. 143).
143
AWS IoT Core Guía para desarrolladores
Preparación de los dispositivos para
elAWS IoTCliente del dispositivo
1. Con la alimentación desconectada del dispositivo, inserte la tarjeta microSD del paso anterior,the
section called “Cargue el sistema operativo del dispositivo en la tarjeta microSD” (p. 143), en el
Raspberry Pi.
2. Connect del dispositivo a una red cableada.
3. Estos tutoriales interactuarán con su Raspberry Pi desde su equipo host local mediante un terminal
SSH.
a. Connect un monitor HDMI a él para ver los mensajes de la consola de Raspberry Pi antes de
poder conectar la ventana del terminal del equipo host local a la Raspberry Pi.
b. Connect un teclado USB si quieres interactuar directamente con la Raspberry Pi.
4. Connect la alimentación a la Raspberry Pi y espera alrededor de un minuto para que se inicialice.
Si tienes un monitor conectado a tu Raspberry Pi, puedes ver el proceso de inicio en él.
5. Averigua la dirección IP de tu dispositivo:
Cuando tenga la dirección IP de su Raspberry Pi, estará listo parathe section called “Connect el equipo
host local al dispositivo” (p. 144).
• Windows: PuTTY
• Linux/macOS:Terminal
Note
PuTTY no se instala automáticamente en Windows. Si no está en el equipo, tal vez tenga que
descargarlo e instalarlo.
2. Connect el programa de terminal a la dirección IP de Raspberry Pi e inicie sesión con sus credenciales
predeterminadas.
username: pi
password: raspberry
passwd
144
AWS IoT Core Guía para desarrolladores
Preparación de los dispositivos para
elAWS IoTCliente del dispositivo
Después de tener el símbolo de línea de comandos de Raspberry Pi en la ventana del terminal y cambiar
la contraseña, estará listo para continuarthe section called “Paso 2: Instala y verifica el software necesario
en tu dispositivo” (p. 145).
Después de completar esta sección, su Raspberry Pi tendrá un sistema operativo actualizado, el software
requerido por los tutoriales de esta ruta de aprendizaje y se configurará para su ubicación.
Equipo requerido:
Note
Raspberry Pi Model 3+ y Raspberry Pi Model 4 pueden ejecutar todos los comandos descritos
en esta ruta de aprendizaje. Si el dispositivo IoT no puede compilar software o ejecutar elAWS
Command Line Interface, es posible que tenga que instalar los compiladores necesarios en el
equipo host local para crear el software y, a continuación, transferirlo a su dispositivo IoT. Para
obtener más información sobre cómo instalar y crear software para su dispositivo, consulte la
documentación del software de su dispositivo.
Lleve a cabo estos pasos en la ventana de terminal del equipo host local.
1. Escriba estos comandos para actualizar el software del sistema en su Raspberry Pi.
145
AWS IoT Core Guía para desarrolladores
Preparación de los dispositivos para
elAWS IoTCliente del dispositivo
Introduzca este comando para actualizar la configuración regional y la zona horaria del dispositivo.
sudo raspi-config
sudo shutdown -r 0
El software del sistema Raspberry Pi ya está configurado y está listo para continuarthe section called
“Instale las aplicaciones y bibliotecas necesarias” (p. 147).
Si utiliza una Raspberry Pi o si puede compilar el software necesario en su dispositivo IoT, lleve a cabo
estos pasos en la ventana del terminal del equipo host local. Si debe compilar software para su dispositivo
IoT en el equipo host local, consulte la documentación de software de su dispositivo IoT para obtener
información sobre cómo realizar estos pasos en el dispositivo.
2. Introduzca estos comandos para confirmar que se ha instalado la versión correcta del software.
gcc --version
cmake --version
openssl version
git --version
Si su Raspberry Pi tiene versiones aceptables del software de aplicación requerido, está listo para
continuarthe section called “(Opcional) Guardar la imagen de la tarjeta microSD” (p. 147).
En este punto, la tarjeta microSD de su Raspberry Pi tiene un sistema operativo actualizado y el software
básico de aplicación cargado. Puede ahorrar el tiempo que le tomó completar los pasos anteriores
guardando ahora el contenido de la tarjeta microSD en un archivo. Tener la imagen actual de la imagen de
la tarjeta microSD de tu dispositivo te permite comenzar desde este punto para continuar o volver a intentar
un tutorial o procedimiento sin necesidad de instalar y actualizar el software desde cero.
147
AWS IoT Core Guía para desarrolladores
Preparación de los dispositivos para
elAWS IoTCliente del dispositivo
sudo shutdown -h 0
Después de completar esta sección, sabrá que su Raspberry Pi tiene el software del sistema necesario
para instalar elAWS IoTDevice Client y que tiene una conexión funcional a Internet.
Equipo requerido:
Si utiliza una Raspberry Pi o si puede compilar software en su dispositivo IoT, lleve a cabo estos pasos en
la ventana del terminal del equipo host local. Si debe compilar software para su dispositivo IoT en el equipo
host local, consulte la documentación de software de su dispositivo IoT para obtener información sobre las
bibliotecas que necesita.
148
AWS IoT Core Guía para desarrolladores
Preparación de los dispositivos para
elAWS IoTCliente del dispositivo
export PATH=$PATH:~/.local/bin # configures the path to include the directory with the
AWS CLI
git clone https://github.com/aws/aws-cli.git # download the AWS CLI code from GitHub
cd aws-cli && git checkout v2 # go to the directory with the repo and checkout version
2
pip3 install -r requirements.txt # install the prerequisite software
2. Ejecute este comando para instalar elAWS CLI. Este comando puede tardar hasta 15 minutos en
completarse.
3. Ejecute este comando para confirmar que la versión correcta delAWS CLIse instaló.
aws --version
Si el archivo deAWS CLImuestra su versión actual, estará listo para continuarthe section called
“Configuración de sus credenciales de Cuenta de AWS” (p. 149).
1. Obtenga unAccess Key IDyClave de acceso secretadesde suCuenta de AWSpara autenticar elAWS
CLIen su dispositivo.
aws configure
3. Ejecute este comando para probar el acceso de tu dispositivo a tuCuenta de AWSyAWS IoT Core.
Debería devolver suCuenta de AWS-específicoAWS IoTpunto final de datos, como este ejemplo:
149
AWS IoT Core Guía para desarrolladores
Preparación de los dispositivos para
elAWS IoTCliente del dispositivo
"endpointAddress": "a3EXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
}
mkdir ~/certs
2. Ejecute este comando para descargar el certificado de entidad de certificación de Amazon Root.
chmod 745 ~
chmod 700 ~/certs
chmod 644 ~/certs/AmazonRootCA1.pem
ls -l ~/certs
Debería ver una entrada como esta. La fecha y la hora serán diferentes; sin embargo, el tamaño del
archivo y el resto de la información deben ser los mismos que se muestran aquí.
150
AWS IoT Core Guía para desarrolladores
Instalar y configurar elAWS IoTCliente del dispositivo
aws configure
sudo shutdown -h 0
Después de reiniciar e iniciar sesión en su Raspberry Pi, estará listo para continuarthe section called
“Instalar y configurar elAWS IoTCliente del dispositivo” (p. 151).
• Haga que su equipo host local y Raspberry Pi deel tutorial anterior (p. 141)listo.
151
AWS IoT Core Guía para desarrolladores
Instalar y configurar elAWS IoTCliente del dispositivo
• El dispositivo IoT estará listo para usar en otrosAWS IoTDemostraciones del cliente de
• Habrás aprovisionado tu dispositivo IoT enAWS IoT Core.
• Habrás descargado e instalado elAWS IoTDevice Client en tu dispositivo.
• Habrás guardado una imagen de la tarjeta microSD de tu dispositivo que se puede utilizar en tutoriales
posteriores.
Equipo requerido:
Realice estos comandos en la ventana de terminal del equipo host local que está conectado a Raspberry
Pi.
cd ~
git clone https://github.com/awslabs/aws-iot-device-client aws-iot-device-client
mkdir ~/aws-iot-device-client/build && cd ~/aws-iot-device-client/build
cmake ../
2. Ejecute este comando para compilar elAWS IoTCliente del dispositivo. Este comando puede tardar
hasta 15 minutos en completarse.
152
AWS IoT Core Guía para desarrolladores
Instalar y configurar elAWS IoTCliente del dispositivo
Los mensajes de advertencia mostrados comoAWS IoTLas compilaciones de Device Client se pueden
ignorar.
Estos tutoriales se han probado con elAWS IoTCliente de dispositivo basado engcc, versión (Raspbian
10.2.1-6+rpi1) 10.2.1 20210110 en la versión 30 de octubre de 2021 de Raspberry Pi OS (bullseye)
engcc, versión (Raspbian 8.3.0-6+rpi1) 8.3.0 en la versión 7 de mayo de 2021 del sistema operativo
Raspberry Pi (buster).
3. Después delAWS IoTDevice Client finaliza la compilación, pruébalo ejecutando este comando.
./aws-iot-device-client --help
Si ve la ayuda de la línea de comandos deAWS IoTDevice Client, elAWS IoTDevice Client se ha creado
correctamente y está listo para su uso.
Para crear los directorios utilizados por los tutoriales en esta ruta de aprendizaje:
mkdir ~/dc-configs
mkdir ~/policies
mkdir ~/messages
mkdir ~/certs/testconn
mkdir ~/certs/pubsub
mkdir ~/certs/jobs
2. Ejecute estos comandos para establecer los permisos de los nuevos directorios.
chmod 745 ~
chmod 700 ~/certs/testconn
chmod 700 ~/certs/pubsub
chmod 700 ~/certs/jobs
Después de crear estos directorios y establecer su permiso, continúe enthe section called “(Opcional)
Guardar la imagen de la tarjeta microSD” (p. 153).
Si quieres volver a probar estos ejercicios y tutoriales, puedes omitir los procedimientos anteriores
escribiendo la imagen de la tarjeta microSD que guardas con este procedimiento en una nueva tarjeta
microSD y continuar con los tutoriales dethe section called “Paso 2: Aprovisione su Raspberry Pi enAWS
IoT” (p. 154).
En la ventana de terminal del equipo host local que está conectado a la Raspberry Pi:
153
AWS IoT Core Guía para desarrolladores
Instalar y configurar elAWS IoTCliente del dispositivo
aws configure
sudo shutdown -h 0
Puedes continuar con esta tarjeta microSD enthe section called “Paso 2: Aprovisione su Raspberry Pi
enAWS IoT” (p. 154).
Utilizar una tarjeta microSD desdethe section called “(Opcional) Guardar la imagen de la tarjeta
microSD” (p. 153)que cuenta con el software necesario para los ejercicios y tutoriales de esta trayectoria
de aprendizaje.
1. Con la alimentación desconectada de la Raspberry Pi, inserta la tarjeta microSD en la Raspberry Pi.
2. Aplique energía al Raspberry Pi.
3. Después de un minuto, en el equipo host local, reinicie la sesión de la ventana de terminal e inicie
sesión en Raspberry Pi.
4. En el equipo host local, en la ventana de terminal y con elAccess Key IDyClave de acceso
secretacredenciales de su Raspberry Pi:
154
AWS IoT Core Guía para desarrolladores
Instalar y configurar elAWS IoTCliente del dispositivo
aws configure
Después de haber restaurado suCuenta de AWScredenciales, está listo para continuarthe section called
“Aprovisionamiento del dispositivo enAWS IoT Core” (p. 155).
Para que tu Raspberry Pi funcione conAWS IoT, debe aprovisionarse. El aprovisionamiento es el proceso
de creación y configuración delAWS IoTrecursos necesarios para admitir su Raspberry Pi como un
dispositivo de IoT.
Con la Raspberry Pi encendida y reiniciada, conecte la ventana del terminal de su equipo host local al
Raspberry Pi y complete estos procedimientos.
Este procedimiento crea los archivos de certificado de dispositivo para esta demostración.
1. En la ventana de terminal del equipo host local, introduzca estos comandos para crear los archivos de
certificado de dispositivo para su dispositivo.
mkdir ~/certs/testconn
aws iot create-keys-and-certificate \
--set-as-active \
--certificate-pem-outfile "~/certs/testconn/device.pem.crt" \
--public-key-outfile "~/certs/testconn/public.pem.key" \
--private-key-outfile "~/certs/testconn/private.pem.key"
{
"certificateArn": "arn:aws:iot:us-
west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269",
"certificateId":
"76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269",
"certificatePem": "-----BEGIN CERTIFICATE-----
\nMIIDWTCCAkGgAwIBAgI_SHORTENED_FOR_EXAMPLE_Lgn4jfgtS\n-----END CERTIFICATE-----\n",
155
AWS IoT Core Guía para desarrolladores
Instalar y configurar elAWS IoTCliente del dispositivo
"keyPair": {
"PublicKey": "-----BEGIN PUBLIC KEY-----
\nMIIBIjANBgkqhkiG9w0BA_SHORTENED_FOR_EXAMPLE_ImwIDAQAB\n-----END PUBLIC KEY-----\n",
"PrivateKey": "-----BEGIN RSA PRIVATE KEY-----
\nMIIEowIBAAKCAQE_SHORTENED_FOR_EXAMPLE_T9RoDiukY\n-----END RSA PRIVATE KEY-----\n"
}
}
2. Introduzca los siguientes comandos para establecer los permisos en el directorio de certificados y sus
archivos.
chmod 745 ~
chmod 700 ~/certs/testconn
chmod 644 ~/certs/testconn/*
chmod 600 ~/certs/testconn/private.pem.key
3. Ejecute este comando para revisar los permisos de los directorios y archivos de certificados.
ls -l ~/certs/testconn
El resultado del comando debe ser el mismo que el que ve aquí, excepto que las fechas y horas del
archivo serán diferentes.
En este punto, tiene instalados los archivos de certificado del dispositivo en su Raspberry Pi y puede
continuarthe section called “CrearAWS IoTrecursos” (p. 156).
CrearAWS IoTrecursos
Este procedimiento aprovisiona su dispositivo enAWS IoTcreando los recursos a los que necesita acceder
su dispositivoAWS IoTcaracterísticas y servicios.
1. En la ventana de terminal de su equipo host local, introduzca el siguiente comando para obtener la
dirección del punto final de datos del dispositivo para suCuenta de AWS.
El comando de los pasos anteriores devuelve una respuesta similar a la siguiente. Anote
elendpointAddressvalor para un uso posterior.
{
"endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
}
2. Escriba este comando para crear unAWS IoTrecurso de cosa para su Raspberry Pi.
Si las recetasAWS IoTobjeto de recurso se creó, el comando devuelve una respuesta similar a esta.
156
AWS IoT Core Guía para desarrolladores
Instalar y configurar elAWS IoTCliente del dispositivo
"thingName": "DevCliTestThing",
"thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/DevCliTestThing",
"thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd"
}
3. En la ventana de borna:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish",
"iot:Subscribe",
"iot:Receive",
"iot:Connect"
],
"Resource": [
"*"
]
}
]
}
Note
Este documento de política otorga generosamente permiso a todos los recursos para
conectarse, recibir, publicar y suscribirse. Normalmente, las políticas otorgan permiso
únicamente a recursos específicos para realizar acciones específicas. Sin embargo, para
la prueba de conectividad inicial de dispositivos, esta política excesivamente general y
permisiva se utiliza para minimizar la posibilidad de que se produzca un problema de
acceso durante esta prueba. En los tutoriales posteriores, se utilizarán documentos de
política con un alcance más limitado para demostrar mejores prácticas en el diseño de
políticas.
c. Guarde el archivo en el editor de texto como~/policies/
dev_cli_test_thing_policy.json.
4. Ejecute este comando para utilizar el documento de política de los pasos anteriores para crear unAWS
IoTpolítica.
{
"policyName": "DevCliTestThingPolicy",
"policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/DevCliTestThingPolicy",
"policyDocument": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n
{\n \"Effect\": \"Allow\",\n \"Action\": [\n
\"iot:Publish\",\n \"iot:Subscribe\",\n \"iot:Receive\",
\n \"iot:Connect\"\n ],\n \"Resource\": [\n
\"*\"\n ]\n }\n ]\n}\n",
"policyVersionId": "1"
}
157
AWS IoT Core Guía para desarrolladores
Instalar y configurar elAWS IoTCliente del dispositivo
Después de aprovisionar correctamente el dispositivo enAWS IoT, está listo para continuarthe section
called “Paso 3: Configuración delAWS IoTCliente de dispositivo para probar la conectividad” (p. 158).
Para crear el archivo de configuración para probar elAWS IoTCliente del dispositivo
• En la ventana de terminal del equipo host local que está conectado a la Raspberry Pi:
a. Introduzca estos comandos para crear un directorio para los archivos de configuración y
establecer el permiso en el directorio:
mkdir ~/dc-configs
chmod 745 ~/dc-configs
{
"endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com",
"cert": "~/certs/testconn/device.pem.crt",
"key": "~/certs/testconn/private.pem.key",
"root-ca": "~/certs/AmazonRootCA1.pem",
"thing-name": "DevCliTestThing",
158
AWS IoT Core Guía para desarrolladores
Instalar y configurar elAWS IoTCliente del dispositivo
"logging": {
"enable-sdk-logging": true,
"level": "DEBUG",
"type": "STDOUT",
"file": ""
},
"jobs": {
"enabled": false,
"handler-directory": ""
},
"tunneling": {
"enabled": false
},
"device-defender": {
"enabled": false,
"interval": 300
},
"fleet-provisioning": {
"enabled": false,
"template-name": "",
"template-parameters": "",
"csr-file": "",
"device-key": ""
},
"samples": {
"pub-sub": {
"enabled": true,
"publish-topic": "test/dc/pubtopic",
"publish-file": "",
"subscribe-topic": "test/dc/subtopic",
"subscribe-file": ""
}
},
"config-shadow": {
"enabled": false
},
"sample-shadow": {
"enabled": false,
"shadow-name": "",
"shadow-input-file": "",
"shadow-output-file": ""
}
}
Después de guardar el archivo, estará listo para continuarthe section called “Cliente de prueba MQTT
abierto” (p. 159).
159
AWS IoT Core Guía para desarrolladores
Demostrar la comunicación de mensajes
MQTT con elAWS IoTCliente del dispositivo
Para preparar elCliente de prueba MQTTpara suscribirse a todos los mensajes MQTT
Deja la ventana con elCliente de prueba MQTTabierto a medida que continúasthe section called “Ejecución
deAWS IoTCliente del dispositivo” (p. 160).
1. Asegúrese de que tanto la ventana de terminal conectada a su Raspberry Pi como la ventana con
elCliente de prueba MQTTestán visibles mientras realiza este procedimiento.
2. En la ventana de terminal, introduzca estos comandos para ejecutar elAWS IoTCliente de
dispositivo mediante el archivo de configuración creado enthe section called “Crear el archivo de
configuración” (p. 158).
cd ~/aws-iot-device-client/build
./aws-iot-device-client --config-file ~/dc-configs/dc-testconn-config.json
En una ventana de terminal, elAWS IoTDevice Client muestra mensajes de información y cualquier
error que se produzca cuando se ejecuta.
Después de demostrar que elAWS IoTDevice Client se ejecuta correctamente en su Raspberry Pi y puede
comunicarse conAWS IoT, puede continuar hasta elthe section called “Demostrar la comunicación de
mensajes MQTT con elAWS IoTCliente del dispositivo” (p. 160).
• Haga que su equipo host local y Raspberry Pi estén configurados como se utilizan ensección
anterior (p. 151).
Si ha guardado la imagen de la tarjeta microSD después de instalar elAWS IoTDevice Client, puedes
usar una tarjeta microSD con esa imagen con tu Raspberry Pi.
160
AWS IoT Core Guía para desarrolladores
Demostrar la comunicación de mensajes
MQTT con elAWS IoTCliente del dispositivo
• Si ya has ejecutado esta demo antes, revisa??? (p. 186)para eliminar todoAWS IoTrecursos que creó
en ejecuciones anteriores para evitar errores de recursos duplicados.
• Habrás demostrado diferentes formas en que tu dispositivo IoT puede suscribirse a mensajes MQTT
desdeAWS IoTy publicar mensajes MQTT enAWS IoT.
Equipo necesario:
1. En la ventana de terminal del equipo host local, introduzca el siguiente comando para crear los
archivos de certificado de dispositivo para su dispositivo.
mkdir ~/certs/pubsub
aws iot create-keys-and-certificate \
--set-as-active \
--certificate-pem-outfile "~/certs/pubsub/device.pem.crt" \
--public-key-outfile "~/certs/pubsub/public.pem.key" \
--private-key-outfile "~/certs/pubsub/private.pem.key"
161
AWS IoT Core Guía para desarrolladores
Demostrar la comunicación de mensajes
MQTT con elAWS IoTCliente del dispositivo
{
"certificateArn": "arn:aws:iot:us-
west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269",
"certificateId": "76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269",
"certificatePem": "-----BEGIN CERTIFICATE-----
\nMIIDWTCCAkGgAwIBAgI_SHORTENED_FOR_EXAMPLE_Lgn4jfgtS\n-----END CERTIFICATE-----\n",
"keyPair": {
"PublicKey": "-----BEGIN PUBLIC KEY-----
\nMIIBIjANBgkqhkiG9w0BA_SHORTENED_FOR_EXAMPLE_ImwIDAQAB\n-----END PUBLIC KEY-----\n",
"PrivateKey": "-----BEGIN RSA PRIVATE KEY-----
\nMIIEowIBAAKCAQE_SHORTENED_FOR_EXAMPLE_T9RoDiukY\n-----END RSA PRIVATE KEY-----\n"
}
}
2. Introduzca los siguientes comandos para establecer los permisos en el directorio de certificados y sus
archivos.
3. Ejecute este comando para revisar los permisos de los directorios y archivos de certificados.
ls -l ~/certs/pubsub
El resultado del comando debe ser el mismo que el que ve aquí, excepto que las fechas y horas del
archivo serán diferentes.
4. Introduzca estos comandos para crear los directorios de los archivos de registro.
mkdir ~/.aws-iot-device-client
mkdir ~/.aws-iot-device-client/log
chmod 745 ~/.aws-iot-device-client/log
echo " " > ~/.aws-iot-device-client/log/aws-iot-device-client.log
echo " " > ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
chmod 600 ~/.aws-iot-device-client/log/*
1. En la ventana de terminal del equipo host local, introduzca el siguiente comando para obtener la
dirección del punto final de datos del dispositivo para suCuenta de AWS.
162
AWS IoT Core Guía para desarrolladores
Demostrar la comunicación de mensajes
MQTT con elAWS IoTCliente del dispositivo
El valor del endpoint no ha cambiado desde el momento en que ejecutó este comando para el tutorial
anterior. La ejecución de nuevo aquí se hace para facilitar la búsqueda y pegar el valor del extremo de
datos en el archivo de configuración utilizado en este tutorial.
El comando de los pasos anteriores devuelve una respuesta similar a la siguiente. Registre
elendpointAddressvalor para un uso posterior.
{
"endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
}
2. Escriba este comando para crear un nuevoAWS IoTrecurso de cosa para su Raspberry Pi.
Estos tutoriales solo usarán un recurso a la vez para representar la Raspberry Pi. De esta forma,
en estos tutoriales, representan las diferentes demostraciones para que después de crear elAWS
IoTrecursos para una demostración, puede volver atrás y repetir la demostración utilizando los
recursos que creó específicamente para cada uno.
Si las recetasAWS IoTse creó un recurso de la cosa, el comando devuelve una respuesta similar a
esta.
{
"thingName": "PubSubTestThing",
"thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/PubSubTestThing",
"thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd"
}
3. En la ventana de borna:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Connect"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic"
]
},
163
AWS IoT Core Guía para desarrolladores
Demostrar la comunicación de mensajes
MQTT con elAWS IoTCliente del dispositivo
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic"
]
}
]
}
{
"policyName": "PubSubTestThingPolicy",
"policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy",
"policyDocument": "{\n\"Version\": \"2012-10-17\",\n\"Statement\": [\n{\n
\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Connect\"\n],\n\"Resource\": [\n
\"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n]\n},\n{\n\"Effect\":
\"Allow\",\n\"Action\": [\n\"iot:Publish\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-
west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n]\n},\n{\n\"Effect\": \"Allow
\",\n\"Action\": [\n\"iot:Subscribe\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-
west-2:57EXAMPLE833:topicfilter/test/dc/subtopic\"\n]\n},\n{\n\"Effect\": \"Allow
\",\n\"Action\": [\n\"iot:Receive\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-
west-2:57EXAMPLE833:topic/test/dc/*\"\n]\n}\n]\n}\n",
"policyVersionId": "1"
164
AWS IoT Core Guía para desarrolladores
Demostrar la comunicación de mensajes
MQTT con elAWS IoTCliente del dispositivo
6. Ejecute este comando para adjuntar el certificado de dispositivo alAWS IoTrecurso de cosa.
ReemplazarcertificateArnconcertificateArnvalor que ha guardado anteriormente en esta
sección.
Después de aprovisionar correctamente el dispositivo enAWS IoT, ya está listo para seguirthe section
called “Configuración delAWS IoTArchivo de configuración de Device Client y cliente de prueba MQTT para
demostrar la comunicación MQTT” (p. 165).
Para crear el archivo de configuración para probar elAWS IoTCliente del dispositivo
1. En la ventana de terminal del equipo host local que está conectado a la Raspberry Pi:
{
"endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com",
"cert": "~/certs/pubsub/device.pem.crt",
"key": "~/certs/pubsub/private.pem.key",
"root-ca": "~/certs/AmazonRootCA1.pem",
"thing-name": "PubSubTestThing",
"logging": {
"enable-sdk-logging": true,
"level": "DEBUG",
"type": "STDOUT",
"file": ""
},
"jobs": {
"enabled": false,
"handler-directory": ""
},
"tunneling": {
"enabled": false
},
"device-defender": {
"enabled": false,
"interval": 300
},
"fleet-provisioning": {
"enabled": false,
"template-name": "",
"template-parameters": "",
"csr-file": "",
"device-key": ""
},
"samples": {
"pub-sub": {
"enabled": true,
"publish-topic": "test/dc/pubtopic",
165
AWS IoT Core Guía para desarrolladores
Demostrar la comunicación de mensajes
MQTT con elAWS IoTCliente del dispositivo
"publish-file": "",
"subscribe-topic": "test/dc/subtopic",
"subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
}
},
"config-shadow": {
"enabled": false
},
"sample-shadow": {
"enabled": false,
"shadow-name": "",
"shadow-input-file": "",
"shadow-output-file": ""
}
}
2. Para preparar elCliente de prueba MQTTpara suscribirse a todos los mensajes MQTT:
Deje la ventana con elCliente de prueba MQTTabrir mientras continúas con este tutorial.
Después de guardar el archivo y configurar elCliente de prueba MQTT, ya está listo para seguirthe section
called “Paso 2: Demostrar la publicación de mensajes con elAWS IoTCliente del dispositivo” (p. 166).
Estas declaraciones de política de la política que ha creado en el paso anterior para estos ejercicios dan
permiso a Raspberry Pi para ejecutar estas acciones:
• iot:Connect
{
"Effect": "Allow",
"Action": [
"iot:Connect"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing"
166
AWS IoT Core Guía para desarrolladores
Demostrar la comunicación de mensajes
MQTT con elAWS IoTCliente del dispositivo
]
}
• iot:Publish
Otorga permiso a Raspberry Pi para publicar mensajes con un tema MQTT detest/dc/pubtopic.
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic"
]
}
Para enviar el mensaje MQTT predeterminado desde elAWS IoTCliente del dispositivo
1. Asegúrese de que tanto la ventana del terminal del equipo host local que esté conectado a Raspberry
Pi como la ventana con elCliente de prueba MQTTestán visibles mientras realiza este procedimiento.
2. En una ventana de terminal, escriba estos comandos para ejecutar laAWS IoTCliente de
dispositivo mediante el archivo de configuración creado enthe section called “Crear el archivo de
configuración” (p. 158).
cd ~/aws-iot-device-client/build
./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-config.json
En una ventana de terminal,AWS IoTDevice Client muestra mensajes de información y cualquier error
que se produzca cuando se ejecuta.
Después de demostrar que elAWS IoTDevice Client publicó el mensaje MQTT predeterminado, puede
continuar con lathe section called “Publicar un mensaje personalizado mediante elAWS IoTCliente del
dispositivo.” (p. 167).
167
AWS IoT Core Guía para desarrolladores
Demostrar la comunicación de mensajes
MQTT con elAWS IoTCliente del dispositivo
Realice estos pasos en la ventana del terminal del equipo host local que está conectado a Raspberry Pi.
Para crear un mensaje personalizado para elAWS IoTCliente de dispositivo para publicar
{
"temperature": 28,
"humidity": 80,
"barometer": 1013,
"wind": {
"velocity": 22,
"bearing": 255
}
}
Para crear un archivo de configuración para elAWS IoTCliente de dispositivo que se utilizará para
enviar el mensaje personalizado
"samples": {
"pub-sub": {
"enabled": true,
"publish-topic": "test/dc/pubtopic",
"publish-file": "~/messages/sample-ws-message.json",
"subscribe-topic": "test/dc/subtopic",
"subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
Este cambio solo afecta acontenidode la carga útil de mensajes MQTT, por lo que la política actual seguirá
funcionando. Sin embargo, si lasTema MQTT(tal como lo define elpublish-topicValor en~/dc-
configs/dc-pubsub-custom-config.json) se ha cambiado, eliot::PublishTambién tendría que
modificarse para permitir que Raspberry Pi publique en el nuevo tema MQTT.
168
AWS IoT Core Guía para desarrolladores
Demostrar la comunicación de mensajes
MQTT con elAWS IoTCliente del dispositivo
1. Asegúrese de que tanto la ventana de terminal como la ventana con elCliente de prueba MQTTestán
visibles mientras realiza este procedimiento. Además, asegúrese de que suCliente de prueba
MQTTsigue suscrito al#filtro de temas. Si no es así, suscríbase al#filtro de tema de nuevo.
2. En una ventana de terminal, escriba estos comandos para ejecutar laAWS IoTCliente de
dispositivo mediante el archivo de configuración creado enthe section called “Crear el archivo de
configuración” (p. 158).
cd ~/aws-iot-device-client/build
./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json
En una ventana de terminal,AWS IoTDevice Client muestra mensajes de información y cualquier error
que se produzca cuando se ejecuta.
Después de demostrar que elAWS IoTDevice Client publicó una carga útil de mensajes personalizados,
puede continuarthe section called “Paso 3: Demostrar suscribirse a mensajes con elAWS IoTCliente del
dispositivo” (p. 169).
Estas declaraciones de política de la política creada para estos ejercicios otorgan permiso a Raspberry Pi
para realizar estas acciones:
• iot:Receive
Otorga elAWS IoTPermiso de cliente de dispositivo para recibir temas MQTT que coinciden con los
mencionados en elResourceobjeto.
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic"
]
}
• iot:Subscribe
169
AWS IoT Core Guía para desarrolladores
Demostrar la comunicación de mensajes
MQTT con elAWS IoTCliente del dispositivo
Otorga elAWS IoTPermiso de cliente de dispositivo para suscribirse a filtros de temas MQTT que
coinciden con los mencionados en elResourceobjeto.
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic"
]
}
En la ventana de terminal del equipo host local que está conectado a la Raspberry Pi, enumere el
contenido de~/dc-configs/dc-pubsub-custom-config.jsono abra el archivo en un editor de texto
para revisar su contenido. Busque el complementosamplesobjeto, que debería tener un aspecto similar a
este.
"samples": {
"pub-sub": {
"enabled": true,
"publish-topic": "test/dc/pubtopic",
"publish-file": "~/messages/sample-ws-message.json",
"subscribe-topic": "test/dc/subtopic",
"subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
Para suscribirse a un tema de mensaje MQTT desde elAWS IoTCliente del dispositivo
1. Asegúrese de que tanto la ventana de terminal como la ventana con el cliente de prueba MQTT
estén visibles mientras realiza este procedimiento. Además, asegúrese de que suCliente de prueba
MQTTsigue suscrito al#filtro de temas. Si no es así, suscríbase al#filtro de tema de nuevo.
2. En una ventana de terminal, escriba estos comandos para ejecutar laAWS IoTCliente de
dispositivo mediante el archivo de configuración creado enthe section called “Crear el archivo de
configuración” (p. 158).
cd ~/aws-iot-device-client/build
./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json
En una ventana de terminal,AWS IoTDevice Client muestra mensajes de información y cualquier error
que se produzca cuando se ejecuta.
170
AWS IoT Core Guía para desarrolladores
Demostrar la comunicación de mensajes
MQTT con elAWS IoTCliente del dispositivo
7. En una ventana de terminal, tenga en cuenta lamensaje recibidoentrada desde elAWS IoTCliente de
dispositivo que tiene un aspecto similar a este.
tail ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
Al ver el mensaje en el archivo de registro, ha demostrado que elAWS IoTDevice Client recibió el mensaje
que publicó desde el cliente de prueba MQTT.
1. Actualice el filtro de temas que elAWS IoTDevice Client utiliza para suscribirse a temas de MQTT.
2. Actualice la política utilizada por el dispositivo para permitir las nuevas suscripciones.
3. Ejecute laAWS IoTDevice Client y publica mensajes desde la consola de pruebas MQTT.
Para crear un archivo de configuración para suscribirse a varios temas de mensajes MQTT
mediante un filtro de temas MQTT comodín
1. En la ventana de terminal del equipo host local que está conectado a la Raspberry Pi, abra~/dc-
configs/dc-pubsub-custom-config.jsonpara editar y localizar elsamplesobjeto.
2. En el editor de texto, busque elsamplesobjeto y actualiza elsubscribe-topictenga un aspecto
similar al siguiente.
"samples": {
"pub-sub": {
"enabled": true,
"publish-topic": "test/dc/pubtopic",
"publish-file": "~/messages/sample-ws-message.json",
"subscribe-topic": "test/dc/#",
"subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
Para modificar la política utilizada por su Raspberry Pi para permitir suscribirse y recibir varios
temas de mensajes MQTT
1. En la ventana de terminal del equipo host local que está conectado a Raspberry Pi, en su editor de
texto favorito, abra~/policies/pubsub_test_thing_policy.jsonpara editar y, a continuación,
busque eliot::Subscribeyiot::Receivedeclaraciones de política en el archivo.
171
AWS IoT Core Guía para desarrolladores
Demostrar la comunicación de mensajes
MQTT con elAWS IoTCliente del dispositivo
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*"
]
}
Note
LaCaracteres comodín del filtro de temas MQTT (p. 114)son los+(signo más) y#(signo de
libra). Solicitud de suscripción con un#al final se suscribe a todos los temas que empiezan
por la cadena que precede al#carácter (por ejemplo,test/dc/en este caso).
Sin embargo, el valor del recurso de la declaración de política que autoriza esta suscripción
debe utilizar un*(un asterisco) en lugar del#(un signo de libra) en el filtro de temas ARN. Esto
se debe a que el procesador de políticas utiliza un carácter comodín diferente al que utiliza
MQTT.
Para obtener más información sobre el uso de caracteres comodín para temas y filtros
de temas en las políticas, consulteUsar caracteres de comodín a MQTT aAWS IoT
Corepolíticas (p. 370).
3. En el navegadoriot::Receivedirectiva, actualice la cadena del objeto Resource para
reemplazarsubtopiccon*, para que tenga el siguiente aspecto.
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*"
]
}
{
"policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy",
"policyDocument": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n
\"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Connect\"\n ],\n
\"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing
172
AWS IoT Core Guía para desarrolladores
Demostrar la comunicación de mensajes
MQTT con elAWS IoTCliente del dispositivo
Si aparece un error de que hay demasiadas versiones de directivas para guardar una nueva,
introduzca este comando para enumerar las versiones actuales de la política. Revise la lista que
devuelve este comando para encontrar una versión de directiva que pueda eliminar.
Escriba este comando para eliminar una versión que ya no necesita. Tenga en cuenta que no puede
eliminar la versión de la política predeterminada. La versión predeterminada de la política es la que
tieneisDefaultVersionValor detrue.
Con el archivo de configuración y la política actualizados, está listo para demostrar las suscripciones de
comodín con elAWS IoTCliente del dispositivo.
Para demostrar cómo elAWS IoTDevice Client se suscribe y recibe varios temas de mensajes
MQTT
cd ~/aws-iot-device-client/build
./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-wild-config.json
3. Mientras veía elAWS IoTSalida de Device Client en la ventana de terminal del equipo host local,
vuelva alCliente de prueba MQTT. En el navegadorPublicación de un tema, enNombre del tema,
introduzcatest/dc/subtopicy luego seleccionePublicación.
4. En la ventana del terminal, confirme que el mensaje se ha recibido buscando un mensaje como:
5. Mientras veía elAWS IoTSalida de Device Client en la ventana de terminal del equipo host local,
vuelva alCliente de prueba MQTT. En el navegadorPublicación de un tema, enNombre del tema,
introduzcatest/dc/subtopic2y luego seleccionePublicación.
6. En la ventana del terminal, confirme que el mensaje se ha recibido buscando un mensaje como:
173
AWS IoT Core Guía para desarrolladores
Demuestre acciones remotas (trabajos)
con elAWS IoTDispositivo de cliente
7. Después de ver los mensajes que confirman que se han recibido ambos mensajes, introduzca^C(Ctrl-
C) para detener elAWS IoTCliente del dispositivo.
8. Introduzca este comando para ver el final del archivo de registro de mensajes y ver el mensaje que
publicó desde elCliente de prueba MQTT.
tail -n 20 ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
Note
El archivo de registro de contiene solo las cargas útiles de los mensajes. Los temas de
mensajes no se graban en el archivo de registro de mensajes recibido.
También podría aparecer el mensaje publicado por elAWS IoTCliente de dispositivo en el
registro recibido. Esto se debe a que el filtro de temas comodín incluye ese tema del mensaje
y, a veces, el agente de mensajes puede procesar la solicitud de suscripción antes de enviar
el mensaje publicado a los suscriptores.
Las entradas del archivo de registro demuestran que se han recibido los mensajes. Puede repetir este
procedimiento utilizando otros nombres de temas. Todos los mensajes que tienen un nombre de tema que
comienza portest/dc/deben recibirse y registrarse. Los mensajes con nombres de temas que empiezan
por cualquier otro texto se ignoran.
Después de demostrar cómo elAWS IoTDevice Client puede publicar mensajes MQTT y suscribirse a ellos,
continuarTutorial: Demuestre acciones remotas (trabajos) con elAWS IoTDispositivo de cliente (p. 174).
• Configure una Raspberry Pi en su equipo host local como se usa enla sección anterior (p. 160).
• Si no has completado el tutorial de la sección anterior, puedes probar este tutorial usando la Raspberry
Pi con una tarjeta microSD que tenga la imagen que guardaste después de instalar elAWS IoTDevice
Client en(Opcional) Guardar la imagen de la tarjeta microSD (p. 153).
• Si ya ha ejecutado esta demostración anteriormente, revise??? (p. 186)eliminar todoAWS IoTrecursos
que creó en ejecuciones anteriores para evitar errores de recursos duplicados.
• Habrás demostrado diferentes maneras en las que tu dispositivo IoT puede usar elAWS IoT Corepara
ejecutar operaciones remotas gestionadas porAWS IoT.
Equipo requerido:
• El entorno local de desarrollo y pruebas que probó enuna sección anterior (p. 151)
174
AWS IoT Core Guía para desarrolladores
Demuestre acciones remotas (trabajos)
con elAWS IoTDispositivo de cliente
Si está preparando más de un dispositivo, este procedimiento debe realizarse en cada uno de ellos.
Para crear y descargar los archivos de certificado de dispositivo para tu Raspberry Pi:
En la ventana del terminal del equipo host local que está conectado a la Raspberry Pi, introduce estos
comandos.
1. Ingresa el siguiente comando para crear los archivos de certificado de dispositivo para tu dispositivo.
{
"certificateArn": "arn:aws:iot:us-
west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269",
"certificateId": "76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269",
175
AWS IoT Core Guía para desarrolladores
Demuestre acciones remotas (trabajos)
con elAWS IoTDispositivo de cliente
2. Introduzca los siguientes comandos para establecer los permisos en el directorio de certificados y sus
archivos.
3. Ejecute este comando para revisar los permisos de los directorios y archivos de certificados.
ls -l ~/certs/jobs
La salida del comando debe ser la misma que la que se ve aquí, excepto que las fechas y horas del
archivo serán diferentes.
Una vez que hayas descargado los archivos del certificado del dispositivo en tu Raspberry Pi, estarás listo
para continuarthe section called “Aprovisione su Raspberry Pi para demostrar” (p. 175).
Si está preparando más de un dispositivo, este procedimiento debe realizarse para cada dispositivo.
En la ventana del terminal de tu ordenador host local que está conectado a tu Raspberry Pi:
1. Escriba el siguiente comando para obtener la dirección del punto de enlace de datos delCuenta de
AWS.
El valor del punto final no ha cambiado desde la última vez que ejecutó este comando. La ejecución
del comando de nuevo aquí facilita la búsqueda y el pegado del valor del punto final de datos en el
archivo de configuración utilizado en este tutorial.
{
"endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
}
176
AWS IoT Core Guía para desarrolladores
Demuestre acciones remotas (trabajos)
con elAWS IoTDispositivo de cliente
Escriba este comando para crear unAWS IoTrecurso thing para tu Raspberry Pi.
Estos tutoriales solo usarán un recurso de cosa a la vez por dispositivo. De esta manera, en estos
tutoriales, representan las diferentes demos para que después de crear elAWS IoTrecursos para
una demostración, puede volver atrás y repetir las demostraciones utilizando los recursos que creó
específicamente para cada una.
Si tuAWS IoTthing resource, el comando devuelve una respuesta similar a esta. Grabar
elthingArnpara usarlo más adelante cuando cree el trabajo para ejecutarlo en este dispositivo.
{
"thingName": "uniqueThingName",
"thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/uniqueThingName",
"thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd"
}
3. En la ventana de la terminal:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Connect"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:client/uniqueThingName"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic",
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/events/job/*",
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/events/jobExecution/*",
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/things/uniqueThingName/jobs/
*"
]
177
AWS IoT Core Guía para desarrolladores
Demuestre acciones remotas (trabajos)
con elAWS IoTDispositivo de cliente
},
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic",
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/events/jobExecution/*",
"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/$aws/
things/uniqueThingName/jobs/*"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic",
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/things/uniqueThingName/jobs/
*"
]
},
{
"Effect": "Allow",
"Action": [
"iot:DescribeJobExecution",
"iot:GetPendingJobExecutions",
"iot:StartNextPendingJobExecution",
"iot:UpdateJobExecution"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/things/uniqueThingName"
]
}
]
}
Si ejecuta este procedimiento para varios dispositivos, guarde el archivo con este nombre de
archivo en cada dispositivo.
4. SustituiruniqueThingNamecon el nombre de cosa del dispositivo y, a continuación, ejecute este
comando para crear unAWS IoTpolítica que se adapta a ese dispositivo.
{
"policyName": "JobTestPolicyForuniqueThingName",
"policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/
JobTestPolicyForuniqueThingName",
178
AWS IoT Core Guía para desarrolladores
Demuestre acciones remotas (trabajos)
con elAWS IoTDispositivo de cliente
Después de aprovisionar correctamente la Raspberry Pi, estará listo para repetir esta sección para otra
Raspberry Pi en la prueba o, si se han aprovisionado todos los dispositivos, continuarthe section called
“Configura elAWS IoTDevice Client para ejecutar el agente de trabajos” (p. 179).
Nota: si está preparando más de un dispositivo, este procedimiento debe realizarse en cada uno de ellos.
1. En la ventana del terminal de tu ordenador host local que está conectado a tu Raspberry Pi:
{
"endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com",
"cert": "~/certs/jobs/device.pem.crt",
"key": "~/certs/jobs/private.pem.key",
"root-ca": "~/certs/AmazonRootCA1.pem",
"thing-name": "uniqueThingName",
"logging": {
"enable-sdk-logging": true,
"level": "DEBUG",
"type": "STDOUT",
179
AWS IoT Core Guía para desarrolladores
Demuestre acciones remotas (trabajos)
con elAWS IoTDispositivo de cliente
"file": ""
},
"jobs": {
"enabled": true,
"handler-directory": ""
},
"tunneling": {
"enabled": false
},
"device-defender": {
"enabled": false,
"interval": 300
},
"fleet-provisioning": {
"enabled": false,
"template-name": "",
"template-parameters": "",
"csr-file": "",
"device-key": ""
},
"samples": {
"pub-sub": {
"enabled": false,
"publish-topic": "",
"publish-file": "",
"subscribe-topic": "",
"subscribe-file": ""
}
},
"config-shadow": {
"enabled": false
},
"sample-shadow": {
"enabled": false,
"shadow-name": "",
"shadow-input-file": "",
"shadow-output-file": ""
}
}
c. Sustituya elPunto de enlace devalor de punto final de datos del dispositivo para suCuenta
de AWSque encontraste enthe section called “Aprovisionamiento del dispositivo enAWS IoT
Core” (p. 155).
d. SustituiruniqueThingNamecon el nombre de cosa que utilizaste para este dispositivo.
e. Guarde el archivo en el editor de texto como~/dc-configs/dc-jobs-config.json.
2. Ejecute este comando para establecer los permisos de archivo del nuevo archivo de configuración.
No usarás elCliente de pruebas de MQTTpara esta prueba. Si bien el dispositivo intercambiará mensajes
MQTT relacionados con los trabajos conAWS IoT, los mensajes de progreso del trabajo solo se
intercambian con el dispositivo que ejecuta el trabajo. Dado que los mensajes de progreso del trabajo
solo se intercambian con el dispositivo que ejecuta el trabajo, no puede suscribirse a ellos desde otro
dispositivo, como elAWS IoTConsola de.
Después de guardar el archivo de configuración, está listo para continuarthe section called “Paso 2: Crear
y ejecutar el trabajo enAWS IoT” (p. 181).
180
AWS IoT Core Guía para desarrolladores
Demuestre acciones remotas (trabajos)
con elAWS IoTDispositivo de cliente
{
"operation": "echo",
"args": ["Hello world!"]
}
La URL del documento de trabajo que identifica el documento de trabajo que ha almacenado en
Amazon S3 se determina sustituyendo els3_nombre_cuboyAWS_regiónen la siguiente dirección
URL. Registre la URL resultante para usarla más adelante comoruta_document_trabajo
https://s3_bucket_name.s3.AWS_Region.amazonaws.com/hello-world-job.json
Note
AWSseguridad impide que puedas abrir esta URL fuera de tuCuenta de AWS, por ejemplo,
mediante un navegador. La URL es utilizada por elAWS IoTjobs engine, que tiene acceso
181
AWS IoT Core Guía para desarrolladores
Demuestre acciones remotas (trabajos)
con elAWS IoTDispositivo de cliente
Después de guardar la URL del documento de trabajo, continúe conthe section called “Ejecutar un trabajo
enAWS IoTpara un dispositivo IoT” (p. 182).
1. En la ventana del terminal del equipo host local que está conectado a la Raspberry Pi, ejecuta este
comando para iniciar elAWS IoTDispositivo de cliente.
cd ~/aws-iot-device-client/build
./aws-iot-device-client --config-file ~/dc-configs/dc-jobs-config.json
2. En una ventana de terminal, confirme queAWS IoTDevice Client y muestra estos mensajes
3. En la ventana de la terminal, cuando vea este mensaje, continúe con el siguiente procedimiento y cree
el recurso de trabajo. Tenga en cuenta que puede que no sea la última entrada de la lista.
182
AWS IoT Core Guía para desarrolladores
Demuestre acciones remotas (trabajos)
con elAWS IoTDispositivo de cliente
{
"jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-1",
"jobId": "hello-world-job-1"
}
2. En una ventana de terminal, debería ver el resultado delAWS IoTDevice Client como este.
183
AWS IoT Core Guía para desarrolladores
Limpieza
3. Si bien elAWS IoTDevice Client se está ejecutando y está esperando un trabajo, puede enviar otro
trabajo cambiando eljob-idValor y volver a ejecutarcreate-jobdesde el Paso 1.
Cuando haya terminado de ejecutar los trabajos, en la ventana de la terminal, introduzca^C(Control-c) para
detener elAWS IoTDispositivo de cliente.
Ten en cuenta que limpiar la tarjeta microSD del dispositivo no elimina ningún AWS IoT recurso que hayas
creado. Para limpiar los AWS IoT recursos después de limpiar la tarjeta microSD del dispositivo, consulte
el tutorial sobrethe section called “Limpieza después de crear demostraciones con el AWS IoT Device
Client” (p. 186).
Este procedimiento utiliza la computadora host local para escribir una imagen de tarjeta microSD guardada
en una tarjeta microSD.
184
AWS IoT Core Guía para desarrolladores
Limpieza
Note
1. En el ordenador host local, busque la imagen de la tarjeta microSD guardada que desea grabar en la
tarjeta microSD.
2. Inserte la tarjeta microSD en la computadora host local.
3. Con una herramienta de procesamiento de imágenes de tarjetas SD, escriba el archivo de imagen
seleccionado en la tarjeta microSD.
4. Después de escribir la imagen del sistema operativo Raspberry Pi en la tarjeta microSD, extraiga la
tarjeta microSD y extráigala de forma segura de la computadora host local.
1. Ejecute estos comandos para eliminar los directorios, subdirectorios y todos sus archivos de usuario
que se crearon en esta ruta de aprendizaje, en la ventana de terminal conectada a su dispositivo.
Note
Tras eliminar estos directorios y archivos, no podrá ejecutar las demostraciones sin volver a
completar los tutoriales.
rm -Rf ~/dc-configs
rm -Rf ~/policies
rm -Rf ~/messages
rm -Rf ~/certs
rm -Rf ~/.aws-iot-device-client
2. Ejecute estos comandos para eliminar los directorios y archivos de origen de la aplicación, en la
ventana del terminal conectada al dispositivo.
Note
Estos comandos no desinstalan ningún programa. Solo eliminan los archivos fuente utilizados
para crearlos e instalarlos. Después de eliminar estos archivos, es posible que el AWS CLI y
el AWS IoT Device Client no funcionen.
rm -Rf ~/aws-cli
rm -Rf ~/aws
rm -Rf ~/aws-iot-device-client
185
AWS IoT Core Guía para desarrolladores
Limpieza
the section called “Demuestre definido por el usuario (puede definido por el usuario (puede
acciones remotas (trabajos) haber más de uno) haber más de uno)
con elAWS IoTDispositivo de
cliente” (p. 174)
Para eliminar los AWS IoT recursos, siga este procedimiento para cada recurso que haya creado.
1. thing_nameSustitúyalo por el nombre del recurso de la cosa que desea eliminar y, a continuación,
ejecute este comando para enumerar los certificados adjuntos al recurso de la cosa desde la
computadora host local.
Este comando devuelve una respuesta como esta que enumera los certificados a los que se
adjuntanthing_name. En la mayoría de los casos, solo habrá un certificado en la lista.
{
"principals": [
"arn:aws:iot:us-
west-2:57EXAMPLE833:cert/23853eea3cf0edc7f8a69c74abeafa27b2b52823cab5b3e156295e94b26ae8ac"
]
}
186
AWS IoT Core Guía para desarrolladores
Limpieza
Este comando devuelve una respuesta como esta que enumera las políticas adjuntas al
certificado. En la mayoría de los casos, solo habrá una política en la lista.
{
"policies": [
{
"policyName": "DevCliTestThingPolicy",
"policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/
DevCliTestThingPolicy"
}
]
}
Si el comando devuelve una lista vacía como esta, la política no se adjunta a ningún
certificado y usted continúa enumerando las versiones de la política. Si aún hay certificados
adjuntos a la política, continúe con el detach-thing-principal paso.
{
"targets": []
}
Si la política solo tiene una versión, como en este ejemplo, puede ir directamente al delete-
policy paso y eliminarla ahora.
{
"policyVersions": [
{
"versionId": "1",
187
AWS IoT Core Guía para desarrolladores
Limpieza
"isDefaultVersion": true,
"createDate": "2021-11-18T01:02:46.778000+00:00"
}
]
}
Si la política tiene más de una versión, como en este ejemplo, las versiones de la política
con un isDefaultVersion valor de se false deben eliminar antes de poder eliminar la
política.
{
"policyVersions": [
{
"versionId": "2",
"isDefaultVersion": true,
"createDate": "2021-11-18T01:52:04.423000+00:00"
},
{
"versionId": "1",
"isDefaultVersion": false,
"createDate": "2021-11-18T01:30:18.083000+00:00"
}
]
}
Después de eliminar una versión de la política, repita este paso hasta que la política tenga
solo una versión de la política.
iv. policy_nameSustitúyalo por el policyName valor y, a continuación, ejecute este comando
para eliminar la política.
the section called “Demuestre AWS IoTrecursos laborales definido por el usuario
acciones remotas (trabajos)
con elAWS IoTDispositivo de
cliente” (p. 174)
El comando devuelve una lista de los AWS IoT trabajos Región de AWS que tiene Cuenta de
AWS y tiene este aspecto.
{
"jobs": [
{
"jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-2",
"jobId": "hello-world-job-2",
"targetSelection": "SNAPSHOT",
"status": "COMPLETED",
"createdAt": "2021-11-16T23:40:36.825000+00:00",
"lastUpdatedAt": "2021-11-16T23:40:41.375000+00:00",
"completedAt": "2021-11-16T23:40:41.375000+00:00"
},
{
"jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-1",
"jobId": "hello-world-job-1",
"targetSelection": "SNAPSHOT",
"status": "COMPLETED",
"createdAt": "2021-11-16T23:35:26.381000+00:00",
"lastUpdatedAt": "2021-11-16T23:35:29.239000+00:00",
"completedAt": "2021-11-16T23:35:29.239000+00:00"
}
189
AWS IoT Core Guía para desarrolladores
Limpieza
]
}
b. Para cada trabajo que reconozca de la lista como un trabajo creado en esta ruta de aprendizaje,
sustitúyalo por jobId el jobId valor del trabajo que se va a eliminar y, a continuación, ejecute
este comando para eliminar un AWS IoT trabajo.
a. bucketSustitúyalo por el nombre del depósito que utilizaste y, a continuación, ejecuta este
comando para enumerar los objetos del depósito de Amazon S3 que utilizaste.
El comando devuelve una lista de los objetos de Amazon S3 del bucket con este aspecto.
{
"Contents": [
{
"Key": "hello-world-job.json",
"LastModified": "2021-11-18T03:02:12+00:00",
"ETag": "\"868c8bc3f56b5787964764d4b18ed5ef\"",
"Size": 54,
"StorageClass": "STANDARD",
"Owner": {
"DisplayName": "EXAMPLE",
"ID":
"e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
}
},
{
"Key": "iot_job_firmware_update.json",
"LastModified": "2021-04-13T21:57:07+00:00",
"ETag": "\"7c68c591949391791ecf625253658c61\"",
"Size": 66,
"StorageClass": "STANDARD",
"Owner": {
"DisplayName": "EXAMPLE",
"ID":
"e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
}
},
{
"Key": "order66.json",
"LastModified": "2021-04-13T21:57:07+00:00",
"ETag": "\"bca60d5380b88e1a70cc27d321caba72\"",
"Size": 29,
"StorageClass": "STANDARD",
"Owner": {
"DisplayName": "EXAMPLE",
"ID":
"e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
}
}
]
}
190
AWS IoT Core Guía para desarrolladores
Creación de soluciones con elAWS IoTSDKs de dispositivos
b. Para cada objeto que reconozca de la lista como un objeto que creó en esta ruta de aprendizaje,
bucket sustitúyalo por el nombre del bucket y key por el valor clave del objeto que desea
eliminar y, a continuación, ejecute este comando para eliminar un objeto de Amazon S3.
Después de eliminar todos los AWS recursos y objetos que creó al completar esta ruta de aprendizaje,
puede volver a empezar y repetir los tutoriales.
Estos tutoriales pueden tardar más tiempo en completarse que los de la sección sobrethe section called
“Creación de demostraciones con elAWS IoTCliente del dispositivo” (p. 139)porque utilizan elAWS
IoTSDK de dispositivos y explique los conceptos que se están aplicando con más detalle para ayudarlo a
crear soluciones seguras y fiables.
Temas
• Tutorial: Conectar un dispositivo aAWS IoT Core mediante el SDK deAWS IoT dispositivos (p. 191)
• CreandoAWS IoTreglas para enrutar los datos del dispositivo a otros servicios (p. 208)
• Conservación del estado del dispositivo mientras el dispositivo está desconectado con Device
Shadows (p. 238)
• Tutorial: Crear un autorizador personalizado para AWS IoT Core (p. 259)
• Tutorial: Monitorear la humedad del suelo con unaAWS IoT Raspberry Pi (p. 271)
191
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
En la sección de ese tutorial donde debe hacerlothe section called “Configuración del dispositivo” (p. 42),
seleccione lathe section called “Conecta una Raspberry Pi u otro dispositivo” (p. 60) opción para su
dispositivo y utilice las opciones del lenguaje Python para configurar su dispositivo.
Mantén abierta la ventana de terminal que usas en ese tutorial porque también la usarás en este tutorial.
• Un dispositivo que puede ejecutar el SDK deAWS IoT dispositivos v2 para Python.
Este tutorial muestra cómo conectar un dispositivo a travésAWS IoT Core de ejemplos de código Python,
que requieren un dispositivo relativamente potente.
Si trabaja con dispositivos con recursos limitados, es posible que estos ejemplos de código no funcionen
en ellos. En ese caso, es posible que tenga más éxito con elthe section called “Mediante AWS IoT
Device SDK para Embedded C” (p. 205) tutorial.
El procedimiento que seConfigura tuCuenta de AWS (p. 19) describe cómo crear unCuenta de AWS si
aún no dispone de uno.
2. En esa cuenta, debe tener definidos los siguientes AWS IoTrecursos para el dispositivo de su
regiónCuenta de AWS y región.
El procedimiento descritoCrearAWS IoTrecursos (p. 39) describe cómo crear estos recursos para el
dispositivo en su regiónCuenta de AWS y en su región.
• Un certificado de dispositivo registradoAWS IoT y activado para autenticar el dispositivo.
El certificado a menudo se crea con un objeto deAWS IoT cosa y se adjunta a él. Si bien no se
requiere un objeto objeto para conectarse a un dispositivoAWS IoT, hace queAWS IoT las funciones
adicionales estén disponibles para el dispositivo.
• Una política adjunta al certificado del dispositivo que lo autoriza a conectarseAWS IoT Core y a
realizar todas las acciones que desee realizar.
3. Una conexión a Internet que pueda acceder a los terminalesCuenta de AWS de tu dispositivo.
Los terminales del dispositivo se describenAWS IoTpuntos finales de servicio y datos del
dispositivo (p. 83) y se pueden ver en la página de configuración de laAWS IoT consola.
4. Software de comunicación, como los SDK deAWS IoT dispositivos que proporcionan. Este tutorial usa el
SDK deAWS IoT dispositivos v2 para Python.
192
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
El agente de mensajes recibe mensajes de los dispositivos y los publica en los dispositivos que se han
suscrito a ellos. Con las sesiones persistentes (p. 92) (sesiones que permanecen activas incluso cuando el
dispositivo iniciador está desconectado), los dispositivos pueden recuperar los mensajes que se publicaron
mientras estaban desconectados. En cuanto al dispositivo, MQTT admite niveles de calidad de servicio
(QoS (p. 92)) que garantizan que el host reciba los mensajes enviados por el dispositivo.
La aplicaciónpubsub.py de ejemplo muestra estos aspectos de una conexión MQTT conAWS IoT Core:
• Protocolos de comunicación (p. 193)
• Sesiones persistentes (p. 196)
• Calidad de servicio (p. 196)
• Publicación de mensajes (p. 197)
• Suscribirse a mensajes (p. 198)
• Desconexión y reconexión del dispositivo (p. 199)
Protocolos de comunicación
Elpubsub.py ejemplo muestra una conexión MQTT que utiliza los protocolos MQTT y MQTT sobre WSS.
La biblioteca AWSCommon Runtime (AWSCRT) proporciona soporte para protocolos de comunicación de
bajo nivel y se incluye en elAWS IoT Device SDK v2 para Python.
MQTT
193
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
mqtt_connection = mqtt_connection_builder.mtls_from_path(
endpoint=args.endpoint,
cert_filepath=args.cert,
pri_key_filepath=args.key,
ca_filepath=args.ca_file,
client_bootstrap=client_bootstrap,
on_connection_interrupted=on_connection_interrupted,
on_connection_resumed=on_connection_resumed,
client_id=args.client_id,
clean_session=False,
keep_alive_secs=6
)
endpoint
La ruta al archivo de clave privada del dispositivo que se creó con su archivo de certificado
La ruta al archivo CA raíz. Solo es obligatorio si el servidor MQTT usa un certificado que no esté ya en
su almacén de confianza.
Las funciones de devolución de llamada permiten llamar cuando la conexión del dispositivo se
interrumpe y se reanuda
client_id
Si se debe iniciar una nueva sesión persistente o, si hay una, volver a conectarse a una existente
keep_alive_secs
El valor de mantener vivo, en segundos, para enviar laCONNECT solicitud. Se enviará automáticamente
un ping en este intervalo. Si el servidor no recibe un ping después de 1,5 veces este valor, asume que
la conexión se ha perdido.
194
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
mqtt_connection = mqtt_connection_builder.websockets_with_default_aws_signing(
endpoint=args.endpoint,
client_bootstrap=client_bootstrap,
region=args.signing_region,
credentials_provider=credentials_provider,
websocket_proxy_options=proxy_options,
ca_filepath=args.ca_file,
on_connection_interrupted=on_connection_interrupted,
on_connection_resumed=on_connection_resumed,
client_id=args.client_id,
clean_session=False,
keep_alive_secs=6
)
endpoint
La región deAWS firma utilizada por la autenticación Signature V4. Enpubsub.py, pasa el parámetro
introducido en la línea de comando.
La ruta al archivo CA raíz. Solo es obligatorio si el servidor MQTT usa un certificado que no esté ya en
su almacén de confianza.
195
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
on_connection_interrupted, on_connection_resumed
Las funciones de devolución de llamada permiten llamar cuando la conexión del dispositivo se
interrumpe y se reanuda
client_id
Si se debe iniciar una nueva sesión persistente o, si hay una, volver a conectarse a una existente
keep_alive_secs
El valor de mantener vivo, en segundos, para enviar laCONNECT solicitud. Se enviará automáticamente
un ping en este intervalo. Si el servidor no recibe un ping después de 1,5 veces este valor, asume que
la conexión se ha perdido.
HTTPS
¿Qué pasa con HTTPS? AWS IoT Coreadmite dispositivos que publican solicitudes HTTPS. Desde el
punto de vista de la programación, los dispositivos envían solicitudes HTTPSAWS IoT Core como lo haría
cualquier otra aplicación. Para ver un ejemplo de un programa de Python que envía un mensaje HTTP
desde un dispositivo, consulta el ejemplo de código HTTPS (p. 110) con larequests biblioteca de Python.
En este ejemplo se envía un mensaje aAWS IoT Core través de HTTPS, que loAWS IoT Core interpreta
como un mensaje MQTT.
Si bienAWS IoT Core admite las solicitudes HTTPS de los dispositivos, asegúrese de revisar la
informaciónElegir un protocolo para la comunicación del dispositivo (p. 88) para poder tomar una decisión
informada sobre qué protocolo utilizar para las comunicaciones de su dispositivo.
Sesiones persistentes
En la aplicación de ejemplo, si se establece elclean_session parámetro en, seFalse indica que la
conexión debe ser persistente. En la práctica, esto significa que la conexión abierta por esta llamada se
vuelve a conectar a una sesión persistente existente, si existe. De lo contrario, crea una nueva sesión
persistente y se conecta a ella.
Con una sesión persistente, el agente de mensajes almacena los mensajes que se envían al dispositivo
mientras el dispositivo no está conectado. Cuando un dispositivo se vuelve a conectar a una sesión
persistente, el agente de mensajes envía al dispositivo todos los mensajes almacenados a los que se haya
suscrito.
Sin una sesión persistente, el dispositivo no recibirá los mensajes que se envíen mientras el dispositivo
no esté conectado. La opción que se utilice depende de la aplicación y de si se deben comunicar los
mensajes que se producen mientras el dispositivo no está conectado. Para obtener más información,
consulte Sesiones persistentes de MQTT (p. 92).
Calidad de servicio
Cuando el dispositivo publica mensajes y se suscribe a ellos, se puede configurar la calidad de servicio
(QoS) preferida. AWS IoTadmite los niveles de QoS 0 y 1 para las operaciones de publicación y
suscripción. Para obtener más información sobre los niveles de QoS enAWS IoT, consulteOpciones de
calidad de servicio (QoS) de MQTT (p. 92).
El tiempo de ejecución deAWS CRT para Python define estas constantes para los niveles de QoS que
admite:
196
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
En la aplicación de ejemplo, las solicitudes de publicación y suscripción se realizan con un nivel de QoS de
1 (mqtt.QoS.AT_LEAST_ONCE).
• QoS al publicar
Cuando un dispositivo publica un mensaje con el nivel 1 de QoS, lo envía repetidamente hasta que
recibe unaPUBACK respuesta del intermediario de mensajes. Si el dispositivo no está conectado, el
mensaje se pone en cola para enviarse cuando se vuelva a conectar.
• QoS al suscribirse
Publicación de mensajes
Tras establecer correctamente una conexión conAWS IoT Core, los dispositivos pueden publicar mensajes.
Elpubsub.py ejemplo hace esto llamando a lapublish operación delmqtt_connection objeto.
mqtt_connection.publish(
topic=args.topic,
payload=message,
qos=mqtt.QoS.AT_LEAST_ONCE
)
topic
La carga útil del mensaje con formato de cadena (por ejemplo, un documento JSON)
Un documento JSON es un formato de carga común y es reconocido por otrosAWS IoT servicios; sin
embargo, el formato de datos de la carga útil del mensaje puede ser cualquier formato que acuerden
197
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
los editores y los suscriptores. Sin embargo, otrosAWS IoT servicios solo reconocen JSON y CBOR,
en algunos casos, para la mayoría de las operaciones.
qos
Suscribirse a mensajes
Para recibir mensajes de otros serviciosAWS IoT y dispositivos, los dispositivos se suscriben a esos
mensajes por el nombre del tema. Los dispositivos pueden suscribirse a mensajes individuales
especificando un nombre de tema (p. 113) y a un grupo de mensajes especificando un filtro de
tema (p. 114), que puede incluir caracteres comodín. Elpubsub.py ejemplo usa el código que se muestra
aquí para suscribirse a los mensajes y registrar las funciones de devolución de llamada para procesar el
mensaje una vez recibido.
topic
Si el agente de mensajes debe almacenar estos mensajes mientras el dispositivo está desconectado.
La devolución de llamada delpubsub.py ejemplo procesa los mensajes suscritos a medida que el
dispositivo los recibe.
topic
198
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
Este es el nombre de tema específico del mensaje recibido, incluso si te suscribiste a un filtro de
temas.
payload
La carga de mensajes
Tu aplicación evaluaría el tema y la carga útil para determinar qué acciones realizar.
Cuando un dispositivo se conecta por primera vez, debe suscribirse a los temas para recibir. Si la sesión
de un dispositivo está presente cuando se vuelve a conectar, sus suscripciones se restauran y todos
los mensajes almacenados de esas suscripciones se envían al dispositivo después de que se vuelva a
conectar.
Si la sesión de un dispositivo ya no existe cuando se vuelve a conectar, debe volver a suscribirse a sus
suscripciones. Las sesiones persistentes tienen una duración limitada y pueden caducar si el dispositivo se
desconecta durante demasiado tiempo.
En estos ejercicios se parte del supuesto de que ha completado losIntroducción a AWS IoT
Core (p. 18) tutoriales y que ha utilizado la ventana de terminal del dispositivo que aparece en ese
tutorial.
199
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
Procedimiento de
Para este ejercicio, imagine que su dispositivo contiene un control de temperatura y un control de luz.
Utiliza estos nombres de temas para identificar los mensajes sobre ellos.
1. Antes de empezar el ejercicio, intenta ejecutar este comando desde losIntroducción a AWS IoT
Core (p. 18) tutoriales de tu dispositivo para asegurarte de que todo está preparado para el ejercicio.
cd ~/aws-iot-device-sdk-python-v2/samples
python3 pubsub.py --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/
certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
Deberías ver el mismo resultado que viste en el tutorial de introducción (p. 64).
2. Para este ejercicio, cambie estos parámetros de la línea de comandos.
Al realizar estos cambios en la línea de comando inicial, se obtiene esta línea de comandos.
Introduzca este comando en la ventana del terminal de su dispositivo.
Si ves algo como esto en tu terminal, tu dispositivo está preparado y escuchando los mensajes en los
que los nombres de los temas comiencendevice y terminen con/detail. Así que probemos eso.
3. Estos son algunos mensajes que puede recibir tu dispositivo.
200
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
4. Con el cliente de prueba MQTT de laAWS IoT consola, envíe los mensajes descritos en el paso
anterior a su dispositivo.
Resultado de
Con estopubsub.py, se suscribió a los mensajes mediante un filtro de tema comodín, los recibió y los
mostró en la ventana del terminal. Observa cómo te suscribiste a un único filtro de temas y que se llamó a
la función de devolución de llamada para procesar los mensajes que tenían dos temas distintos.
Procedimiento de
topic_parsed = False
if "/" in topic:
parsed_topic = topic.split("/")
if len(parsed_topic) == 3:
# this topic has the correct format
if (parsed_topic[0] == 'device') and (parsed_topic[2] == 'details'):
# this is a topic we care about, so check the 2nd element
if (parsed_topic[1] == 'temp'):
print("Received temperature request: {}".format(payload))
topic_parsed = True
if (parsed_topic[1] == 'light'):
print("Received light request: {}".format(payload))
topic_parsed = True
if not topic_parsed:
print("Unrecognized message topic.")
5. Guarde los cambios y ejecute el programa modificado mediante esta línea de comandos.
201
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
Resultado de
En este ejercicio, agregaste código para que la aplicación de ejemplo reconociera y procesara varios
mensajes en la función de devolución de llamada. Con esto, su dispositivo podría recibir mensajes y actuar
en consecuencia.
Otra forma de que el dispositivo reciba y procese varios mensajes es suscribirse a diferentes mensajes por
separado y asignar cada suscripción a su propia función de devolución de llamadas.
202
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
Procedimiento de
{
"timestamp": 1601048303,
"sensorId": 28,
"sensorData": [
{
"sensorName": "Wind speed",
"sensorValue": 34.2211224
}
]
}
Para preparar su cliente de prueba de MQTT para monitorear los mensajes de este ejercicio
message = "{}".format(message_string)
d. Busque esta línea de código:
message_json = json.dumps(message)
e. Cámbielo a:
message = "{}".json.dumps(json.loads(message))
f. Guarde los cambios.
3. En el dispositivo, ejecuta este comando para enviar el mensaje dos veces.
203
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
De forma predeterminada,pubsub3.py también se suscribe a los mensajes que envía. Deberías ver que
ha recibido los mensajes en la salida de la aplicación. La ventana de la terminal debería tener un aspecto
similar al siguiente.
Resultado de
Con esto, el dispositivo puede generar mensajes para enviarlosAWS IoT Core a fin de probar la
conectividad básica y proporcionar mensajes del dispositivoAWS IoT Core para su procesamiento. Por
ejemplo, puedes usar esta aplicación para enviar datos de prueba desde tu dispositivo para probar las
acciones de lasAWS IoT reglas.
Cuando esté listo paraAWS IoT Core seguir explorando, pruebe estos tutoriales:
• the section called “Envío de una notificación de Amazon SNS” (p. 216)
204
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
• the section called “Almacenamiento de datos del dispositivo en una tabla de DynamoDB” (p. 224)
• the section called “Formatear una notificación mediante unAWS Lambdafunción” (p. 229)
En general, AWS IoT Device SDK para Embedded C está dirigido a sistemas que utilizan MCU o MPU de
bajo rendimiento que ejecutan sistemas operativos integrados. Para el ejemplo de programación de esta
sección, asumimos que su dispositivo utiliza Linux.
Example
cd aws-iot-device-sdk-embedded-c
git checkout latest-release-tag
3. Instale OpenSSL versión 1.1.0 o posterior. Las bibliotecas de desarrollo de OpenSSL suelen
denominarse «libssl-dev» o «openssl-devel» cuando se instalan a través de un gestor de paquetes.
1. Copie el certificado y la clave privada que creó enIntroducción a AWS IoT Core (p. 18)en elbuild/
bin/certificatesdirectorio.
205
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
Note
Si tiene laAWS CLIinstalada, puede utilizar este comando para buscar la URL del punto de enlace de
su cuenta.
Si no tiene instalada la AWS CLI, abra la consola de AWS IoT. Desde el panel de navegación, elija
Manage (Administrar) y, a continuación, Things (Objetos). Elija la cosa IoT de su dispositivo y, a
continuación, elijaInteractuar. Su punto de enlace se muestra en la sección HTTPS de la página de
detalles del objeto.
3. Abra el iconodemo_config.hy actualice los valores de los elementos siguientes:
AWS_IOT_ENDPOINT
Por ejemplo:
cmake --version
Si aparece un error o no ve la información, deberá instalar el paquete cmake mediante este comando.
Ejecute lacmake --versiony confirme que CMake se ha instalado y que está listo para continuar.
5. Compruebe si tiene las herramientas de desarrollo instaladas en su dispositivo mediante este
comando.
206
AWS IoT Core Guía para desarrolladores
Conectar un dispositivo aAWS IoT Core
mediante el SDK deAWS IoT dispositivos
gcc --version
Vuelva a ejecutar el comando gcc --version y confirme que las herramientas de compilación se han
instalado y que está listo para continuar.
Para ejecutar las aplicaciones de ejemplo de AWS IoT Device SDK para Embedded C
2. Introduzca el siguiente comando CMake para generar los Makefiles necesarios para crear.
cmake ..
make
cd bin
./mqtt_demo_mutual_auth
207
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
El dispositivo está conectado aAWS IoTutilizando elAWS IoT Device SDK para Embedded C.
También puede utilizar laAWS IoTpara ver los mensajes MQTT que está publicando la aplicación de
muestra. Para obtener información sobre cómo utilizar el cliente MQTT en la consola de AWS IoT, consulte
the section called “Ver los mensajes MQTT con el cliente MQTT de AWS IoT” (p. 69).
AWS IoTlas reglas envían datos de tus dispositivos a otrosAWSservicios. Escuchan mensajes MQTT
específicos, formatean los datos de las cargas de mensajes y envían el resultado a otrosAWSservicios.
Le recomendamos que las pruebe en el orden en que se muestran aquí, incluso si su objetivo es crear una
regla que utilice una función Lambda o algo más complejo. Los tutoriales se presentan en orden, de básico
a complejo. Presentan nuevos conceptos de forma gradual para ayudarlo a aprender los conceptos que
puede utilizar para crear las acciones de reglas que no tienen un tutorial específico.
Note
AWS IoTlas reglas lo ayudan a enviar los datos de sus dispositivos de IoT a otrosAWSservicios.
Sin embargo, para hacerlo correctamente, necesita un conocimiento práctico de los otros servicios
a los que desea enviar datos. Si bien estos tutoriales proporcionan la información necesaria para
completar las tareas, puede resultarle útil obtener más información sobre los servicios a los que
desea enviar datos antes de utilizarlos en la solución. Una explicación detallada de la otraAWSlos
servicios están fuera del alcance de estos tutoriales.
208
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
tutoriales de esta sección se centran en un solo dispositivo y, al mismo tiempo, muestran cómo puede
incluir varios sensores.
Los tutoriales de esta sección muestran cómo utilizarAWS IoTreglas para realizar las siguientes tareas con
este sistema imaginario de dispositivos sensores meteorológicos.
Este tutorial muestra cómo volver a publicar un mensaje MQTT recibido de los sensores meteorológicos
como un mensaje que contiene solo el ID del sensor y el valor de temperatura. Utiliza soloAWS IoT
Coreservicios y muestra una consulta SQL sencilla y cómo utilizar el cliente MQTT para probar la regla.
• Tutorial: Enviar una notificación de Amazon SNS (p. 216)
Este tutorial muestra cómo enviar un mensaje SNS cuando un valor de un dispositivo sensor
meteorológico supera un valor específico. Se basa en los conceptos presentados en el tutorial anterior y
añade cómo trabajar con otroAWSservicio, elServicio de notificación simple de Amazon(Amazon SNS).
Si es la primera vez que utiliza Amazon SNS, revise suPrimeros pasosejercicios antes de empezar este
tutorial.
• Tutorial: Almacenamiento de datos del dispositivo en una tabla de DynamoDB (p. 224)
Este tutorial muestra cómo almacenar los datos de los dispositivos de sensores meteorológicos en una
tabla de base de datos. Utiliza la sentencia de consulta de reglas y las plantillas de sustitución para
formatear los datos del mensaje del servicio de destino,Amazon DynamoDB.
Si es la primera vez que utiliza DynamoDB, revise suPrimeros pasosejercicios antes de empezar este
tutorial.
• Tutorial: Formatear una notificación mediante unAWS Lambdafunción (p. 229)
Este tutorial muestra cómo llamar a una función Lambda para reformatear los datos del dispositivo
y luego enviarlos como mensaje de texto. Añade un script de Python yAWSEl SDK funciona en
unAWS Lambdafunción para formatear con el mensaje los datos de carga de los dispositivos sensores
meteorológicos y enviar un mensaje de texto.
Si eres nuevo en Lambda, revisa suPrimeros pasosejercicios antes de empezar este tutorial.
Para unAWS IoTregla para enviar los datos de un dispositivo a otroAWSservicio, utiliza:
Los dispositivos publican mensajes en temas de MQTT. El filtro de temas de la sentencia SQL SELECT
identifica los temas de MQTT a los que se debe aplicar la regla. Los campos especificados en la sentencia
SQL SELECT formatean los datos de la carga útil del mensaje MQTT entrante para que los utilicen las
acciones de la regla. Para obtener una lista completa de las acciones de las reglas, consulte Acciones de
las reglas de AWS IoT (p. 524).
209
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Los mensajes que se vuelven a publicar mediante una regla actúan como los mensajes enviados
por cualquier otra.AWS IoTdispositivo o cliente. Los dispositivos pueden suscribirse a los mensajes
republicados del mismo modo que a cualquier otro tema de mensajes de MQTT.
• Cómo utilizar consultas y funciones SQL simples en una sentencia de consulta de reglas
• Cómo utilizar el cliente MQTT para probar unAWS IoTregla
Asegúrese de poder utilizar el cliente MQTT para suscribirse y publicar en un tema. Utilizará el cliente
MQTT para probar la nueva regla en este procedimiento.
Protocolo MQTT
210
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
mensajes. Para recibir mensajes del agente de mensajes, los dispositivos se suscriben a los temas que
van a recibir enviando filtros de temas en las solicitudes de suscripción al agente de mensajes. ElAWS
IoTEl motor de reglas recibe mensajes MQTT del intermediario de mensajes.
AWS IoTlas reglas constan de una sentencia de consulta de reglas y una o más acciones de reglas.
Cuando elAWS IoTEl motor de reglas recibe un mensaje MQTT, estos elementos actúan sobre el mensaje
de la siguiente manera.
La sentencia de consulta de la regla describe los temas de MQTT que se deben utilizar, interpreta los
datos de la carga útil del mensaje y formatea los datos tal como se describe en una sentencia SQL
similar a las sentencias utilizadas en las bases de datos SQL populares. El resultado de la sentencia de
consulta son los datos que se envían a las acciones de la regla.
• Acción de la regla
Cada acción de regla de una regla actúa sobre los datos que resultan de la sentencia de consulta
de la regla.AWS IoTsoportamuchas acciones de reglas (p. 524). En este tutorial, sin embargo, te
concentrarás en elRepublish (p. 588)rule action, que publica el resultado de la sentencia de consulta
como un mensaje MQTT con un tema específico.
Por ejemplo, la carga útil de un mensaje MQTT con eldevice/22/datael tema se ve así:
{
"temperature": 28,
"humidity": 80,
"barometer": 1013,
"wind": {
"velocity": 22,
"bearing": 255
}
}
La regla toma eltemperaturevalor de la carga útil del mensaje y eldevice_iddel tema y los vuelve a
publicar como un mensaje MQTT con eldevice/data/temptema y una carga de mensajes similar a la
siguiente:
{
"device_id": "22",
"temperature": 28
}
Con esta regla, los dispositivos que solo necesitan el identificador del dispositivo y los datos de
temperatura se suscriben a ladevice/data/temptema para recibir solo esa información.
211
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Recuerda que el nombre de una regla debe ser único en tu cuenta y región, y no puede tener
espacios. Hemos utilizado un carácter de subrayado en este nombre para separar las dos
palabras del nombre de la regla.
b. EnDescripción, describe la regla.
Una descripción significativa le ayuda a recordar qué hace esta regla y por qué la creó. La
descripción puede ser tan larga como sea necesario, por lo que debe ser lo más detallada
posible.
4. EnDeclaración de consulta de reglasdeCrear una regla:
Esta declaración:
• Escucha los mensajes MQTT con un tema que coincida condevice/+/datafiltro de temas.
• Selecciona el segundo elemento de la cadena del tema y lo asigna a ladevice_idcampo.
• Selecciona el valortemperaturecampo de la carga útil del mensaje y lo asigna a
latemperaturecampo.
5. EnDefinir una o más acciones:
a. Para abrir la lista de acciones de la regla para esta regla, elijaAñadir acción.
b. EnSelecciona una acción, eligeVolver a publicar un mensaje en unAWS IoTtema.
c. En la parte inferior de la lista de acciones, seleccionaConfigurar acciónpara abrir la página de
configuración de la acción seleccionada.
6. EnConfigurar acción:
a. EnTema, introducedevice/data/temp. Este es el tema MQTT del mensaje que publicará esta
regla.
b. EnCalidad de servicio, elige0 - El mensaje se entrega cero o más veces.
c. EnElija o cree un rol para otorgarloAWS IoTacceso para realizar esta acción:
i. Elija Create Role (Crear rol). ElCrear un nuevo rolSe abre un cuadro de diálogo.
ii. Introduzca un nombre que describa la nueva función. En este tutorial,
utilicerepublish_role.
Al crear un nuevo rol, se crean las políticas correctas para realizar la acción de la regla y se
adjuntan al nuevo rol. Si cambia el tema de esta acción de regla o usa esta función en otra
acción de regla, debe actualizar la política de esa función para autorizar el nuevo tema o
acción. Para actualizar un rol existente, elijaActualizar rolen esta sección.
iii. EscojaCrear rolpara crear el rol y cerrar el cuadro de diálogo.
d. EscojaAñadir acciónpara añadir la acción a la regla y volver aCrear una reglapágina.
212
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
7. ElVolver a publicar un mensaje en unAWS IoTtemala acción ahora aparece enDefinir una o más
acciones.
Abra elCliente MQTT en elAWS IoTconsolaen una ventana nueva. Esto le permitirá editar la regla sin
perder la configuración de su cliente MQTT. El cliente MQTT no conserva ninguna suscripción o registro de
mensajes si lo deja para ir a otra página de la consola.
1. En elCliente MQTT en elAWS IoTconsola, suscríbete a los temas de entrada, en este caso,device/
+/data.
En elSuscripcionescolumna, debajodispositivo/+/datos,device/data/tempaparece.
3. Publica un mensaje en el tema de entrada con un identificador de dispositivo específico,device/22/
data. No puede publicar en MQTT temas que contengan caracteres comodín.
{
"temperature": 28,
"humidity": 80,
"barometer": 1013,
"wind": {
"velocity": 22,
"bearing": 255
}
}
213
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
a. En el cliente MQTT, enSuscripciones, hay un punto verde junto a los dos temas a los que te
suscribiste anteriormente.
Los puntos verdes indican que se han recibido uno o más mensajes nuevos desde la última vez
que los consultó.
b. BajoSuscripciones, eligedispositivo/+/datospara comprobar que la carga del mensaje coincide con
lo que acabas de publicar y tiene este aspecto:
{
"temperature": 28,
"humidity": 80,
"barometer": 1013,
"wind": {
"velocity": 22,
"bearing": 255
}
}
{
"device_id": "22",
"temperature": 28
}
Tenga en cuenta que eldevice_idel valor es una cadena entre comillas y eltemperatureel
valor es numérico. Esto se debe a que eltopic()la función extrajo la cadena del nombre del
tema del mensaje de entrada, mientras que eltemperatureEl valor usa el valor numérico de la
carga útil del mensaje de entrada.
cast(topic(2) AS DECIMAL)
Tenga en cuenta que al lanzar eltopic(2)convertir un valor numérico solo funcionará si esa
parte del tema contiene solo caracteres numéricos.
5. Si ve que se publicó el mensaje correcto endispositivo/datos/temperaturatema, entonces tu regla
funcionó. Consulte más información sobre la acción de la regla Volver a publicar en la siguiente
sección.
Estas son algunas cosas que debes comprobar en caso de que no obtengas los resultados esperados.
Si apareció un error al publicar el mensaje de entrada, corríjalo primero. Los siguientes pasos pueden
ayudarle a corregir ese error.
214
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Cada vez que publique su mensaje de entrada en eldevice/22/datatema, ese mensaje debería
aparecer en el cliente MQTT si se suscribió aldevice/+/datafiltro de temas tal como se describe en el
procedimiento.
Si se suscribió al tema del mensaje de entrada tal como se describe en el procedimiento, debería ver
una copia del mensaje de entrada cada vez que lo publique.
Si no ves el mensaje, comprueba el nombre del tema al que te suscribiste y compáralo con el tema en
el que publicaste. Los nombres de los temas distinguen entre mayúsculas y minúsculas y el tema al
que te suscribiste debe ser idéntico al tema en el que publicaste la carga del mensaje.
• Compruebe la función de publicación de mensajes
Para que la regla funcione, debe tener la política correcta que la autorice a recibir y volver a publicar un
mensaje, y debe recibir el mensaje.
La consola en la que se ejecuta el cliente MQTT debe estar en la mismaAWSRegión como regla que
ha creado.
• Compruebe el tema del mensaje de entrada en la sentencia de consulta de reglas
Para que la regla funcione, debe recibir un mensaje con el nombre del tema que coincida con el filtro
de temas de la cláusula FROM de la sentencia de consulta de la regla.
Compruebe la ortografía del filtro de temas de la sentencia de consulta de reglas con la del tema en
el cliente MQTT. Los nombres de los temas distinguen entre mayúsculas y minúsculas y el tema del
mensaje debe coincidir con el filtro de temas de la sentencia de consulta de reglas.
• Compruebe el contenido de la carga útil del mensaje de entrada
Para que la regla funcione, debe encontrar el campo de datos en la carga útil del mensaje que se
declara en la sentencia SELECT.
Asegúrese de que el documento JSON de la carga del mensaje tenga el formato correcto. Si el JSON
contiene algún error, como la falta de una coma, la regla no podrá leerlo.
• Compruebe el tema del mensaje republicado en la acción de la regla
El tema al que la acción de la regla Volver a publicar publica el nuevo mensaje debe coincidir con el
tema al que se suscribió en el cliente MQTT.
Abre la regla que creaste en la consola y comprueba el tema en el que la acción de la regla volverá a
publicar el mensaje. 215
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
La acción de la regla debe tener permiso para recibir el tema original y publicar el nuevo tema.
Las políticas que autorizan a la regla a recibir datos de mensajes y a volver a publicarlos son
específicas de los temas utilizados. Si cambias el tema utilizado para volver a publicar los datos del
mensaje, debes actualizar la función de la acción de la regla para actualizar su política y adaptarla al
tema actual.
Si sospecha que este es el problema, edite la acción Volver a publicar la regla y cree un nuevo rol.
Los nuevos roles creados por la acción de la regla reciben las autorizaciones necesarias para realizar
estas acciones.
• Utilizó una consulta SQL sencilla y un par de funciones en una sentencia de consulta de reglas para
generar un nuevo mensaje MQTT.
• Creaste una regla que volvía a publicar ese nuevo mensaje.
• Ha utilizado el cliente MQTT para probar suAWS IoTregla.
Pasos siguientes
Después de volver a publicar algunos mensajes con esta regla, intenta experimentar con ella para ver
cómo los cambios en algunos aspectos del tutorial afectan al mensaje republicado. Estas son algunas
ideas para empezar.
• Cambia elidentificador del dispositivoen el tema del mensaje de entrada y observe el efecto
en la carga útil del mensaje republicado.
• Cambie los campos seleccionados en la sentencia de consulta de reglas y observe el efecto en la carga
útil del mensaje vuelto a publicar.
• Prueba el siguiente tutorial de esta serie y aprende cómoTutorial: Enviar una notificación de Amazon
SNS (p. 216).
La acción Volver a publicar la regla que se utiliza en este tutorial también puede ayudarle a depurar las
sentencias de consulta de reglas. Por ejemplo, puede agregar esta acción a una regla para ver cómo su
sentencia de consulta de reglas da formato a los datos utilizados en sus acciones de regla.
En este tutorial, creará una regla que envíe datos de mensajes desde un sensor meteorológico a todos
los suscriptores de un tema de Amazon SNS, siempre que la temperatura supere el valor establecido en
la regla. La regla detecta cuando la temperatura notificada supera el valor establecido por la regla y, a
continuación, crea una nueva carga de mensajes que incluye únicamente el identificador del dispositivo,
la temperatura notificada y el límite de temperatura que se ha superado. La regla envía la nueva carga de
mensajes como un documento JSON a un tema de SNS, que notifica a todos los suscriptores del tema de
SNS.
216
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Asegúrese de poder utilizar el cliente MQTT para suscribirse y publicar en un tema. Utilizará el cliente
MQTT para probar la nueva regla en este procedimiento.
• Revisó elServicio de notificación simple de Amazon
Si no ha utilizado Amazon SNS anteriormente, reviseConfiguración del acceso a Amazon SNS. Si ya has
completado otrosAWS IoTtutoriales, tusCuenta de AWSya debería estar configurado correctamente.
Paso 1: Crear un tema de Amazon SNS que envíe un mensaje de texto SMS
Para crear un tema de Amazon SNS que envíe un mensaje de texto SMS
El número de teléfono que utilices en esta suscripción puede generar cargos por mensajes de
texto por los mensajes que envíes en este tutorial.
217
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Asegúrese de poder publicar mensajes de prueba desdeConsola Amazon SNSantes de continuar con
el tutorial.
Cuando la regla recibe un mensaje de un tema coincidente, toma eldevice_iddesde el nombre del
tema, eltemperaturevalor de la carga útil del mensaje, añade un valor constante para el límite que está
probando y envía estos valores como un documento JSON a un tema de notificación de Amazon SNS.
Por ejemplo, un mensaje MQTT del dispositivo sensor meteorológico número 32 utiliza eldevice/32/
datatema y tiene una carga de mensajes similar a la siguiente:
{
"temperature": 38,
"humidity": 80,
"barometer": 1013,
"wind": {
"velocity": 22,
"bearing": 255
}
}
La sentencia de consulta de reglas de la regla toma eltemperaturevalor de la carga útil del mensaje,
eldevice_iddesde el nombre del tema y añade la constantemax_temperaturevalor para enviar una
carga de mensajes similar a la siguiente en el tema de Amazon SNS:
{
"device_id": "32",
"reported_temperature": 38,
"max_temperature": 30
}
218
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Para crear unAWS IoTregla para detectar un valor de temperatura superior al límite y crear los
datos para enviarlos al tema de Amazon SNS
Recuerde que el nombre de una regla debe ser único en suCuenta de AWSy Región, y no puede
tener ningún espacio. Hemos utilizado un carácter de subrayado en este nombre para separar las
palabras del nombre de la regla.
b. EnDescripción, describe la regla.
Una descripción significativa hace que sea más fácil recordar qué hace esta regla y por qué la
creaste. La descripción puede ser tan larga como sea necesario, por lo que debe ser lo más
detallada posible.
4. EnDeclaración de consulta de reglasdeCrear una regla:
Esta declaración:
• Escucha los mensajes MQTT con un tema que coincida condevice/+/datafiltro de temas y
que tengan untemperaturevalor superior a 30.
• Selecciona el segundo elemento de la cadena del tema y lo asigna a ladevice_idcampo.
• Selecciona el valortemperaturecampo de la carga útil del mensaje y lo asigna a
lareported_temperaturecampo.
• Crea un valor constante30para representar el valor límite y lo asigna a
lamax_temperaturecampo.
5. Para abrir la lista de acciones de la regla para esta regla, enDefinir una o más acciones, eligeAñadir
acción.
6. EnSelecciona una acción, eligeEnviar un mensaje como notificación push de SNS.
7. Para abrir la página de configuración de la acción seleccionada, en la parte inferior de la lista de
acciones, elijaConfigurar acción.
8. EnConfigurar acción:
a. EnObjetivo SNS, eligeSeleccione, busque su tema de SNS con el nombreaviso de alta tempestad,
y eligeSeleccione.
b. EnFormato de mensaje, eligeCRUDO.
c. EnElija o cree un rol para otorgarloAWS IoTacceso para realizar esta acción, eligeCrear rol.
d. EnCrear un nuevo rol, enNombre, introduzca un nombre exclusivo para la nueva función. Para
este tutorial, escriba sns_rule_role.
e. Elija Create role (Crear rol).
219
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Si vas a repetir este tutorial o a reutilizar un rol existente, eligeActualizar rolantes de continuar. Esto
actualiza el documento de política del rol para que funcione con el destino del SNS.
9. EscojaAñadir accióny volver a laCrear una reglapágina.
Abra elCliente MQTT en elAWS IoTconsolaen una ventana nueva. Esto le permitirá editar la regla sin
perder la configuración de su cliente MQTT. Si dejas el cliente MQTT para ir a otra página de la consola,
no conservará ninguna suscripción ni registro de mensajes.
1. En elCliente MQTT en elAWS IoTconsola, suscríbete a los temas de entrada, en este caso,device/
+/data.
{
"temperature": 38,
"humidity": 80,
"barometer": 1013,
"wind": {
"velocity": 22,
"bearing": 255
}
}
a. En el cliente MQTT, enSuscripciones, hay un punto verde junto al tema al que te suscribiste
anteriormente.
220
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
El punto verde indica que se han recibido uno o más mensajes nuevos desde la última vez que
los consultó.
b. BajoSuscripciones, eligedispositivo/+/datospara comprobar que la carga del mensaje coincide con
lo que acabas de publicar y tiene este aspecto:
{
"temperature": 38,
"humidity": 80,
"barometer": 1013,
"wind": {
"velocity": 22,
"bearing": 255
}
}
c. Comprueba el teléfono que utilizaste para suscribirte al tema de SNS y confirma que el contenido
de la carga del mensaje tiene este aspecto:
{"device_id":"32","reported_temperature":38,"max_temperature":30}
Tenga en cuenta que eldevice_idel valor es una cadena entre comillas y eltemperatureel
valor es numérico. Esto se debe a que eltopic()la función extrajo la cadena del nombre del
tema del mensaje de entrada, mientras que eltemperatureEl valor usa el valor numérico de la
carga útil del mensaje de entrada.
cast(topic(2) AS DECIMAL)
{
"temperature": 28,
"humidity": 80,
"barometer": 1013,
"wind": {
"velocity": 22,
"bearing": 255
}
}
Deberías ver el mensaje que enviaste en eldevice/+/datasuscripción. Sin embargo, dado que el
valor de temperatura está por debajo de la temperatura máxima de la sentencia de consulta de reglas,
no deberías recibir ningún mensaje de texto.
221
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Estas son algunas cosas que debes comprobar en caso de que no obtengas los resultados esperados.
Si apareció un error al publicar el mensaje de entrada, corríjalo primero. Los siguientes pasos pueden
ayudarle a corregir ese error.
• No ves el mensaje de entrada en el cliente MQTT
Cada vez que publique su mensaje de entrada en eldevice/22/datatema, ese mensaje debería
aparecer en el cliente MQTT, si se suscribió aldevice/+/datafiltro de temas tal como se describe en el
procedimiento.
Si se suscribió al tema del mensaje de entrada tal como se describe en el procedimiento, debería ver
una copia del mensaje de entrada cada vez que lo publique.
Si no ves el mensaje, comprueba el nombre del tema al que te suscribiste y compáralo con el tema en
el que publicaste. Los nombres de los temas distinguen entre mayúsculas y minúsculas y el tema al
que te suscribiste debe ser idéntico al tema en el que publicaste la carga del mensaje.
• Compruebe la función de publicación de mensajes
Para que la regla funcione, debe tener la política correcta que la autorice a recibir un mensaje y enviar
una notificación de SNS, y debe recibir el mensaje.
La consola en la que se ejecuta el cliente MQTT debe estar en la mismaAWSRegión como regla que
ha creado.
• Compruebe que el valor de temperatura en la carga útil del mensaje supera el umbral de prueba.
Si el valor de temperatura es inferior o igual a 30, tal como se define en la sentencia de consulta de
reglas, la regla no realizará ninguna de sus acciones.
• Compruebe el tema del mensaje de entrada en la sentencia de consulta de reglas
Para que la regla funcione, debe recibir un mensaje con el nombre del tema que coincida con el filtro
de temas de la cláusula FROM de la sentencia de consulta de la regla.
Compruebe la ortografía del filtro de temas de la sentencia de consulta de reglas con la del tema en
el cliente MQTT. Los nombres de los temas distinguen entre mayúsculas y minúsculas y el tema del
mensaje debe coincidir con el filtro de temas de la sentencia de consulta de reglas.
• Compruebe el contenido de la carga útil del mensaje de entrada
Para que la regla funcione, debe encontrar el campo de datos en la carga útil del mensaje que se
declara en la sentencia SELECT.
222
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Asegúrese de que el documento JSON de la carga del mensaje tenga el formato correcto. Si el JSON
contiene algún error, como la falta de una coma, la regla no podrá leerlo.
• Compruebe el tema del mensaje republicado en la acción de la regla
El tema al que la acción de la regla Volver a publicar publica el nuevo mensaje debe coincidir con el
tema al que se suscribió en el cliente MQTT.
Abre la regla que creaste en la consola y comprueba el tema en el que la acción de la regla volverá a
publicar el mensaje.
• Compruebe el rol que utiliza la regla
La acción de la regla debe tener permiso para recibir el tema original y publicar el nuevo tema.
Las políticas que autorizan a la regla a recibir datos de mensajes y a volver a publicarlos son
específicas de los temas utilizados. Si cambias el tema utilizado para volver a publicar los datos del
mensaje, debes actualizar la función de la acción de la regla para actualizar su política y adaptarla al
tema actual.
Si sospecha que este es el problema, edite la acción Volver a publicar la regla y cree un nuevo rol.
Los nuevos roles creados por la acción de la regla reciben las autorizaciones necesarias para realizar
estas acciones.
En este tutorial:
Pasos siguientes
Después de enviar algunos mensajes de texto con esta regla, intenta experimentar con ella para ver cómo
los cambios en algunos aspectos del tutorial afectan al mensaje y a cuándo se envía. Estas son algunas
ideas para empezar.
• Cambia elidentificador del dispositivoen el tema del mensaje de entrada y observe el efecto
en el contenido del mensaje de texto.
• Cambie los campos seleccionados en la sentencia de consulta de reglas y observe el efecto en el
contenido del mensaje de texto.
• Cambie la prueba en la sentencia de consulta de reglas para probar una temperatura mínima en lugar de
una temperatura máxima. Recuerde cambiar el nombre demax_temperature!
• Agregue una acción de regla de republicación para enviar un mensaje MQTT cuando se envíe una
notificación de SNS.
• Prueba el siguiente tutorial de esta serie y aprende cómoTutorial: Almacenamiento de datos del
dispositivo en una tabla de DynamoDB (p. 224).
223
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
En este tutorial, creará una regla que envíe datos de mensajes desde un dispositivo sensor meteorológico
imaginario a una tabla de DynamoDB. La regla formatea los datos de muchos sensores meteorológicos de
manera que puedan agregarse a una sola tabla de base de datos.
Asegúrese de poder utilizar el cliente MQTT para suscribirse y publicar en un tema. Utilizará el cliente
MQTT para probar la nueva regla en este procedimiento.
• Revisó elAmazon DynamoDBresumen
224
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
2. EnCrear tabla:
Un ejemplo de carga útil de mensajes recibida desde un dispositivo sensor meteorológico tiene este
aspecto:
{
"temperature": 28,
"humidity": 80,
"barometer": 1013,
"wind": {
"velocity": 22,
"bearing": 255
}
}
Para la entrada de la base de datos, utilizará la sentencia rule query para aplanar la estructura de la carga
útil del mensaje de manera que tenga este aspecto:
{
"temperature": 28,
"humidity": 80,
"barometer": 1013,
"wind_velocity": 22,
"wind_bearing": 255
}
En esta regla, también utilizarás un par dePlantillas de sustitución (p. 674). Las plantillas de sustitución
son expresiones que permiten insertar valores dinámicos a partir de funciones y datos de mensajes.
1. Abrirel centro de reglas delAWS IoTconsola. Como alternativa, puede abrir elAWS IoTpágina de inicio
dentro delAWS Management Consoley navega hastaEnrutamiento de mensajes>Reglas.
2. Para empezar a crear la nueva regla enReglas, eligeCrear regla.
3. EnPropiedades de la regla:
Recuerde que el nombre de una regla debe ser único en suCuenta de AWSy Región, y no puede
tener ningún espacio. Hemos utilizado un carácter de subrayado en este nombre para separar las
dos palabras del nombre de la regla.
b. EnDescripción de la regla, describe la regla.
225
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Una descripción significativa hace que sea más fácil recordar qué hace esta regla y por qué la
creaste. La descripción puede ser tan larga como sea necesario, por lo que debe ser lo más
detallada posible.
4. Elija Next (Siguiente) para continuar.
5. Ensentencia SQL:
Esta declaración:
• Escucha los mensajes MQTT con un tema que coincida condevice/+/datafiltro de temas.
• Formatea los elementos delwindatributo como atributos individuales.
• Aprueba eltemperature,humidity, ybarometeratributos sin cambios.
6. Elija Next (Siguiente) para continuar.
7. EnAcciones de reglas:
a. Para abrir la lista de acciones de la regla para esta regla, enAcción 1, eligeDynamoDB.
b. EnNombre de tabla, elija el nombre de la tabla de DynamoDB que creó en el paso
anterior:wx_data.
ElTipo de clave de particiónyTipo de clave de clasificaciónlos campos se rellenan con los valores
de la tabla de DynamoDB.
c. En Partition key (Clave de partición), escriba sample_time.
d. En Partition key value (Valor de clave de partición), escriba ${timestamp()}.
Este es el primero dePlantillas de sustitución (p. 674)usarás en esta regla. En lugar de utilizar
un valor de la carga del mensaje, utilizará el valor devuelto por la función de marca de tiempo.
Para obtener más información, consultemarca de tiempo (p. 665)en elAWS IoT CoreGuía para
desarrolladores.
e. EnClave de clasificación, introducedevice_id.
f. En Sort key value (Valor de clave de ordenación), escriba ${cast(topic(2) AS DECIMAL)}.
Este es el segundo dePlantillas de sustitución (p. 674)usarás en esta regla. Inserta el valor del
segundo elemento en el nombre del tema, que es el identificador del dispositivo, después de
convertirlo en un valor DECIMAL para que coincida con el formato numérico de la clave. Para
obtener más información sobre los temas, consultetema (p. 665)en elAWS IoT CoreGuía para
desarrolladores. O para obtener más información sobre el casting, consultaemitir (p. 630)en
elAWS IoT CoreGuía para desarrolladores.
g. En Write message data to this column (Escribir datos del mensaje en esta columna) introduzca
device_data.
226
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Abra elCliente MQTT en elAWS IoTconsolaen una ventana nueva. Esto le permitirá editar la regla sin
perder la configuración de su cliente MQTT. El cliente MQTT no conserva ninguna suscripción o registro
de mensajes si lo deja para ir a otra página de la consola. También querrás que se abra una ventana
de consola independiente paraCentro de tablas de DynamoDB enAWS IoTconsolapara ver las nuevas
entradas que envía la regla.
{
"temperature": 28,
"humidity": 80,
"barometer": 1013,
"wind": {
"velocity": 22,
"bearing": 255
}
}
227
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
d. Explore las diferentes representaciones de los datos que están disponibles en esta pantalla.
También puede editar los datos de esta pantalla.
e. Cuando haya terminado de revisar esta fila de datos, para guardar los cambios realizados,
elijaAhorra, o para salir sin guardar ningún cambio, elijaCancelar.
Estas son algunas cosas que debes comprobar en caso de que no obtengas los resultados esperados.
Si apareció un error al publicar el mensaje de entrada, corríjalo primero. Los siguientes pasos pueden
ayudarle a corregir ese error.
• No ves el mensaje de entrada en el cliente MQTT
Cada vez que publique su mensaje de entrada en eldevice/22/datatema, ese mensaje debería
aparecer en el cliente MQTT si se suscribió aldevice/+/datafiltro de temas tal como se describe en el
procedimiento.
Si se suscribió al tema del mensaje de entrada tal como se describe en el procedimiento, debería ver
una copia del mensaje de entrada cada vez que lo publique.
Si no ves el mensaje, comprueba el nombre del tema al que te suscribiste y compáralo con el tema en
el que publicaste. Los nombres de los temas distinguen entre mayúsculas y minúsculas y el tema al
que te suscribiste debe ser idéntico al tema en el que publicaste la carga del mensaje.
• Compruebe la función de publicación de mensajes
La consola en la que se ejecuta el cliente MQTT debe estar en la mismaAWSRegión como regla que
ha creado.
• Compruebe el tema del mensaje de entrada en la sentencia de consulta de reglas
Para que la regla funcione, debe recibir un mensaje con el nombre del tema que coincida con el filtro
de temas de la cláusula FROM de la sentencia de consulta de la regla.
Compruebe la ortografía del filtro de temas de la sentencia de consulta de reglas con la del tema en
el cliente MQTT. Los nombres de los temas distinguen entre mayúsculas y minúsculas y el tema del
mensaje debe coincidir con el filtro de temas de la sentencia de consulta de reglas.
• Compruebe el contenido de la carga útil del mensaje de entrada
228
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Para que la regla funcione, debe encontrar el campo de datos en la carga útil del mensaje que se
declara en la sentencia SELECT.
Asegúrese de que el documento JSON de la carga del mensaje tenga el formato correcto. Si el JSON
contiene algún error, como la falta de una coma, la regla no podrá leerlo.
• Compruebe los nombres de las claves y los campos utilizados en la acción de la regla
Los nombres de campo utilizados en la regla del tema deben coincidir con los que se encuentran en la
carga útil de mensajes JSON del mensaje publicado.
Abra la regla que creó en la consola y compruebe los nombres de campo de la configuración de
acciones de la regla con los utilizados en el cliente MQTT.
• Compruebe el rol que utiliza la regla
La acción de la regla debe tener permiso para recibir el tema original y publicar el nuevo tema.
Las políticas que autorizan a la regla a recibir datos de mensajes y a actualizar la tabla de DynamoDB
son específicas de los temas utilizados. Si cambia el tema o el nombre de la tabla de DynamoDB
que utiliza la regla, debe actualizar el rol de la acción de la regla para actualizar su política para que
coincida.
Si sospecha que este es el problema, edite la acción de la regla y cree un rol nuevo. Los nuevos roles
creados por la acción de la regla reciben las autorizaciones necesarias para realizar estas acciones.
• Cambia elidentificador del dispositivoen el tema del mensaje de entrada y observe el efecto
en los datos. Puede utilizar esto para simular la recepción de datos de varios sensores meteorológicos.
• Cambie los campos seleccionados en la sentencia de consulta de reglas y observe el efecto en los
datos. Puede usarlo para filtrar los datos almacenados en la tabla.
• Añada una acción de regla de republicación para enviar un mensaje MQTT por cada fila añadida a la
tabla. Puedes usar esto para depurar.
Una vez que haya completado este tutorial, consultethe section called “Formatear una notificación
mediante unAWS Lambdafunción” (p. 229).
229
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
En el tutorial sobre cómothe section called “Envío de una notificación de Amazon SNS” (p. 216), el
documento JSON resultante de la sentencia de consulta de la regla se envió como cuerpo del mensaje de
texto. El resultado fue un mensaje de texto similar al siguiente ejemplo:
{"device_id":"32","reported_temperature":38,"max_temperature":30}
En este tutorial, utilizarás unAWS Lambdaregla: acción para llamar a unAWS Lambdafunción que da
formato a los datos de la sentencia de consulta de reglas en un formato más amigable, como este ejemplo:
ElAWS Lambdala función que crearás en este tutorial formatea la cadena del mensaje utilizando los datos
de la sentencia de consulta de la regla y llama alPublicación en SNSfunción delAWSSDK para crear la
notificación.
Asegúrese de poder utilizar el cliente MQTT para suscribirse y publicar en un tema. Utilizará el cliente
MQTT para probar la nueva regla en este procedimiento.
• Has completado los otros tutoriales sobre reglas de esta sección
Este tutorial requiere el tema de notificación de SNS que creó en el tutorial sobre cómothe section called
“Envío de una notificación de Amazon SNS” (p. 216). También se supone que ha completado los
demás tutoriales relacionados con las reglas de esta sección.
• Revisó elAWS Lambdaresumen
230
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
A diferencia del tutorial sobre cómothe section called “Envío de una notificación de Amazon
SNS” (p. 216), que utilizaba unAWS IoTregla acción para enviar la notificación, este tutorial envía
la notificación desde la función Lambda mediante una función deAWSSDK. Sin embargo, el tema de
notificación de Amazon SNS que se utiliza en este tutorial es el mismo que utilizó en el tutorial sobre
cómothe section called “Envío de una notificación de Amazon SNS” (p. 216).
import boto3
#
# expects event parameter to contain:
# {
# "device_id": "32",
# "reported_temperature": 38,
# "max_temperature": 30,
# "notify_topic_arn": "arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice"
# }
#
# sends a plain text string to be used in a text message
#
# "Device {0} reports a temperature of {1}, which exceeds the limit of {2}."
#
# where:
# {0} is the device_id value
231
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
return response
{
"device_id": "32",
"reported_temperature": 38,
"max_temperature": 30,
"notify_topic_arn": "arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice"
}
Mantenga esta ventana abierta para poder volver a utilizar este valor de ARN al crear elAWS
IoTregla.
g. Seleccione Crear.
5. Pruebe la función con datos de muestra.
232
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Si tanto la función como la notificación funcionaron, recibirás un mensaje de texto en el teléfono que se
suscribió a la notificación.
Un ejemplo de carga de mensajes recibida de los dispositivos meteorológicos tiene este aspecto:
{
"temperature": 28,
"humidity": 80,
"barometer": 1013,
"wind": {
"velocity": 22,
"bearing": 255
}
}
En esta regla, utilizarás la sentencia rule query para crear una carga de mensajes para la función Lambda
con el siguiente aspecto:
{
"device_id": "32",
"reported_temperature": 38,
"max_temperature": 30,
"notify_topic_arn": "arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice"
}
Contiene toda la información que la función Lambda necesita para formatear y enviar el mensaje de texto
correcto.
Recuerde que el nombre de una regla debe ser único en suCuenta de AWSy Región, y no puede
tener ningún espacio. Hemos utilizado un carácter de subrayado en este nombre para separar las
dos palabras del nombre de la regla.
b. EnDescripción, describe la regla.
233
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Una descripción significativa hace que sea más fácil recordar qué hace esta regla y por qué la
creaste. La descripción puede ser tan larga como sea necesario, por lo que debe ser lo más
detallada posible.
4. EnDeclaración de consulta de reglasdeCrear una regla:
SELECT
cast(topic(2) AS DECIMAL) as device_id,
temperature as reported_temperature,
30 as max_temperature,
'arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice' as notify_topic_arn
FROM 'device/+/data' WHERE temperature > 30
Esta declaración:
• Escucha los mensajes MQTT con un tema que coincida condevice/+/datafiltro de temas y
que tengan untemperaturevalor superior a 30.
• Selecciona el segundo elemento de la cadena del tema, lo convierte en un número decimal y, a
continuación, lo asigna adevice_idcampo.
• Selecciona el valor deltemperaturecampo de la carga útil del mensaje y lo asigna a
lareported_temperaturecampo.
• Crea un valor constante,30, para representar el valor límite y lo asigna
almax_temperaturecampo.
• Crea un valor constante paranotify_topic_arncampo.
c. Consulte la ventana que tieneARNOde laaviso de alta tempestadtema de notificación y copie el
valor del ARN.
d. Reemplace el valor de ARN (arn:aws:sns:us-east- 1:57 Ejemplo
833:high_temp_notice) en el editor de sentencias de consulta de reglas con el ARN del tema
de la notificación.
5. EnDefinir una o más acciones:
a. Para abrir la lista de acciones de la regla para esta regla, elijaAñadir acción.
b. EnSelecciona una acción, eligeEnviar un mensaje a una función Lambda.
c. Para abrir la página de configuración de la acción seleccionada, en la parte inferior de la lista de
acciones, elijaConfigurar acción.
6. EnConfigurar acción:
Abra elCliente MQTT en elAWS IoTconsolaen una ventana nueva. Ahora puede editar la regla sin perder
la configuración de su cliente MQTT. Si abandonas el cliente MQTT para ir a otra página de la consola,
perderás tus suscripciones o registros de mensajes.
234
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
1. En elCliente MQTT en elAWS IoTconsola, suscríbete a los temas de entrada, en este caso,device/
+/data.
{
"temperature": 38,
"humidity": 80,
"barometer": 1013,
"wind": {
"velocity": 22,
"bearing": 255
}
}
a. En el cliente MQTT, enSuscripciones, hay un punto verde junto al tema al que te suscribiste
anteriormente.
El punto verde indica que se han recibido uno o más mensajes nuevos desde la última vez que
los consultó.
b. BajoSuscripciones, eligedispositivo/+/datospara comprobar que la carga del mensaje coincide con
lo que acabas de publicar y tiene este aspecto:
{
"temperature": 38,
"humidity": 80,
"barometer": 1013,
"wind": {
"velocity": 22,
"bearing": 255
}
}
c. Comprueba el teléfono que utilizaste para suscribirte al tema de SNS y confirma que el contenido
de la carga del mensaje tiene este aspecto:
235
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Si cambias el elemento ID del tema en el tema del mensaje, recuerda que al lanzar
eltopic(2)convertir un valor en un valor numérico solo funcionará si ese elemento del tema del
mensaje contiene solo caracteres numéricos.
4. Intente enviar un mensaje MQTT en el que la temperatura no supere el límite.
{
"temperature": 28,
"humidity": 80,
"barometer": 1013,
"wind": {
"velocity": 22,
"bearing": 255
}
}
Deberías ver el mensaje que enviaste en eldevice/+/datasuscripción; sin embargo, dado que el
valor de la temperatura está por debajo de la temperatura máxima de la sentencia de consulta de
reglas, no deberías recibir ningún mensaje de texto.
Estas son algunas cosas que debes comprobar en caso de que no obtengas los resultados esperados.
Si apareció un error al publicar el mensaje de entrada, corríjalo primero. Los siguientes pasos pueden
ayudarle a corregir ese error.
• No ves el mensaje de entrada en el cliente MQTT
Cada vez que publique su mensaje de entrada en eldevice/32/datatema, ese mensaje debería
aparecer en el cliente MQTT, si se suscribió aldevice/+/datafiltro de temas tal como se describe en el
procedimiento.
Si se suscribió al tema del mensaje de entrada tal como se describe en el procedimiento, debería ver
una copia del mensaje de entrada cada vez que lo publique.
Si no ves el mensaje, comprueba el nombre del tema al que te suscribiste y compáralo con el tema en
el que publicaste. Los nombres de los temas distinguen entre mayúsculas y minúsculas y el tema al
que te suscribiste debe ser idéntico al tema en el que publicaste la carga del mensaje.
• Compruebe la función de publicación de mensajes
236
AWS IoT Core Guía para desarrolladores
CreandoAWS IoTreglas para enrutar los
datos del dispositivo a otros servicios
Para que la regla funcione, debe tener la política correcta que la autorice a recibir un mensaje y enviar
una notificación de SNS, y debe recibir el mensaje.
La consola en la que se ejecuta el cliente MQTT debe estar en la mismaAWSRegión como regla que
ha creado.
• Compruebe que el valor de temperatura en la carga útil del mensaje supera el umbral de prueba.
Si el valor de temperatura es inferior o igual a 30, tal como se define en la sentencia de consulta de
reglas, la regla no realizará ninguna de sus acciones.
• Compruebe el tema del mensaje de entrada en la sentencia de consulta de reglas
Para que la regla funcione, debe recibir un mensaje con el nombre del tema que coincida con el filtro
de temas de la cláusula FROM de la sentencia de consulta de la regla.
Compruebe la ortografía del filtro de temas de la sentencia de consulta de reglas con la del tema en
el cliente MQTT. Los nombres de los temas distinguen entre mayúsculas y minúsculas y el tema del
mensaje debe coincidir con el filtro de temas de la sentencia de consulta de reglas.
• Compruebe el contenido de la carga útil del mensaje de entrada
Para que la regla funcione, debe encontrar el campo de datos en la carga útil del mensaje que se
declara en la sentencia SELECT.
Asegúrese de que el documento JSON de la carga del mensaje tenga el formato correcto. Si el JSON
contiene algún error, como la falta de una coma, la regla no podrá leerlo.
• Consulte la notificación de Amazon SNS
EnPaso 1: Crear un tema de Amazon SNS que envíe un mensaje de texto SMS (p. 217), consulte
el paso 3, que describe cómo probar la notificación de Amazon SNS y probar la notificación para
asegurarse de que funciona.
• Compruebe la función Lambda
EnPaso 1: Crea unAWS Lambdafunción que envía un mensaje de texto (p. 231), consulte el paso 5,
que describe cómo probar la función Lambda con datos de prueba y probar la función Lambda.
• Compruebe el rol que utiliza la regla
La acción de la regla debe tener permiso para recibir el tema original y publicar el nuevo tema.
Las políticas que autorizan a la regla a recibir datos de mensajes y a volver a publicarlos son
específicas de los temas utilizados. Si cambias el tema utilizado para volver a publicar los datos del
mensaje, debes actualizar la función de la acción de la regla para actualizar su política y adaptarla al
tema actual.
237
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
Si sospecha que este es el problema, edite la acción Volver a publicar la regla y cree un nuevo rol.
Los nuevos roles creados por la acción de la regla reciben las autorizaciones necesarias para realizar
estas acciones.
• Has creado unAWS IoTregla para llamar a una función de Lambda que envió una notificación de
Amazon SNS que utilizaba su carga de mensajes personalizada.
• Utilizó una consulta SQL sencilla y funciones en una sentencia de consulta de reglas para crear una
nueva carga de mensajes para su función Lambda.
• Ha utilizado el cliente MQTT para probar suAWS IoTregla.
Pasos siguientes
Después de enviar algunos mensajes de texto con esta regla, intenta experimentar con ella para ver cómo
los cambios en algunos aspectos del tutorial afectan al mensaje y a cuándo se envía. Estas son algunas
ideas para empezar.
• Cambia elidentificador del dispositivoen el tema del mensaje de entrada y observe el efecto
en el contenido del mensaje de texto.
• Cambie los campos seleccionados en la sentencia de consulta de reglas, actualice la función Lambda
para utilizarlos en un mensaje nuevo y observe el efecto en el contenido del mensaje de texto.
• Cambie la prueba en la sentencia de consulta de reglas para probar una temperatura mínima en lugar
de una temperatura máxima. Actualice la función Lambda para formatear un mensaje nuevo y recuerde
cambiar el nombre demax_temperature.
• Para obtener más información sobre cómo encontrar los errores que pueden ocurrir durante el desarrollo
y el usoAWS IoTreglas, consulteMonitorización de AWS IoT (p. 458).
Te recomendamos que pruebes estos tutoriales en el orden en que se muestran aquí, empezando por
elAWS IoTlos recursos que necesita crear y la configuración de hardware necesaria, lo que también le
ayuda a aprender los conceptos de forma gradual. Estos tutoriales muestran cómo configurar y conectar
un dispositivo Raspberry Pi para usarlo conAWS IoT. Si no tienes el hardware necesario, puedes seguir
estos tutoriales adaptándolos a un dispositivo de tu elección o mediantecreación de un dispositivo virtual
con Amazon EC2 (p. 42).
El escenario de estos tutoriales es una aplicación o servicio local que cambia el color de una bombilla
y publica sus datos en temas de sombra reservados. Estos tutoriales son similares a la funcionalidad
238
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
Device Shadow descrita en eltutorial interactivo de introducción (p. 21)y se implementan en un dispositivo
Raspberry Pi. Los tutoriales de esta sección se centran en una única sombra clásica y muestran cómo
puede acomodar sombras con nombre o varios dispositivos.
Los siguientes tutoriales le ayudarán a aprender a utilizar elAWS IoTServicio Device Shadow.
Este tutorial muestra cómo configurar un dispositivo Raspberry Pi para conectarse conAWS IoT.
También crearás unAWS IoTdocumento de política y un recurso de cosa, descargue los certificados
y, a continuación, adjunte la política a ese recurso de cosa. Para completar este tutorial se necesitan
aproximadamente 30 minutos.
• Tutorial: Instalación del SDK de dispositivos y ejecución de la aplicación de ejemplo para Device
Shadows (p. 245)
En este tutorial se muestra cómo instalar las herramientas, el software y el software necesariosAWS
IoTSDK de dispositivo para Python y, a continuación, ejecute la aplicación sombra de ejemplo. Este
tutorial se basa en los conceptos presentados enConecta una Raspberry Pi u otro dispositivo (p. 60)y
tarda 20 minutos en completarse.
• Tutorial: Interacción con Device Shadow mediante la aplicación de ejemplo y el cliente de prueba
MQTT (p. 251)
Una Device Shadow es una representación virtual persistente de un dispositivo administrado por
unrecurso de objetos (p. 281)que crees en elAWS IoTregistro. El documento Shadow es un JSON o
unJavaScriptdocumento de notación que se utiliza para almacenar y recuperar la información del estado
actual de un dispositivo. La sombra se puede utilizar para obtener y establecer el estado de un dispositivo
sobre temas MQTT o API REST HTTP, sin tener en cuenta si el dispositivo está conectado o no a Internet.
Un documento Shadow contiene unstateque describe estos aspectos del estado del dispositivo.
• desired: Las aplicaciones especifican los estados deseados de las propiedades del dispositivo
actualizando eldesiredobjeto.
• reported: Los dispositivos notifican su estado actual en lareportedobjeto.
• delta:AWS IoTinforma de las diferencias entre el estado deseado y el notificado endeltaobjeto.
{
"state": {
"desired": {
"color": "green"
},
"reported": {
"color": "blue"
},
"delta": {
"color": "green"
}
}
}
239
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
Para actualizar el documento Shadow de un dispositivo, puede utilizar elTemas MQTT reservados (p. 125),
elAPI REST de Device Shadow de (p. 709)que apoyan elGET,UPDATE, yDELETEoperaciones con HTTP y
elAWS IoTCLI.
{
"state": {
"desired": {
"color": yellow
}
}
}
Las actualizaciones afectan únicamente a los campos especificados en la solicitud. Tras actualizar
correctamente la sombra del dispositivo,AWS IoTpublica el nuevodesiredestado aldeltatema,$aws/
things/THING_NAME/shadow/delta. El documento Shadow en este caso tiene este aspecto:
{
"state": {
"desired": {
"color": yellow
},
"reported": {
"color": green
},
"delta": {
"color": yellow
}
}
}
{
"state": {
"reported": {
"color": yellow
}
}
}
Si desea obtener la información del estado actual, envíe una solicitud a laGetThingShadow (p. 710)API o
publica un mensaje MQTT en elConseguir (p. 714)tema,$aws/things/THING_NAME/shadow/get.
Para obtener más información acerca del uso del servicio Device Shadow, consulteServicio Device
Shadow de AWS IoT (p. 683).
Para obtener más información acerca del uso de Device Shadows en dispositivos, aplicaciones y servicios,
consulteUso de sombras en dispositivos (p. 687)yUso de sombras en aplicaciones y servicios (p. 690).
Para obtener información sobre cómo interactuar conAWS IoTsombras, consulteInteracción con
sombras (p. 702).
Para obtener más información acerca de los temas reservados MQTT y las API REST HTTP,
consulteTemas MQTT de sombra de dispositivo (p. 713)yAPI REST de sombra de dispositivo (p. 709).
240
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
Si planeas hacerlothe section called “Cree un dispositivo virtual con Amazon EC2” (p. 42), puede
saltarse esta página y continuarthe section called “Configuración del dispositivo” (p. 42). Creará
estos recursos cuando cree su cosa virtual. Si desea utilizar un dispositivo diferente en lugar del
Raspberry Pi, puede intentar seguir estos tutoriales adaptándolos a un dispositivo de su elección.
• Una Cuenta de AWS. Si no dispone de una, complete los pasos descritos enConfigura tuCuenta de
AWS (p. 19)antes de continuar. Necesitará suCuenta de AWSyAWS IoTconsola para completar este
tutorial.
• La Raspberry Pi y sus accesorios necesarios. Necesitará:
• UNARaspberry Pi 3 Modelo Bo modelo más reciente. Este tutorial podría funcionar en versiones
anteriores de Raspberry Pi, pero no lo hemos probado.
• Sistema operativo Raspberry Pi (32 bits)o posterior. Le recomendamos que utilice la versión más
reciente del sistema operativo Raspberry Pi. Las versiones anteriores del sistema operativo podrían
funcionar, pero no lo hemos probado.
• Una conexión Ethernet o wifi.
• Teclado, ratón, monitor, cables y fuentes de alimentación.
241
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
Important
Adaptar estas instrucciones a otros dispositivos y sistemas operativos puede ser difícil.
Tendrás que entender el dispositivo lo suficientemente bien como para poder interpretar estas
instrucciones y aplicarlas a tu dispositivo. Si encuentras dificultades, puedes probar una de las
otras opciones de dispositivo como alternativa, como por ejemplo:Cree un dispositivo virtual con
Amazon EC2 (p. 42)oUtilice su PC o Mac con Windows o Linux comoAWS IoTdispositivo (p. 50).
Tendrá que configurar su Raspberry Pi para que pueda iniciar el sistema operativo (SO), conectarse a
Internet y permitirle interactuar con él en una interfaz de línea de comandos. También puede utilizar la
interfaz de usuario gráfica (GUI) compatible con la Raspberry Pi para abrir elAWS IoTy ejecute el resto de
este tutorial.
1. Inserte la tarjeta SD en la ranura de la tarjeta microSD de la Raspberry Pi. Algunas tarjetas SD vienen
precargadas con un gestor de instalación que le solicita un menú para instalar el sistema operativo
después de arrancar la placa. También puede utilizar el generador de imágenes Raspberry Pi para
instalar el sistema operativo en su tarjeta.
2. Connect un televisor o monitor HDMI al cable HDMI que se conecta al puerto HDMI del Raspberry Pi.
3. Connect el teclado y el ratón a los puertos USB del Raspberry Pi y, a continuación, enchufe el adaptador
de corriente para arrancar la placa.
Después de arrancar la Raspberry Pi, si la tarjeta SD viene precargada con el administrador de instalación,
aparece un menú para instalar el sistema operativo. Si tiene problemas para instalar el sistema operativo,
puede seguir estos pasos. Para obtener más información acerca de la configuración de la Raspberry Pi,
consulteConfiguración de la Raspberry Pi.
Después de instalar y configurar el sistema operativo Raspberry Pi, abra el navegador web de Raspberry
Pi y navegue hasta elAWS IoT Coreconsola para continuar con el resto de los pasos de este tutorial.
Si puede abrir elAWS IoT Coreconsola, eres Raspberry Pi está listo y puedes continuarthe section called
“Aprovisionamiento del dispositivo enAWS IoT ” (p. 242).
Si tiene problemas o necesita ayuda adicional, consulteObtener ayuda para su Raspberry Pi.
242
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
En este procedimiento, creará una política de que permita que su dispositivo lleve a cabo elAWS
IoToperaciones necesarias para ejecutar el programa de ejemplo. Le recomendamos que cree una política
que conceda solo los permisos necesarios para llevar a cabo la tarea. Usted crea elAWS IoTprimero y, a
continuación, adjuntarla al certificado de dispositivo que creará más adelante.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": [
"arn:aws:iot:region:account:topic/$aws/things/thingname/shadow/get",
"arn:aws:iot:region:account:topic/$aws/things/thingname/shadow/update"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iot:region:account:topic/$aws/things/thingname/shadow/get/
accepted",
"arn:aws:iot:region:account:topic/$aws/things/thingname/shadow/get/
rejected",
"arn:aws:iot:region:account:topic/$aws/things/thingname/shadow/update/
accepted",
"arn:aws:iot:region:account:topic/$aws/things/thingname/shadow/update/
rejected",
"arn:aws:iot:region:account:topic/$aws/things/thingname/shadow/update/
delta"
]
},
243
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:region:account:topicfilter/$aws/things/thingname/shadow/get/
accepted",
"arn:aws:iot:region:account:topicfilter/$aws/things/thingname/shadow/get/
rejected",
"arn:aws:iot:region:account:topicfilter/$aws/things/thingname/shadow/
update/accepted",
"arn:aws:iot:region:account:topicfilter/$aws/things/thingname/shadow/
update/rejected",
"arn:aws:iot:region:account:topicfilter/$aws/things/thingname/shadow/
update/delta"
]
},
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "arn:aws:iot:region:account:client/test-*"
}
]
}
Para aprender a crear objeto enAWS IoT, siga los pasos descritos enCrea una cosa (objeto) (p. 41). A
continuación se indican algunos aspectos clave a tener en cuenta mientras sigue los pasos de ese tutorial:
1. ElegirCrear un solo objeto, y en elNombre, escriba un nombre para el objeto que es el mismo que
elthingname(por ejemplo,My_light_bulb) especificó cuando creó la política anteriormente.
No se puede cambiar el nombre de una cosa después de que se haya creado. Si le has dado un nombre
distinto althingname, cree un objeto nuevo con el nombre comothingnamey borra lo antiguo.
Note
244
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
Después de crear una cosa, puede ver su recurso de cosa que se muestra en la lista de cosas delAWS
IoTconsola de .
Pasos siguientes
Ahora puede instalar elAWS IoTDevice SDK for Python, ejecuteshadow.pyaplicación de ejemplo y use
Device Shadows para controlar el estado. Para obtener más información acerca de cómo ejecutar este
tutorial, consulteTutorial: Instalación del SDK de dispositivos y ejecución de la aplicación de ejemplo para
Device Shadows (p. 245).
• Utilizar el software instalado yAWS IoTSDK de dispositivo para Python para ejecutar la aplicación de
ejemplo.
• Obtenga información sobre cómo introducir un valor mediante la aplicación de ejemplo publica el valor
deseado en elAWS IoTconsola de .
• Consulte elshadow.pyaplicación de ejemplo y cómo utiliza el protocolo MQTT para actualizar el estado
de la sombra.
Debe haber configurado suCuenta de AWS, configuró su dispositivo Raspberry Pi y creó unAWS IoTcosa
y política que otorga al dispositivo permisos para publicar y suscribirse a los temas reservados de MQTT
del servicio Device Shadow. Para obtener más información, consulte Tutorial: Preparación de Raspberry Pi
para ejecutar la aplicación de sombra (p. 241).
También debes haber instalado Git, Python y elAWS IoTDevice SDK for Python. Este tutorial se basa
en los conceptos presentados en el tutorialConecta una Raspberry Pi u otro dispositivo (p. 60). Si no
ha probado ese tutorial, le recomendamos que siga los pasos descritos en dicho tutorial para instalar
245
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
los archivos de certificado y el SDK del dispositivo y, a continuación, vuelva a este tutorial para ejecutar
elshadow.pyAplicación de ejemplo.
your-iot-endpoint Layour-iot-endpointvalue
tiene un formato de:endpoint_id-
ats.iot.region.amazonaws.com, por
ejemplo,a3qj468EXAMPLE-ats.iot.us-
west-2.amazonaws.com. Para encontrar este
valor:
1. En el navegadorAWS IoTconsola,
eligeManejary, a continuación, elijaObjetos.
2. Elige la cosa de IoT que has creado para
tu dispositivo,my_light_bulb, que utilizó
anteriormente y, a continuación, elijaInteractuar.
En la página de detalles de la cosa, su punto de
enlace se muestra enHTTPSsección.
cd ~/aws-iot-device-sdk-python-v2/samples
246
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
Note
Puede introducir valores en la borna para especificar eldesiredvalor, que también actualiza
elreportedValor . Supongamos que ingresas el coloryellowen la terminal. Lareportedel valor también
se actualiza al coloryellow. A continuación se muestran los mensajes que se muestran en el terminal:
Cuando publica esta solicitud de actualización,AWS IoTcrea una sombra clásica predeterminada
para el recurso de cosa. Puede observar la solicitud de actualización que publicó en
elreportedydesiredvalores en elAWS IoTmirando el documento Shadow del recurso de cosa que creó
(por ejemplo,My_light_bulb). Para ver la actualización en el documento Shadow:
{
"desired": {
"welcome": "aws-iot",
"color": "yellow"
247
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
},
"reported": {
"welcome": "aws-iot",
"color": "yellow"
}
}
La versión del documento de estado se puede utilizar para asegurarse de que actualiza la versión más
reciente del documento Shadow de un dispositivo. Si envía otra solicitud de actualización, el número
de versión aumenta 1. Cuando se suministra una versión con una solicitud de actualización, el servicio
rechaza la solicitud con un código de respuesta de conflicto HTTP 409 si la versión actual del documento
de estado no coincide con la versión suministrada.
{
"metadata": {
"desired": {
"welcome": {
"timestamp": 1620156892
},
"color": {
"timestamp": 1620156893
}
},
"reported": {
"welcome": {
"timestamp": 1620156892
},
"color": {
"timestamp": 1620156893
}
}
},
"version": 10
}
Para obtener más información sobre el documento Shadow y observar los cambios en la información de
estado, proceda al siguiente tutorialTutorial: Interacción con Device Shadow mediante la aplicación de
ejemplo y el cliente de prueba MQTT (p. 251)tal y como se describe en elPaso 4: Revisar los resultados
y los próximos pasos (p. 251)sección de este tutorial. Si lo desea, también puede obtener información
acerca de lashadow.pycódigo de ejemplo y cómo utiliza el protocolo MQTT en la siguiente sección.
Si bien este tutorial utiliza MQTT y MQTT sobre WSS,AWS IoTadmite dispositivos que publican solicitudes
HTTPS. Para ver un ejemplo de un programa Python que envía un mensaje HTTP desde un dispositivo,
consulte elEjemplo de código HTTPS (p. 110)Uso de Pythonrequests.
Para obtener información sobre cómo tomar una decisión informada sobre qué protocolo utilizar
para las comunicaciones de su dispositivo, consulte laElegir un protocolo para la comunicación del
dispositivo (p. 88).
MQTT
248
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
mqtt_connection = mqtt_connection_builder.mtls_from_path(
endpoint=args.endpoint,
cert_filepath=args.cert,
pri_key_filepath=args.key,
ca_filepath=args.ca_file,
client_bootstrap=client_bootstrap,
on_connection_interrupted=on_connection_interrupted,
on_connection_resumed=on_connection_resumed,
client_id=args.client_id,
clean_session=False,
keep_alive_secs=6
)
• endpointes la tuyaAWS IoTpunto final que ha pasado desde la línea de comandos yclient_ides el
ID que identifica este dispositivo de forma exclusiva en elRegión de AWS.
• cert_filepath,pri_key_filepath, yca_filepathson las rutas de acceso al certificado y los
archivos de clave privada del dispositivo y al archivo CA raíz.
• client_bootstrapes el objeto de tiempo de ejecución común que gestiona las
actividades de comunicación de socket y se crea una instancia antes de la llamada
amqtt_connection_builder.mtls_from_path.
• on_connection_interruptedyon_connection_resumedson funciones de devolución de llamada
para llamar cuando se interrumpe y se reanuda la conexión del dispositivo.
• clean_sessiones si se inicia una sesión nueva y persistente o, si hay alguna, volver a conectarse
a una existente.keep_alive_secses el valor de mantener vivo, en segundos, para enviar
elCONNECTrequest. Se enviará automáticamente un ping en este intervalo. El servidor asume que la
conexión se pierde si no recibe un ping después de 1,5 veces este valor.
Cuando un dispositivo se suscribe a un mensaje con QoS nivel 1, el agente de mensajes guarda los
mensajes a los que está suscrito el dispositivo hasta que se puedan enviar al dispositivo. El agente de
mensajes vuelve a enviar los mensajes hasta que recibe unPUBACKrespuesta del dispositivo.
249
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
Para obtener más información acerca del protocolo MQTT, consulteRevise el protocolo
MQTT (p. 193)yMQTT (p. 90).
Para obtener más información sobre cómo se utilizan MQTT, MQTT sobre WSS, sesiones persistentes
y niveles de QoS que se utilizan en este tutorial, consulteRevise la aplicación de ejemplo del SDK para
dispositivos pubsub.py (p. 193).
En algunos casos, el mensaje de error podría indicar problemas de conexión y tener un aspecto similar
a:Host name was invalid for dns resolutionoConnection was closed unexpectedly. En
tales casos, aquí hay algunas cosas que puede comprobar:
Consulte elendpointen el comando que ha introducido para ejecutar la aplicación de ejemplo, (por
ejemplo,a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com) y compruebe este valor en elAWS
IoTconsola.
Si está en la lista desplegableActivarno está disponible y solo puedes elegirDesactivar, el certificado está
activo. Si no, eligeActivary vuelva a ejecutar el programa de ejemplo.
Si el programa sigue sin ejecutarse, compruebe los nombres de los archivos de certificado en
elcertsfolder.
• Compruebe la política adjunta al recurso de cosa
Mientras los certificados autentican el dispositivo,AWS IoTlas directivas permiten que el dispositivo
funcioneAWS IoToperaciones, como suscribirse a temas reservados MQTT o publicar en ellos.
Para ver un ejemplo de política, consultePaso 1: Creación de unAWS IoTpolítica para Device
Shadow (p. 243).
Si aparece mensajes de error que indican problemas para conectarse aAWS IoT, podría deberse a los
permisos que estás utilizando para la política. En ese caso, le recomendamos que empiece con una
política de acceso completo aAWS IoTrecursos y, a continuación, vuelva a ejecutar el programa de
ejemplo. Puede editar la política actual o elegir la política actual, elegirDesacoplary, a continuación, cree
otra política que proporcione acceso completo y lo adjunte a su recurso de cosa. Posteriormente, puede
restringir la política solo a las acciones y políticas que necesita para ejecutar el programa.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:*"
],
"Resource": "*"
}
]
}
Si el programa sigue sin ejecutarse, puede volver a instalar el SDK del dispositivo para asegurarse de
que la instalación del SDK está completa y correcta.
Pasos siguientes
Ahora puede ejecutar elshadow.pyaplicación de ejemplo y use Device Shadows para controlar el estado.
Puede observar las actualizaciones del documento Shadow en elAWS IoTConsola y observa los eventos
delta a los que responde la aplicación de muestra. Con el cliente de prueba MQTT, puede suscribirse a los
temas de sombra reservados y observar los mensajes recibidos por los temas al ejecutar el programa de
ejemplo. Para obtener más información acerca de cómo ejecutar este tutorial, consulteTutorial: Interacción
con Device Shadow mediante la aplicación de ejemplo y el cliente de prueba MQTT (p. 251).
251
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
Configurar elCuenta de AWS, configuró su dispositivo Raspberry Pi y creó unAWS IoTcosa y política.
También debe haber instalado el software necesario, el SDK del dispositivo, los archivos de certificado
y ejecutar el programa de ejemplo en el terminal. Para obtener más información, consulte los tutoriales
anterioresTutorial: Preparación de Raspberry Pi para ejecutar la aplicación de sombra (p. 241)yPaso 1:
Ejecute la aplicación de ejemplo shadow.py (p. 246). Debe completar estos tutoriales si no lo ha hecho
ya.
En el ejemplo anterior, establecemos el color deseado enyellow. Después de introducir cada valor, el
terminal le pide que introduzca otrodesiredValor . Si vuelve a introducir el mismo valor (yellow), la
aplicación lo reconoce y le pide que introduzca un nuevodesiredValor .
252
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
A continuación se muestran los mensajes que se muestran en el terminal que muestran cómo se publica la
solicitud de actualización.
Eliminar una sombra no restablece el número de versión a 0. Verás que la versión de sombra se
incrementa en 1 cuando publicas una solicitud de actualización o creas otra sombra con el mismo
nombre.
Lashadow.pyapp de muestra también está suscrita adeltay responde cuando se produce un cambio
en eldesiredValor . Si lo prefiere, puede cambiar ladesiredvalor del colorred. Para ello, en elAWS
IoTconsola, edite el documento Shadow haciendo clic enEditary, a continuación, configure eldesiredValor
parareden el JSON, manteniendo elreportedValor paragreen. Antes de guardar los cambios, mantenga
abierto el terminal de la Raspberry Pi, ya que verá los mensajes mostrados en el terminal cuando se
produzca el cambio.
{
"desired": {
"welcome": "aws-iot",
"color": "red"
},
"reported": {
"welcome": "aws-iot",
"color": "green"
}
}
253
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
Si aún no ha utilizado el cliente de prueba MQTT, puede revisarVer los mensajes MQTT con el cliente
MQTT de AWS IoT (p. 69). Esto le ayuda a aprender a utilizar elCliente de pruebas MQTTen laAWS
IoTconsolapara ver mensajes MQTT a medida que pasan por el agente de mensajes.
Abra el iconoCliente de prueba MQTT enAWS IoTconsolaen una nueva ventana para que pueda
observar los mensajes recibidos por los temas de MQTT sin perder la configuración de su cliente de
prueba MQTT. El cliente de prueba MQTT no conserva suscripciones ni registros de mensajes si lo
dejas para ir a otra página de la consola. Para esta sección del tutorial, puede tener el documento
Shadow de suAWS IoTcosa y el cliente de prueba MQTT se abren en ventanas separadas para
observar más fácilmente la interacción con Device Shadows.
2. Suscríbase a los temas Shadow reservados de MQTT
Puede utilizar el cliente de prueba MQTT para introducir los nombres de los temas reservados
de MQTT de Device Shadow y suscribirse a ellos para recibir actualizaciones al ejecutar
elshadow.pyAplicación de ejemplo. Para suscribirse a los temas:
Mediante el uso de la#comodín en la suscripción al tema, puede suscribirse a varios temas MQTT al
mismo tiempo y observar todos los mensajes que se intercambian entre el dispositivo y su sombra
en una sola ventana. Para obtener más información acerca de los caracteres comodín y su uso,
consulteTemas de MQTT (p. 112).
3. Ejecución deshadow.pyprograma de ejemplo y mensajes de observación
cd ~/aws-iot-device-sdk-python-v2/samples
python3 shadow.py --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/
device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint --
thing_name your-iot-thing-name
254
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
Por otro lado, si el programa se estaba ejecutando y lo reiniciaste, verás el último valor de
color informado en el terminal. En el cliente de prueba MQTT, verás una actualización de los
temas$aws/things/thingName/sombra/gety$aws/things/thingName/shadow/get/accepted.
{
"state": {
"desired": {
"welcome": "aws-iot",
"color": "green"
},
"reported": {
"welcome": "aws-iot",
"color": "green"
}
},
"metadata": {
"desired": {
"welcome": {
"timestamp": 1620156892
},
"color": {
"timestamp": 1620161643
}
},
"reported": {
"welcome": {
"timestamp": 1620156892
},
"color": {
"timestamp": 1620161643
}
}
},
"version": 10,
"timestamp": 1620173908
}
255
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
{
"previous": {
"state": {
"desired": {
"welcome": "aws-iot",
"color": "green"
},
"reported": {
"welcome": "aws-iot",
"color": "green"
}
},
"metadata": {
"desired": {
"welcome": {
"timestamp": 1617297888
},
"color": {
"timestamp": 1617297898
}
},
"reported": {
"welcome": {
"timestamp": 1617297888
},
"color": {
"timestamp": 1617297898
}
}
},
"version": 10
},
"current": {
"state": {
"desired": {
"welcome": "aws-iot",
"color": "yellow"
256
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
},
"reported": {
"welcome": "aws-iot",
"color": "yellow"
}
},
"metadata": {
"desired": {
"welcome": {
"timestamp": 1617297888
},
"color": {
"timestamp": 1617297904
}
},
"reported": {
"welcome": {
"timestamp": 1617297888
},
"color": {
"timestamp": 1617297904
}
}
},
"version": 11
},
"timestamp": 1617297904
}
Para observar los cambios en el tema delta, edite el documento Shadow en elAWS IoTconsola de . Si
lo prefiere, puede cambiar ladesiredvalor del colorred. Para ello, en elAWS IoTconsola, elijaEditary,
a continuación, configure eldesiredvalor en rojo en el JSON, manteniendo elreportedvalor
establecido engreen. Antes de guardar el cambio, mantenga el terminal abierto, ya que verá el
mensaje delta informado en la terminal.
{
"desired": {
"welcome": "aws-iot",
"color": "red"
},
"reported": {
"welcome": "aws-iot",
"color": "green"
}
}
{
"version": 13,
257
AWS IoT Core Guía para desarrolladores
Conservación del estado del dispositivo mientras el
dispositivo está desconectado con Device Shadows
"timestamp": 1617318480,
"state": {
"color": "red"
},
"metadata": {
"color": {
"timestamp": 1617318480
}
}
}
Si el programa se ejecuta correctamente y le pide que ingrese undesired, debería poder observar las
interacciones de Device Shadow utilizando el documento Shadow y el cliente de prueba MQTT como se
describió anteriormente. Sin embargo, si no puede ver las interacciones, puede consultar algunas cosas
que puede comprobar:
Si no ves los mensajes en el documento Shadow, revisa el comando y asegúrate de que coincida con
el nombre de la cosa en elAWS IoTconsola. También puedes comprobar si tienes una sombra clásica
eligiendo el recurso de tu cosa y luego eligiendoSombras. Este tutorial se centra principalmente en las
interacciones con la sombra clásica.
También puede confirmar que el dispositivo que utilizó está conectado o no a Internet. En el
navegadorAWS IoTconsola, elija el objeto de que creó anteriormente y, a continuación, elijaInteractuar.
En la página de detalles de la cosa, debería ver un mensaje aquí que diga:This thing already
appears to be connected.
• Consulta los temas reservados de MQTT a los que te suscribiste
Si no ves que los mensajes aparecen en el cliente de prueba MQTT, comprueba si los temas a los que
te suscribiste tienen el formato correcto. Los temas de MQTT Device Shadow tienen un formato$aws/
things/thingName/shadow/y podría haberupdate,get, o biendeleteseguirlo en función de las
acciones que desee ejecutar en la sombra. En este tutorial se utiliza el tema$aws/things/thingName/
sombra/ #así que asegúrate de haberlo introducido correctamente al suscribirte al tema en elFiltro de
temassección del cliente de prueba.
Al introducir el nombre del tema, asegúrese de que elthingNamees el mismo que el delAWS IoTcosa
que creó antes. También puede suscribirse a temas MQTT adicionales para ver si se ha realizado
correctamente una actualización. Por ejemplo, puedes suscribirte al tema$aws/things/thingName/
shadow/update/rejectedpara recibir un mensaje cada vez que falla una solicitud de actualización
para poder depurar problemas de conexión. Para obtener más información acerca de los temas
reservados, consultethe section called “Temas de sombra” (p. 125)yTemas MQTT de sombra de
dispositivo (p. 713).
258
AWS IoT Core Guía para desarrolladores
Crear un autorizador personalizado para AWS IoT Core
• Utilice el cliente de prueba MQTT para suscribirse a temas sombra y observar actualizaciones cuando
ejecuta el programa de ejemplo.
Pasos siguientes
Puede suscribirse a temas reservados adicionales de MQTT para observar las actualizaciones de la
aplicación sombra. Por ejemplo, si solo te suscribes al tema$aws/things/thingName/shadow/update/
accepted, solo verá la información de estado actual cuando se haya realizado correctamente una
actualización.
También puede suscribirse a temas de sombra adicionales para depurar problemas u obtener más
información sobre las interacciones de Device Shadow y también depurar cualquier problema relacionado
con las interacciones de Device Shadow. Para obtener más información, consulte the section called
“Temas de sombra” (p. 125) y Temas MQTT de sombra de dispositivo (p. 713).
También puede optar por ampliar la aplicación utilizando sombras con nombre o utilizando hardware
adicional conectado con Raspberry Pi para los LED y observar cambios en su estado mediante mensajes
enviados desde el terminal.
Para obtener más información sobre el servicio Device Shadow y el uso del servicio en dispositivos,
aplicaciones y servicios, consulteServicio Device Shadow de AWS IoT (p. 683),Uso de sombras en
dispositivos (p. 687), yUso de sombras en aplicaciones y servicios (p. 690).
En este tutorial se muestra cómo crear una función Lambda de ejemplo que implemente la lógica de
autorización y autenticación y un autorizador personalizado mediante la create-authorizer llamada con
la firma mediante tokens habilitada. A continuación, el autorizador se valida mediante el ytest-invoke-
authorizer, finalmente, puede enviar datos AWS IoT Core mediante la API de publicación HTTP a un
tema de MQTT de prueba. La solicitud de ejemplo especificará el autorizador que se invocará mediante
el x-amz-customauthorizer-name encabezado y pasará los encabezados y dentro de x-amz-
customauthorizer-signature la token-key-name solicitud.
• Cómo crear una función Lambda para que sea un controlador de autorizador personalizado
• Cómo crear un autorizador personalizado AWS CLI con la firma por token habilitada
• Cómo probar tu autorizador personalizado mediante el comando test-invoke-authorizer
• Cómo publicar un tema de MQTT mediante Postman y validar la solicitud con su autorizador
personalizado
259
AWS IoT Core Guía para desarrolladores
Crear un autorizador personalizado para AWS IoT Core
Necesitarás tu AWS IoT consola Cuenta de AWS y tu consola para completar este tutorial.
La cuenta que usa para este tutorial funciona mejor cuando incluye al menos estas políticas AWS
administradas:
• IAMFullAccess
• AWSIoTFullAccess
• AWSLambda_FullAccess
Important
Las políticas de IAM utilizadas en este tutorial son más permisivas de lo que debería seguir
en una implementación de producción. En un entorno de producción, asegúrese de que sus
políticas de cuentas y recursos concedan solo los permisos necesarios.
Al crear políticas de IAM para la producción, determine qué acceso necesitan los usuarios y
las funciones y, a continuación, diseñe las políticas que les permitan realizar únicamente esas
tareas.
Para obtener más información, consulte las prácticas recomendadas de seguridad en IAM
• Instaló el AWS CLI
Para obtener información sobre cómo instalar elAWS CLI, consulte Instalación de la AWS CLI. Este
tutorial requiere una AWS CLI versión aws-cli/2.1.3 Python/3.7.4 Darwin/18.7.0 exe/
x86_64 o posterior.
• Herramientas de OpenSSL
Los ejemplos de este tutorial utilizan LibreSSL 2.6.5. También puede utilizar las herramientas OpenSSL
v1.1.1i para este tutorial.
• Se ha revisado la AWS Lambdadescripción general
Si no lo ha utilizado AWS Lambda antes, consulte AWS LambdaIntroducción a Lambda para conocer
sus términos y conceptos.
• Se revisó cómo crear solicitudes en Postman
Solo Cuenta de AWS puede configurar un número limitado de autorizadores personalizados a la vez.
Para obtener información sobre cómo eliminar un autorizador personalizado, consultethe section called
“Paso 8: Limpiar” (p. 270).
260
AWS IoT Core Guía para desarrolladores
Crear un autorizador personalizado para AWS IoT Core
• Si proviene una solicitud detest-invoke-authorizer, devuelve una política de IAM con una Deny acción.
• Si una solicitud proviene de Passport mediante HTTP y el actionToken parámetro tiene un valor
deallow, devuelve una política de IAM con una Allow acción. De lo contrario, devuelve una política de
IAM con una Deny acción.
Lambda crea una función Node.js y un rol de ejecución que otorga a la función permiso para cargar
los registros. La función Lambda asume la función de ejecución cuando se invoca la función y la utiliza
para crear credenciales para el AWS SDK y leer datos de las fuentes de eventos.
6. Para ver el código y la configuración de la función en el AWS Cloud9editor, elija custom-auth-
functionen la ventana del diseñador y, a continuación, elija index.js en el panel de navegación del
editor.
Para lenguajes de programación como Node.js, Lambda incluye una función básica que devuelve una
respuesta correcta. Puede utilizar el AWS Cloud9editor para editar la función siempre que el código
fuente no supere los 3 MB.
7. Sustituya el código index.js del editor por el siguiente código:
261
AWS IoT Core Guía para desarrolladores
Crear un autorizador personalizado para AWS IoT Core
//If CLI testing, pass deny action as this is for testing purpose only.
console.log('Using the test-invoke-authorizer cli for testing only');
callback(null, generateAuthResponse(DENY_ACTION,ACCOUNT_ID,REGION));
} else{
callback(null, generateAuthResponse(ALLOW_ACTION,ACCOUNT_ID,REGION));
}else{
callback(null, generateAuthResponse(DENY_ACTION,ACCOUNT_ID,REGION));
};
return authResponse;
}
a. Desplázate hasta la sección Descripción general de las funciones situada encima del editor.
262
AWS IoT Core Guía para desarrolladores
Crear un autorizador personalizado para AWS IoT Core
b. Copia el ARN de la función y guárdalo para usarlo más adelante en este tutorial.
10. Comprobación de la función de .
Si la prueba falló o no ves ningún documento de política, revisa el código para buscar y corregir
los errores.
Para este tutorial, solo necesitas crear un autorizador personalizado. En esta sección se describe cómo
crear mediante la AWS IoT consola y elAWS CLI, para que pueda utilizar el método que le resulte más
cómodo. No hay diferencia entre los recursos de autorizador personalizados creados por ninguno de los
métodos.
263
AWS IoT Core Guía para desarrolladores
Crear un autorizador personalizado para AWS IoT Core
1. Abra la página de autorizador personalizado de la AWS IoT consola y seleccione Crear autorizador.
2. En Crear autorizador:
Si ves un error, revísalo e intenta crear tu autorizador personalizado de nuevo y comprueba las
entradas. Tenga en cuenta que cada recurso de autorizador personalizado debe tener un nombre
único.
264
AWS IoT Core Guía para desarrolladores
Crear un autorizador personalizado para AWS IoT Core
Donde:
Nota: tenga cuidado al introducir la clave pública, ya que cualquier alteración en el valor de la clave
pública la inutilizará.
2. Si se crea el autorizador personalizado, el comando devuelve el nombre y el ARN del nuevo recurso,
como los siguientes.
{
"authorizerName": "my-new-authorizer",
"authorizerArn": "arn:aws:iot:Region:57EXAMPLE833:authorizer/my-new-authorizer"
}
Recuerde que cada recurso de autorizador personalizado debe tener un nombre único.
1. Después de insertar los valores, introduzca el siguiente comando. Tenga en cuenta que el
statement-id valor debe ser único. Id-1234Sustitúyalo por otro valor si ya ejecutaste este tutorial
o si ResourceConflictException aparece un error.
265
AWS IoT Core Guía para desarrolladores
Crear un autorizador personalizado para AWS IoT Core
--function-name "custom-auth-function" \
--principal "iot.amazonaws.com" \
--action "lambda:InvokeFunction" \
--statement-id "Id-1234" \
--source-arn authorizerArn
2. Si el comando se ejecuta correctamente, devuelve una sentencia de permiso, como en este ejemplo.
Puede continuar con la siguiente sección para probar el autorizador personalizado.
{
"Statement": "{\"Sid\":\"Id-1234\",\"Effect\":\"Allow\",\"Principal\":{\"Service
\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":
\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\",\"Condition\":
{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-
auth-function\"}}}"
}
Si el comando no se ejecuta correctamente, devuelve un error, como este ejemplo. Deberás revisar y
corregir el error antes de continuar.
Tenga en cuenta que al invocar el autorizador desde la línea de comandos, no protocolData está
definido, por lo que el autorizador siempre devolverá un documento DENY. Sin embargo, esta prueba
confirma que el autorizador personalizado y la función Lambda están configurados correctamente, incluso
si no prueba completamente la función Lambda.
1. En el directorio que contiene el private-key.pem archivo que creó en el paso anterior, ejecute el
siguiente comando.
Este comando crea una cadena de firma para usarla en el paso siguiente. La cadena de firma tiene un
aspecto similar al siguiente:
dBwykzlb+fo+JmSGdwoGr8dyC2qB/IyLefJJr+rbCvmu9Jl4KHAA9DG+V
+MMWu09YSA86+64Y3Gt4tOykpZqn9mn
VB1wyxp+0bDZh8hmqUAUH3fwi3fPjBvCa4cwNuLQNqBZzbCvsluv7i2IMjEg
+CPY0zrWt1jr9BikgGPDxWkjaeeh
bQHHTo357TegKs9pP30Uf4TrxypNmFswA5k7QIc01n4bIyRTm90OyZ94R4bdJsHNig1JePgnuOBvMGCEFE09jGjj
szEHfgAUAQIWXiVGQj16BU1xKpTGSiTAwheLKUjITOEXAMPLECK3aHKYKY
+d1vTvdthKtYHBq8MjhzJ0kggbt29V
QJCb8RilN/P5+vcVniSXWPplyB5jkYs9UvG08REoy64AtizfUhvSul/r/F3VV8ITtQp3aXiUtcspACi6ca
+tsDuX
f3LzCwQQF/YSUy02u5XkWn+sto6KCkpNlkD0wU8gl3+kOzxrthnQ8gEajd5Iylx230iqcXo3osjPha7JDyWM5o
+K
266
AWS IoT Core Guía para desarrolladores
Crear un autorizador personalizado para AWS IoT Core
EWckTe91I1mokDr5sJ4JXixvnJTVSx1li49IalW4en1DAkc1a0s2U2UNm236EXAMPLELotyh7h
+flFeloZlAWQFH
xRlXsPqiVKS1ZIUClaZWprh/orDJplpiWfBgBIOgokJIDGP9gwhXIIk7zWrGmWpMK9o=
Copia esta cadena de firma para usarla en el siguiente paso. Tenga cuidado de no incluir ningún
carácter adicional ni omitir ninguno.
2. En este comando, sustituya el token-signature valor por la cadena de firma del paso anterior y
ejecute este comando para probar el autorizador.
{
"isAuthenticated": true,
"principalId": "principalId",
"policyDocuments": [
"{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"iot:*\",\"Effect\":
\"Deny\",\"Resource\":\"arn:aws:iot:Region:57EXAMPLE833:*\"}]}"
],
"refreshAfterInSeconds": 600,
"disconnectAfterInSeconds": 3600
}
Si el comando devuelve un error, revise el error y compruebe los comandos que utilizó en esta
sección.
267
AWS IoT Core Guía para desarrolladores
Crear un autorizador personalizado para AWS IoT Core
ii. En Seleccione una colección o carpeta para guardar: elija o cree una colección en la que
guardar esta solicitud.
iii. Elige Guardar en nombre_colección.
3. Crea la solicitud POST para probar tu autorizador personalizado.
https://device_data_endpoint_address:443/topics/test/cust-auth/topic?
qos=0&actionToken=allow
Tenga en cuenta que esta URL incluye el parámetro de actionToken=allow consulta que
indicará a la función Lambda que devuelva un documento de política al que se permita el acceso.
AWS IoT Tras introducir la URL, los parámetros de la consulta también aparecen en la pestaña
Parámetros de Postman.
c. En la pestaña Autenticación, en el campo Tipo, elija Sin autenticación.
d. En la pestaña Encabezados:
Clave Valor
x-amz-customauthorizer-name my-new-authorizer
Host dirección_de_data_endpoint_de_dispositivo
tokenKeyName tokenKeyValue
268
AWS IoT Core Guía para desarrolladores
Crear un autorizador personalizado para AWS IoT Core
Clave Valor
BiogoKjidGP9gWhXiIK7 wpMk9o=
flFeloZl HxRlXsPqi JplpiWfBg
zWrGmJePgnuvTvdthKtAtizfUhvSulTtQpaXiUtcsptsDuXfLzC
e. En la pestaña Cuerpo:
{
"data_mode": "test",
"vibration": 200,
"temperature": 40
}
{
"message": "OK",
"traceId": "ff35c33f-409a-ea90-b06f-fbEXAMPLE25c"
}
La respuesta correcta indica que su autorizador personalizado permitió la conexión AWS IoT y que el
mensaje de prueba se entregó a BrokerinAWS IoT Core.
269
AWS IoT Core Guía para desarrolladores
Crear un autorizador personalizado para AWS IoT Core
• Asegúrate de que tu solicitud de Postman se haya devuelto correctamente. Si AWS IoT rechaza la
conexión y devuelve un error, el mensaje de la solicitud no se pasa al intermediario de mensajes.
• Asegúrese de que los Cuenta de AWS y Región de AWS utilizados para abrir la AWS IoT consola
sean los mismos que utiliza en la URL de Postman.
• Asegúrese de haber introducido el tema correctamente en el cliente de prueba de MQTT. El filtro de
temas distingue entre mayúsculas y minúsculas. En caso de duda, también puede suscribirse al #
tema, que se suscribe a todos los mensajes MQTT que pasan por el corredor de mensajes Cuenta
de AWS y que Región de AWS se utilizan para abrir la AWS IoT consola.
• Creó una función Lambda para que fuera un controlador de autorizaciones personalizado
• Creaste un autorizador personalizado con la firma por medio de tokens habilitada
• Has probado tu autorizador personalizado mediante el comando test-invoke-authorizer
• Publicó un tema de MQTT mediante Postman y validó la solicitud con su autorizador personalizado
• Utilizó el cliente de prueba MQTT para ver los mensajes enviados desde su prueba de Postman
Pasos siguientes
Después de enviar algunos mensajes de Postman para comprobar que el autorizador personalizado
funciona, intenta experimentar para ver cómo los cambios en los diferentes aspectos de este tutorial
afectan a los resultados. Estos son algunos ejemplos para empezar.
• Cambie la cadena de firma para que deje de ser válida para ver cómo se gestionan los intentos de
conexión no autorizados. Debería recibir una respuesta de error, como esta, y el mensaje no debería
aparecer en el cliente de prueba de MQTT.
{
"message": "Forbidden",
"traceId": "15969756-a4a4-917c-b47a-5433e25b1356"
}
• Para obtener más información sobre cómo encontrar los errores que pueden ocurrir al desarrollar y usar
AWS IoT reglas, consulteMonitorización de AWS IoT (p. 458).
Paso 8: Limpiar
Si quieres repetir este tutorial, puede que tengas que eliminar algunos de tus autorizadores
personalizados. Solo Cuenta de AWS puede configurar un número limitado de autorizadores
personalizados a la vez y puede obtener uno LimitExceededException cuando intenta añadir uno
nuevo sin eliminar un autorizador personalizado existente.
270
AWS IoT Core Guía para desarrolladores
Monitorización de la humedad del
suelo con unaAWS IoT Raspberry Pi
1. Haga una lista de los autorizadores personalizados que ha instalado y busque el nombre del
autorizador personalizado que desea eliminar.
Es posible que este tutorial no esté actualizado. Es posible que se hayan eliminado algunas
referencias desde que se publicó originalmente este tema.
Contenido
• Requisitos previos (p. 271)
• Configuración de AWS IoT (p. 272)
• Paso 1: Crear la política de AWS IoT (p. 272)
• Paso 2: Crea laAWS IoT cosa, el certificado y la clave privada (p. 274)
• Paso 3: Crear un tema y una suscripción a Amazon SNS (p. 274)
• Paso 4: Crear unaAWS IoT regla para enviar un correo electrónico (p. 275)
• Configuración del dispositivo Raspberry Pi y el sensor de humedad (p. 276)
Requisitos previos
Para completar este tutorial, se necesita lo siguiente:
271
AWS IoT Core Guía para desarrolladores
Monitorización de la humedad del
suelo con unaAWS IoT Raspberry Pi
• Un equipo de desarrollo con Windows, macOS, Linux o Unix para obtener acceso a la consola de AWS
IoT.
• Una Raspberry Pi 3B o 4B con el último sistema operativo Raspbian. Para ver instrucciones de
instalación, consulte Instalación de imágenes del sistema operativo en el sitio web de Rasberry Pi.
• Un monitor, teclado, ratón y conexión de red wifi o Ethernet para su Raspberry Pi.
• Un sensor de humedad compatible con Raspberry Pi. El sensor utilizado en este tutorial es un sensor de
humedad capacitivo Adafruit STEMMA I2C con un conector hembra de 4 clavijas JST.
Un objeto representa un dispositivo físico (en este caso, su Rasberry Pi) e incluye metadatos estáticos
sobre el dispositivo.
• Un certificado de dispositivo.
Todos los dispositivos deben tener un certificado de dispositivo para conectarse a AWS IoT y
autenticarse con el mismo.
• Una política de AWS IoT.
Cada certificado de dispositivo tiene una o varias políticas de AWS IoT asociadas a él. Estas políticas
determinan a qué recursos de AWS IoT puede obtener acceso el dispositivo.
• Un certificado de CA raíz de AWS IoT.
Los dispositivos y otros clientes utilizan un certificado de CA raíz de AWS IoT para autenticar el servidor
de AWS IoT con el que se están comunicando. Para obtener más información, consulte Autenticación
del servidor (p. 311).
• Una regla de AWS IoT.
Una regla incluye una consulta y una o varias acciones de regla. La consulta extrae datos de los
mensajes del dispositivo para determinar si los datos de los mensajes deben procesarse. La acción de
regla especifica qué hacer si los datos coinciden con la consulta.
• Un tema y una suscripción Topica (Temas) en Amazon SNS.
La regla escucha los datos de humedad del dispositivo Raspberry Pi. Si el valor está por debajo de
un umbral, envía un mensaje al tema de Amazon SNS. Amazon SNS envía ese mensaje a todas las
direcciones de correo electrónico suscritas al tema.
1. En la consola de AWS IoT, si aparece un botón Get started (Empezar), elíjalo. De lo contrario, en el
panel de navegación, expanda Seguridad y, a continuación, seleccione Políticas.
2. Si aparece el cuadro de diálogo You don’t have any policies yet (Aún no tiene ninguna política), elija
Create a policy (Crear una política). De lo contrario, seleccione Create.
3. Escriba un nombre para la política de AWS IoT (por ejemplo, MoistureSensorPolicy).
272
AWS IoT Core Guía para desarrolladores
Monitorización de la humedad del
suelo con unaAWS IoT Raspberry Pi
4. En la sección Add statements (Añadir instrucciones), sustituya la política existente por el siguiente
JSON. Reemplaza la región y la cuenta por tuRegión de AWSCuenta de AWS número de
teléfono.
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "arn:aws:iot:region:account:client/RaspberryPi"
},
{
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": [
"arn:aws:iot:region:account:topic/$aws/things/RaspberryPi/shadow/update",
"arn:aws:iot:region:account:topic/$aws/things/RaspberryPi/shadow/delete",
"arn:aws:iot:region:account:topic/$aws/things/RaspberryPi/shadow/get"
]
},
{
"Effect": "Allow",
"Action": "iot:Receive",
"Resource": [
"arn:aws:iot:region:account:topic/$aws/things/RaspberryPi/shadow/update/
accepted",
"arn:aws:iot:region:account:topic/$aws/things/RaspberryPi/shadow/delete/
accepted",
"arn:aws:iot:region:account:topic/$aws/things/RaspberryPi/shadow/get/
accepted",
"arn:aws:iot:region:account:topic/$aws/things/RaspberryPi/shadow/update/
rejected",
"arn:aws:iot:region:account:topic/$aws/things/RaspberryPi/shadow/delete/
rejected"
]
},
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": [
"arn:aws:iot:region:account:topicfilter/$aws/things/RaspberryPi/shadow/
update/accepted",
"arn:aws:iot:region:account:topicfilter/$aws/things/RaspberryPi/shadow/
delete/accepted",
"arn:aws:iot:region:account:topicfilter/$aws/things/RaspberryPi/shadow/get/
accepted",
"arn:aws:iot:region:account:topicfilter/$aws/things/RaspberryPi/shadow/
update/rejected",
"arn:aws:iot:region:account:topicfilter/$aws/things/RaspberryPi/shadow/
delete/rejected"
]
},
{
"Effect": "Allow",
"Action": [
"iot:GetThingShadow",
"iot:UpdateThingShadow",
"iot:DeleteThingShadow"
],
"Resource": "arn:aws:iot:region:account:thing/RaspberryPi"
}
]
}
273
AWS IoT Core Guía para desarrolladores
Monitorización de la humedad del
suelo con unaAWS IoT Raspberry Pi
1. En la consola deAWS SNS, en el panel de navegación, elija Temas y, a continuación, elija Crear tema.
2. Escriba un nombre para el tema (por ejemplo, MoistureSensorTopic).
3. Escriba un nombre de visualización para el tema (por ejemplo, Moisture Sensor Topic). Este es
el nombre que aparece en la consola de Amazon SNS.
4. Elija Create new topic (Crear nuevo tema).
5. En la página de detalles del tema de Amazon SNS, seleccione Crear suscripción.
6. En Protocol (Protocolo), elija Email (Correo electrónico).
7. En Punto de enlace, introduzca su dirección de correo electrónico.
8. Elija Create subscription (Crear suscripción).
9. Abra su cliente de correo electrónico y busque un mensaje con el asunto MoistureSensorTopic.
Abra el correo electrónico y haga clic en el enlace Confirm subscription (Confirmar suscripción).
Important
No recibirá ninguna alerta por correo electrónico sobre este tema de Amazon SNS hasta que
confirme la suscripción.
274
AWS IoT Core Guía para desarrolladores
Monitorización de la humedad del
suelo con unaAWS IoT Raspberry Pi
{
"reported": {
"moisture" : moisture-reading,
"temp" : temperature-reading
}
}
Puede crear una consulta que extraiga los datos de humedad y temperatura del mensaje entrante.
También crea una acción de Amazon SNS que toma los datos y los envía a los suscriptores de Amazon
SNS por temas si la lectura de humedad está por debajo de un valor umbral.
1. En la consola de AWS IoT, en el panel de navegación, elija Act (Actuar). Si aparece el cuadro de
diálogo You don't have any rules yet (Aún no tiene ninguna regla), elija Create a rule (Crear una regla).
De lo contrario, seleccione Create.
2. En la página Create a rule (Crear una regla), introduzca un nombre para la regla (por ejemplo,
MoistureSensorRule).
3. En Description (Descripción), proporcione una breve descripción de esta regla, (por ejemplo, Sends
an alert when soil moisture level readings are too low).
4. En Rule query statement (Instrucción de consulta de regla), elija SQL versión 2016-03-23 e introduzca
la siguiente instrucción de consulta SQL de AWS IoT:
Esta instrucción activa la acción de la regla cuando la lectura de moisture es menor que 400.
Note
Es posible que tenga que utilizar un valor diferente. Después de ejecutar el código en tu
Raspberry Pi, puedes ver los valores que obtienes del sensor tocando el sensor, colocándolo
en agua o colocándolo en una maceta.
5. En Set one or more actions (Definir una o varias acciones), elija Add action (Añadir acción).
6. En la página Seleccionar una acción, elija Enviar un mensaje como una notificación push SNS.
7. Desplácese hasta la parte inferior de la página y, a continuación, elija Configure action (Configurar
acción).
8. En la página Configurar acción, para SNS target, elija Seleccionar y, a continuación, elija
LowMoistureTopic.
9. En Formato del mensaje, elija RAW.
10. En Elegir o crear un rol para concederAWS IoT acceso para realizar esta acción, elija Crear rol.
Especifique un nombre para el rol (por ejemplo, LowMoistureTopicRole) y elija Create role (Crear
rol).
275
AWS IoT Core Guía para desarrolladores
Monitorización de la humedad del
suelo con unaAWS IoT Raspberry Pi
Inserta la tarjeta microSD en la Raspberry Pi, conecta el monitor, el teclado, el ratón y, si no utilizas Wi-Fi,
el cable Ethernet. No conecte aún el cable de alimentación.
Conecte el cable puente JST al sensor de humedad. El otro lado del puente tiene cuatro cables:
Sujete el dispositivo Raspberry Pi con el enchufe hembra Ethernet a la derecha. En esta orientación hay
dos filas de clavijas GPIO en la parte superior. Conecte los cables del sensor de humedad a la fila inferior
de clavijas en el orden que se indica a continuación. Comenzando por la clavija del extremo izquierdo,
conecte el cable rojo (alimentación), el cable blanco (SDA) y el cable verde (SCL). Omita una clavija y, a
continuación, conecte el cable negro (conexión a tierra). Para obtener más información, consulte Cableado
de equipos Python.
Conecte el cable de alimentación al dispositivo Raspberry Pi y conecte el otro extremo a una toma de
corriente para encenderlo.
Una vez que se inicie el dispositivo Raspberry Pi, habilite la interfaz de I2C.
1. En la esquina superior izquierda del escritorio de Raspbian, haga clic en el icono de Raspberry, elija
Preferences (Preferencias) y, a continuación, elija Raspberry Pi Configuration (Configuración de
Raspberry Pi).
2. En la pestaña Interfaces (Interfaces), en I2C, elija Enable (Habilitar).
3. Seleccione OK (Aceptar).
Las bibliotecas del sensor de humedad STEMMA de Adafruit están diseñadas para ello CircuitPython. Para
ejecutarlas en un dispositivo Raspberry Pi, debe instalar la última versión de Python 3.
1. Ejecute los siguientes comandos desde un símbolo del sistema para actualizar el software del
dispositivo Raspberry Pi:
276
AWS IoT Core Guía para desarrolladores
Monitorización de la humedad del
suelo con unaAWS IoT Raspberry Pi
Para obtener más información, consulte Instalación de CircuitPython bibliotecas en Raspberry Pi.
5. Ejecute el siguiente comando para instalar las bibliotecas de Adafruit Seesaw:
El dispositivo Raspberry Pi ahora tiene todas las bibliotecas necesarias. Cree un archivo denominado
moistureSensor.py y copie el siguiente código Python en el archivo:
import logging
import time
import json
import argparse
import busio
if responseStatus == "accepted":
payloadDict = json.loads(payload)
print("~~~~~~~~~~~~~~~~~~~~~~~")
print("Update request with token: " + token + " accepted!")
print("moisture: " + str(payloadDict["state"]["reported"]["moisture"]))
print("temperature: " + str(payloadDict["state"]["reported"]["temp"]))
print("~~~~~~~~~~~~~~~~~~~~~~~\n\n")
if responseStatus == "rejected":
277
AWS IoT Core Guía para desarrolladores
Monitorización de la humedad del
suelo con unaAWS IoT Raspberry Pi
if responseStatus == "accepted":
print("~~~~~~~~~~~~~~~~~~~~~~~")
print("Delete request with token: " + token + " accepted!")
print("~~~~~~~~~~~~~~~~~~~~~~~\n\n")
if responseStatus == "rejected":
print("Delete request " + token + " rejected!")
parser = argparse.ArgumentParser()
parser.add_argument("-e", "--endpoint", action="store", required=True, dest="host",
help="Your device data endpoint")
parser.add_argument("-r", "--rootCA", action="store", required=True, dest="rootCAPath",
help="Root CA file path")
parser.add_argument("-c", "--cert", action="store", dest="certificatePath",
help="Certificate file path")
parser.add_argument("-k", "--key", action="store", dest="privateKeyPath", help="Private
key file path")
parser.add_argument("-p", "--port", action="store", dest="port", type=int, help="Port
number override")
parser.add_argument("-n", "--thingName", action="store", dest="thingName",
default="Bot", help="Targeted thing name")
parser.add_argument("-id", "--clientId", action="store", dest="clientId",
default="basicShadowUpdater", help="Targeted client id")
args = parser.parse_args()
return args
# Configure logging
# AWSIoTMQTTShadowClient writes data to the log
def configureLogging():
logger = logging.getLogger("AWSIoTPythonSDK.core")
logger.setLevel(logging.DEBUG)
streamHandler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
streamHandler.setFormatter(formatter)
logger.addHandler(streamHandler)
# Init AWSIoTMQTTShadowClient
278
AWS IoT Core Guía para desarrolladores
Monitorización de la humedad del
suelo con unaAWS IoT Raspberry Pi
myAWSIoTMQTTShadowClient = None
myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient(args.clientId)
myAWSIoTMQTTShadowClient.configureEndpoint(args.host, args.port)
myAWSIoTMQTTShadowClient.configureCredentials(args.rootCAPath, args.privateKeyPath,
args.certificatePath)
# Create a device shadow handler, use this to update and delete shadow document
deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName(args.thingName,
True)
# Update shadow
deviceShadowHandler.shadowUpdate(json.dumps(payload), customShadowCallback_Update, 5)
time.sleep(1)
Guarde el archivo en un lugar donde pueda encontrarlo. Ejecute moistureSensor.py desde la línea de
comandos con los siguientes parámetros:
punto de conexión
Su punto de enlace de AWS IoT personalizado. Para obtener más información, consulte API REST de
sombra de dispositivo (p. 709).
rootCA
279
AWS IoT Core Guía para desarrolladores
Monitorización de la humedad del
suelo con unaAWS IoT Raspberry Pi
thingName
Pruebe a tocar el sensor, colocarlo en una maceta o ponerlo en un vaso de agua para ver cómo
responde a distintos niveles de humedad. Si es necesario, puede cambiar el valor del umbral en la opción
MoistureSensorRule. Cuando la lectura del sensor de humedad sea inferior al valor especificado en la
sentencia de consulta SQL de la regla, seAWS IoT publica un mensaje en el tema Amazon SNS. Debería
recibir un mensaje de correo electrónico que incluya los datos de humedad y temperatura.
Tras comprobar la recepción de los mensajes de correo electrónico de Amazon SNS, pulse CTRL+C para
detener el programa Python. Es poco probable que el programa Python envíe suficientes mensajes como
para incurrir en cargos, pero se recomienda detener el programa cuando haya terminado.
280
AWS IoT Core Guía para desarrolladores
Cómo administrar objetos con el registro
{
"version": 3,
"thingName": "MyLightBulb",
"defaultClientId": "MyLightBulb",
"thingTypeName": "LightBulb",
"attributes": {
"model": "123",
"wattage": "75"
}
}
Los objetos se identifican por su nombre. También pueden tener atributos, que son pares nombre-
valor que puede utilizar para almacenar información acerca del objeto, como su número de serie o su
fabricante.
En un caso de uso de dispositivo típico, se utiliza el nombre del objeto como ID de cliente MQTT
predeterminado. Si bien no exigimos un mapeo entre el nombre de registro de una cosa y su uso de los ID
de cliente, los certificados o el estado oculto de MQTT, le recomendamos que elija un nombre de cosa y
lo utilice como ID de cliente de MQTT tanto para el registro como para el servicio Device Shadow. De esta
forma, puede organizar su flota de IoT más fácilmente, sin perder la flexibilidad del modelo de certificado
de dispositivo subyacente o las sombras.
No es necesario crear nada en el registro para conectar un dispositivo aAWS IoT. Al añadir objetos al
registro, podrá administrar y buscar dispositivos con más facilidad.
281
AWS IoT Core Guía para desarrolladores
Creación de un objeto
Creación de un objeto
A continuación, se muestra cómo se utiliza el comando CreateThing de AWS IoT en la CLI para crear
un objeto: No se puede modificar el nombre de un objeto una vez creado. Para cambiar el nombre de un
objeto, debe crear otro objeto nueva, asignarle el nuevo nombre y eliminar después el objeto anterior.
El comando CreateThing muestra el nombre y el ARN (nombre de recurso de Amazon) del nuevo objeto:
{
"thingArn": "arn:aws:iot:us-east-1:123456789012:thing/MyLightBulb",
"thingName": "MyLightBulb",
"thingId": "12345678abcdefgh12345678ijklmnop12345678"
}
Note
Lista de objetos
Puede utilizar el comando ListThings para enumerar todos los objetos en su cuenta:
{
"things": [
{
"attributes": {
"model": "123",
"wattage": "75"
},
"version": 1,
"thingName": "MyLightBulb"
},
{
"attributes": {
"numOfStates":"3"
},
"version": 11,
"thingName": "MyWallSwitch"
}
]
}
Puede utilizar elListThingscomando para buscar todas las cosas de un tipo de cosa específico:
{
"things": [
{
"thingTypeName": "LightBulb",
282
AWS IoT Core Guía para desarrolladores
Describe las cosas
"attributes": {
"model": "123",
"wattage": "75"
},
"version": 1,
"thingName": "MyRGBLight"
},
{
"thingTypeName": "LightBulb",
"attributes": {
"model": "123",
"wattage": "75"
},
"version": 1,
"thingName": "MySecondLightBulb"
}
]
}
Puede utilizar elListThingscomando para buscar todas las cosas que tienen un atributo con un valor
específico. Este comando busca hasta tres atributos.
{
"things": [
{
"thingTypeName": "StopLight",
"attributes": {
"model": "123",
"wattage": "75"
},
"version": 3,
"thingName": "MyLightBulb"
},
{
"thingTypeName": "LightBulb",
"attributes": {
"model": "123",
"wattage": "75"
},
"version": 1,
"thingName": "MyRGBLight"
},
{
"thingTypeName": "LightBulb",
"attributes": {
"model": "123",
"wattage": "75"
},
"version": 1,
"thingName": "MySecondLightBulb"
}
]
}
283
AWS IoT Core Guía para desarrolladores
Actualización de un objeto
Actualización de un objeto
Puede utilizar el comando UpdateThing para actualizar un objeto. Tenga en cuenta que este comando
solo actualiza los atributos del objeto. El nombre de un objeto no se puede modificar. Para cambiar el
nombre de un objeto, debe crear otro objeto nueva, asignarle el nuevo nombre y eliminar después el objeto
anterior.
El comando UpdateThing no genera una salida. Puede utilizar el comando de DescribeThing para ver el
resultado:
Eliminación de un objeto
Puede utilizar el comando DeleteThing para eliminar un objeto:
Este comando se devuelve correctamente sin error si la eliminación se realiza correctamente o especifica
un objeto que no existe.
284
AWS IoT Core Guía para desarrolladores
Desvincular un principal de un objeto
Tipos de objeto
Los tipos de objeto le permiten almacenar información descriptiva y de configuración común a todos los
objetos asociados al mismo tipo de objeto. Esto simplifica la administración de objetos en el registro. Por
ejemplo, puede definir unLightBulbtipo de cosa. Todo lo relacionado con elLightBulbLos tipos de cosa
comparten un conjunto de atributos: número de serie, fabricante y potencia. Cuando creas una cosa de
tipoLightBulb(o cambiar el tipo de algo existente aLightBulb) puede especificar valores para cada uno de
los atributos definidos enLightBulbtipo de cosa.
Aunque los tipos de objeto son opcionales, su uso facilita la detección de objetos.
Los tipos de objeto son inmutables. No puedes cambiar el nombre de un tipo de cosa después de crearlo.
Puede descartar un tipo de objeto, en cualquier momento, para evitar que se le asocien nuevos objetos.
También puede eliminar tipos de objeto que no tengan objetos asociados.
El comando CreateThingType devuelve una respuesta que contiene el tipo de objeto y su ARN:
{
"thingTypeName": "LightBulb",
"thingTypeId": "df9c2d8c-894d-46a9-8192-9068d01b2886",
"thingTypeArn": "arn:aws:iot:us-west-2:123456789012:thingtype/LightBulb"
285
AWS IoT Core Guía para desarrolladores
Lista de los tipos de objeto
ElListThingTypesel comando devuelve una lista de los tipos de cosas definidos en suCuenta de AWS:
{
"thingTypes": [
{
"thingTypeName": "LightBulb",
"thingTypeProperties": {
"searchableAttributes": [
"wattage",
"model"
],
"thingTypeDescription": "light bulb type"
},
"thingTypeMetadata": {
"deprecated": false,
"creationDate": 1468423800950
}
}
]
}
{
"thingTypeProperties": {
"searchableAttributes": [
"model",
"wattage"
],
"thingTypeDescription": "light bulb type"
},
"thingTypeId": "df9c2d8c-894d-46a9-8192-9068d01b2886",
"thingTypeArn": "arn:aws:iot:us-west-2:123456789012:thingtype/LightBulb",
"thingTypeName": "LightBulb",
"thingTypeMetadata": {
"deprecated": false,
"creationDate": 1544466338.399
}
}
286
AWS IoT Core Guía para desarrolladores
Descartar un tipo de objeto
Puede utilizar el comando UpdateThing en cualquier momento para cambiar el tipo de objeto asociado a un
objeto:
También puede utilizar el comando UpdateThing para desvincular un objeto de un tipo de objeto.
{
"thingTypeName": "StopLight",
"thingTypeProperties": {
"searchableAttributes": [
"wattage",
"numOfLights",
"model"
],
"thingTypeDescription": "traffic light type",
},
"thingTypeMetadata": {
"deprecated": true,
"creationDate": 1468425854308,
"deprecationDate": 1468446026349
}
}
Descartar un tipo de objeto es una operación reversible. Puede anular un descarte utilizando la marca --
undo-deprecate con el comando de la CLI DeprecateThingType:
{
"thingTypeName": "StopLight",
"thingTypeArn": "arn:aws:iot:us-east-1:123456789012:thingtype/StopLight",
287
AWS IoT Core Guía para desarrolladores
Eliminación de un tipo de objeto
"thingTypeId": "12345678abcdefgh12345678ijklmnop12345678"
"thingTypeProperties": {
"searchableAttributes": [
"wattage",
"numOfLights",
"model"
],
"thingTypeDescription": "traffic light type"
},
"thingTypeMetadata": {
"deprecated": false,
"creationDate": 1468425854308,
}
}
Note
Debe esperar cinco minutos después de descartar un tipo de objeto para poder eliminarlo.
Las políticas de grupos de cosas no permiten el acceso aAWS IoT Greengrassoperaciones del
plano de datos. Permitir que una cosa acceda a unaAWS IoT Greengrassoperación de plano
de datos, añadir el permiso a unAWS IoTpolítica que adjuntas al certificado de la cosa. Para
obtener más información, consulteAutenticación y autorización de dispositivosen elAWS IoT
Greengrassguía para desarrolladores.
288
AWS IoT Core Guía para desarrolladores
Crear un grupo de objetos estático
Note
Cuando una cosa se adjunta a un grupo de cosas estáticas al que unAWS IoT CoreLa política
está adjunta a, el nombre del elemento debe coincidir con el ID del cliente.
Asociar políticas a grupos y separarlas de ellos puede mejorar la seguridad de las operaciones de AWS
IoT de una serie de formas significativas. El método por dispositivo de asociar una política a un certificado,
que luego se asocia a un objeto, consume mucho tiempo y dificulta la actualización o cambio rápido de
políticas en una flota de dispositivos. Disponer de una política adjunta al grupo del objeto ahorra pasos
cuando hay que rotar los certificados en un objeto. Además, las políticas se aplican dinámicamente a
objetos cuando cambian la pertenencia a un grupo, por lo que no es necesario volver a crear un conjunto
complejo de permisos cada vez que un dispositivo cambia la pertenencia en un grupo.
El comando CreateThingGroup devuelve una respuesta que contiene el nombre, el ID y el ARN del grupo
de objetos estático:
{
"thingGroupName": "LightBulbs",
"thingGroupId": "abcdefgh12345678ijklmnop12345678qrstuvwx",
"thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs"
}
289
AWS IoT Core Guía para desarrolladores
Descripción de un grupo de objetos
Note
A continuación, se muestra un ejemplo que especifica el grupo principal de un grupo de objetos estático
durante su creación:
Al igual que antes, el comando CreateThingGroup devuelve una respuesta que contiene el nombre, el ID y
el ARN del grupo de objetos:
{
"thingGroupName": "RedLights",
"thingGroupId": "abcdefgh12345678ijklmnop12345678qrstuvwx",
"thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights",
}
Important
Tenga en cuenta las siguientes limitaciones cuando cree jerarquías de grupos de objetos:
{
"thingGroupName": "RedLights",
"thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights",
"thingGroupId": "12345678abcdefgh12345678ijklmnop12345678",
"version": 1,
"thingGroupMetadata": {
"creationDate": 1478299948.882
"parentGroupName": "Lights",
"rootToParentThingGroups": [
{
"groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/ShinyObjects",
"groupName": "ShinyObjects"
},
{
"groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs",
"groupName": "LightBulbs"
}
]
290
AWS IoT Core Guía para desarrolladores
Agregar un objeto a un grupo de objetos estático
},
"thingGroupProperties": {
"attributePayload": {
"attributes": {
"brightness": "3400_lumens"
},
},
"thingGroupDescription": "string"
},
}
Puede añadir un objeto a un máximo de 10 grupos. Sin embargo, no puedes añadir nada a más
de un grupo de la misma jerarquía. (En otras palabras, no puedes añadir nada a dos grupos que
comparten un padre común).
Si un objeto pertenece al número máximo de grupos de objetos posible y uno o varios de estos
grupos es un grupo de objetos dinámico, puede utilizar la marca overrideDynamicGroups para que
los grupos estáticos tengan prioridad sobre los grupos dinámicos.
{
"things":[
"TestThingA"
]
}
Con el parámetro --recursive, puede enumerar los objetos que pertenecen a un grupo y también los
que están en alguno de sus grupos secundarios:
291
AWS IoT Core Guía para desarrolladores
Enumeración de grupos de objetos
{
"things":[
"TestThingA",
"MyLightBulb"
]
}
Note
Esta operación es a largo plazo coherente. En otras palabras, los cambios que se hagan en el
grupo de objetos podrían no reflejarse inmediatamente.
ElListThingGroupsel comando devuelve una lista de los grupos de cosas de tuCuenta de AWS:
{
"thingGroups": [
{
"groupName": "LightBulbs",
"groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs"
},
{
"groupName": "RedLights",
"groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights"
},
{
"groupName": "RedLEDLights",
"groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLEDLights"
},
{
"groupName": "RedIncandescentLights",
"groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/
RedIncandescentLights"
}
{
"groupName": "ReplaceableObjects",
"groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/ReplaceableObjects"
}
]
}
Utilice los filtros opcionales para enumerar los grupos que tienen un grupo determinado como grupo
principal (--parent-group) o los grupos cuyo nombre comienza por un prefijo determinado (--name-
prefix-filter). El parámetro --recursive le permite listar también todos los grupos secundarios, no
los grupos secundarios directos de un grupo de objetos:
En este caso, elListThingGroupsel comando devuelve una lista de los grupos secundarios directos del
grupo de cosas definido en suCuenta de AWS:
{
"childGroups":[
292
AWS IoT Core Guía para desarrolladores
Enumerar grupos para un objeto
{
"groupName": "RedLights",
"groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights"
}
]
}
Utilice el parámetro --recursive con el comando ListThingGroups para listar todos los grupos
secundarios de un grupo de objetos, no solo un elemento secundario directo:
El comando ListThingGroups devuelve una lista de todos los grupos secundarios de un grupo de objetos:
{
"childGroups":[
{
"groupName": "RedLights",
"groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights"
},
{
"groupName": "RedLEDLights",
"groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLEDLights"
},
{
"groupName": "RedIncandescentLights",
"groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/
RedIncandescentLights"
}
]
}
Note
Esta operación es a largo plazo coherente. En otras palabras, los cambios que se hagan en el
grupo de objetos podrían no reflejarse inmediatamente.
ElListThingGroupsForThingel comando devuelve una lista de los grupos de cosas directos a los que
pertenece esta cosa:
{
"thingGroups":[
{
"groupName": "LightBulbs",
"groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/LightBulbs"
},
{
"groupName": "RedLights",
"groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RedLights"
},
{
"groupName": "ReplaceableObjects",
293
AWS IoT Core Guía para desarrolladores
Actualizar un grupo de objetos estático
"groupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/ReplaceableObjects"
}
]
}
El comando UpdateThingGroup devuelve una respuesta que contiene el número de versión del grupo
después de la actualización:
{
"version": 4
}
Note
Si intenta eliminar un grupo de objetos que tenga grupos secundarios de objetos, aparecerá un
error:
Puede eliminar un grupo que tenga objetos secundarios, pero no se seguirán aplicando los permisos
concedidos a los objetos por la pertenencia del grupo. Antes de eliminar un grupo que tenga una política
adjunta, compruebe detenidamente que la eliminación de esos permisos no hará que los objetos del grupo
no funcionen correctamente. Además, tenga en cuenta que los comandos que muestran a qué grupos
pertenece un objeto (por ejemplo, ListGroupsForThing) podrían seguir mostrando el grupo mientras se
actualizan los registros en la nube.
294
AWS IoT Core Guía para desarrolladores
Desconectar una política de un grupo de objetos estático
El--targetel parámetro puede ser un ARN de grupo de cosas (como el anterior), un ARN de certificado o
una identidad de Amazon Cognito. Para obtener más información acerca de las políticas, los certificados y
la autenticación, consulte Autenticación (p. 310).
El--targetel parámetro puede ser un ARN de grupo de cosas (como el anterior), un ARN de certificado o
una identidad de Amazon Cognito.
Agregue el parámetro --recursive opcional para incluir también todas las políticas asociadas a los
grupos principales del grupo.
{
"policies": [
"MyLightBulbPolicy"
...
]
295
AWS IoT Core Guía para desarrolladores
Enumeración de los grupos para una política
Añada el parámetro --page-size number opcional para especificar el número máximo de resultados
que se va a devolver para cada consulta y el parámetro --marker string en las llamadas siguientes
para recuperar el siguiente conjunto de resultados, si lo hubiera.
El comando ListTargetsForPolicy devuelve una lista de destinos y el token que usar para recuperar más
resultados:
{
"nextMarker": "string",
"targets": [ "string" ... ]
}
Utilice el parámetro --principal para especificar el ARN del certificado adjunto al objeto. Si utiliza la
autenticación de identidad de Amazon Cognito, utilice la--cognito-identity-pool-idparámetro
y, si lo desea, añada el--principalparámetro para especificar una identidad de Amazon Cognito. Si
especifica solo el --cognito-identity-pool-id, se devuelven las políticas asociadas a ese rol del
grupo de identidades para usuarios sin autenticar. Si usa ambos, se devuelven las políticas asociadas a
ese rol del grupo de identidades para los usuarios autenticados.
El parámetro --thing-name es opcional y puede usarse en lugar del parámetro --principal. Cuando
se utiliza, se devolverán las políticas asociadas a cualquier grupo al que pertenece el objeto y las políticas
asociadas a grupos principales de estos grupos (hasta el grupo raíz en la jerarquía).
{
"effectivePolicies": [
{
"policyArn": "string",
"policyDocument": "string",
"policyName": "string"
}
...
]
}
296
AWS IoT Core Guía para desarrolladores
Prueba de autorización para acciones de MQTT
Utilice el parámetro --principal para especificar el ARN del certificado adjunto al objeto. Si utiliza la
autenticación de Amazon Cognito Identity, especifique una identidad de Cognito como--principalo
utilice el--cognito-identity-pool-idparámetro o ambos. (Si especifica solo --cognito-
identity-pool-id, se tienen en cuenta las políticas asociadas a ese rol del grupo de identidades para
usuarios sin autenticar. Si usa ambos, se tienen en cuenta las políticas asociadas a ese rol del grupo de
identidades para los usuarios autenticados.
Especifique una o más acciones de MQTT que desee probar mediante la enumeración de conjuntos de
recursos y tipos de acción que siguen al parámetro --auth-infos. El campo actionType debería
contener "PUBLISH", "SUBSCRIBE", "RECEIVE" o "CONNECT". El campo resources debe contener una
lista de ARN de recursos. Para obtener más información, consulte Políticas de AWS IoT Core (p. 351).
Puede probar los efectos de la adición de políticas mediante la especificación de estas con el parámetro
--policy-names-to-add. También puede probar los efectos de la eliminación de políticas mediante
ellas con el parámetro --policy-names-to-skip.
El comando TestAuthorization devuelve detalles acerca de acciones que se permiten o deniegan para
cada conjunto de consultas --auth-infos especificadas:
{
"authResults": [
{
"allowed": {
"policies": [
{
"policyArn": "string",
"policyName": "string"
}
]
},
"authDecision": "string",
"authInfo": {
"actionType": "string",
"resources": [ "string" ]
},
"denied": {
"explicitDeny": {
"policies": [
{
"policyArn": "string",
"policyName": "string"
}
]
},
"implicitDeny": {
"policies": [
{
"policyArn": "string",
297
AWS IoT Core Guía para desarrolladores
Grupos de objetos dinámicos
"policyName": "string"
}
]
}
},
"missingContextValues": [ "string" ]
}
]
}
Puede especificar un grupo de objetos dinámico como destino para un trabajo. Solo realizan el trabajo los
objetos que cumplen los criterios que definen el grupo de objetos dinámico.
Por ejemplo, supongamos que desea actualizar el firmware en sus dispositivos, pero, para reducir la
posibilidad de que la actualización se interrumpa, solo desea actualizar el firmware en los dispositivos
con duración de la batería superior al 80 %. Puede crear un grupo de objetos dinámico que solo incluya
dispositivos con una duración de la batería por encima del 80 %, y puede utilizar el grupo de objetos
dinámico como destino para el trabajo de actualización del firmware. Recibirán la actualización del
firmware solo los dispositivos que cumplan con sus criterios de duración de la batería. A medida que
los dispositivos alcancen el 80 % de duración de la batería, estos se van añadiendo al grupo de objetos
dinámico y reciben la actualización del firmware.
Para obtener más información sobre cómo especificar grupos de objetos como destinos de trabajos,
consulte CreateJob.
Los grupos de objetos dinámicos se diferencian de los grupos de objetos estáticos como sigue:
• La pertenencia de un objeto no se define de forma explícita. Para crear un grupo de cosas dinámico,
debes definiruna cadena de consulta (p. 943)que define la pertenencia a un grupo.
• Los grupos de cosas dinámicos no pueden formar parte de una jerarquía.
• A los grupos de cosas dinámicos no se les pueden aplicar políticas.
• Puede utilizar un conjunto diferente de comandos para crear, actualizar y eliminar grupos de objetos
dinámicos. Para el resto de operaciones, para interactuar con grupos de objetos dinámicos se pueden
usar los mismos comandos que se utilizan para interactuar con grupos de objetos estáticos.
• El número de grupos dinámicos que puede tener una sola cuenta es limitado.
• No debes usar información de identificación personal en el nombre de tu grupo de cosas. El nombre del
grupo de cosas puede aparecer en comunicaciones e informes no cifrados.
Para obtener más información acerca de los grupos de objetos estáticos, consulte Grupos de objetos
estáticos (p. 288).
Por ejemplo, suponga que creamos un grupo dinámico que contiene todas las salas de un almacén
cuya temperatura es superior a 60 grados Fahrenheit. Cuando la temperatura de una habitación es
298
AWS IoT Core Guía para desarrolladores
Crear un grupo de objetos dinámico
Note
ElCreateDynamicThingGroupel comando devuelve una respuesta que contiene el nombre del índice, la
cadena de consulta, la versión de la consulta, el nombre del grupo de cosas, el ID del grupo de cosas y el
nombre de recurso de Amazon (ARN) de su grupo de cosas:
{
"indexName": "AWS_Things",
"queryVersion": "2017-09-30",
"thingGroupName": "RoomTooWarm",
"thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RoomTooWarm",
"queryString": "attributes.temperature>60\n",
"thingGroupId": "abcdefgh12345678ijklmnop12345678qrstuvwx"
}
El grupo de objetos dinámico no se crea de manera instantánea. Reponer un grupo de objetos dinámico
lleva tiempo. Cuando se crea un grupo de objetos dinámico, el estado del grupo se establece en
BUILDING. Cuando termina el proceso de reposición, el estado cambia a ACTIVE. Para comprobar el
estado de tu grupo dinámico de cosas, usa laDescribeThingGroupcomando.
{
"status": "ACTIVE",
"indexName": "AWS_Things",
"thingGroupName": "RoomTooWarm",
"thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/RoomTooWarm",
"queryString": "attributes.temperature>60\n",
"version": 1,
"thingGroupMetadata": {
"creationDate": 1548716921.289
},
"thingGroupProperties": {},
299
AWS IoT Core Guía para desarrolladores
Actualizar un grupo de objetos dinámico
"queryVersion": "2017-09-30",
"thingGroupId": "84dd9b5b-2b98-4c65-84e4-be0e1ecf4fd8"
}
ACTIVE
Se está creando el grupo de objetos dinámico y se está procesando la pertenencia de los objetos.
REBUILDING
Se está actualizando la pertenencia al grupo de objetos dinámico tras ajustar la consulta de búsqueda
del grupo.
Note
El comando UpdateDynamicThingGroup devuelve una respuesta que contiene el número de versión del
grupo después de la actualización:
{
"version": 2
}
300
AWS IoT Core Guía para desarrolladores
Limitaciones y conflictos
Los comandos que muestran a qué grupos pertenece un objeto (por ejemplo, ListGroupsForThing) podrían
seguir mostrando el grupo mientras se actualizan los registros en la nube.
Limitaciones y conflictos
Los grupos de objetos dinámicos comparten estas limitaciones con los grupos de objetos estáticos:
Si tiene los permisos para consultar el índice de la flota, podrá obtener acceso a los datos de los
objetos en toda la flota.
Unentrada de registro de erroresen elCloudWatchse crea un registro para cada cosa cuando no se
puede añadir una cosa apta a un grupo de cosas dinámico o cuando una cosa se elimina de un grupo
de cosas dinámicas para añadirla a otro grupo. Cuando no se puede añadir algo a un grupo dinámico,
unAddThingToDynamicThingGroupsFailedmétrico (p. 471)también se crea; sin embargo, una sola
métrica puede representar varias entradas de registro.
Cuando un objeto pasa a ser válido para agregarse a un grupo de objetos dinámico, se tiene en cuenta lo
siguiente:
• ¿Este objeto ya está en el número máximo de grupos posible? (Consulte los límites)
• NO: el objeto se agrega al grupo de objetos dinámico.
• SÍ: ¿el objeto es miembro de algún grupo de objetos dinámico?
301
AWS IoT Core Guía para desarrolladores
Limitaciones y conflictos
• NO: el objeto no se puede agregar al grupo de objetos dinámicos, se registra un error y se genera
una métrica AddThingToDynamicThingGroupsFailed (p. 471).
• SÍ: ¿el grupo de objetos al que se va a unir es anterior a cualquier otro grupo de objetos dinámico
del que el objeto ya sea miembro?
• NO: el objeto no se puede agregar al grupo de objetos dinámicos, se registra un error y se genera
una métrica AddThingToDynamicThingGroupsFailed (p. 471).
• SÍ: elimine el objeto del grupo de objetos dinámicos más reciente del que es miembro, registre
un error y agregue el objeto al grupo de objetos dinámicos. Esto genera un error y una métrica
AddThingToDynamicThingGroupsFailed (p. 471) en el grupo de objetos dinámicos del que
se ha eliminado el objeto.
Cuando un objeto de un grupo dinámico ya no satisface la consulta de búsqueda, se elimina del grupo
de objetos dinámicos. Del mismo modo, cuando un objeto se actualiza para satisfacer una consulta de
búsqueda de un grupo de objetos dinámico, se agrega al grupo tal y como se describió anteriormente.
Estas adiciones y eliminaciones son normales y no generan entradas en el registro de errores.
Cuando se agrega un objeto a un grupo de objetos estático, debe tenerse en cuenta lo siguiente:
Cuando un objeto se elimina de un grupo de objetos dinámico, se registra un error y se genera un evento.
302
AWS IoT Core Guía para desarrolladores
Limitaciones y conflictos
303
AWS IoT Core Guía para desarrolladores
Conceptos básicos de etiquetas
Para ayudarle a administrar los costos relacionados con los objetos puede crear grupos de
facturación (p. 307) con objetos. A continuación, puede asignar etiquetas con sus metadatos a cada
uno de estos grupos de facturación. En esta sección se explican también los grupos de facturación y los
comandos disponibles para crearlos y administrarlos.
Puede buscar y filtrar sus recursos en función de las etiquetas que añada o aplique. También puede
utilizar etiquetas de grupo de facturación para categorizar y realizar un seguimiento de los costos. También
puede utilizar etiquetas para controlar el acceso a los recursos según se describe en Uso de etiquetas con
políticas de IAM (p. 305).
Para facilitar su uso, el editor de etiquetas de la consola AWS de administración proporciona una forma
central y unificada de crear y administrar las etiquetas. Para obtener más información, consulte Trabajar
con el editor de etiquetas en Trabajar con la consola AWS de administración.
También puedes trabajar con etiquetas mediante la AWS IoT API AWS CLI y. Puede asociar etiquetas
a grupos de cosas, tipos de cosas, reglas temáticas, trabajos, perfiles de seguridad, políticas, grupos de
facturación y los paquetes y versiones asociados a las cosas al crearlos mediante el Tags campo de los
siguientes comandos:
• CreateBillingGroup
• CreateDestination
• CreateDeviceProfile
• CreateDynamicThingGroup
• CreateJob
• CreateOTAUpdate
• CreatePolicy
• CreateScheduledAudit
• CreateSecurityProfile
304
AWS IoT Core Guía para desarrolladores
Restricciones y limitaciones en las etiquetas
• CreateServiceProfile
• CreateStream
• CreateThingGroup
• CreateThingType
• CreateTopicRule
• CreateWirelessGateway
• CreateWirelessDevice
Puede añadir, modificar o eliminar etiquetas para recursos existentes que admitan el uso de etiquetas con
los siguientes comandos:
• TagResource
• ListTagsForResource
• UntagResource
Puede editar las claves y los valores de las etiquetas y también puede eliminar etiquetas de un recurso
en cualquier momento. Puede establecer el valor de una etiqueta como una cadena vacía, pero no puede
asignarle un valor nulo. Si añade una etiqueta con la misma clave que una etiqueta existente en ese
recurso, el nuevo valor sobrescribirá al antiguo. Si elimina un recurso, también se eliminarán todas las
etiquetas que este tenga asociadas.
305
AWS IoT Core Guía para desarrolladores
Uso de etiquetas con políticas de IAM
• Utilice aws:TagKeys: [tag-key, ...] para exigir (o impedir) el uso de un conjunto de claves de
etiquetas al realizar una solicitud de API para crear o modificar un recurso que permita etiquetas.
Note
Las claves de contexto de condición y los valores de una política de IAM se aplican únicamente
a las acciones de AWS IoT en las que un identificador de un recurso que se puede etiquetar es
un parámetro obligatorio. Por ejemplo, no DescribeEndpointse permite ni se deniega el uso de
en función de las claves y valores del contexto de las condiciones porque en esta solicitud no se
hace referencia a ningún recurso etiquetable (grupos de cosas, tipos de cosas, reglas de tema,
trabajos o perfil de seguridad). Para obtener más información sobre AWS IoT los recursos que se
pueden etiquetar y las claves de condiciones que admiten, consulte Acciones, recursos y claves
de condiciones para. AWS IoT
Para obtener más información sobre el uso de etiquetas, consulte Controlar el acceso mediante etiquetas
en la Guía del AWS Identity and Access Management usuario. La sección de referencia de políticas JSON
de IAM de esta guía incluye sintaxis, descripciones y ejemplos detallados de los elementos, variables y
lógica de evaluación de las políticas JSON de IAM.
La siguiente política de ejemplo aplica dos restricciones basadas en etiquetas para las ThingGroup
acciones. Un usuario de IAM restringido por esta política:
• No se puede crear un grupo de cosas con la etiqueta «env=prod» (en el ejemplo, consulta la línea).
"aws:RequestTag/env" : "prod"
• No se puede modificar ni acceder a un grupo de cosas que tenga una etiqueta existente «env=prod» (en
el ejemplo, consulta la línea). "aws:ResourceTag/env" : "prod"
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "iot:CreateThingGroup",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/env": "prod"
}
}
},
{
"Effect": "Deny",
"Action": [
"iot:CreateThingGroup",
"iot:DeleteThingGroup",
"iot:DescribeThingGroup",
"iot:UpdateThingGroup"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/env": "prod"
}
}
},
{
"Effect": "Allow",
"Action": [
"iot:CreateThingGroup",
"iot:DeleteThingGroup",
306
AWS IoT Core Guía para desarrolladores
Grupos de facturación
"iot:DescribeThingGroup",
"iot:UpdateThingGroup"
],
"Resource": "*"
}
]
}
También puede especificar varios valores de etiqueta para una determinada clave de etiqueta
encerrándola en una lista, tal y como se muestra a continuación:
"StringEquals" : {
"aws:ResourceTag/env" : ["dev", "test"]
}
Note
Si permite o deniega a los usuarios acceso a recursos en función de etiquetas, debe considerar
denegar explícitamente a los usuarios la posibilidad de agregar estas etiquetas o retirarlas de los
mismos recursos. De lo contrario, es posible que un usuario eluda sus restricciones y obtenga
acceso a un recurso modificando sus etiquetas.
Grupos de facturación
AWS IoT no le permite aplicar directamente etiquetas a objetos individuales, pero sí le permite colocar
objetos en grupos de facturación y aplicarles etiquetas. En AWS IoT, la asignación de datos de costos y
uso basados en etiquetas queda limitada a los grupos de facturación.
AWS IoT Corepara los recursos de LoRa WAN, como dispositivos inalámbricos y puertas de enlace, no
se pueden agregar a los grupos de facturación. Sin embargo, se pueden asociar a AWS IoT cosas que se
pueden añadir a los grupos de facturación.
La API AWS IoT inalámbrica proporciona estas acciones para asociar dispositivos inalámbricos y puertas
de enlace con AWS IoT cosas.
• AssociateWirelessDeviceWithThing
• AssociateWirelessGatewayWithThing
307
AWS IoT Core Guía para desarrolladores
Visualización de datos de uso y asignación de costos
Para asociar los datos de uso y costos de forma precisa con los objetos que ha colocado en
grupos de facturación, cada dispositivo o cada aplicación debe:
• Haberse registrado como objeto en AWS IoT. Para obtener más información, consulte
Administración de dispositivos con AWS IoT (p. 281).
• Conéctese al agente de mensajes de AWS IoT a través de MQTT utilizando únicamente el
nombre del objeto como ID de cliente. Para obtener más información, consulte the section
called “Protocolos de comunicación de dispositivos” (p. 87).
• Autenticarse mediante un certificado de cliente asociado al objeto.
Dispone de las dimensiones de precios para los grupos de facturación (en función de la actividad de los
objetos asociados al grupo de facturación):
• Conectividad (en función del nombre del objeto utilizado como ID de cliente para conectarse)
• Mensajes (en función de la entrada de mensajes procedentes de un objeto y la salida de mensajes
destinados a un objeto; solo MQTT)
• Operaciones de sombra (en función del objeto cuyo mensaje activó una actualización de sombra)
• Reglas activadas (en función del objeto cuyo mensaje entrante activó la regla; no se aplica a las reglas
activadas por los eventos del ciclo de vida de MQTT)
• Actualizaciones de índices de objetos (en función del objeto que se haya agregado al índice)
• Acciones remotas (en función del objeto actualizado)
• Informes de Detect (p. 1073) (en función del objeto cuya actividad se notifica).
Los datos de costo y uso basados en etiquetas (y notificados para un grupo de facturación) no reflejan las
siguientes actividades:
308
AWS IoT Core Guía para desarrolladores
Seguridad en AWS IoT
• Seguridad de la nube: AWS es responsable de proteger la infraestructura que ejecuta los servicios
de AWS en la nube de AWS. AWS también proporciona servicios que puede utilizar de forma segura.
Auditores externos prueban y verifican periódicamente la eficacia de nuestra seguridad en el marco
de los programas de conformidad de AWS. Para obtener más información sobre los programas de
conformidad que se aplican a AWS IoT, consulte Servicios de AWS en el ámbito del programa de
conformidad.
• Seguridad en la nube: su responsabilidad viene determinada por el servicio de AWS que utilice. También
es responsable de otros factores, incluida la confidencialidad de los datos, los requisitos de la empresa y
la legislación y los reglamentos vigentes.
Esta documentación le ayuda a comprender cómo aplicar el modelo de responsabilidad compartida cuando
se utiliza AWS IoT. En los siguientes temas, se le mostrará cómo configurar AWS IoT para satisfacer sus
objetivos de seguridad y conformidad. También puede aprender a utilizar otros servicios de AWS que lo
ayuden a monitorear y proteger los recursos de AWS IoT.
Temas
• Seguridad de AWS IoT (p. 309)
• Autenticación (p. 310)
• Autorización (p. 349)
• Protección de los datos en AWS IoT Core (p. 401)
• Identity and Access Management en AWS IoT (p. 407)
• Registro y monitorización (p. 444)
• Validación de la conformidad enAWS IoTNúcleo (p. 445)
• El ResilienciaAWSNúcleo de IoT (p. 446)
• Uso de AWS IoT Core con los puntos de enlace de la VPC de la interfaz (p. 446)
• Seguridad de la infraestructura en AWS IoT (p. 450)
• Supervisión de la seguridad de las flotas o dispositivos de producción conAWS IoTNúcleo (p. 451)
• Prácticas de seguridad recomendadas para AWS IoT Core (p. 451)
• AWS Training and Certification (p. 457)
309
AWS IoT Core Guía para desarrolladores
Autenticación
Autenticación
La autenticación es un mecanismo en el que se verifica la identidad de un cliente o un servidor. La
autenticación del servidor es el proceso en el que los dispositivos u otros clientes aseguran que se
comunican con un punto de enlace de AWS IoT real. La autenticación de cliente es el proceso en el que
los dispositivos u otros clientes se autentican con AWS IoT.
310
AWS IoT Core Guía para desarrolladores
Información general del certificado X.509
Cuando sus dispositivos u otros clientes establecen una conexión TLS con un punto de enlace de AWS IoT
Core, AWS IoT Core presenta una cadena de certificados que los dispositivos utilizan para verificar si se
están comunicando con AWS IoT Core y no con otro servidor que suplante a AWS IoT Core . La cadena
que se presenta depende de una combinación del tipo de punto de enlace al que se conecta el dispositivo
y del conjunto de cifrado (p. 402) que el cliente y AWS IoT Core negociaron durante el protocolo TLS.
Los certificados presentados por los puntos de enlace de ATS están firmados por Starfield. Algunas
implementaciones de cliente TLS requieren la validación de la raíz de confianza y requieren que los
certificados de CA de Starfield estén instalados en los almacenes de confianza del cliente.
Warning
account-specific-prefix.iot.your-region.amazonaws.com
La primera vez que se llama a describe-endpoint, se crea un punto de enlace. Todas las llamadas
posteriores a describe-endpoint devuelven el mismo punto de enlace.
311
AWS IoT Core Guía para desarrolladores
Autenticación del servidor
En lo que se refiere a la compatibilidad con versiones anteriores, AWS IoT Core sigue siendo compatible
con los puntos de enlace de Symantec. Para obtener más información, consulte How AWS IoT Core is
Helping Customers Navigate the Upcoming Distrust of Symantec Certificate Authorities. Los dispositivos
que funcionan en los puntos de enlace de ATS son totalmente interoperables con los dispositivos que
funcionan en los puntos de enlace de Symantec en la misma cuenta y no es necesario volver a registrarlos.
Note
Para ver el punto de enlace iot:Data-ATS en la consola de AWS IoT Core, elija Settings
(Configuración). La consola solo muestra el punto de enlace iot:Data-ATS. De forma
predeterminada, el comando describe-endpoint muestra el punto de enlace iot:Data para
garantizar la compatibilidad con versiones anteriores. Para ver el punto de enlace iot:Data-
ATS, especifique el parámetro --endpointType como en el ejemplo anterior.
312
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
Todos estos certificados tienen firma cruzada del Certificado Starfield Root CA. A partir del lanzamiento de
AWS IoT Core en la región de Asia Pacífico (Mumbai) el 9 de mayo de 2018, todas las regiones nuevas de
AWS IoT Core proporcionan exclusivamente certificados de ATS.
• Le recomendamos que utilice su punto de conexión de punto de opción e instale todos los dispositivos
compatiblesAmazon Root CAcertificados.
• Si no puede almacenar todos estos certificados en su dispositivo y si sus dispositivos no utilizan la
validación basada en la ECC, puede omitir laAmazon Root CA 3yAmazon Root CA 4certificados ECC.
Si sus dispositivos no implementan la validación de certificados basada en RSA, puede omitir laAmazon
Root CA 1yAmazon Root CA 2Certificados de RSA Es posible que tenga que hacer clic con el botón
derecho en estos enlaces y seleccionar Guardar enlace como... para guardar estos certificados como
archivos.
• Si tiene problemas de validación de certificados de servidor al conectarse a su punto de enlace de ATS,
intente agregar el certificado Amazon Root CA correspondiente con firma cruzada a su almacén de
confianza. Es posible que tenga que hacer clic con el botón derecho en estos enlaces y seleccionar
Guardar enlace como... para guardar estos certificados como archivos.
• Con firma de cruzAmazon Root CA 1
• Con firma de cruzAmazon Root CA 2- Reservado para uso en un futuro.
• Con firma de cruzAmazon Root CA 3
• Con firma de cruzAmazon Root CA 4- Reservada para futura utilización.
• Si experimenta problemas de validación de certificados de servidor, es posible que el dispositivo
deba confiar explícitamente en la CA raíz. Intente añadir elStarfield Root CA Certificatea tu tienda de
confianza.
• Si sigues teniendo problemas después de ejecutar los pasos anteriores, ponte en contacto
conAWSSoporte para desarrolladores.
Note
Los certificados de CA tienen una fecha de vencimiento posterior que no pueden usar para
validar un certificado del servidor. Los certificados de CA podrían tener que reemplazarse antes
de su fecha de vencimiento. Asegúrese de que puede actualizar los certificados de entidad de
certificación raíz en todos sus dispositivos o clientes para asegurarse de que la conectividad se
mantenga y esté al día de las prácticas recomendadas de seguridad.
Note
Cuando se conecte a AWS IoT Core en el código del dispositivo, pase el certificado a la API que
está utilizando para realizar la conexión. La API que use variará según el SDK. Para obtener más
información, consulte los SDK de dispositivo de AWS IoT Core (p. 1489).
313
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
Estas identidades se pueden usar con dispositivos, aplicaciones móviles, web o de escritorio. Incluso los
puede utilizar un usuario que escribe comandos de interfaz de línea de comandos (CLI) de AWS IoT. Por lo
general,AWS IoTlos dispositivos utilizan certificados X.509, mientras que las aplicaciones móviles utilizan
las identidades de Amazon Cognito. Las aplicaciones web y de escritorio utilizan identidades federadas o
de IAM.AWS CLIlos comandos utilizan IAM. Para obtener más información sobre las identidades de IAM,
consulteIdentity and Access Management en AWS IoT (p. 407).
Se recomienda que cada dispositivo o cliente reciba un certificado único para permitir acciones de
administración de clientes precisas, incluida la revocación de certificados. Los dispositivos y los
clientes deben ser compatibles con la rotación y la sustitución de certificados para garantizar un buen
funcionamiento cuando los certificados caduquen.
Para obtener información sobre el uso de certificados X.509 para admitir más de unos pocos
dispositivos, consulte Aprovisionamiento de dispositivos (p. 886) para revisar las distintas opciones de
aprovisionamiento y administración de certificados que admite AWS IoT.
En esta sección se describe cómo administrar certificados X.509 en AWS IoT. Puede utilizar la consola de
AWS IoT o la AWS CLI para realizar estas operaciones de certificado:
Para obtener más información sobre los comandos de la AWS CLI que realizan estas operaciones,
consulte la Referencia de la CLI de AWS IoT.
314
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
que los otros sistemas, como el nombre de usuario y la contraseña o los tokens de portador, ya que la
clave privada jamás abandona el dispositivo.
AWS IoT autentica los certificados utilizando el modo de autenticación de cliente del protocolo TLS. La
compatibilidad con TLS está disponible en numerosos lenguajes de programación y sistemas operativos, y
se utiliza generalmente para cifrar datos. En la autenticación de clientes TLS,AWS IoTsolicita un certificado
de cliente X.509 y valida el estado del certificado yCuenta de AWScontra un registro de certificados. A
continuación, desafía al cliente para obtener una prueba de propiedad de la clave privada que corresponde
a la clave pública contenida en el certificado. AWS IoT requiere que los clientes envíen la extensión de
Indicación de nombre de servidor (SNI) al protocolo de Transport Layer Security (TLS). Para obtener más
información sobre la configuración de la extensión SNI, consulte Seguridad de transporte en AWS IoT
Core (p. 402).
Para facilitar una conexión de cliente segura y coherente conAWS IoTEn esencia, un certificado de cliente
X.509 debe poseer lo siguiente:
Puede crear certificados de cliente que usen la CA raíz de Amazon y puede usar sus propios certificados
de cliente firmados por otra autoridad de certificación (CA). Para obtener más información sobre el uso
de la consola de AWS IoT para crear certificados que utilicen la entidad de certificación de Amazon Root,
consulte Crear certificados de cliente de AWS IoT (p. 316). Para obtener más información sobre el uso
de sus propios certificados X.509, consulte Creación de sus propios certificados de cliente (p. 318).
La fecha y hora de caducidad de los certificados firmados por un certificado de entidad de certificación
se establecen en el momento de su creación. Los certificados X.509 generados por AWS IoT caducan a
medianoche UTC del 31 de diciembre de 2049 (2049-12-31T23:59:59Z).
AWS IoT Device Defenderpuede realizar auditorías en susCuenta de AWSy dispositivos que admiten
las mejores prácticas para la seguridad para el IoT. Esto incluye gestionar las fechas de caducidad
de los certificados X.509 firmados por su CA o la CA raíz de Amazon. Para obtener más información
sobre la gestión de la fecha de caducidad de un certificado, consulteEl certificado de dispositivo está por
caducar (p. 1035)yEl certificado de CA está por caducar (p. 1033).
Los certificados utilizados para el registro de varias cuentas son compatibles con eliot:Data-
ATS,iot:Data(legado),iot:Jobs, yiot:CredentialProvidertipos de punto de conexión.
315
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
Los dispositivos que utilizan el registro de varias cuentas deben enviar elExtensión de indicación de
nombre de servidor (SNI)al protocolo de seguridad de la capa de transporte (TLS) y proporcione la
dirección de opción completa en elhost_namecampo, cuando se conectan aAWS IoT.AWS IoTutiliza la
dirección del punto final enhost_namepara enrutar la conexión a la dirección correctaAWS IoTcuenta. Los
dispositivos existentes que no envíen una dirección de punto de enlace válida en host_name seguirán
funcionando, pero no podrán utilizar las características que requiere esta información. Para obtener más
información acerca de la extensión SNI y para aprender a identificar la dirección del punto de enlace del
campo host_name, consulte Seguridad de transporte en AWS IoT Core (p. 402).
1. Puede registrar los certificados del dispositivo en una CA. Puede registrar la CA firmante en varias
cuentas enSNI_ONLYconfigure y utilice esa CA para registrar el mismo certificado de cliente en varias
cuentas. Para obtener más información, consulte Registrar un certificado de CA en modo SNI_ONLY
(CLI): recomendado (p. 320).
2. Puede registrar los certificados de los dispositivos sin una CA. Consulte Registrar un certificado de
cliente firmado por una CA (CLI) no registrada (p. 328). El registro de una CA es opcional. No es
necesario que registre la CA con la que firmó los certificados del dispositivoAWS IoT.
• SHA256WITHRSA
• SHA384WITHRSA
• SHA512WITHRSA
• SHA256 CON RSA Y MGF1 (RSASSA-PSS)
• SHA384 CON RSA Y MGF1 (RSASSA-PSS)
• SHA512 CON RSA Y MGF1 (RSASSA-PSS)
• DSA_WITH_SHA256
• ECDSA-WITH-SHA256
• ECDSA-WITH-SHA384
• ECDSA-WITH-SHA512
Para obtener más información sobre la autenticación y la seguridad de los certificados, consulteCalidad de
la clave del certificado del dispositivo (p. 1010).
Note
La solicitud para firmar el certificado (CSR) debe incluir una clave para firmar. La clave
puede ser una clave RSA con una longitud de al menos 2048 bits o una clave ECC de las
curvas NIST P-256, NIST P-384 o NIST P-521. Para obtener más información, consulte
CreateCertificateFromCsr en la Guía de referencia de la API de AWS IoT.
En este tema se describe cómo crear un certificado de cliente firmado por la entidad de certificación
Amazon Root y descargar los archivos de certificado. Después de crear los archivos de certificado de
cliente, debe instalarlos en el cliente.
316
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
Note
Cada certificado de cliente X.509 proporcionado porAWS IoTcontiene los atributos de emisor y
asunto que usted estableció en el momento de crear el certificado. Los atributos del certificado
son inmutables solo una vez creado el certificado.
Puede utilizar la consola de AWS IoT o la AWS CLI para crear un certificado de AWS IoT firmado por la
entidad de certificación Amazon Root.
Si también necesita el archivo de certificado Amazon Root CA, esta página también incluye el enlace a
la página donde puede descargarlo.
5. Ahora se ha creado y registrado un certificado de cliente con AWS IoT. Debe activar el certificado
antes de usarlo en un cliente.
Para activar el certificado de cliente ahora, elijaActivar. Si no quiere activar el certificado en este
momento, consulteActivar un certificado de cliente (consola) (p. 330)para obtener información sobre
cómo activar el certificado más adelante.
Si no quieres adjuntar una política ahora, seleccionaListopara terminar. Puede asociar una política
más adelante.
Este comando crea archivos de clave privada, clave pública y certificado X.509 y registra y activa el
certificado con AWS IoT.
Si no desea activar el certificado al crearlo y registrarlo, este comando crea archivos de clave privada,
clave pública y certificado X.509 y registra el certificado, pero no lo activa. Activar un certificado de cliente
(CLI) (p. 330) describe cómo activar el certificado más adelante.
317
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
• En primer lugar, registre la CA que se utiliza para firmar los certificados de los clientes y, a continuación,
registre los certificados de los clientes individuales. Si desea registrar el dispositivo o el cliente
en su certificado de cliente cuando se conecte por primera vez aAWS IoT(también conocido
comoAprovisionamiento justo a tiempo), debe registrar la CA firmante enAWS IoTy active el registro
automático.
• Si no puede registrar la CA firmante, puede optar por registrar los certificados de cliente sin la CA. En
el caso de los dispositivos registrados sin CA, tendrás que presentarIndicación del nombre del servidor
(SNI)cuando los conecta aAWS IoT.
Note
Para registrar los certificados de cliente mediante una CA, debe registrar la CA firmante conAWS
IoT, no con ninguna otra CA de la jerarquía.
Note
Se puede registrar un certificado de CA enDEFAULTmodo por una sola cuenta en una región. Se
puede registrar un certificado de CA enSNI_ONLYmodo mediante varias cuentas en una región.
Para obtener más información acerca del uso de certificados X.509 para admitir más de unos pocos
dispositivos, consulte Aprovisionamiento de dispositivos (p. 886) para revisar las diferentes opciones de
administración y aprovisionamiento de certificados que admite AWS IoT.
Temas
• Administración de sus certificados de entidad de certificación (p. 318)
• Creación de un certificado de cliente mediante el certificado de entidad de certificación (p. 324)
En esta sección se describen las tareas comunes para administrar sus propios certificados de entidad de
certificación.
Puede registrar su autoridad para firmar enAWS IoTsi utiliza certificados de cliente firmados por una CA
queAWS IoTno reconoce.
Si desea que los clientes registren automáticamente sus certificados de cliente con AWS IoT la primera vez
que se conectan, la entidad de certificación que firmó los certificados de cliente debe estar registrada con
318
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
AWS IoT. De lo contrario, no es necesario registrar el certificado de entidad de certificación que firmó los
certificados de cliente.
Note
Se puede registrar un certificado de CA enDEFAULTmodo por una sola cuenta en una región. Se
puede registrar un certificado de CA enSNI_ONLYmodo mediante varias cuentas en una región.
Temas:
• Creación de un certificado de entidad de certificación (p. 319)
• Registro de su certificado de entidad de certificación (p. 319)
• Desactivar un certificado de entidad de certificación (p. 323)
2. Utilice la clave privada del par de claves para generar un certificado de CA.
319
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
Requisitos previos
Para ver el estado del certificado de CA, utilice ladescribe-ca-certificatecomando. Para obtener más
información, consulte describe-ca-certificate en la Referencia de los comandos de AWS CLI.
Requisitos previos
320
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
3. Cree una solicitud de firma de certificado (CSR) para el certificado de verificación de clave privada.
Establezca el campo Common Name del certificado en el registrationCode devuelto por get-
registration-code.
5. Registre el certificado de CA en AWS IoT. Introduzca el nombre del archivo del certificado de CA y el
nombre del archivo del certificado de verificación de clave privada alregister-ca-certificatecomando, de
la siguiente manera. Para obtener más información, consulte register-ca-certificate en la Referencia de
los comandos de AWS CLI.
321
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
--verification-cert file://verification_cert_filename.pem
Para ver el estado del certificado de CA, utilice ladescribe-ca-certificatecomando. Para obtener más
información, consulte describe-ca-certificate en la Referencia de los comandos de AWS CLI.
Para usar la interfaz de línea de comandos para crear un certificado de verificación de CA para
registrar su certificado de CA en la consola
322
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
En elCommon NameEn el campo, pegue el código de registro que copió en el paso anterior.
6. Una vez que se complete el comando OpenSSL, debería tener estos archivos listos para usarlos
cuando regrese a la consola.
Cuando un certificado de una entidad de certificación (CA) está habilitado para el registro de certificados
de cliente,AWS IoTcomprueba el certificado de la CA para asegurarse de que la CA esACTIVE. Si el
323
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
certificado de entidad de certificación es INACTIVE, AWS IoT no permite que se registre el certificado de
cliente.
Al configurar el certificado de CA enINACTIVE, impide que los nuevos certificados de cliente emitidos por
la CA se registren automáticamente.
Note
Todos los certificados de dispositivo registrados que haya firmado el certificado de entidad de
certificación en riesgo siguen funcionando hasta que revoque explícitamente cada uno de ellos.
Utilice el comando list-certificates-by-ca para obtener una lista de todos los certificados de cliente
registrados firmados por la entidad de certificación especificada. Por cada certificado de cliente firmado
por el certificado de entidad de certificación especificado, puede utilizar el comando update-certificate para
revocar el certificado de cliente y evitar que este se use.
Utilice el comando describe-ca-certificate para ver el estado del certificado de entidad de certificación.
324
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
En este punto, se ha creado el certificado de cliente, pero aún no se ha registrado con AWS IoT. Para
obtener información acerca de cómo y cuándo registrar el certificado de cliente, consulte Registrar un
certificado de cliente (p. 325).
Si desea que sus clientes y dispositivos registren sus certificados de cliente cuando se conectan por
primera vez, debe usar Registro de su certificado de entidad de certificación (p. 319) para firmar el
certificado de cliente con AWS IoT en las regiones en las que desea usarlo. La entidad de certificación de
Amazon Root se registra automáticamente en AWS IoT.
Los certificados de cliente se pueden compartir conCuentas de AWSy regiones. Los procedimientos de
estos temas deben realizarse en cada cuenta y región en la que desee utilizar el certificado de cliente. El
registro de un certificado de cliente en una cuenta o región no es reconocido automáticamente por otra.
325
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
Note
Los clientes que utilizan el protocolo Transport Layer Security (TLS) para conectarse a AWS IoT
deben admitir la extensión de indicación de nombre de servidor (SNI) para TLS. Para obtener más
información, consulte Seguridad de transporte en AWS IoT Core (p. 402).
Temas
• Registrar manualmente un certificado de cliente (p. 326)
• Registre un certificado de cliente cuando el cliente se conecte aAWS IoT just-in-time registro
(JITR) (p. 328)
Puede registrar un certificado de cliente manualmente mediante la consola de AWS IoT y la AWS CLI.
Los procedimientos de este tema deben realizarse en cada cuenta y región en la que desee utilizar el
certificado de cliente. Los certificados de cliente se pueden compartir entreCuenta de AWSs y regiones,
pero solo si el certificado de cliente está firmado por una entidad de certificación (CA) que NO esté
registrada enAWS IoT.
Antes de realizar este procedimiento, asegúrese de que tiene el archivo.pem del certificado de
cliente y de que el certificado de cliente fue firmado por una entidad de certificación que se ha
registrado con AWS IoT (p. 319).
326
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
Antes de realizar este procedimiento, asegúrese de que tiene el archivo .pem del certificado de
cliente.
Si no activa un certificado cuando se registra, Activar un certificado de cliente (consola) (p. 330)
describe cómo activarlo más adelante.
Tras elegir los archivos de certificado que desea registrar y seleccionar las acciones que se van a
realizar tras el registro, seleccioneRegistrar certificados.
Antes de realizar este procedimiento, asegúrese de que tiene el archivo .pem de la entidad de
certificación y el archivo .pem del certificado de cliente. El certificado de cliente debe estar firmado
por una entidad de certificación que haya registrado con AWS IoT (p. 319).
El certificado de cliente está registrado con AWS IoT, pero no está activo aún. Consulte Activar un
certificado de cliente (CLI) (p. 330) para obtener información sobre cómo activarlo más adelante.
También puede activar el certificado de cliente cuando lo registre utilizando este comando.
Para obtener más información acerca de cómo activar el certificado para que se pueda utilizar para
conectarse a AWS IoT, consulte Activar o desactivar un certificado de cliente (p. 330)
327
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
Antes de llevar a cabo este procedimiento, asegúrese de que tiene el archivo .pem del certificado.
El certificado de cliente está registrado con AWS IoT, pero no está activo aún. Consulte Activar un
certificado de cliente (CLI) (p. 330) para obtener información sobre cómo activarlo más adelante.
También puede activar el certificado de cliente cuando lo registre utilizando este comando.
Para obtener más información sobre la activación del certificado de forma que se puede utilizar para
conectarse aAWS IoT, verActivar o desactivar un certificado de cliente (p. 330).
Registre un certificado de cliente cuando el cliente se conecte aAWS IoT just-in-time registro
(JITR)
Puede configurar un certificado de entidad de certificación para habilitar los certificados de cliente con
los que ha firmado para que se registren automáticamente con AWS IoT la primera vez que el cliente se
conecta a AWS IoT.
Para registrar certificados de cliente cuando un cliente se conecta a AWS IoT por primera vez, debe
habilitar el certificado de entidad de certificación para el registro automático y configurar la primera
conexión del cliente para proporcionar los certificados necesarios.
Note
Si ya ha registrado su certificado de entidad de certificación con AWS IoT, utilice el comando update-
ca-certificate para establecer autoRegistrationStatus del certificado de entidad de certificación en
ENABLE.
328
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
Utilice el comando describe-ca-certificate para ver el estado del certificado de entidad de certificación.
Cuando un cliente intenta conectarse aAWS IoTpor primera vez, el certificado de cliente firmado por
su certificado de CA debe estar presente en el cliente durante el apretón de manos de Transport Layer
Security (TLS).
Cuando el cliente se conecta aAWS IoT, utilice el certificado de cliente que creó enCrearAWS
IoTcertificados de clienteoCrear sus propios certificados de cliente.AWS IoTreconoce el certificado
de CA como un certificado de CA registrado, registra el certificado de cliente y establece su estado
enPENDING_ACTIVATION. Esto significa que el certificado de cliente se registró automáticamente y que
está a la espera de su activación. El estado del certificado de cliente debe ser ACTIVE antes de que se
pueda usar para conectarse a AWS IoT. MiraActivar o desactivar un certificado de cliente (p. 330)para
obtener información sobre la activación de un certificado de cliente.
Note
Puede aprovisionar dispositivos medianteAWS IoT Core just-in-timefunción de registro (JITR) sin
tener que enviar toda la cadena de confianza de la primera conexión de los dispositivos aAWS
IoT Core. La presentación del certificado de CA es opcional, pero se requiere el dispositivo para
enviar elIndicación del nombre del servidor (SNI)extensión cuando se conectan.
Cuando AWS IoT registra automáticamente un certificado o cuando un cliente presenta un certificado en
estado PENDING_ACTIVATION, AWS IoT publica un mensaje en el tema MQTT siguiente:
$aws/events/certificates/registered/caCertificateId
{
"certificateId": "certificateId",
"caCertificateId": "caCertificateId",
"timestamp": timestamp,
"certificateStatus": "PENDING_ACTIVATION",
"awsAccountId": "awsAccountId",
"certificateRegistrationTimestamp": "certificateRegistrationTimestamp"
}
Puede crear una regla que escuche este tema y realice algunas acciones. Se recomienda crear una regla
Lambda que compruebe que el certificado del cliente no está en una lista de revocación de certificados
(CRL), active el certificado y cree y adjunte una política al certificado. La política determina a qué recursos
puede tener acceso el cliente. Para obtener más información sobre cómo crear una regla de opción que
329
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
Si se produce algún error o excepción durante el registro automático de los certificados de cliente,AWS
IoTenvía eventos o mensajes a sus inicios de sesión CloudWatch Registros. Para obtener más información
sobre la configuración de los registros de su cuenta, consulte laAmazon CloudWatch documentación.
Puede crear y registrar certificados de cliente sin activarlos para que no se puedan usar hasta que desee
usarlos. También puede desactivar los certificados de cliente activos para deshabilitarlos temporalmente.
Por último, puede revocar certificados de cliente para evitar que se utilicen en el futuro.
Si el comando se realizó correctamente, el estado del certificado será ACTIVE. Ejecute describe-certificate
para ver el estado del certificado.
330
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
Si el comando se realizó correctamente, el estado del certificado será INACTIVE. Ejecute describe-
certificate para ver el estado del certificado.
Para completar estos procedimientos, debe haber creado ya el objeto o la política que desea
asociar al certificado.
El certificado autentica un dispositivo conAWS IoTpara que pueda conectarse. Al adjuntar el certificado
a un recurso de cosa se establece la relación entre el dispositivo (mediante el certificado) y el recurso
de cosa. Para autorizar al dispositivo a funcionarAWS IoTacciones, como permitir que el dispositivo se
conecte y publique mensajes, se debe adjuntar una política adecuada al certificado del dispositivo.
El objeto debería aparecer ahora en la lista de objetos de la página de detalles del certificado.
331
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
3. En la lista de certificados, busque el certificado al que desea asociar una política, elija el icono de
puntos suspensivos para abrir el menú de opciones del certificado y elija Attach policy (Asociar
política).
4. En la ventana emergente, busque el nombre de la política que desee adjuntar al certificado, seleccione
su casilla de verificación y elijaAdjuntar.
El objeto de política debería aparecer ahora en la lista de políticas de la página de detalles del certificado.
La AWS CLI proporciona el comando attach-policy para asociar un objeto de política a un certificado.
Una vez revocado un certificado, su estado no se puede cambiar. Es decir, el estado del
certificado no se puede cambiar aActiveo cualquier otro estado.
332
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
--new-status REVOKED
Si el comando se realizó correctamente, el estado del certificado será REVOKED. Ejecute describe-
certificate para ver el estado del certificado.
El certificado debe estar desactivado y separado de todas las políticas y elementos antes de iniciar la
transferencia.
2. the section called “Aceptar o rechazar la transferencia de un certificado” (p. 334)
La cuenta receptora debe aceptar o rechazar explícitamente el certificado transferido. Una vez que la
cuenta receptora acepte el certificado, este debe activarse antes de su uso.
3. the section called “Cancelar un certificado” (p. 335)
Puede empezar a transferir un certificado a otroCuenta de AWSmediante elAWS IoTconsolao elAWS CLI.
Para completar este procedimiento, necesitará el ID del certificado que desea transferir.
Realice este procedimiento desde la cuenta con el certificado que desee transferir.
Elija el certificado con unActivooInactivoel estado que desee transferir y abra su página para firmar.
3. En el certificadoDetallespágina, en elAccionesmenú, si elDesactivaresta opción está disponible, elija
laDesactivaropción de desactivar el certificado.
4. En el certificadoDetallespágina, en el menú de la izquierda, seleccionaPolíticas.
5. En el certificadoPolíticaspágina, si hay alguna política adjunta al certificado, separe cada una de ellas
abriendo el menú de opciones de la política y seleccionandoSeparar.
333
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
La consola debe mostrar un mensaje que indica el éxito o el fracaso de la transferencia. Si se inició la
transferencia, el estado del certificado se actualiza aTransferido.
Realice este procedimiento desde la cuenta con el certificado que desee transferir.
Para completar este procedimiento, necesitará el ID del certificado que se transfirió a su cuenta.
334
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
Realice este procedimiento desde la cuenta que recibe el certificado que se transfirió.
Elija el certificado con un estado deTransferencia de pendienteque quiera aceptar o rechazar y abra su
página para firmar.
3. En el certificadoDetallespágina, en elAccionesmenú
Cancelar un certificado
Puede cancelar la transferencia de un certificado antes de que se haya aceptado mediante elAWS
IoTconsolao elAWS CLI.
Realice este procedimiento desde la cuenta que inició la transferencia del certificado.
335
AWS IoT Core Guía para desarrolladores
Autenticación del cliente
Realice este procedimiento desde la cuenta que inició la transferencia del certificado.
Las funciones de IAM también permitenAWS IoTpara acceder a otrosAWSlos recursos de su cuenta a
su nombre. Por ejemplo, si desea que un dispositivo publique su estado en una tabla de DynamoDB,
las funciones de IAM permitenAWS IoTpara interactuar con Amazon DynamoDB. Para obtener más
información, consulte Roles de IAM.
Para las conexiones de agentes de mensajes a través de HTTP,AWS IoTautentica a los usuarios, grupos y
funciones mediante el proceso de firma de la versión 4 de Signature Version 4. Para obtener información,
consulteFirmandoAWSEl API.
Cuando se usaAWSSignature Version 4 conAWS IoT, los clientes deben admitir lo siguiente en su
implementación de TLS:
• TLS 1.2
• Validación de la firma de certificado SHA-256 RSA
• Uno de los conjuntos de cifrado de la sección de compatibilidad del conjunto de cifrado TLS
Para obtener información, consulte Identity and Access Management en AWS IoT (p. 407).
Para usar Amazon Cognito Identity, debe definir un grupo de identidades de Amazon Cognito asociado a
un rol de IAM. La función de IAM está asociada a una política de IAM que concede permiso de acceso a
las identidades de su grupo de identidadesAWSrecursos como las llamadasAWSservicios.
Amazon Cognito Identity crea identidades autenticadas y no autenticadas. Las identidades no autenticadas
se utilizan para los usuarios invitados de una aplicación móvil o web que desean usar la aplicación sin
iniciar sesión. A los usuarios no autenticados se les conceden únicamente los permisos especificados en la
política de IAM asociada al grupo de identidades.
336
AWS IoT Core Guía para desarrolladores
Autenticación y autorización a la medida
Al utilizar identidades autenticadas, además de la política de IAM asociada al grupo de identidades, debe
adjuntar unaAWS IoTpolítica para una identidad de Amazon Cognito mediante el AttachPolicyUtilice la API
y otorgue permisos a un usuario individual de suAWS IoTsolicitud Puede utilizar elAWS IoTpolítica para
asignar permisos detallados a clientes específicos y sus dispositivos.
Los usuarios autenticados y no autenticados son tipos de identidad diferentes. Si no adjunta unaAWS
IoTpolítica de Amazon Cognito Identity, un usuario autenticado no pasa la autorización enAWS IoTy
no tiene acceso aAWS IoTrecursos y acciones. Para obtener más información sobre la creación
de políticas para las identidades de Amazon Cognito, consulteEjemplos de política de publicación/
suscripción (p. 369)yAutorización con identidades de Amazon Cognito (p. 392).
Por ejemplo, si va a migrar dispositivos existentes sobre el terreno aAWS IoT Corey estos dispositivos
utilizan un token de portador personalizado o un nombre de usuario y contraseña de MQTT para
autenticarse, puede migrarlos aAWS IoT Coresin tener que proporcionarles nuevas identidades. Puede
utilizar la autenticación personalizada con cualquiera de los protocolos de comunicación queAWS IoT
Coresoportes. Para obtener más información sobre los protocolos queAWS IoT Coreadmite, consultethe
section called “Protocolos de comunicación de dispositivos” (p. 87).
Temas
• Comprender el flujo de trabajo de autenticación personalizada (p. 337)
• Creación y administración de autorizadores personalizados (p. 339)
• ¿Estás conectándote aAWS IoT Coremediante autenticación personalizada (p. 344)
• Solución de problemas con sus autorizadores (p. 347)
337
AWS IoT Core Guía para desarrolladores
Autenticación y autorización a la medida
1. Un dispositivo se conecta al de un clienteAWS IoT Corepunto final de datos mediante uno de losthe
section called “Protocolos de comunicación de dispositivos” (p. 87). El dispositivo transfiere las
credenciales a los campos del encabezado de la solicitud o a los parámetros de consulta (para
HTTP Publish o MQTT) a través de WebSockets protocolos) o en el campo de nombre de usuario y
contraseña del mensaje MQTT CONNECT (para MQTT y MQTT over WebSockets protocolos).
2. AWS IoT Corecomprueba si hay una de estas dos condiciones:
• La solicitud entrante especifica un autorizador.
• ElAWS IoT CoreEl punto final de datos que recibe la solicitud tiene un autorizador predeterminado
configurado para ello.
SiAWS IoT Coreencuentra un autorizador de alguna de estas formas,AWS IoT Corepara activar la
función para firmar, para ejecutar la función para firmar.
3. (Opcional) Si has activado la firma con token,AWS IoT Corevalida la firma de la solicitud mediante
la clave pública almacenada en el autorizador antes de activar la función Lambda. Si la validación
falla,AWS IoT Coredetiene la solicitud sin invocar la función Lambda.
4. La función Lambda recibe las credenciales y los metadatos de conexión de la solicitud y toma una
decisión de autenticación.
5. La función Lambda devuelve los resultados de la decisión de autenticación y unAWS IoT
Coredocumento de política que especifica qué acciones están permitidas en la conexión. La función
Lambda también devuelve información que especifica la frecuenciaAWS IoT Corerevalida las
credenciales de la solicitud mediante la invocación de la función Lambda.
6. AWS IoT Coreevalúa la actividad de la conexión con la política que ha recibido de la función Lambda.
Consideraciones de escalado
Como una función de Lambda gestiona la autenticación y la autorización de su autorizador, la función está
sujeta a los límites de precios y servicios de Lambda, como la tasa de ejecución simultánea. Para obtener
338
AWS IoT Core Guía para desarrolladores
Autenticación y autorización a la medida
más información sobre los precios de Lambda, consulteEl precio de Lambda. Puede gestionar la carga de
la función Lambda ajustando larefreshAfterInSecondsydisconnectAfterInSecondsparámetros
en la respuesta de la función Lambda. Para obtener más información sobre el contenido de la respuesta de
la función de opción de opción, consultethe section called “Definte tu función Lambda” (p. 339).
Note
Si deja habilitada la firma, puede evitar que clientes no reconocidos activen su Lambda de forma
excesiva. Tenga esto en cuenta antes de deshabilitar el inicio de sesión en su autorizador.
Note
Lambda le cobra por el número de veces que se ejecuta la función Lambda y por el tiempo que tarda
en ejecutarse el código de la función. Para obtener más información sobre los precios de Lambda,
consulteEl precio de Lambda. Para obtener más información sobre la creación de funciones para Lambda,
consulteGuía para desarrolladores de Lambda.
Note
Si deja habilitada la firma, puede evitar que clientes no reconocidos activen su Lambda de forma
excesiva. Tenga esto en cuenta antes de deshabilitar el inicio de sesión en su autorizador.
Note
339
AWS IoT Core Guía para desarrolladores
Autenticación y autorización a la medida
{
"token" :"aToken",
"signatureVerified": Boolean, // Indicates whether the device gateway has validated the
signature.
"protocols": ["tls", "http", "mqtt"], // Indicates which protocols to expect for the
request.
"protocolData": {
"tls" : {
"serverName": "serverName" // The server name indication (SNI) host_name
string.
},
"http": {
"headers": {
"#{name}": "#{value}"
},
"queryString": "?#{name}=#{value}"
},
"mqtt": {
"username": "myUserName",
"password": "myPassword", // A base64-encoded string.
"clientId": "myClientId" // Included in the event only when the device sends
the value.
}
},
"connectionMetadata": {
"id": UUID // The connection ID. You can use this for logging.
},
}
La función Lambda debe usar esta información para autenticar la conexión entrante y decidir qué acciones
se permiten en la conexión. La función debe enviar una respuesta que contenga los siguientes valores.
El siguiente objeto JSON contiene un ejemplo de una respuesta que la función Lambda puede enviar.
{
"isAuthenticated":true, //A Boolean that determines whether client can connect.
"principalId": "xxxxxxxx", //A string that identifies the connection in logs.
"disconnectAfterInSeconds": 86400,
"refreshAfterInSeconds": 300,
"policyDocuments": [
340
AWS IoT Core Guía para desarrolladores
Autenticación y autorización a la medida
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "iot:Publish",
"Effect": "Allow",
"Resource": "arn:aws:iot:us-east-1:<your_aws_account_id>:topic/
customauthtesting"
}
]
}
]
}
ElpolicyDocumentel valor debe contener un valor válidoAWS IoT Coredocumento de políticas. Para
obtener más información sobreAWS IoT Corepolíticas, consultethe section called “Políticas de AWS IoT
Core” (p. 351). En MQTT sobre TLS y MQTT sobre WebSocketsconexiones,AWS IoT Coreguarda en
caché esta política durante el intervalo especificado en el valor delrefreshAfterInSecondscampo
En el caso de las conexiones HTTP, se invoca la función Lambda para cada solicitud de autorización,
a menos que su dispositivo utilice conexiones HTTP persistentes (también denominadas HTTP
keep-alive o reutilización de conexiones HTTP). Puede optar por habilitar el almacenamiento en
caché al configurar el autorizador. Durante este intervalo,AWS IoT Coreautoriza acciones en una
conexión establecida contra esta política en caché sin volver a activar la función Lambda. Si se
producen errores durante la autenticación personalizada,AWS IoT Coretermina la conexión.AWS IoT
Coretambién termina la conexión si ha estado abierta durante más tiempo que el valor especificado
endisconnectAfterInSecondsparámetro.
El siguiente JavaScript contiene un ejemplo de función Lambda de Node.js que busca una contraseña
en el mensaje MQTT Connect con un valor detesty devuelve una política que concede permiso para
conectarse aAWS IoT Corecon un cliente llamadomyClientNamey publique en un tema que contenga el
mismo nombre de cliente. Si no encuentra la contraseña esperada, devuelve una política que deniega esas
dos acciones.
341
AWS IoT Core Guía para desarrolladores
Autenticación y autorización a la medida
connectStatement.Effect = effect;
connectStatement.Resource = ["arn:aws:iot:us-east-1:123456789012:client/myClientName"];
publishStatement.Action = ["iot:Publish"];
publishStatement.Effect = effect;
publishStatement.Resource = ["arn:aws:iot:us-east-1:123456789012:topic/telemetry/
myClientName"];
policyDocument.Statement[0] = connectStatement;
policyDocument.Statement[1] = publishStatement;
authResponse.policyDocuments = [policyDocument];
authResponse.disconnectAfterInSeconds = 3600;
authResponse.refreshAfterInSeconds = 300;
return authResponse;
}
La función Lambda anterior devuelve el siguiente JSON cuando recibe la contraseña esperada detesten
el mensaje MQTT Connect. Los valores delpasswordyprincipalIdlas propiedades serán los valores
del mensaje MQTT Connect.
{
"password": "password",
"isAuthenticated": true,
"principalId": "principalId",
"policyDocuments": [
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "iot:Connect",
"Effect": "Allow",
"Resource": "*"
},
{
"Action": "iot:Publish",
"Effect": "Allow",
"Resource": "arn:aws:iot:region:accountId:topic/telemetry/${iot:ClientId}"
},
{
"Action": "iot:Subscribe",
"Effect": "Allow",
"Resource": "arn:aws:iot:region:accountId:topicfilter/telemetry/${iot:ClientId}"
},
{
"Action": "iot:Receive",
"Effect": "Allow",
"Resource": "arn:aws:iot:region:accountId:topic/telemetry/${iot:ClientId}"
}
]
}
],
"disconnectAfterInSeconds": 3600,
"refreshAfterInSeconds": 300
}
Creación de un autorizador
Crear un autorizador de Ja través deCreateAuthorizerAPI. El siguiente ejemplo describe el comando.
342
AWS IoT Core Guía para desarrolladores
Autenticación y autorización a la medida
[--token-key-name MyAuthorizerToken //The key used to extract the token from headers.
[--token-signing-public-keys FirstKey=
"-----BEGIN PUBLIC KEY-----
[...insert your public key here...]
-----END PUBLIC KEY-----"
[--status ACTIVE]
[--tags <value>]
[--signing-disabled | --no-signing-disabled]
Tras crear la función Lambda y el autorizador personalizado, debe conceder explícitamente laAWS IoT
Corepermiso para invocar la función en su nombre. Puede hacerlo con el siguiente comando.
Las siguientes pestañas muestran cómo usar laAWS CLIpara probar su autorizador.
Unix-like
Windows CMD
Windows PowerShell
El valor deltoken-signatureel parámetro es el token firmado. Para obtener más información sobre
cómo obtener este valor a través dethe section called “Firmar el token” (p. 346).
Si su autorizador utiliza un nombre de usuario y una contraseña, puede pasar esta información
mediante la--mqtt-contextparámetro. Las siguientes pestañas muestran cómo usar
laTestInvokeAuthorizerAPI para enviar un objeto JSON que contiene un nombre de usuario, una
contraseña y un nombre de cliente a tu autorizador personalizado.
343
AWS IoT Core Guía para desarrolladores
Autenticación y autorización a la medida
Unix-like
Windows CMD
Windows PowerShell
La contraseña debe estar codificada en base64. En el ejemplo siguiente se muestra cómo codificar una
contraseña en un entorno de tipo Unix.
Note
344
AWS IoT Core Guía para desarrolladores
Autenticación y autorización a la medida
dispositivos” (p. 87). Los datos de conexión que se transfieren a la función Lambda de su autorizador
dependen del protocolo que utilice. Para obtener más información sobre la creación de su función de
autorización de opción, consultethe section called “Definte tu función Lambda” (p. 339). En las secciones
siguientes, se explica cómo conectarse para autenticarse mediante cada protocolo compatible.
HTTPS
Dispositivos que envían datos aAWS IoT Coremediante elAPI de publicación de HTTPpueden pasar
credenciales a través de encabezados de solicitud o parámetros de consulta en sus solicitudes
HTTP POST. Los dispositivos pueden especificar un autorizador para invocarlo mediante elx-amz-
customauthorizer-nameparámetro de cabecera o consulta. Si tienes habilitada la firma mediante
token en tu autorizador, debes pasar eltoken-key-nameyx-amz-customauthorizer-signatureen
los encabezados de las solicitudes o en los parámetros de consulta. Tenga en cuenta que eltoken-
signatureel valor debe estar codificado a través de la URL a través de JavaScript desde dentro del
navegador.
Note
El autorizador del cliente para el protocolo HTTPS solo admite operaciones de publicación. Para
obtener más información sobre el protocolo HTTPS, consultethe section called “Protocolos de
comunicación de dispositivos” (p. 87).
Los siguientes ejemplos de solicitudes muestran cómo se transfieren estos parámetros tanto en los
encabezados de las solicitudes como en los parámetros de consulta.
MQTT
Dispositivos que se conectan aAWS IoT Coremediante una conexión MQTT pueden pasar las credenciales
a través delusernameypasswordcampos de mensajes MQTT. LosusernameDe forma opcional, el valor
también puede contener una cadena de consulta que pase valores adicionales (incluidos un token, una
firma y un nombre del autorizador) a su autorizador. Puede utilizar esta cadena de consulta si desea utilizar
un esquema de autenticación basado en fichas en lugar deusernameypasswordvalores.
Note
Los datos del campo contraseña están codificados en base64 medianteAWS IoT Core. La función
Lambda debe decodificarlo.
username?x-amz-customauthorizer-name=authorizer-name&x-amz-customauthorizer-
signature=token-signature&token-key-name=token-value
Para invocar un autorizador, los dispositivos que se conectan aAWS IoT Coremediante MQTT y la
autenticación personalizada deben conectarse al puerto 443. También deben pasar la extensión de
345
AWS IoT Core Guía para desarrolladores
Autenticación y autorización a la medida
opción de opción (ALPN) con un valor demqtty la extensión de indicación de nombre de servidor (SNI)
con el nombre de suAWS IoT Corepunto final de datos. Para evitar posibles errores, el valor dex-
amz-customauthorizer-signaturedebe estar codificado como URL. También recomendamos
encarecidamente que los valores dex-amz-customauthorizer-nameytoken-key-nameestar
codificado en URL. Para obtener más información sobre estos valores, consultethe section called
“Protocolos de comunicación de dispositivos” (p. 87). La V2AWS IoTSDK para dispositivos, SDK para
dispositivos móviles yAWS IoTCliente de dispositivo (p. 1489)puede configurar ambas extensiones.
• Mediante los encabezados de las solicitudes o los parámetros de consulta de la solicitud HTTP
UPGRADE para establecer la WebSockets conexión.
• A través delusernameypasswordcampos del mensaje MQTT CONNECT.
Si pasa las credenciales a través del mensaje de conexión de MQTT, se requieren las extensiones
TLS ALPN y SNI. Para obtener más información sobre estas extensiones, consultethe section called
“MQTT” (p. 345). En el ejemplo siguiente, se muestra cómo pasar las credenciales a través de la solicitud
de actualización de HTTP.
Firmar el token
Debe firmar el token con la clave privada del par de claves público-privadas que utilizó en elcreate-
authorizerllamada. En los ejemplos siguientes se muestra cómo crear la firma de opción mediante un
comando de tipo Unix y JavaScript. Utilizan el algoritmo hash SHA-256 para codificar la firma.
Command line
echo -n TOKEN_VALUE | openssl dgst -sha256 -sign PEM encoded RSA private key | openssl
base64
JavaScript
const k = crypto.createPrivateKey(key)
let sign = crypto.createSign('SHA256')
sign.write(t)
sign.end()
const s = sign.sign(k, 'base64')
346
AWS IoT Core Guía para desarrolladores
Autenticación y autorización a la medida
Antes de empezar a solucionar los problemas, revisarthe section called “Comprender el flujo de trabajo de
autenticación personalizada” (p. 337)para obtener una vista de alto nivel del proceso de autenticación
personalizada. Esto le ayuda a entender dónde buscar el origen de un problema.
En este tema se describen las dos áreas siguientes para que las investigue.
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "Id123",
"Effect": "Allow",
347
AWS IoT Core Guía para desarrolladores
Autenticación y autorización a la medida
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:us-east-1:111111111111:function:FunctionName",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:iot:us-east-1:111111111111:authorizer/
AuthorizerName"
},
"StringEquals": {
"AWS:SourceAccount": "111111111111"
}
}
}
]
}
4. Si ve invocaciones, compruebe que no haya errores. Un error podría indicar que la función Lambda no
gestiona correctamente el evento de conexión queAWS IoT Corele envía.
Para obtener información sobre cómo gestionar el evento en la función Lambda, consultethe section
called “Definte tu función Lambda” (p. 339). La función de prueba a través de laAWS Lambdaconsola
(https://console.aws.amazon.com/lambda/) para codificar de forma rígida los valores de prueba de la
función para asegurarse de que la función gestiona los eventos correctamente.
5. Si ve invocaciones sin errores, pero sus dispositivos no pueden conectarse (ni publicar, suscribirse
ni recibir mensajes), el problema podría deberse a que la política que devuelve la función Lambda
no concede permisos para las acciones que los dispositivos están intentando realizar. Realice los
siguientes pasos para determinar si hay algún problema con la política que devuelve la función.
a. Usa un Amazon CloudWatch Consulta Logs Insights para escanear los registros durante un
breve período de tiempo y comprobar si hay errores. La siguiente consulta de ejemplo ordena los
eventos por marca de tiempo y busca errores.
b. Actualice la función Lambda para registrar los datos a los que regresaAWS IoT Corey el evento
que activa la función. Puede usar estos registros para inspeccionar la política que crea la función.
6. Si ve invocaciones sin errores, pero sus dispositivos no pueden conectarse (ni publicar, suscribirse
ni recibir mensajes), otro motivo puede ser que la función Lambda supere el límite de tiempo de
espera. El límite de tiempo de espera de la función Lambda para el autorizador personalizado es de 5
segundos. Puedes comprobar la duración de la función a través de CloudWatch registros o métricas.
348
AWS IoT Core Guía para desarrolladores
Autorización
• Los clientes deben pasar un encabezado de nombre de host (HTTP o MQTT) WebSockets) o la
extensión TLS de indicación del nombre del servidor (HTTP, MQTT over WebSockets, MQTT) en todas
las solicitudes de autenticación personalizadas. En ambos casos, el valor transferido debe coincidir con
uno de los valores de su cuentaAWS IoT Corepuntos finales de datos. Estos son los puntos finales que
se devuelven al ejecutar los siguientes comandos de CLI.
• aws iot describe-endpoint --endpoint-type iot:Data-ATS
• aws iot describe-endpoint --endpoint-type iot:Data(para versiones heredadas)
VeriSign puntos finales)
• Los dispositivos que utilizan la autenticación personalizada para las conexiones MQTT también deben
pasar la extensión TLS de negociación de protocolos de capa de aplicación (ALPN) con un valor
demqtt.
• Actualmente, la autenticación personalizada solo está disponible en el puerto 443.
• Si la firma está habilitada (signingDisabledel campo es falso (en tu autorizador), busca los siguientes
problemas de firma.
• Asegúrese de pasar la firma para firmar en cualquiera de losx-amz-customauthorizer-
signatureencabezado o en un parámetro de cadena de consulta.
• Asegúrese de que el servicio no firme un valor distinto del token.
• Asegúrese de pasar el token al encabezado o parámetro de consulta que especificó en eltoken-
key-namecampo de tu autorizador.
• Asegúrese de que el nombre del autorizador que introduzca en elx-amz-customauthorizer-nameel
parámetro de cabecera o cadena de consulta es válido o tiene un autorizador predeterminado definido
para su cuenta.
Autorización
Autorización es el proceso de concesión de permisos a una identidad autenticada. Concedes permisos
enAWS IoT CoreusandoAWS IoT Corey políticas de IAM. En este tema se abordan las políticas de
AWS IoT Core. Para obtener más información sobre las políticas de IAM, consulteIdentity and Access
Management en AWS IoT (p. 407)yCómo AWS IoT funciona con IAM (p. 411).
Las políticas de AWS IoT Core determinan lo que puede hacer una identidad autenticada. Los dispositivos
y las aplicaciones móviles, web y de escritorio utilizan identidades autenticadas. Una identidad autenticada
puede ser incluso un usuario que ejecute comandos de la CLI de AWS IoT Core. Una identidad puede
ejecutar operaciones de AWS IoT Core solo si cuenta con una política que le conceda permiso para dichas
operaciones.
AmbosAWS IoT Corelas políticas y las políticas de IAM a través deAWS IoT Corepara controlar las
operaciones, una identidad (también denominadadirector de escuela) puede funcionar. El tipo de política
que utilice depende del tipo de identidad que esté utilizando para autenticarse en AWS IoT Core.
• La API del plano de control le permite realizar tareas administrativas, como crear o actualizar
certificados, objetos, reglas, etc.
• La API del plano de datos le permite enviar datos a AWS IoT Core y recibir datos de este servicio.
El tipo de política que utilice depende de si utiliza la API del plano de control o la del plano de datos.
349
AWS IoT Core Guía para desarrolladores
Autorización
En la tabla siguiente se muestran los tipos de identidad, los protocolos que utilizan y los tipos de políticas
que se pueden utilizar para la autorización.
Protocolo y
Tipo de
mecanismo de SDK Tipo de política
identidad
autenticación
MQTT sobre
TLS/TCP,
autenticación SDK de
Certificados Política de
mutua TLS dispositivos de
X.509 AWS IoT Core
(puerto 8883 o AWS IoT
† (p. 87)
443) )
Identidad
de Amazon
Cognito a IAM yAWS IoT
través de la Corepolíticas
autenticación
MQTT sobre de
HTTPS/
Identidad
WebSocket,AWSAutenticación
AWSSDK móvil
de Amazon
SigV4 (puerto
Cognito a
443) Política de IAM
través de la
cual no se ha
autenticado
IAM o identidad
Política de IAM
federada
HTTPS,AWSAutenticación Amazon
Signature Cognito, IAM
AWS CLI Política de IAM
versión 4 o identidad
(puerto 443) federada
HTTPS,
Sin
autenticación Certificados Política de
compatibilidad
mutua TLS X.509 AWS IoT Core
de SDK
(puerto 8443)
HTTPS sobre
SDK de Política de
autenticación Autorizador
dispositivos de autorizador
personalizada personalizado
AWS IoT personalizada
(Puerto 443)
Protocolo y
Tipo de
mecanismo de SDK Tipo de política
identidad
autenticación
HTTPSAWSAutenticación Identidad
Signature de Amazon Política de IAM
AWS CLI
versión 4 Cognito
(puerto 443)
350
AWS IoT Core Guía para desarrolladores
AWS Training and Certification
Protocolo y
Tipo de
mecanismo de SDK Tipo de política
identidad
autenticación
IAM o identidad
Política de IAM
federada
AWS IoT Corelas políticas se adjuntan a los certificados X.509, a las identidades de Amazon Cognito o
a los grupos de cosas. Las políticas de IAM se asocian a un usuario, grupo o rol de IAM. Si utiliza elAWS
IoTconsolaAWS IoT CoreCLI para adjuntar la política (a un certificado, Amazon Cognito Identity o grupo de
cosas), se utiliza unAWS IoT Corepolítica. De lo contrario, se utiliza una política de IAM.AWS IoT Corelas
políticas asociadas a un grupo de cosas se aplican a cualquier cosa dentro de ese grupo de cosas. Para
elAWS IoT Corepara que la política entre en vigor, laclientIdy el nombre de la cosa debe coincidir.
Las autorizaciones basadas en políticas son una herramienta muy eficaz. Le dan un control completo
sobre lo que un dispositivo, usuario o aplicación puede hacer en AWS IoT Core. Por ejemplo, tomemos el
caso de un dispositivo que se conecte con AWS IoT Core mediante un certificado. Puede permitir que el
dispositivo tenga acceso a todos los temas MQTT, o bien puede restringir su acceso a un único tema. O
tomemos, por ejemplo, el caso de un usuario que ejecute comandos de la CLI en una línea de comandos.
Si aplica una política, puede permitirle o denegarle el acceso a cualquier comando o recurso de AWS IoT
Core. También puede controlar el acceso de una aplicación a los recursos de AWS IoT Core.
Los cambios que se realizan en una política pueden tardar unos minutos en entrar en vigor debido a la
formaAWS IoTguarda en caché los documentos de la política. Es decir, es posible que el acceso a un
recurso al que se haya concedido acceso recientemente tarde unos minutos y que se pueda acceder a un
recurso durante varios minutos después de que se haya revocado su acceso.
Las políticas de AWS IoT Core le permiten controlar el acceso al plano de datos de AWS IoT Core. ElAWS
IoT Coreel plano de datos consiste en operaciones que le permiten conectarse alAWS IoT Coreagente de
mensajes, envía y recibe mensajes MQTT y obtén o actualiza Device Shadow de algo.
Una política de AWS IoT Core es un documento JSON que contiene una o varias declaraciones de política.
Cada instrucción contiene:
Los cambios realizados en una política pueden tardar entre 6 y 8 minutos en hacerse efectivos debido a
la formaAWS IoTguarda en caché los documentos de la política. Es decir, es posible que el acceso a un
recurso al que se haya concedido acceso recientemente tarde unos minutos y que se pueda acceder a un
recurso durante varios minutos después de que se haya revocado su acceso.
351
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
AWS IoT Corelas políticas se pueden adjuntar a los certificados X.509, a las identidades de Amazon
Cognito y a los grupos de cosas. Las políticas asociadas a un grupo de cosas se aplican a cualquier
cosa dentro de ese grupo. Para que la política entre en vigor, laclientIdy el nombre de la cosa debe
coincidir.AWS IoT Corelas políticas siguen la misma lógica de evaluación de políticas que las políticas de
IAM. Todas las políticas se deniegan de forma predeterminada. Un permiso explícito en cualquier política
basada en la identidad o en los recursos anula el comportamiento predeterminado. Una denegación
explícita en cualquier política invalida cualquier permiso concedido. Para obtener más información,
consulteLógica de evaluación de políticasen elAWS Identity and Access ManagementGuía del usuario.
Temas
• Acciones de política de AWS IoT Core (p. 352)
• Recursos de acción de AWS IoT Core (p. 354)
• Variables de las políticas de AWS IoT Core (p. 356)
• Prevención del suplente confuso entre servicios (p. 362)
• Ejemplos de políticas de AWS IoT Core (p. 363)
• Autorización con identidades de Amazon Cognito (p. 392)
iot:Connect
Representa el permiso para conectarse con el agente de mensajes de AWS IoT Core. El permiso
iot:Connect se comprueba cada vez que se envía una solicitud CONNECT al agente. El agente
de mensajes no permite que dos clientes con el mismo ID de cliente permanezcan conectados al
mismo tiempo. Después de que el segundo cliente se conecta, el agente cierra la conexión existente.
Rotariot:Connectpermiso para garantizar que solo los clientes autorizados que utilicen un ID de
cliente específico puedan conectarse.
iot:GetRetainedMessage
Representa el permiso para obtener el contenido de un único mensaje retenido. Los mensajes
retenidos son los mensajes que se publicaron con el indicador RETAIN establecido y almacenados
porAWS IoT Core. Para obtener el permiso para obtener una lista de todos los mensajes retenidos de
la cuenta, consulteiot:ListRetainedMessages (p. 352).
iot:ListRetainedMessages
Representa el permiso para recuperar información resumida sobre los mensajes retenidos de la
cuenta, pero no el contenido de los mensajes. Los mensajes retenidos son los mensajes que se
publicaron con el indicador RETAIN establecido y almacenados porAWS IoT Core. El ARN del recurso
especificado para esta acción debe ser*. Para obtener el contenido de un único mensaje retenido,
consulteiot:GetRetainedMessage (p. 352).
iot:Publish
Representa el permiso para publicar un tema de MQTT. Este permiso se comprueba cada vez que
se envía una solicitud PUBLISH al agente. Puede usarlo para permitir a los clientes publicar según
patrones de tema específicos.
Note
352
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
iot:Receive
Representa el permiso para recibir un mensaje de AWS IoT Core. Eliot:Receiveel permiso se
confirma cada vez que se entrega un mensaje a un cliente. Como este permiso se comprueba en cada
entrega, puedes usarlo para revocar los permisos de los clientes que estén suscritos actualmente a un
tema.
IoT:RetainPublish
Representa el permiso para publicar un mensaje MQTT con el indicador RETAIN activado.
Note
Representa el permiso para suscribirse a un filtro de temas. Este permiso se comprueba cada vez que
se envía una solicitud SUBSCRIBE al agente. Úselo para permitir a los clientes suscribirse a temas
que coincidan con patrones temáticos específicos.
Note
iot:DeleteThingShadow
Note
Las acciones de política de ejecución de trabajo se aplican únicamente al punto de enlace HTTP
TLS. Si utiliza el punto de enlace MQTT, debe utilizar las acciones de política MQTT definidas en
este tema.
Para ver un ejemplo de una política de ejecución de tareas que lo demuestre, consultethe section
called “Ejemplo de política laboral básica” (p. 391)que funciona con el protocolo MQTT.
353
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
iot:DescribeJobExecution
Representa el permiso para recuperar una ejecución de trabajo para un objeto determinado. El
permiso iot:DescribeJobExecution se comprueba cada vez que se presenta una solicitud para
obtener la ejecución de un trabajo.
iot:GetPendingJobExecutions
Representa el permiso para recuperar la lista de trabajos que no están en un estado final para un
objeto. El permiso iot:GetPendingJobExecutions se comprueba cada vez que se presenta una
solicitud para recuperar la lista.
iot:UpdateJobExecution
Representa el permiso para obtener e iniciar la próxima ejecución de trabajo pendiente para un objeto,
es decir, para actualizar una ejecución de trabajo con un estado QUEUED a IN_PROGRESS. El
permiso iot:StartNextPendingJobExecution se comprueba cada vez que se presenta una
solicitud para iniciar la siguiente ejecución de trabajo pendiente.
iot:AssumeRoleWithCertificate
Representa el permiso de llamarAWS IoT Coreproveedor de credenciales para asumir una función de
IAM con una autenticación basada en certificados. Eliot:AssumeRoleWithCertificateel permiso
se comprueba cada vez que se hace una solicitud aAWS IoT Coreproveedor de credenciales para
asumir una función.
arn:aws:iot:region:AWS-account-ID:Resource-type/Resource-name
En la tabla siguiente se muestra el recurso que debe especificarse para cada tipo de acción:
iot:DeleteThingShadow
thing El nombre de la cosa y arn:aws:iot:us-
el nombre de la sombra, east-1:123456789012:thing/
si corresponde thingOne
arn:aws:iot:us-
east-1:123456789012:thing/
thingOne/shadowOne
354
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
iot:DescribeJobExecution
thing El nombre de la cosa arn:aws:iot:us-
east-1:123456789012:thing/
thingOne
iot:GetPendingJobExecutions
thing El nombre de la cosa arn:aws:iot:us-
east-1:123456789012:thing/
thingOne
iot:GetRetainedMessage
topic El tema de un mensaje arn:aws:iot:us-
retenido east-1:123456789012:topic/
myTopicName
Todos
iot:ListNamedShadowsForThing Todos *
Todos
iot:ListRetainedMessages Todos *
iot:StartNextPendingJobExecution
thing El nombre de la cosa arn:aws:iot:us-
east-1:123456789012:thing/
thingOne
iot:UpdateJobExecution
thing ¿El nombre de la cosa arn:aws:iot:us-
east-1:123456789012:thing/
thingOne
iot:UpdateThingShadow
thing El nombre de la cosa y arn:aws:iot:us-
el nombre de la sombra, east-1:123456789012:thing/
si corresponde thingOne
arn:aws:iot:us-
east-1:123456789012:thing/
thingOne/shadowOne
iot:AssumeRoleWithCertificate
rolealias Un alias de rol que arn:aws:iot:us-
apunta a un ARN de rol east-1:123456789012:rolealias
CredentialProviderRole_alias
355
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
AWS IoT Corelas políticas pueden utilizar caracteres comodín y seguir una convención similar a la de las
políticas de IAM. El insertar*(asterisco) en la cadena se puede tratar como un comodín, ya que coincide
con cualquier carácter. Por ejemplo, puede utilizar*para describir varios nombres de temas de MQTT en
elResourceatributo de una política. Los personajes+y#se tratan como cadenas literales en una política.
Para ver un ejemplo de política que muestre cómo usar los comodines, consulteUsar caracteres de
comodín a MQTT aAWS IoT Corepolíticas (p. 370).
Puede usar también las variables de política predefinidas con valores fijos para representar caracteres
que de otro modo tendrían un significado especial. Estos caracteres especiales incluyen$(*),$(?),
y$($). Para obtener más información sobre las variables de política y los caracteres especiales,
consulteElementos de la política de IAM a través de las variables y las etiquetasyCreación de una
condición con varias claves o valores.
Temas
• Variables de política de AWS IoT Core básicas (p. 356)
• Variables de la política de objeto (p. 357)
• Variables de política de AWS IoT Core de certificado X.509 (p. 358)
• iot:ClientId: el ID de cliente que se utiliza para conectarse con el agente de mensajes de AWS IoT
Core.
• aws:SourceIp: la dirección IP del cliente conectado con el agente de mensajes de AWS IoT Core.
Lo siguienteAWS IoT Corela política muestra una política que utiliza variables de
política.aws:SourceIpse puede usar en el elemento Condición de su política para permitir que los
directores realicen solicitudes de API solo dentro de un rango de direcciones específico. Para ver ejemplos,
consulte Autorizar a los usuarios y los servicios en la nube a usar Jobs AWS IoT (p. 827).
{
"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": [
356
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": "123.45.167.89"
}
}
}
]
}
{
"Effect": "Allow",
"Action": ["iot:Subscribe"],
"Resource": [
"arn:aws:iot:us-east-1:123456789012:topicfilter/my/${iot:ClientId}/topic"
]
}
Un cliente puede conectarse usando + como ID de cliente. Esto puede permitir al usuario suscribirse a
cualquier tema que coincida con el filtro de temas my/+/topic. Como protección contra estas deficiencias
de seguridad, utilice la acción de política iot:Connect para controlar los ID de cliente que pueden
conectarse. Por ejemplo, esta política permite conectarse únicamente a los clientes cuyo ID de cliente sea
clientid1:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["iot:Connect"],
"Resource": [
"arn:aws:iot:us-east-1:123456789012:client/clientid1"
]
}
]
}
Note
357
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
Tenga en cuenta lo siguiente cuando utilice variables en las políticas de AWS IoT Core.
• iot:Connection.Thing.ThingName
Esta variable se resuelve en el nombre del objeto en el registro de AWS IoT Core para el que se evalúa
la política. AWS IoT Core utiliza el certificado que presenta el dispositivo cuando se autentica para
determinar qué objeto que se va a utilizar para verificar la conexión. Esta variable de política solo
está disponible cuando un dispositivo se conecta a través de MQTT o MQTT a través del WebSocket
protocolo.
• iot:Connection.Thing.ThingTypeName
Esta variable se resuelve en el tipo de objeto asociado al objeto para el que se evalúa la política. El
ID de cliente del MQTT/WebSocketla conexión debe ser la misma que el nombre de la cosa. Esta
variable de política solo está disponible cuando se conecta a través de MQTT o MQTT a través del
WebSocketprotocolo.
• iot:Connection.Thing.Attributes[attributeName]
Esta variable se resuelve en el valor del atributo especificado asociado al objeto para el que se evalúa
la política. Un objeto puede tener hasta 50 atributos. Cada atributo estará disponible como variable de
política: iot:Connection.Thing.Attributes[attributeName] donde attributeName es el
nombre del atributo. El ID de cliente del MQTT/WebSocket la conexión debe ser la misma que el nombre
de la cosa. Esta variable de política solo está disponible cuando se conecta a través de MQTT o MQTT a
través del WebSocket protocolo.
• iot:Connection.Thing.IsAttached
CertificateId
En elRegisterCertificateAPI, lacertificateIdaparece en el cuerpo de respuesta. Para obtener
información sobre el certificado, utilice elcertificateIdenDescribeCertificate.
Atributos de emisor
Las siguientes variables de política de AWS IoT Core le permiten autorizar o denegar permisos en función
de atributos de certificado establecidos por el emisor del certificado.
• iot:Certificate.Issuer.DistinguishedNameQualifier
358
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
• 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 sujeto
Las siguientes variables de política de AWS IoT Core le permiten conceder o denegar permisos en función
de atributos de sujeto de certificado establecidos por el emisor del 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
Los certificados X.509 permiten que estos atributos contengan uno o varios valores. De forma
predeterminada, las variables de política de cada atributo de varios valores devuelven el primer valor. Por
ejemplo, el atributo Certificate.Subject.Country podría contener una lista de nombres de países,
pero cuando se evalúa en una política, iot:Certificate.Subject.Country se reemplaza por el
nombre del primer país. Puede solicitar un valor de atributo específico distinto del primero mediante un
índice de base uno. Por ejemplo, iot:Certificate.Subject.Country.1 se sustituye por el nombre
del segundo país en el atributo Certificate.Subject.Country. Si especifica un valor de índice que
no existe (por ejemplo, si pide un tercer valor cuando el atributo solo tiene dos valores asignados), no se
realizará ninguna sustitución y la autorización dará un resultado erróneo. Puede utilizar el sufijo .List en
el nombre de la variable de política para especificar todos los valores del atributo.
Para los dispositivos registrados como objetos en el registro de AWS IoT Core, la siguiente política
permite que los clientes con un nombre de objeto registrado en el registro de AWS IoT Core se
conecten, pero limita el derecho a publicar en un tema específico del nombre de objeto a aquellos
clientes con certificados cuyo atributo Certificate.Subject.Organization se haya establecido
en "Example Corp" o en "AnyCompany". Esta restricción se lleva a cabo mediante un campo
359
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"Condition" que especifica una condición que ha de cumplirse para permitir la acción anterior.
En este caso, la condición es que el atributo Certificate.Subject.Organization asociado al
certificado incluya uno de los valores de la lista:
{
"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}"
],
"Condition":{
"ForAllValues:StringEquals":{
"iot:Certificate.Subject.Organization.List":[
"Example Corp",
"AnyCompany"
]
}
}
}
]
}
Para los dispositivos no registrados como objetos en el registro de AWS IoT Core, la siguiente
política concede permiso para conectarse a AWS IoT Core con los ID de cliente client1, client2
y client3, pero limita el derecho a publicar en un tema específico del id de cliente a aquellos
clientes con certificados cuyo atributo Certificate.Subject.Organization se haya establecido
en "Example Corp" o en "AnyCompany". Esta restricción se lleva a cabo mediante un campo
"Condition" que especifica una condición que ha de cumplirse para permitir la acción anterior.
En este caso, la condición es que el atributo Certificate.Subject.Organization asociado al
certificado incluya uno de los valores de la lista:
{
"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"
]
},
{
360
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"Effect":"Allow",
"Action":[
"iot:Publish"
],
"Resource":[
"arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}"
],
"Condition":{
"ForAllValues:StringEquals":{
"iot:Certificate.Subject.Organization.List":[
"Example Corp",
"AnyCompany"
]
}
}
}
]
}
Las variables de política de AWS IoT Core siguientes le permiten conceder o denegar permisos en función
de los atributos de nombre alternativo del emisor establecidos por el emisor del 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
Las variables de política de AWS IoT Core siguientes le permiten conceder o denegar permisos en función
de los atributos de nombre alternativo del tema establecidos por el emisor del 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
Otros atributos
Caracteres comodín
361
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
la política. Esto puede producir un error de autorización. Se pueden utilizar los siguientes caracteres
comodín: *, $, +, ? y #.
Campos de matriz
Los atributos de certificado que contienen matrices se limitan a cinco elementos. No se tendrán en
cuenta los elementos adicionales.
Longitud de cadena
Todos los valores de cadena están limitados a 1024 caracteres. Si un atributo de certificado contiene
una cadena de más de 1024 caracteres, la variable de política no se sustituirá por el valor de atributo
de certificado y el texto ${policy-variable} figurará en el documento de la política. Esto puede
producir un error de autorización.
Caracteres especiales
Cualquier carácter especial, como ,, ", \, +, =, <, > y ; debe tener el prefijo de una barra
invertida (\) cuando se utiliza en una variable de política. Por ejemplo, Amazon Web Services
O=Amazon.com Inc. L=Seattle ST=Washington C=US se convierte en Amazon Web
Service O\=Amazon.com Inc. L\=Seattle ST\=Washington C\=US.
Para limitar los permisos queAWS IoTproporciona otro servicio al recurso, se recomienda utilizar
elaws:SourceArnyaws:SourceAccountlas claves del contexto de la condición global en las políticas
de recursos. Si se utilizan ambas claves de contexto de condición global, el valor aws:SourceAccount y
la cuenta del valor aws:SourceArn deben utilizar el mismo ID de cuenta cuando se utilicen en la misma
declaración de política.
La forma más eficaz de protegerse contra el problema de los diputados confusos es utilizar
elaws:SourceArnclave de contexto de condición global con el nombre de recurso de
Amazon (ARN) completo del recurso. ParaAWS IoT, tuaws:SourceArndebe cumplir con el
formato:arn:aws:iot:region:account-id:*. Asegúrese de queregióncoincide con tuAWS
IoTRegión y elID de la cuentacoincide con el ID de tu cuenta de cliente.
En el ejemplo siguiente se muestra cómo evitar el problema de los diputados confusos mediante
elaws:SourceArnyaws:SourceAccountclaves de contexto de condiciones a través de la CLIAWS
IoTpolítica de confianza de roles
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
362
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"aws:SourceAccount": "123456789012"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:iot:us-east-1:123456789012:*"
}
}
}
]
}
Los ejemplos en esta sección utilizan los siguientes elementos para establecer la política:
• the section called “Acciones de política de AWS IoT Core” (p. 352)
• the section called “Recursos de acción de AWS IoT Core” (p. 354)
• the section called “Ejemplos de políticas basadas en identidad” (p. 429)
• the section called “Variables de política de AWS IoT Core básicas” (p. 356)
• the section called “Variables de política de AWS IoT Core de certificado X.509” (p. 358)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"iot:Connect"
],
"Resource": [
"arn:aws:iot:us-east-1:123456789012:client/client1",
363
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"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"
}
}
}
]
}
La siguiente política otorga el permiso para conectarse aAWS IoT Corecon ID de clienteclient1. Este
ejemplo de política es para dispositivos no registrados.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Connect"
],
"Resource": [
"arn:aws:iot:us-east-1:123456789012:client/client1"
]
}
]
}
{
"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"
]
}
}
}
364
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
]
}
{
"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"
]
}
}
}
]
}
{
"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"
]
}
}
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
365
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"Effect": "Allow",
"Action": [
"iot:Connect"
],
"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
"Condition": {
"ForAllValues:StringEquals": {
"iot:ConnectAttributes": [
"PersistentConnect",
"LastWill"
]
}
}
}
]
}
La siguiente política permite una conexión limpia por parte de los clientes con o sin ellaLastWill, no se
permitirá ninguna otra función:
{
"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": [
"LastWill"
]
}
}
}
]
}
{
"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": []
}
}
}
]
}
366
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
{
"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"
]
}
}
}
]
}
{
"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": [
367
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"LastWill"
]
}
}
},
{
"Effect": "Deny",
"Action": [
"iot:Connect"
],
"Resource": "*",
"Condition": {
"ForAllValues:StringEquals": {
"iot:ConnectAttributes": []
}
}
}
]
}
{
"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"
]
}
}
}
]
}
La siguiente política permite la conexión solo a los clientes que tengan unLastWillcon tema"my/
lastwill/topicName", cualquier función está permitida siempre y cuando utiliceLastWilltema
{
"Version": "2012-10-17",
"Statement": [
368
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
{
"Effect": "Allow",
"Action": [
"iot:Connect"
],
"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
"Condition": {
"ArnEquals": {
"iot:LastWillTopic": "arn:aws:iot:region:account-id:topic/my/lastwill/
topicName"
}
}
}
]
}
La siguiente política solo permite una conexión limpia mediante un uso específicoLastWillTopic,
cualquier función está permitida siempre que utilice laLastWillTopic:
{
"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:region:account-id:topic/my/lastwill/
topicName"
}
}
},
{
"Effect": "Deny",
"Action": [
"iot:Connect"
],
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"iot:ConnectAttributes": [
"PersistentConnect"
]
}
}
}
]
}
369
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
En esta sección:
• Usar caracteres de comodín a MQTT aAWS IoT Corepolíticas (p. 370)
• Políticas para publicar, suscribirse y recibir mensajes hacia/desde temas específicos (p. 371)
• Políticas para publicar, suscribirse y recibir mensajes hacia/desde temas con un prefijo
específico (p. 372)
• Políticas para publicar, suscribirse y recibir mensajes hacia/desde temas específicos de cada
dispositivo (p. 374)
• Políticas para publicar, suscribirse y recibir mensajes hacia/desde los temas con un atributo en el
nombre del tema (p. 376)
• Políticas para denegar la publicación de mensajes en subtemas del nombre de un tema (p. 377)
• Políticas para denegar la recepción de mensajes de subtemas del nombre de un tema (p. 379)
• Políticas para suscribirse a temas con caracteres comodín de MQTT (p. 380)
• Políticas para HTTP y WebSocketclientes (p. 382)
MQTT yAWS IoT Corelas políticas tienen distintos caracteres comodín y debe elegirlos tras considerarlos
detenidamente. En MQTT, los caracteres comodín+y#se utilizan enfiltros de temas MQTTpara
suscribirse a varios nombres de temas.AWS IoT Corepolíticas*y?como personajes comodín y siguen
las convenciones dePolíticas de IAM. En un documento de política,*representa cualquier combinación
de caracteres y un signo de interrogación?representa cualquier carácter individual. En los documentos
de política, los caracteres comodín MQTT,+y#se tratan como aquellos personajes sin ningún significado
especial. Para describir varios nombres de temas y filtros de temas en elresourceatributo de una política,
utilice el*y?caracteres comodín 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, ya que+el personaje está en un filtro de temas de MQTT. Para ayudar a
restringir una especificación comodín a un único nivel de filtro de temas de MQTT, considere la posibilidad
de utilizar varios?personajes. 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, consulteUso de comodines en ARN de recursos.
En la siguiente tabla se muestran los distintos caracteres comodín que se utilizan en MQTT yAWS IoT
Corepolíticas para clientes de MQTT.
# Sí some/# No N/A
+ Sí some/+/ No N/A
topic
* No N/A Sí topicfilter/some/*/topic
topicfilter/some/sensor*/
topic
? No N/A Sí topic/some/?????/topic
topicfilter/some/sensor???/
topic
370
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
Registered devices
Para dispositivos registrados enAWS IoT Core's Registry, la siguiente política permite que los
dispositivos se conecten con un ClientiD que coincida con el nombre de una cosa enAWS IoT Corees
Registry. También proporcionaPublish,SubscribeyReceivepermisos 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"
]
}
]
}
Unregistered devices
Para dispositivos que no estén registrados enAWS IoT CoreEn el Registro, la siguiente política
permite que los dispositivos se conecten mediante el ClientID1, el ClientID2 o el ClientID3.
371
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
{
"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, suscribirse y recibir mensajes hacia/desde temas con un prefijo específico
Observe el uso del carácter comodín * en este ejemplo. Si bien el carácter comodín * es útil
para proporcionar permisos para varios nombres de temas en una sola instrucción, puede
tener consecuencias no deseadas, 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.
372
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
Registered devices
Para dispositivos registrados enAWS IoT Core's Registry, la siguiente política permite que los
dispositivos se conecten con un ClientiD que coincida con el nombre de una cosa enAWS IoT Corees
Registry. También proporcionaPublish,SubscribeyReceivepermisos para 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*"
]
}
]
}
Unregistered devices
Para dispositivos no registrados enAWS IoT CoreEn el Registro, la siguiente política permite
que los dispositivos se conecten mediante el ClientID1, el ClientID2 o el ClientID3. También
proporcionaPublish,SubscribeyReceivepermisos para 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/clientId1",
"arn:aws:iot:us-east-1:123456789012:client/clientId2",
373
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"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, suscribirse y recibir mensajes hacia/desde temas específicos de cada
dispositivo
Registered devices
Para dispositivos registrados enAWS IoT Core's Registry, la siguiente política permite que los
dispositivos se conecten con un ClientiD que coincida con el nombre de una cosa enAWS IoT
Corees Registry. Elija el tema para publicar para un tema en particular (sensor/device/
${iot:Connection.Thing.ThingName}) y también suscríbase y reciba información sobre el
tema específico (command/device/${iot:Connection.Thing.ThingName}). Si el nombre del
objeto en el Registro es «cosa1", el dispositivo podrá publicar en el tema «sensor/dispositivo/cosa1" y
también suscribirse y recibir información del tema «comando/dispositivo/cosa1".
{
"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"
374
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
],
"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 que no estén registradosAWS IoT CoreEn el Registro, la siguiente política permite
que los dispositivos se conecten mediante el ClientID1, el ClientID2 o el ClientID3. Elija el tema
para publicar en el tema que creó para el tema que creó el tema para el cliente (sensor/device/
${iot:ClientId}) y también suscríbase y reciba información sobre el tema específico del cliente
(command/device/${iot:ClientId}). Si el dispositivo se conecta con ClientID como ClientID1,
se le permitirá publicar en el tema «Sensor/device/ClientID1" y suscribirse al tema y recibir información
del mismodevice/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}"
]
},
{
375
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"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 los temas con un atributo en el
nombre del tema
Los atributos Thing solo existen para los dispositivos registrados enAWS IoT Coredel Registro. No
hay un ejemplo correspondiente a los dispositivos no registrados.
Registered devices
Para dispositivos registrados enAWS IoT Core's Registry, la siguiente política permite
que los dispositivos se conecten con un ClientiD que coincida con el nombre de una
cosa enAWS IoT Corees Registry. Otorga permiso para publicar en el tema (sensor/
${iot:Connection.Thing.Attributes[version]}) y suscríbase al tema y reciba
información sobre él (command/${iot:Connection.Thing.Attributes[location]})
donde el nombre del tema incluye los atributos de la cosa. Si el nombre de la cosa en el Registro
tieneversion=v1ylocation=Seattle, el dispositivo podrá publicar en el tema «sensor/v1",
suscribirse y recibir contenido del tema «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"
}
}
},
{
376
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"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
Porque los atributos solo existen para los dispositivos registrados enAWS IoT CoreEn el Registro, no
hay un ejemplo correspondiente para las cosas no registradas.
Registered devices
Para dispositivos registrados enAWS IoT Core's Registry, la siguiente política permite que los
dispositivos se conecten con un ClientiD que coincida con el nombre de una cosa enAWS IoT Corees
Registry. Permite publicar en todos los temas con el prefijo «departamento/», pero no en el subtema
«departamento/administradores».
{
"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"
377
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
}
}
},
{
"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 que no estén registradosAWS IoT CoreEn el Registro, la siguiente política
permite que los dispositivos se conecten mediante el ClientID1, el ClientID2 o el ClientID3. Permite
publicar en todos los temas con el prefijo «departamento/», pero no en el subtema «departamento/
administradores».
{
"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"
]
}
]
378
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
Registered devices
Para los dispositivos registrados enAWS IoT Core's Registry, la siguiente política permite que los
dispositivos se conecten con un ClientiD que coincida con el nombre de una cosa enAWS IoT Corees
Registry. La política permite a los dispositivos suscribirse a cualquier tema con el prefijo «topic_prefix».
Mediante el usoNotResourceen la declaración deiot: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». Por ejemplo, con esta política, los dispositivos pueden suscribirse a «topic_prefix/topic1" e
incluso a «topic_prefix/restricted»; sin embargo, solo recibirán mensajes del tema «topic_prefix/topic1"
y no mensajes del tema «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/*"
}
]
}
Unregistered devices
Para dispositivos que no estén registradosAWS IoT CoreEn el Registro, la siguiente política permite
que los dispositivos se conecten mediante el ClientID1, el ClientID2 o el ClientID3. La política
permite a los dispositivos suscribirse a cualquier tema con el prefijo «topic_prefix». Mediante el
usoNotResourceen la declaración deiot: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».
Por ejemplo, con esta política, los dispositivos pueden suscribirse a «topic_prefix/topic1" e incluso
a «topic_prefix/restricted»; sin embargo, solo recibirán mensajes del tema «topic_prefix/topic1" y no
mensajes del tema «topic_prefix/restricted».
379
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"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/*"
}
]
}
Los caracteres comodín + y # de MQTT se tratan como cadenas literales, pero no se tratan como
caracteres comodín cuando se utilizan enAWS IoT Corepolíticas. En MQTT, + y # se tratan como
caracteres comodín solo cuando se suscribe a un filtro de temas, pero como cadenas literales en todos
los demás contextos. Le recomendamos que utilice estos caracteres comodín de MQTT únicamente como
parte deAWS IoT Coretras una cuidadosa consideración de las políticas.
Registered devices
Para dispositivos registrados enAWS IoT Core's Registry, la siguiente política permite que los
dispositivos se conecten con un ClientiD que coincida con el nombre de una cosa enAWS IoT
Corees Registry. La política permite que los dispositivos se suscriban a los temas «departamento/+/
empleados» y «ubicación/#». Tenga en cuenta que, dado que + y # se tratan como cadenas literales
enAWS IoT Corepolíticas, los dispositivos pueden suscribirse al tema «departamento/+/empleados»,
pero no al tema «departamento/ingeniería/empleados». Del mismo modo, los dispositivos pueden
suscribirse al tema «ubicación/#» pero no al tema «Ubicación/Seattle». Sin embargo, una vez que el
dispositivo se suscriba al tema «departamento/+/empleados», la política le permitirá recibir mensajes
sobre el tema «departamento/ingeniería/empleados». Del mismo modo, una vez que el dispositivo se
suscriba al tema «ubicación/#», también recibirá mensajes del tema «Ubicación/Seattle».
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Connect"
],
"Resource": [
"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
380
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
],
"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 que no estén registradosAWS IoT CoreEn el Registro, la siguiente política permite
que los dispositivos se conecten mediante el ClientID1, el ClientID2 o el ClientID3. La política permite
que los dispositivos se suscriban a los temas «departamento/+/empleados» y «ubicación/#». Tenga en
cuenta que, dado que + y # se tratan como cadenas literales enAWS IoT Corepolíticas, los dispositivos
pueden suscribirse al tema «departamento/+/empleados», pero no al tema «departamento/ingeniería/
empleados». Del mismo modo, los dispositivos pueden suscribirse al tema «ubicación/#» pero no a
«Ubicación/Seattle». Sin embargo, una vez que el dispositivo se suscriba al tema «departamento/
+/empleados», la política le permitirá recibir mensajes sobre el tema «departamento/ingeniería/
empleados». Del mismo modo, una vez que el dispositivo se suscriba al tema «ubicación/#», también
recibirá mensajes del tema «Ubicación/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/#"
},
381
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
{
"Effect": "Allow",
"Action": "iot:Receive",
"Resource": "arn:aws:iot:us-east-1:123456789012:topic/*"
}
]
}
Cuando te conectas a través de HTTP o el WebSocket protocolo, se autentica con Signature Version
4 y Amazon Cognito. Las identidades de Amazon Cognito se pueden autenticar o no. Las identidades
autenticadas pertenecen a los usuarios que se han autenticado mediante un proveedor de identidad
compatible. Con los grupos de identidades no autenticados, se pueden usar los usuarios invitados que
no se autentican con un proveedor de identidad. Amazon Cognito proporciona un identificador único
yAWScredenciales para admitir identidades no autenticadas. Para obtener más información, consulte the
section called “Autorización con identidades de Amazon Cognito” (p. 392).
Para las siguiente comando,AWS IoT CoreusosAWS IoT Corepolíticas asociadas a las identidades de
Amazon Cognito (a través delAttachPolicyAPI) para reducir 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 funciones de IAM
adjunta al grupo y delAWS IoT Corepolítica asociada a la identidad de Amazon Cognito a través delAWS
IoT Core AttachPolicyAPI.
Los usuarios autenticados y no autenticados son tipos de identidad diferentes. Si no adjunta unaAWS
IoTpolítica de Amazon Cognito Identity, un usuario autenticado no pasa la autorización enAWS IoTy no
tiene acceso aAWS IoTrecursos y acciones.
Note
Para otrosAWS IoT Coreoperaciones o para identidades no autenticadas,AWS IoT Coreno limita
los permisos asociados a la función de grupo de identidades de Amazon Cognito. Tanto para las
identidades autenticadas como para las no autenticadas, esta es la política más permisiva que
recomendamos adjuntar al rol de grupo de Amazon Cognito.
HTTP
Para permitir que las identidades de Amazon Cognito no autenticadas publiquen mensajes a través de
HTTP sobre un tema específico de Amazon Cognito Identity, adjunte la siguiente política de IAM al rol del
grupo de Amazon Cognito Identity:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
382
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"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 elAWS IoT Core AttachPolicyAPI.
Note
Al autorizar las identidades de Amazon Cognito,AWS IoT Coretiene 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 MQTT en
WebSocket en un tema específico de la identidad de Amazon Cognito de su cuenta, adjunte la siguiente
política de IAM al rol del 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}"]
},
{
"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 elAWS IoT Core AttachPolicyAPI.
Note
Al autorizar las identidades de Amazon Cognito,AWS IoT Coreconsidera 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.
383
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
{
"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 los dispositivos no registrados como objetos en el registro de AWS IoT Core, la siguiente política
concede permiso para conectarse a AWS IoT Core con un ID de cliente client1 y limita las publicaciones
del dispositivo a un tema de MQTT específico del ID de 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"]
}
]
}
En esta sección:
• Política para conectar y publicar los mensajes retenidos (p. 384)
• Política para conectar y publicar los mensajes de Will retenidos (p. 385)
• Política para enumerar y obtener los mensajes retenidos (p. 386)
{
"Version": "2012-10-17",
384
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"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"
]
}
]
}
Los clientes pueden configurar un mensaje queAWS IoT Corese publicará cuando el cliente se desconecte
inesperadamente. MQTT llama a dicho mensaje comoVoluntadmensaje. Un cliente debe tener una
condición adicional añadida a su permiso de conexión para poder incluirlo.
El siguiente documento de política otorga a todos los clientes permiso para conectarse y publicar un
mensaje de Will, identificado por su tema,will, esoAWS IoT Coretambién conservará.
{
"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"
]
}
]
}
385
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
{
"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"
]
}
]
}
{
"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 los dispositivos no registrados en el registro de AWS IoT Core, la siguiente política concede permisos
para conectarse a AWS IoT Core con los ID de cliente client1, client2 y client3, y para publicar
en un tema cuyo nombre sea igual al certificateId del certificado que el dispositivo utilizó para
autenticarse:
386
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
{
"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 los dispositivos registrados en el registro de AWS IoT Core, la siguiente política concede permiso
para conectarse a AWS IoT Core con un ID de cliente que coincide con el nombre de objeto y para publicar
en un tema cuyo nombre sea igual al campo CommonName del sujeto del certificado que el dispositivo
utilizó para autenticarse:
{
"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}"]
}
]
}
Note
En este ejemplo, el nombre común del sujeto del certificado se utiliza como identificador de
tema, partiendo del supuesto de que el nombre común del sujeto es único para cada certificado
registrado. Si los certificados se comparten entre varios dispositivos, el nombre común del asunto
es el mismo para todos los dispositivos que comparten este certificado, lo que permite publicar
privilegios en el mismo tema desde varios dispositivos (no se recomienda).
Para los dispositivos no registrados en el registro de AWS IoT Core, la siguiente política concede permiso
para conectarse a AWS IoT Core con los ID de cliente client1, client2 y client3, y para publicar en
387
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
un tema cuyo nombre sea igual al campo CommonName del sujeto del certificado que el dispositivo utilizó
para autenticarse:
{
"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"
]
}
]
}
Note
En este ejemplo, el nombre común del sujeto del certificado se utiliza como identificador de
tema, partiendo del supuesto de que el nombre común del sujeto es único para cada certificado
registrado. Si los certificados se comparten entre varios dispositivos, el nombre común del asunto
es el mismo para todos los dispositivos que comparten este certificado, lo que permite publicar
privilegios en el mismo tema desde varios dispositivos (no se recomienda).
Para los dispositivos registrados en el registro de AWS IoT Core, la siguiente política concede permiso
para conectarse a AWS IoT Core con un ID de cliente que coincide con un nombre de objeto y para
publicar en un tema cuyo nombre tenga como prefijo admin/ cuando el certificado utilizado para autenticar
el dispositivo tenga el campo Subject.CommonName.2 definido en 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"
}
}
388
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
}
]
}
Para los dispositivos no registrados en el registro de AWS IoT Core, la siguiente política concede permiso
para conectarse a AWS IoT Core con los ID de cliente client1, client2 y client3, y para publicar
en un tema cuyo nombre tenga como prefijo admin/ cuando el certificado utilizado para autenticar el
dispositivo tenga el campo Subject.CommonName.2 definido en 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 los dispositivos registrados en el registro de AWS IoT Core, la siguiente política permite a un
dispositivo utilizar su nombre de objeto para publicar en un tema específico que consiste en admin/
seguido del ThingName cuando el certificado utilizado para autenticar el dispositivo tenga alguno de sus
campos Subject.CommonName establecido en 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": {
389
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"ForAnyValue:StringEquals": {
"iot:Certificate.Subject.CommonName.List": "Administrator"
}
}
}
]
}
Para los dispositivos no registrados en el registro de AWS IoT Core, la siguiente política concede permiso
para conectarse a AWS IoT Core con los ID de cliente client1, client2 y client3, y para publicar en
el tema admin cuando el certificado utilizado para autenticar el dispositivo tenga alguno de sus campos
Subject.CommonName definido en 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"
}
}
}
]
}
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":["iot:Connect"],
"Resource":[ "*" ],
"Condition": {
"Bool": {
"iot:Connection.Thing.IsAttached": ["true"]
}
}
}
]
}
390
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
La siguiente política permite que un dispositivo publique si el certificado está adjunto a una cosa con un
tipo de cosa en particular y si la cosa tiene el atributo deattributeNamecon un valorattributeValue.
Para obtener más información sobre las variables para políticas para cosas, consulteVariables de política
de cosas (p. 357).
{
"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"
}
}
}
]
}
La siguiente política permite a un dispositivo publicar en un tema que comience con un atributo del objeto.
Si el certificado del dispositivo no está asociado al objeto, esta variable no se resolverá y generará un
error de acceso denegado. Para obtener más información sobre las variables para políticas para cosas,
consulteVariables de política de cosas (p. 357).
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": "arn:aws:iot:us-east-1:123456789012:topic/
${iot:Connection.Thing.Attributes[attributeName]}/*"
}
]
}
Reemplazarus-west- 2:57 EJEMPLO 833con tuRegión de AWS, dos puntos (:)) y sus 12
dígitosCuenta de AWSnúmero y, a continuación, reemplazaruniqueThingNamecon el nombre del recurso
que representa el dispositivo enAWS IoT.
{
"Version": "2012-10-17",
"Statement": [
{
391
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"Effect": "Allow",
"Action": [
"iot:Connect"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:client/uniqueThingName"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic",
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/events/job/*",
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/events/jobExecution/*",
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/things/uniqueThingName/jobs/*"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic",
"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/$aws/events/jobExecution/*",
"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/$aws/things/uniqueThingName/jobs/*"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic",
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/things/uniqueThingName/jobs/*"
]
},
{
"Effect": "Allow",
"Action": [
"iot:DescribeJobExecution",
"iot:GetPendingJobExecutions",
"iot:StartNextPendingJobExecution",
"iot:UpdateJobExecution"
],
"Resource": [
"arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/things/uniqueThingName"
]
}
]
}
392
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
recomendamos que solo conceda acceso a los recursos que desee que estén disponibles para usuarios
desconocidos.
Important
Para usuarios de Amazon Cognito no autenticados que se conecten aAWS IoT Core, le
recomendamos que dé acceso a recursos muy limitados en las políticas de IAM.
Identidades autenticadas:Para las identidades autenticadas de Amazon Cognito, debe especificar los
permisos en dos lugares:
{
"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"
]
}
]
}
El siguiente ejemplo muestra los permisos en una política de IAM de un rol no autenticado de Amazon
Cognito. El usuario no autenticado desea publicar en temas no específicos del dispositivo que no requieren
autenticación.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Connect"
],
"Resource": [
393
AWS IoT Core Guía para desarrolladores
Políticas de AWS IoT Core
"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 ejemplos
El siguiente ejemplo de aplicaciones web en GitHub muestran cómo incorporar la política adjunta a los
usuarios autenticados en el proceso de registro y autenticación de los usuarios.
• MQTT publique/suscriba la aplicación web React utilizandoAWS Amplifyy elAWS IoT Device SDK para
JavaScript
• Publicar/suscribir la aplicación web React de MQTT utilizandoAWS Amplify, laAWS IoT Device SDK para
JavaScripty una función Lambda
Amplify es un conjunto de herramientas y servicios que le ayudan a crear aplicaciones web y móviles que
se integran conAWSservicios. Para obtener más información sobre Amplify a través deAmplify Framework:
documentación,.
1. Cuando un usuario se registra para obtener una cuenta, la aplicación crea una identidad y un grupo de
usuarios de Amazon Cognito.
2. Cuando un usuario se autentica, la aplicación crea y adjunta una política a la identidad. Esto otorga al
usuario permisos de publicación y suscripción.
3. El usuario puede utilizar la aplicación para publicar temas de MQTT y suscribirse a ellos.
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);
}
});
}
394
AWS IoT Core Guía para desarrolladores
Autorizar llamadas directas aAWSservicios de
uso deAWS IoT Coreproveedor de credenciales
395
AWS IoT Core Guía para desarrolladores
Autorizar llamadas directas aAWSservicios de
uso deAWS IoT Coreproveedor de credenciales
para que el proveedor de credenciales pueda asumir la función en su nombre. Para obtener más
información sobreAWS IoT Coree IAM, consulteIdentity and Access Management en AWS IoT (p. 407).
AWS IoT requiere que los dispositivos envíen la extensión Indicación de nombre de servidor (SNI) al
protocolo Transport Layer Security (TLS) y proporcionen la dirección completa del punto de enlace en el
campo host_name. El campo host_name debe contener el punto de enlace al que está llamando y debe
ser:
Los dispositivos han intentado realizar conexiones sin la correctahost_nameel valor fallará.
1. El dispositivo de AWS IoT Core realiza una solicitud HTTPS al proveedor de credenciales para un token
de seguridad. La solicitud incluye el certificado X.509 del dispositivo para autenticación.
2. El proveedor de credenciales reenvía la solicitud al módulo de autenticación y autorización de AWS
IoT Core para validar el certificado y verificar que el dispositivo tiene permiso para solicitar el token de
seguridad.
3. Si el certificado es válido y tiene permiso para solicitar un token de seguridad, el módulo de
autenticación y autorización de AWS IoT Core indica que se ha realizado correctamente. De lo contrario,
envía una excepción al dispositivo.
4. Después de validar correctamente el certificado, el proveedor de credenciales invoca a AWS Security
Token Service (AWS STS) para asumir el rol de IAM que creó para el mismo.
5. AWS STS devuelve un token de seguridad temporal con privilegios limitados al proveedor de
credenciales.
396
AWS IoT Core Guía para desarrolladores
Autorizar llamadas directas aAWSservicios de
uso deAWS IoT Coreproveedor de credenciales
En la siguiente sección se describe cómo utilizar un certificado para obtener un token de seguridad. Se
ha escrito suponiendo que ya ha registrado un dispositivo y creado y activado su propio certificado para el
mismo.
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {"Service": "credentials.iot.amazonaws.com"},
"Action": "sts:AssumeRole"
}
}
Para cadaAWSpara firmar con el servicio para llamar, adjunte una política para acceder al rol. El
proveedor de credenciales admite las siguientes variables de políticas:
• credentials-iot:ThingName
• credentials-iot:ThingTypeName
• credentials-iot:AwsCertificateId
Estas tres variables solo funcionan para las políticas de IAM, no para las políticas de AWS IoT Core.
2. Asegúrese de que el usuario que realiza el siguiente paso (la creación de un alias de rol) tiene
permiso para transferir a AWS IoT Core el rol que se acaba de crear. La siguiente política proporciona
ambasiam:GetRoleyiam:PassRolepermisos para unAWSusuario. El permiso iam:GetRole
permite al usuario obtener información acerca del rol que acaba de crear. Eliam:PassRoleel permiso
para pasar el rol a otroAWSservicio
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"iam:GetRole",
"iam:PassRole"
],
"Resource": "arn:aws:iam::your Cuenta de AWS id:role/your role name"
397
AWS IoT Core Guía para desarrolladores
Autorizar llamadas directas aAWSservicios de
uso deAWS IoT Coreproveedor de credenciales
}
}
3. Crear un alias de rol de AWS IoT Core. El dispositivo al que se van a realizar llamadas
directasAWSlos servicios deben saber qué ARN de rol usar al conectarseAWS IoT Core. La
codificación de forma rígida de un ARN de rol no es una buena solución, ya que requiere actualizar
el dispositivo cada vez que el ARN del rol cambia. Una solución mejor consiste en utilizar la API
CreateRoleAlias para crear un alias de rol que apunte al ARN del rol. Si el ARN del rol cambia,
solo tiene que actualizar el alias de rol. No es necesario realizar ningún cambio en el dispositivo. Esta
API adopta los siguiente parámetros:
roleAlias
Obligatorio. Una cadena arbitraria que identifica el alias del rol. Sirve como clave principal en el
modelo de datos del alias de rol. Contiene 1-128 caracteres y debe incluir únicamente caracteres
alfanuméricos y los símbolos =, @ y -. Se permiten los caracteres alfabéticos en mayúsculas y
minúsculas.
roleArn
Obligatorio. El ARN del rol al que hace referencia el alias del rol.
credentialDurationSeconds
ElAWS IoT CoreEl proveedor de credenciales puede emitir una credencial con una vida
útil máxima de 43 200 segundos (12 horas). Hacer que la credencial sea válida durante
un máximo de 12 horas puede ayudar a reducir el número de llamadas al proveedor de la
credencial, ya que la guarda en caché durante más tiempo.
ElcredentialDurationSecondsel valor debe ser menor o igual a la duración máxima
de la sesión de la función de IAM a la que hace referencia el alias de la función.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":"iot:AssumeRoleWithCertificate",
"Resource":"arn:aws:iot:your region:your_aws_account_id:rolealias/your role
alias"
}
]
}
5. Realice una solicitud HTTPS al proveedor de credenciales para obtener un token de seguridad.
Proporcione la información siguiente:
• Certificado: dado que se trata de una solicitud HTTP a través de autenticación mutua de TLS, debe
proporcionar el certificado y la clave privada a su cliente al realizar la solicitud. Utilice el mismo
certificado y clave privada utilizados cuando registró su certificado con AWS IoT Core.
398
AWS IoT Core Guía para desarrolladores
Autorizar llamadas directas aAWSservicios de
uso deAWS IoT Coreproveedor de credenciales
Para asegurarse de que un dispositivo se comunica con AWS IoT Core (y no con un servicio que lo
suplante), consulte Autenticación del servidor, siga los enlaces para descargar los certificados de
entidad de certificación apropiados y, a continuación, cópielos en el dispositivo.
• RoleAlias: el nombre del alias de rol que creó para el proveedor de credenciales.
• ThingName: El nombre del objeto que creaste cuando registraste tuAWS IoT Corecosa Esto se
transfiere como valor del encabezado HTTP x-amzn-iot-thingname. Este valor es obligatorio
únicamente si utiliza atributos de objetos como variables de política en AWS IoT Core o políticas de
IAM.
Note
{
"endpointAddress": "your_aws_account_specific_prefix.credentials.iot.your
region.amazonaws.com"
}
Utilice el punto de enlace para realizar una solicitud HTTPS al proveedor de credenciales para
devolver un token de seguridad. El ejemplo de comando siguiente utiliza curl, pero puede utilizar
cualquier cliente HTTP.
curl --cert your certificate --key your device certificate key pair -H "x-amzn-iot-
thingname: your thing name" --cacert AmazonRootCA1.pem https://your endpoint /role-
aliases/your role alias/credentials
Este comando devuelve un objeto de token de seguridad objeto que contiene un accessKeyId, una
secretAccessKey, un sessionToken y un vencimiento. El siguiente objeto de JSON es la salida
de ejemplo del comando curl.
399
AWS IoT Core Guía para desarrolladores
Acceso cruzado a cuentas con IAM
En primer lugar, cree una política de IAM gestionada por el cliente, tal y como se describe enCreación de
políticas de IAM, tal como lo haría con otros usuarios y certificados en suCuenta de AWS.
Para dispositivos registrados enAWS IoT Coreen el registro, la siguiente política concede permisos a los
dispositivos que se conecten aAWS IoT Coreutilizando un ID de cliente que coincida con el nombre del
dispositivo y para publicarlo en elmy/topic/thing-name dondenombre-cosaes el nombre de la cosa
del 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 los dispositivos no registrados en el registro de AWS IoT Core, la siguiente política concede permiso
a un dispositivo para utilizar el nombre de objeto client1 registrado en el registro de AWS IoT Core de su
cuenta (123456789012) para conectarse a AWS IoT Core y para publicar en un tema específico del ID de
cliente cuyo nombre lleva el prefijo 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}"
]
400
AWS IoT Core Guía para desarrolladores
Protección de los datos
}
]
}
A continuación, sigue los pasos que se indican enCreación de un rol para delegar permisos a un usuario
de IAM. Ejecute el ID de cuenta delCuenta de AWScon la que desea compartir el acceso. A continuación,
en el último paso, asocie al rol la política que acaba de crear. Si, más adelante, necesita modificar laAWSel
identificador de cuenta al que vas a conceder acceso, puedes utilizar el siguiente formato de política de
confianza para hacerlo:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam:us-east-1:567890123456:user/MyUser"
},
"Action": "sts:AssumeRole"
}
]
}
Con fines de protección de datos, recomendamos proteger las credenciales de Cuenta de AWS y
configurar cuentas de usuario individuales con AWS IAM Identity Center o AWS Identity and Access
Management (IAM). De esta manera, solo se otorgan a cada usuario los permisos necesarios para cumplir
con sus obligaciones laborales. También recomendamos proteger sus datos de las siguientes formas:
401
AWS IoT Core Guía para desarrolladores
Cifrado de datos en AWS IoT
de AWS a través de la consola, la API, la AWS CLI o los SDK de AWS. Cualquier dato que ingrese en
etiquetas o campos de formato libre utilizados para nombres se pueden emplear para los registros de
facturación o diagnóstico. Si proporciona una URL a un servidor externo, recomendamos encarecidamente
que no incluya información de credenciales en la URL a fin de validar la solicitud para ese servidor.
Para obtener más información sobre la protección de datos, consulte la entrada de blog relativa al modelo
de responsabilidad compartida de AWS y GDPR en el blog de seguridad de AWS.
Los dispositivos de AWS IoT recopilan datos, realizan alguna manipulación en dichos datos y, a
continuación, los envían a otro servicio web. Es posible que decida almacenar algunos datos en su
dispositivo durante un breve período de tiempo. Eres responsable de proporcionar cualquier tipo de
protección de datos a los datos en reposo. Cuando el dispositivo envía datos aAWS IoT, lo hace a través
de una conexión TLS, tal y como se explica más adelante en esta sección.AWS IoTlos dispositivos pueden
enviar datos a cualquierAWSservicio Para obtener más información sobre la seguridad de los datos de
cada servicio, consulte la documentación de ese servicio.AWS IoTse puede configurar para escribir los
registros a CloudWatch Registros y registroAWS IoTEl APIAWS CloudTrail. Para obtener más información
sobre la seguridad de los datos para estos servicios, consulteAutenticación y control de acceso para
Amazon CloudWatchyCifrado CloudTrail Archivos de registro conAWSClaves administradas por KMS.
Contenido
• Protocolos de TLS (p. 402)
• Políticas de seguridad (p. 403)
• Notas importantes para la seguridad del transporte enAWS IoT Core (p. 405)
• Seguridad del transporte para LoRaDispositivos inalámbricos WAN (p. 406)
Protocolos de TLS
AWS IoT Coreadmite las siguientes versiones del protocolo TLS:
• TLS 1.3
• TLS 1.2
ConAWS IoT Core, puede configurar los ajustes de TLS (paraTLSyTLS) en configuraciones de dominio.
Para obtener más información, consulte ??? (p. 134).
402
AWS IoT Core Guía para desarrolladores
Seguridad de transporte en AWS IoT Core
Políticas de seguridad
Una política de seguridad es una combinación de protocolos TLS y sus cifrados que determina qué
protocolos y cifrados se admiten durante las negociaciones de TLS entre un cliente y un servidor. Puede
configurar sus dispositivos para que utilicen políticas de seguridad predefinidas en función de sus
necesidades. Tenga en cuenta queAWS IoT Coreno admite políticas de seguridad personalizadas.
Puede elegir una de las políticas de seguridad predefinidas para sus dispositivos al conectarlos aAWS
IoT Core. Los nombres de las políticas de seguridad predefinidas más recientes enAWS IoT Coreincluyen
información sobre la versión según el año y el mes en que se publicaron. La política de seguridad
predefinida predeterminada esIoTSecurityPolicy_TLS13_1_2_2022_10. Para especificar una
política de seguridad, puede utilizar laAWS IoTde consola o deAWS CLI. Para obtener más información,
consulte ??? (p. 134).
En la tabla siguiente se describen las políticas de seguridad predefinidas más recientes queAWS
IoT Coresoportes. Se ha eliminado IotSecurityPolicy_ de los nombres de política en la fila de
encabezado para que quepan.
Políticas TLS13_1_3_2022_10
TLS13_1_2_2022_10
TLS12_1_2_2022_10
TLS12_1_0_2016_01* TLS12_1_0_2015_01*
de
seguridad
Puerto 443/8443/8883
443/8443/8883
443/8443/8883
443 8443/8883 443 8443/8883
TCP
Protocolos TLS
TLS 1.2 ✓ ✓ ✓ ✓ ✓ ✓
TLS 1.3 ✓ ✓
Cifrados TLS
TLS_AES_128_GCM_SHA256
✓ ✓
TLS_AES_256_GCM_SHA384
✓ ✓
TLS_CHACHA20_POLY1305_SHA256
✓ ✓
ECDHE- ✓ ✓ ✓ ✓ ✓ ✓
RSA-
AES128-
GCM-
SHA256
ECDHE- ✓ ✓ ✓ ✓ ✓ ✓
RSA-
AES128-
SHA256
ECDHE- ✓ ✓ ✓ ✓ ✓ ✓
RSA-
AES128-
SHA
ECDHE- ✓ ✓ ✓ ✓ ✓ ✓
RSA-
AES256-
403
AWS IoT Core Guía para desarrolladores
Seguridad de transporte en AWS IoT Core
Políticas TLS13_1_3_2022_10
TLS13_1_2_2022_10
TLS12_1_2_2022_10
TLS12_1_0_2016_01* TLS12_1_0_2015_01*
de
seguridad
GCM-
SHA384
ECDHE- ✓ ✓ ✓ ✓ ✓ ✓
RSA-
AES256-
SHA384
ECDHE- ✓ ✓ ✓ ✓ ✓ ✓
RSA-
AES256-
SHA
AES128- ✓ ✓ ✓ ✓ ✓ ✓
GCM-
SHA256
AES128- ✓ ✓ ✓ ✓ ✓
SHA256
AES128- ✓ ✓ ✓ ✓ ✓ ✓
SHA
AES256- ✓ ✓ ✓ ✓ ✓ ✓
GCM-
SHA384
AES256- ✓ ✓ ✓ ✓ ✓ ✓
SHA256
AES256- ✓ ✓ ✓ ✓ ✓ ✓
SHA
DHE-RSA- ✓ ✓
AES256-
SHA
ECDHE- ✓ ✓ ✓ ✓ ✓ ✓
ECDSA-
AES128-
GCM-
SHA256
ECDHE- ✓ ✓ ✓ ✓ ✓ ✓
ECDSA-
AES128-
SHA256
ECDHE- ✓ ✓ ✓ ✓ ✓ ✓
ECDSA-
AES128-
SHA
404
AWS IoT Core Guía para desarrolladores
Seguridad de transporte en AWS IoT Core
Políticas TLS13_1_3_2022_10
TLS13_1_2_2022_10
TLS12_1_2_2022_10
TLS12_1_0_2016_01* TLS12_1_0_2015_01*
de
seguridad
ECDHE- ✓ ✓ ✓ ✓ ✓ ✓
ECDSA-
AES256-
GCM-
SHA384
ECDHE- ✓ ✓ ✓ ✓ ✓ ✓
ECDSA-
AES256-
SHA384
ECDHE- ✓ ✓ ✓ ✓ ✓ ✓
ECDSA-
AES256-
SHA
Note
Los dispositivos que han intentado realizar conexiones con una contraseña incorrecta o
inválidahost_nameel valor fallará.AWS IoT Coreregistrará los errores en CloudWatch para el tipo de
autenticación deAutenticación personalizada.
405
AWS IoT Core Guía para desarrolladores
Cifrado de datos
Para obtener más información sobre la seguridad del transporte con LoRaDispositivos WAN,
consulteSeguridad de datos con AWS IoT Core para LoRa WAN (p. 1395).
Freertos proporciona una biblioteca PKCS #11 que abstrae el almacenamiento de claves, el acceso a
objetos criptográficos y la administración de sesiones. Es su responsabilidad utilizar esta biblioteca para
cifrar los datos en reposo en sus dispositivos. Para obtener más información, consulteLa biblioteca para
firmar con el estándar para criptografía para claves públicas (PKCS) para Freertos #11.
Asesor de dispositivos
Cifrado en tránsito
Los datos enviados a y desde Device Advisor se cifran en tránsito. Todos los datos enviados al
servicio y desde él cuando se utilizan las API de Device Advisor se cifran mediante la versión 4
de Signature. Para obtener más información sobre cómoAWSLas solicitudes de API se firman,
consulteFirmandoAWSSolicitudes de API. Todos los datos que se envían desde sus dispositivos de
prueba a su terminal de prueba de Device Advisor se envían a través de una conexión TLS, por lo que son
seguros de forma predeterminada cuando están en tránsito.
Los dispositivos deben autenticarse mediante un certificado X.509 o una identidad de Amazon Cognito.
Puede hacer que AWS IoT genere un certificado para usted, en cuyo caso generará un par de claves
públicas/privadas. Si está utilizando la consola de AWS IoT, se le pedirá que descargue el certificado y
las claves. Si utiliza elcreate-keys-and-certificateEl comando CLI devuelve el certificado y las
claves. Usted es responsable de copiar el certificado y la clave privada en su dispositivo y de mantenerlos
seguros.
AWS IoTno es compatible actualmente con la gestión del clienteAWS KMS keys(claves KMS) deAWS Key
Management Service(AWS KMS); sin embargo, Device Advisor yAWS IoTLa conexión inalámbrica utiliza
únicamente unClave propiedad de AWSpara cifrar los datos de los clientes.
Asesor de dispositivos
Todos los datos se envían a Device Advisor cuando se utiliza elAWSLas API se cifran en reposo. Device
Advisor cifra todos sus datos en reposo mediante claves de KMS alojadas y alojadas y administradas
enAWS Key Management Service. Device Advisor cifra sus datos medianteClaves propiedad de AWS.
Para obtener más información acerca de Claves propiedad de AWS, consulte Claves propiedad de AWS.
406
AWS IoT Core Guía para desarrolladores
Administración de identidades y accesos
Temas
• Público (p. 407)
• Autenticar a través de las identidades de IAM (p. 407)
• Administración de acceso mediante políticas (p. 410)
• Cómo AWS IoT funciona con IAM (p. 411)
• Ejemplos de políticas basadas en identidad de AWS IoT (p. 429)
• Políticas administradas de AWS para AWS IoT (p. 432)
• Solución de problemas de identidades y accesos en AWS IoT (p. 442)
Público
La forma en que utilice AWS Identity and Access Management (IAM) difiere en función del trabajo que
realice en AWS IoT.
Usuario de servicio: si utiliza el servicio de AWS IoT para realizar su trabajo, su administrador le
proporciona las credenciales y los permisos que necesita. A medida que utilice más características
de AWS IoT para realizar su trabajo, es posible que necesite permisos adicionales. Entender cómo se
administra el acceso puede ayudarlo a solicitar los permisos correctos a su administrador. Si no puede
acceder a una característica en AWS IoT, consulte Solución de problemas de identidades y accesos en
AWS IoT (p. 442).
Administrador de servicio: si está a cargo de los recursos de AWS IoT en su empresa, probablemente
tenga acceso completo a AWS IoT. Su trabajo consiste en determinar a qué características y recursos
de AWS IoT deben acceder los usuarios del servicio. Luego, debe enviar solicitudes a su administrador
de IAM para cambiar los permisos de los usuarios de su servicio. Revise la información de esta página
para conocer los conceptos básicos de IAM. Para obtener más información sobre cómo su empresa puede
utilizar IAM con AWS IoT, consulte Cómo AWS IoT funciona con IAM (p. 411).
Administrador de IAM: si es un administrador de IAM, es posible que quiera conocer más detalles sobre
cómo escribir políticas para administrar el acceso a AWS IoT. Para consultar ejemplos de políticas
basadas en la identidad de AWS IoT que puede utilizar en IAM, consulte Ejemplos de políticas basadas en
identidad de AWS IoT (p. 429).
La autenticación es la manera de iniciar sesión en AWS mediante credenciales de identidad. Debe estar
autenticado (haber iniciado sesión en AWS) como el Usuario raíz de la cuenta de AWS, como un usuario
de IAM o asumiendo un rol de IAM.
Puede iniciar sesión en AWS como una identidad federada mediante las credenciales proporcionadas
a través de una fuente de identidad. AWS IAM Identity Center Los usuarios (IAM Identity Center), la
407
AWS IoT Core Guía para desarrolladores
Autenticar a través de las identidades de IAM
autenticación de inicio de sesión único de su empresa y sus credenciales de Google o Facebook son
ejemplos de identidades federadas. Al iniciar sesión como identidad federada, su administrador habrá
configurado previamente la federación de identidades mediante roles de IAM. Cuando accede a AWS
mediante la federación, está asumiendo un rol de forma indirecta.
Según el tipo de usuario que sea, puede iniciar sesión en la AWS Management Console o en el portal
de acceso AWS. Para obtener más información sobre el inicio de sesión en AWS, consulte Cómo iniciar
sesión en su Cuenta de AWS en la Guía del usuario de AWS Sign-In.
Si accede a AWS mediante programación, AWS proporciona un kit de desarrollo de software (SDK) y una
interfaz de línea de comandos (CLI) para firmar criptográficamente las solicitudes mediante el uso de las
credenciales. Si no usa las herramientas de AWS, debe firmar usted mismo las solicitudes. Para obtener
más información sobre la firma de solicitudes, consulte Firma de solicitudes API de AWS en la Guía del
usuario de IAM.
Independientemente del método de autenticación que use, es posible que deba proporcionar información
de seguridad adicional. Por ejemplo, AWS le recomienda el uso de la autenticación multifactor (MFA) para
aumentar la seguridad de su cuenta. Para obtener más información, consulte Autenticación multifactor en
la Guía del usuario de AWS IAM Identity Center y Uso de la autenticación multifactor (MFA) en AWS en la
Guía del usuario de IAM.
Un grupo de IAM es una identidad que especifica un conjunto de usuarios de IAM. No puede iniciar sesión
como grupo. Puede usar los grupos para especificar permisos para varios usuarios a la vez. Los grupos
facilitan la administración de los permisos de grandes conjuntos de usuarios. Por ejemplo, podría tener un
grupo cuyo nombre fuese IAMAdmins y conceder permisos a dicho grupo para administrar los recursos de
IAM.
Los usuarios son diferentes de los roles. Un usuario se asocia exclusivamente a una persona o aplicación,
pero la intención es que cualquier usuario pueda asumir un rol que necesite. Los usuarios tienen
credenciales permanentes a largo plazo y los roles proporcionan credenciales temporales. Para obtener
más información, consulte Cuándo crear un usuario de IAM (en lugar de un rol) en la Guía del usuario de
IAM.
IAM roles
Un rol de IAM es una identidad de la Cuenta de AWS que dispone de permisos específicos. Es similar a un
usuario de IAM, pero no está asociado a una determinada persona. Puede asumir temporalmente un rol de
408
AWS IoT Core Guía para desarrolladores
Autenticar a través de las identidades de IAM
IAM en la AWS Management Consolecambiando de roles. Puede asumir un rol llamando a una operación
de la AWS CLI o de la API de AWS, o utilizando una URL personalizada. Para obtener más información
acerca de los métodos para el uso de roles, consulte Uso de roles de IAM en la Guía del usuario de IAM.
Los roles de IAM con credenciales temporales son útiles en las siguientes situaciones:
• Acceso de usuario federado: para asignar permisos a una identidad federada, puede crear un rol y
definir permisos para este. Cuando se autentica una identidad federada, se asocia la identidad al rol
y se le conceden los permisos que están definidos en este. Para obtener información acerca de roles
para federación, consulte Creación de un rol para un proveedor de identidades de terceros en la Guía
del usuario de IAM. Si utiliza el Centro de identidades de IAM, debe configurar un conjunto de permisos.
El Centro de identidades de IAM correlaciona el conjunto de permisos con un rol en IAM para controlar
a qué pueden acceder las identidades después de autenticarse. Para obtener información acerca de
los conjuntos de permisos, consulte Conjuntos de permisos en la Guía del usuario de AWS IAM Identity
Center.
• Permisos de usuario de IAM temporales: un usuario de IAM puede asumir un rol de IAM para recibir
temporalmente permisos distintos que le permitan realizar una tarea concreta.
• Acceso entre cuentas: puede utilizar un rol de IAM para permitir que alguien (una entidad principal
de confianza) de otra cuenta acceda a los recursos de la cuenta. Los roles son la forma principal
de conceder acceso entre cuentas. No obstante, con algunos Servicios de AWS se puede adjuntar
una política directamente a un recurso (en lugar de utilizar un rol como representante). Para obtener
información acerca de la diferencia entre los roles y las políticas basadas en recursos para el acceso
entre cuentas, consulte Cómo los roles de IAM difieren de las políticas basadas en recursos en la Guía
del usuario de IAM.
• Acceso entre servicios: algunos Servicios de AWS utilizan características de otros Servicios de AWS.
Por ejemplo, cuando realiza una llamada en un servicio, es común que ese servicio ejecute aplicaciones
en Amazon EC2 o almacene objetos en Amazon S3. Es posible que un servicio haga esto usando los
permisos de la entidad principal, usando un rol de servicio o usando un rol vinculado a servicios.
• Permisos principales: cuando utiliza un usuario o un rol de IAM para llevar a cabo acciones en AWS,
se lo considera una entidad principal. Las políticas conceden permisos a una entidad principal.
Cuando utiliza algunos servicios, es posible que realice una acción que desencadene otra acción en
un servicio diferente. En este caso, debe tener permisos para realizar ambas acciones. Para ver si
una acción requiere acciones dependientes adicionales en una política, consulte Acciones, recursos y
claves de condición de AWS IoT en la Referencia de autorizaciones de servicio.
• Rol de servicio: un rol de servicio es un rol de IAM que adopta un servicio para realizar acciones en su
nombre. Un administrador de IAM puede crear, modificar y eliminar un rol de servicio desde IAM. Para
obtener más información, consulte Creación de un rol para delegar permisos a un Servicio de AWS en
la Guía del usuario de IAM.
• Rol vinculado a servicio: un rol vinculado a servicio es un tipo de rol de servicio que está vinculado a
un Servicio de AWS. El servicio puede asumir el rol para realizar una acción en su nombre. Los roles
vinculados a servicios aparecen en la Cuenta de AWS y son propiedad del servicio. Un administrador
de IAM puede ver, pero no editar, los permisos de los roles vinculados a servicios.
• Aplicaciones que se ejecutan en Amazon EC2: puede utilizar un rol de IAM que le permita administrar
credenciales temporales para las aplicaciones que se ejecutan en una instancia de EC2 y realizan
solicitudes a la AWS CLI o a la API de AWS. Es preferible hacerlo de este modo a almacenar claves
de acceso en la instancia de EC2. Para asignar un rol de AWS a una instancia de EC2 y ponerla a
disposición de todas las aplicaciones, cree un perfil de instancia adjuntado a la instancia. Un perfil de
instancia contiene el rol y permite a los programas que se ejecutan en la instancia de EC2 obtener
credenciales temporales. Para obtener más información, consulte Uso de un rol de IAM para conceder
permisos a aplicaciones que se ejecutan en instancias Amazon EC2 en la Guía del usuario de IAM.
Para obtener información sobre el uso de los roles de IAM, consulte Cuándo crear un rol de IAM (en lugar
de un usuario) en la Guía del usuario de IAM.
409
AWS IoT Core Guía para desarrolladores
Administración de acceso mediante políticas
Los administradores pueden utilizar las políticas JSON de AWS para especificar quién tiene acceso a qué.
Es decir, qué entidad principal puede realizar acciones en qué recursos y bajo qué condiciones.
De forma predeterminada, los usuarios y los roles no tienen permisos. Un administrador de IAM puede
crear políticas de IAM para conceder permisos a los usuarios para realizar acciones en los recursos que
necesitan. A continuación, el administrador puede agregar las políticas de IAM a los roles y los usuarios
pueden asumirlos.
Las políticas de IAM definen permisos para una acción independientemente del método que se utilice
para realizar la operación. Por ejemplo, suponga que dispone de una política que permite la acción
iam:GetRole. Un usuario con dicha política puede obtener información del usuario de la AWS
Management Console, la AWS CLI o la API de AWS.
Las políticas basadas en identidad pueden clasificarse además como políticas insertadas o políticas
administradas. Las políticas insertadas se integran directamente en un único usuario, grupo o rol. Las
políticas administradas son políticas independientes que puede adjuntar a varios usuarios, grupos y roles
de su Cuenta de AWS. Las políticas administradas incluyen las políticas administradas por AWS y las
políticas administradas por el cliente. Para obtener más información acerca de cómo elegir una política
administrada o una política insertada, consulte Elegir entre políticas administradas y políticas insertadas en
la Guía del usuario de IAM.
Las políticas basadas en recursos son políticas insertadas que se encuentran en ese servicio. No se puede
utilizar políticas de IAM administradas por AWS en una política basada en recursos.
410
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
Amazon S3, AWS WAF y Amazon VPC son ejemplos de servicios que admiten las ACL. Para obtener más
información sobre las ACL, consulte Información general de Lista de control de acceso (ACL) en la Guía
para desarrolladores de Amazon Simple Storage Service.
• Límites de permisos: un límite de permisos es una característica avanzada que le permite establecer los
permisos máximos que una política basada en identidad puede conceder a una entidad de IAM (usuario
o rol de IAM). Puede establecer un límite de permisos para una identidad. Los permisos resultantes son
la intersección de las políticas basadas en identidad de la entidad y los límites de permisos. Las políticas
basadas en recursos que especifiquen el usuario o rol en el campo Principal no estarán restringidas
por el límite de permisos. Una denegación explícita en cualquiera de estas políticas anulará el permiso.
Para obtener más información sobre los límites de los permisos, consulte Límites de permisos para las
entidades de IAM en la Guía del usuario de IAM.
• Políticas de control de servicio (SCP): las SCP son políticas de JSON que especifican los permisos
máximos de una organización o una unidad organizativa en AWS Organizations. AWS Organizations
es un servicio que le permite agrupar y administrar de manera centralizada varias Cuentas de AWS que
posea su empresa. Si habilita todas las características en una organización, entonces podrá aplicar
políticas de control de servicio (SCP) a una o todas sus cuentas. Una SCP limita los permisos para las
entidades de las cuentas de miembros, incluido cada Usuario raíz de la cuenta de AWS. Para obtener
más información acerca de Organizations y las SCP, consulte Funcionamiento de las SCP en la Guía del
usuario de AWS Organizations.
• Políticas de sesión: las políticas de sesión son políticas avanzadas que se pasan como parámetro
cuando se crea una sesión temporal mediante programación para un rol o un usuario federado. Los
permisos de la sesión resultantes son la intersección de las políticas basadas en identidad del rol y las
políticas de la sesión. Los permisos también pueden proceder de una política basada en recursos. Una
denegación explícita en cualquiera de estas políticas anulará el permiso. Para obtener más información,
consulte Políticas de sesión en la Guía del usuario de IAM.
Temas
• Políticas de AWS IoT basadas en identidades (p. 412)
• Políticas de AWS IoT basadas en recursos (p. 428)
• Autorización basada en etiquetas de AWS IoT (p. 428)
• Roles de IAM de AWS IoT (p. 428)
411
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
Acciones
Los administradores pueden utilizar las políticas JSON de AWS para especificar quién tiene acceso a qué.
Es decir, qué entidad principal puede realizar acciones en qué recursos y bajo qué condiciones.
El elemento Action de una política JSON describe las acciones que puede utilizar para permitir o denegar
el acceso en una política. Las acciones de la política generalmente tienen el mismo nombre que la
operación de API de AWS asociada. Hay algunas excepciones, como acciones de solo permiso que no
tienen una operación de API coincidente. También hay algunas operaciones que requieren varias acciones
en una política. Estas acciones adicionales se denominan acciones dependientes.
Incluya acciones en una política para conceder permisos y así llevar a cabo la operación asociada.
La siguiente tabla enumera las acciones para IAM para IoT, lasAWS IoTLa API y el recurso que manipula
la acción.
IoT:AcceptCertificateTransfer
AcceptCertificateTransfer
arn:aws:iot:region:account-id:cert/cert-id
Note
IoT:AddThingToThingGroup
AddThingToThingGroup
arn:aws:iot:region:account-
id:thinggroup/thing-group-name
arn:aws:iot:region:account-id:thing/thing-name
IoT:AssociateTargetsWithJob
AssociateTargetsWithJob
ninguno
o bien
arn:aws:iot:region:account-id:cert/cert-id
IoT:AttachPrincipalPolicy
AttachPrincipalPolicy arn:aws:iot:region:account-id:cert/cert-id
IoT:AttachSecurityProfile
AttachSecurityProfile arn:aws:iot:region:account-
id:securityprofile/security-profile-name
arn:aws:iot:region:account-
id:dimension/dimension-name
IoT:AttachThingPrincipal
AttachThingPrincipal arn:aws:iot:region:account-id:cert/cert-id
IoT:CancelCertificateTransfer
CancelCertificateTransfer
arn:aws:iot:region:account-id:cert/cert-id
412
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
IoT:CancelJobExecution
CancelJobExecution arn:aws:iot:region:account-id:job/job-id
arn:aws:iot:region:account-id:thing/thing-name
IoT:ClearDefaultAuthorizer
ClearDefaultAuthorizer
Ninguno
IoT:CreateCertificateFromCsr
CreateCertificateFromCsr
*
IoT:CreateDimensionCreateDimension arn:aws:iot:region:account-
id:dimension/dimension-name
arn:aws:iot:region:account-
id:thinggroup/thing-group-name
arn:aws:iot:region:account-id:thing/thing-name
arn:aws:iot:region:account-id:jobtemplate/job-
template-id
IoT:CreateJobTemplate
CreateJobTemplate arn:aws:iot:region:account-id:job/job-id
arn:aws:iot:region:account-id:jobtemplate/job-
template-id
IoT:CreateKeysAndCertificate
CreateKeysAndCertificate
*
IoT:CreatePolicyVersion
CreatePolicyVersion arn:aws:iot:region:account-id:policy/policy-
name
Note
arn:aws:iot:region:account-id:rolealias/role-
alias-name
413
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
IoT:CreateSecurityProfile
CreateSecurityProfilearn:aws:iot:region:account-
id:securityprofile/security-profile-name
arn:aws:iot:region:account-
id:dimension/dimension-name
IoT:CreateThingGroupCreateThingGroup arn:aws:iot:region:account-
id:thinggroup/thing-group-name
IoT:CreateThingTypeCreateThingType arn:aws:iot:region:account-id:thingtype/thing-
type-name
iot:DeleteCACertificate
DeleteCACertificate arn:aws:iot:region:account-id:cacert/cert-id
IoT:DeleteJobTemplate
DeleteJobTemplate arn:aws:iot:region:account-id:job/job-
template-id
IoT:DeleteJobExecution
DeleteJobExecution arn:aws:iot:region:account-id:job/job-id
arn:aws:iot:region:account-id:thing/thing-name
raíz:DeletePolicyVersion
DeletePolicyVersion arn:aws:iot:region:account-id:policy/policy-
name
IoT:DeleteRegistrationCode
DeleteRegistrationCode
*
IoT:DeleteSecurityProfile
DeleteSecurityProfile arn:aws:iot:region:account-
id:securityprofile/security-profile-name
arn:aws:iot:region:account-
id:dimension/dimension-name
414
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
IoT:DeleteThingGroupDeleteThingGroup arn:aws:iot:region:account-
id:thinggroup/thing-group-name
IoT:DeprecateThingType
DeprecateThingType arn:aws:iot:region:account-id:thingtype/thing-
type-name
IoT:DescribeAuthorizer
DescribeAuthorizer arn:aws:iot:region:account-
id:authorizer/authorizer-function-name
(parámetro: authorizerName)
ninguno
iot:DescribeCACertificate
DescribeCACertificatearn:aws:iot:region:account-id:cacert/cert-id
IoT:DescribeCertificate
DescribeCertificate arn:aws:iot:region:account-id:cert/cert-id
IoT:DescribeDefaultAuthorizer
DescribeDefaultAuthorizer
Ninguno
IoT:DescribeEndpointDescribeEndpoint *
IoT:DescribeEventConfigurations
DescribeEventConfigurations
ninguno
IoT:DescribeJobExecution
DescribeJobExecutionNinguno
IoT:DescribeJobTemplate
DescribeJobTemplatearn:aws:iot:region:account-id:job/job-
template-id
IoT:DescribeRoleAliasDescribeRoleAlias arn:aws:iot:region:account-id:rolealias/role-
alias-name
IoT:DescribeThingGroup
DescribeThingGroup arn:aws:iot:region:account-
id:thinggroup/thing-group-name
IoT:DescribeThingRegistrationTask
DescribeThingRegistrationTask
Ninguno
IoT:DescribeThingType
DescribeThingType arn:aws:iot:region:account-id:thingtype/thing-
type-name
o bien
arn:aws:iot:region:account-
id:thinggroup/thing-group-name
415
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
IoT:DetachPrincipalPolicy
DetachPrincipalPolicyarn:aws:iot:region:account-id:cert/cert-id
IoT:DetachSecurityProfile
DetachSecurityProfilearn:aws:iot:region:account-
id:securityprofile/security-profile-name
arn:aws:iot:region:account-
id:dimension/dimension-name
IoT:DetachThingPrincipal
DetachThingPrincipalarn:aws:iot:region:account-id:cert/cert-id
IoT:DisableTopicRuleDisableTopicRule arn:aws:iot:region:account-id:rule/rule-name
IoT:GetEffectivePolicies
GetEffectivePolicies arn:aws:iot:region:account-id:cert/cert-id
IoT:GetIndexingConfiguration
GetIndexingConfiguration
Ninguno
IoT:GetJobDocumentGetJobDocument arn:aws:iot:region:account-id:job/job-id
IoT:GetLoggingOptions
GetLoggingOptions *
IoT:GetRegistrationCode
GetRegistrationCode *
IoT:ListAttachedPolicies
ListAttachedPolicies arn:aws:iot:region:account-
id:thinggroup/thing-group-name
o bien
arn:aws:iot:region:account-id:cert/cert-id
iot:ListCACertificates ListCACertificates *
IoT:ListCertificates ListCertificates *
IoT:ListCertificatesByCA
ListCertificatesByCA *
IoT:ListJobExecutionsForJob
ListJobExecutionsForJob
Ninguno
IoT:ListJobExecutionsForThing
ListJobExecutionsForThing
Ninguno
416
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
IoT:ListOutgoingCertificates
ListOutgoingCertificates
*
IoT:ListPolicies ListPolicies *
IoT:ListPolicyPrincipals
ListPolicyPrincipals *
IoT:ListPolicyVersionsListPolicyVersions arn:aws:iot:region:account-id:policy/policy-
name
IoT:ListPrincipalPolicies
ListPrincipalPolicies arn:aws:iot:region:account-id:cert/cert-id
IoT:ListPrincipalThings
ListPrincipalThings arn:aws:iot:region:account-id:cert/cert-id
IoT:ListTargetsForPolicy
ListTargetsForPolicy arn:aws:iot:region:account-id:policy/policy-
name
IoT:ListThingGroupsForThing
ListThingGroupsForThing
arn:aws:iot:region:account-id:thing/thing-name
IoT:ListThingPrincipals
ListThingPrincipals arn:aws:iot:region:account-id:thing/thing-name
IoT:ListThingRegistrationTaskReports
ListThingRegistrationTaskReports
Ninguno
IoT:ListThingRegistrationTasks
ListThingRegistrationTasks
Ninguno
IoT:ListThingTypes ListThingTypes *
IoT:ListThings ListThings *
IoT:ListThingsInThingGroup
ListThingsInThingGroup
arn:aws:iot:region:account-
id:thinggroup/thing-group-name
IoT:ListTopicRules ListTopicRules *
iot:RegisterCACertificate
RegisterCACertificate*
IoT:RegisterCertificateRegisterCertificate *
IoT:RejectCertificateTransfer
RejectCertificateTransfer
arn:aws:iot:region:account-id:cert/cert-id
IoT:RemoveThingFromThingGroup
RemoveThingFromThingGroup
arn:aws:iot:region:account-
id:thinggroup/thing-group-name
arn:aws:iot:region:account-id:thing/thing-name
IoT:ReplaceTopicRuleReplaceTopicRule arn:aws:iot:region:account-id:rule/rule-name
IoT:SetDefaultAuthorizer
SetDefaultAuthorizer arn:aws:iot:region:account-
id:authorizer/authorizer-function-name
417
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
IoT:SetDefaultPolicyVersion
SetDefaultPolicyVersion
arn:aws:iot:region:account-id:policy/policy-
name
IoT:SetLoggingOptions
SetLoggingOptions arn:aws:iot:region:account-id:role/role-name
IoT:StartThingRegistrationTask
StartThingRegistrationTask
Ninguno
IoT:StopThingRegistrationTask
StopThingRegistrationTask
Ninguno
IoT:TestAuthorizationTestAuthorization arn:aws:iot:region:account-id:cert/cert-id
IoT:TestInvokeAuthorizer
TestInvokeAuthorizerNinguno
IoT:TransferCertificateTransferCertificate arn:aws:iot:region:account-id:cert/cert-id
IoT:UpdateAuthorizerUpdateAuthorizer arn:aws:iot:region:account-
id:authorizerfunction/authorizer-function-name
iot:UpdateCACertificate
UpdateCACertificate arn:aws:iot:region:account-id:cacert/cert-id
IoT:UpdateCertificateUpdateCertificate arn:aws:iot:region:account-id:cert/cert-id
IoT:UpdateDimensionUpdateDimension arn:aws:iot:region:account-
id:dimension/dimension-name
IoT:UpdateEventConfigurations
UpdateEventConfigurations
Ninguno
IoT:UpdateIndexingConfiguration
UpdateIndexingConfiguration
Ninguno
IoT:UpdateSecurityProfile
UpdateSecurityProfilearn:aws:iot:region:account-
id:securityprofile/security-profile-name
arn:aws:iot:region:account-
id:dimension/dimension-name
IoT:UpdateThingGroup
UpdateThingGroup arn:aws:iot:region:account-
id:thinggroup/thing-group-name
IoT:UpdateThingGroupsForThing
UpdateThingGroupsForThing
arn:aws:iot:region:account-id:thing/thing-name
arn:aws:iot:region:account-
id:thinggroup/thing-group-name
Las acciones de políticas de AWS IoT utilizan el siguiente prefijo antes de la acción: iot:. Por ejemplo,
para conceder permiso a alguien para que enumere todas las cosas de IoT registradas en suCuenta de
AWScon elListThingsAPI, incluyes laiot:ListThingsacción en su política. Las instrucciones de
418
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
política deben incluir un elemento Action o NotAction. AWS IoT define su propio conjunto de acciones
que describen las tareas que se pueden realizar con este servicio.
Para especificar varias acciones en una única instrucción, sepárelas con comas del siguiente modo:
"Action": [
"ec2:action1",
"ec2:action2"
Puede utilizar caracteres comodín para especificar varias acciones (*). Por ejemplo, para especificar todas
las acciones que comiencen con la palabra Describe, incluya la siguiente acción:
"Action": "iot:Describe*"
Para ver una lista de las acciones de AWS IoT, consulte Acciones definidas por AWS IoT en la Guía del
usuario de IAM.
asesor de CreateSuiteDefinitionNinguno
dispositivos de
IoT:CreateSuiteDefinition
asesor de ListTagsForResourcearn:aws:iotdeviceadvisor:region:account-
dispositivos de id:suitedefinition/suite-definition-id
IoT:ListTagsForResource
arn:aws:iotdeviceadvisor:region:account-
id:suiterun/suite-definition-id/suite-run-id
419
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
iotdeviceadvisor:TagResource
TagResource arn:aws:iotdeviceadvisor:region:account-
id:suitedefinition/suite-definition-id
arn:aws:iotdeviceadvisor:region:account-
id:suiterun/suite-definition-id/suite-run-id
iotdeviceadvisor:UntagResource
UntagResource arn:aws:iotdeviceadvisor:region:account-
id:suitedefinition/suite-definition-id
arn:aws:iotdeviceadvisor:region:account-
id:suiterun/suite-definition-id/suite-run-id
asesor de UpdateSuiteDefinitionarn:aws:iotdeviceadvisor:region:account-
dispositivos de id:suitedefinition/suite-definition-id
IoT:UpdateSuiteDefinition
Acciones de políticas enAWS IoTEn Device Advisor, utilice el siguiente prefijo antes de la
acción:iotdeviceadvisor:. Por ejemplo, para conceder a una persona el permiso de lista de
todas las definiciones de suite alojadas en suCuenta de AWScon el ListSuiteDefinitions API, incluyes
laiotdeviceadvisor:ListSuiteDefinitionsacción en su política.
Recursos
Los administradores pueden utilizar las políticas JSON de AWS para especificar quién tiene acceso a qué.
Es decir, qué entidad principal puede realizar acciones en qué recursos y bajo qué condiciones.
El elemento Resource de la política JSON especifica el objeto u objetos a los que se aplica la acción.
Las instrucciones deben contener un elemento Resource o NotResource. Como práctica recomendada,
especifique un recurso utilizando el Nombre de recurso de Amazon (ARN). Puede hacerlo para acciones
que admitan un tipo de recurso específico, conocido como permisos de nivel de recurso.
Para las acciones que no admiten permisos de nivel de recurso, como las operaciones de descripción,
utilice un carácter comodín (*) para indicar que la instrucción se aplica a todos los recursos.
"Resource": "*"
IoT:AcceptCertificateTransfer
AcceptCertificateTransfer
arn:aws:iot:region:account-id:cert/cert-id
Note
420
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
IoT:AddThingToThingGroup
AddThingToThingGroup
arn:aws:iot:region:account-
id:thinggroup/thing-group-name
arn:aws:iot:region:account-id:thing/thing-name
IoT:AssociateTargetsWithJob
AssociateTargetsWithJob
Ninguno
o bien
arn:aws:iot:region:account-id:cert/cert-id
IoT:AttachPrincipalPolicy
AttachPrincipalPolicy arn:aws:iot:region:account-id:cert/cert-id
IoT:AttachThingPrincipal
AttachThingPrincipal arn:aws:iot:region:account-id:cert/cert-id
IoT:CancelCertificateTransfer
CancelCertificateTransfer
arn:aws:iot:region:account-id:cert/cert-id
Note
IoT:CancelJobExecution
CancelJobExecution arn:aws:iot:region:account-id:job/job-id
arn:aws:iot:region:account-id:thing/thing-name
IoT:ClearDefaultAuthorizer
ClearDefaultAuthorizer
Ninguno
IoT:CreateCertificateFromCsr
CreateCertificateFromCsr
*
arn:aws:iot:region:account-
id:thinggroup/thing-group-name
arn:aws:iot:region:account-id:thing/thing-name
arn:aws:iot:region:account-id:jobtemplate/job-
template-id
IoT:CreateJobTemplate
CreateJobTemplate arn:aws:iot:region:account-id:job/job-id
arn:aws:iot:region:account-id:jobtemplate/job-
template-id
IoT:CreateKeysAndCertificate
CreateKeysAndCertificate
*
421
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
CreatePolicyVersion IoT:CreatePolicyVersion
arn:aws:iot:region:account-id:policy/policy-
name
Note
arn:aws:iot:region:account-id:rolealias/role-
alias-name
IoT:CreateThingGroupCreateThingGroup arn:aws:iot:region:account-
id:thinggroup/thing-group-name
IoT:CreateThingTypeCreateThingType arn:aws:iot:region:account-id:thingtype/thing-
type-name
iot:DeleteCACertificate
DeleteCACertificate arn:aws:iot:region:account-id:cacert/cert-id
IoT:DeleteJobExecution
DeleteJobExecution arn:aws:iot:region:account-id:job/job-id
arn:aws:iot:region:account-id:thing/thing-name
IoT:DeleteJobTemplate
DeleteJobTemplate arn:aws:iot:region:account-id:jobtemplate/job-
template-id
IoT:DeletePolicyVersion
DeletePolicyVersion arn:aws:iot:region:account-id:policy/policy-
name
IoT:DeleteRegistrationCode
DeleteRegistrationCode
*
IoT:DeleteThingGroupDeleteThingGroup arn:aws:iot:region:account-
id:thinggroup/thing-group-name
422
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
IoT:DeprecateThingType
DeprecateThingType arn:aws:iot:region:account-id:thingtype/thing-
type-name
IoT:DescribeAuthorizer
DescribeAuthorizer arn:aws:iot:region:account-
id:authorizer/authorizer-function-name
(parámetro: authorizerName)
ninguno
iot:DescribeCACertificate
DescribeCACertificatearn:aws:iot:region:account-id:cacert/cert-id
IoT:DescribeCertificate
DescribeCertificate arn:aws:iot:region:account-id:cert/cert-id
IoT:DescribeDefaultAuthorizer
DescribeDefaultAuthorizer
Ninguno
IoT:DescribeEndpointDescribeEndpoint *
IoT:DescribeEventConfigurations
DescribeEventConfigurations
ninguno
IoT:DescribeJobExecution
DescribeJobExecutionNinguno
IoT:DescribeJobTemplate
DescribeJobTemplatearn:aws:iot:region:account-id:jobtemplate/job-
template-id
IoT:DescribeRoleAliasDescribeRoleAlias arn:aws:iot:region:account-id:rolealias/role-
alias-name
IoT:DescribeThingGroup
DescribeThingGroup arn:aws:iot:region:account-
id:thinggroup/thing-group-name
IoT:DescribeThingRegistrationTask
DescribeThingRegistrationTask
Ninguno
IoT:DescribeThingType
DescribeThingType arn:aws:iot:region:account-id:thingtype/thing-
type-name
o bien
arn:aws:iot:region:account-
id:thinggroup/thing-group-name
IoT:DetachPrincipalPolicy
DetachPrincipalPolicyarn:aws:iot:region:account-id:cert/cert-id
423
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
IoT:DetachThingPrincipal
DetachThingPrincipalarn:aws:iot:region:account-id:cert/cert-id
IoT:DisableTopicRuleDisableTopicRule arn:aws:iot:region:account-id:rule/rule-name
IoT:GetEffectivePolicies
GetEffectivePolicies arn:aws:iot:region:account-id:cert/cert-id
IoT:GetIndexingConfiguration
GetIndexingConfiguration
Ninguno
IoT:GetJobDocumentGetJobDocument arn:aws:iot:region:account-id:job/job-id
IoT:GetLoggingOptions
GetLoggingOptions *
IoT:GetRegistrationCode
GetRegistrationCode *
IoT:ListAttachedPolicies
ListAttachedPolicies arn:aws:iot:region:account-
id:thinggroup/thing-group-name
o bien
arn:aws:iot:region:account-id:cert/cert-id
iot:ListCACertificates ListCACertificates *
IoT:ListCertificates ListCertificates *
IoT:ListCertificatesByCA
ListCertificatesByCA *
IoT:ListJobExecutionsForJob
ListJobExecutionsForJob
Ninguno
IoT:ListJobExecutionsForThing
ListJobExecutionsForThing
Ninguno
IoT:ListOutgoingCertificates
ListOutgoingCertificates
*
IoT:ListPolicies ListPolicies *
IoT:ListPolicyPrincipals
ListPolicyPrincipals arn:aws:iot:region:account-id:policy/policy-
name
424
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
IoT:ListPolicyVersionsListPolicyVersions arn:aws:iot:region:account-id:policy/policy-
name
IoT:ListPrincipalPolicies
ListPrincipalPolicies arn:aws:iot:region:account-id:cert/cert-id
IoT:ListPrincipalThings
ListPrincipalThings arn:aws:iot:region:account-id:cert/cert-id
IoT:ListTargetsForPolicy
ListTargetsForPolicy arn:aws:iot:region:account-id:policy/policy-
name
IoT:ListThingGroupsForThing
ListThingGroupsForThing
arn:aws:iot:region:account-id:thing/thing-name
IoT:ListThingPrincipals
ListThingPrincipals arn:aws:iot:region:account-id:thing/thing-name
IoT:ListThingRegistrationTaskReports
ListThingRegistrationTaskReports
Ninguno
IoT:ListThingRegistrationTasks
ListThingRegistrationTasks
Ninguno
IoT:ListThingTypes ListThingTypes *
IoT:ListThings ListThings *
IoT:ListThingsInThingGroup
ListThingsInThingGroup
arn:aws:iot:region:account-
id:thinggroup/thing-group-name
IoT:ListTopicRules ListTopicRules *
iot:RegisterCACertificate
RegisterCACertificate*
IoT:RegisterCertificateRegisterCertificate *
IoT:RejectCertificateTransfer
RejectCertificateTransfer
arn:aws:iot:region:account-id:cert/cert-id
IoT:RemoveThingFromThingGroup
RemoveThingFromThingGroup
arn:aws:iot:region:account-
id:thinggroup/thing-group-name
arn:aws:iot:region:account-id:thing/thing-name
IoT:ReplaceTopicRuleReplaceTopicRule arn:aws:iot:region:account-id:rule/rule-name
IoT:SetDefaultAuthorizer
SetDefaultAuthorizer arn:aws:iot:region:account-
id:authorizer/authorizer-function-name
IoT:SetDefaultPolicyVersion
SetDefaultPolicyVersion
arn:aws:iot:region:account-id:policy/policy-
name
IoT:SetLoggingOptions
SetLoggingOptions *
425
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
IoT: Set *
SETv2LoggingLevel V2LoggingLevel
IoT: Set *
SetV2LoggingOptionsV2LoggingOptions
IoT:StartThingRegistrationTask
StartThingRegistrationTask
Ninguno
IoT:StopThingRegistrationTask
StopThingRegistrationTask
Ninguno
IoT:TestAuthorizationTestAuthorization arn:aws:iot:region:account-id:cert/cert-id
IoT:TestInvokeAuthorizer
TestInvokeAuthorizerNinguno
IoT:TransferCertificateTransferCertificate arn:aws:iot:region:account-id:cert/cert-id
IoT:UpdateAuthorizerUpdateAuthorizer arn:aws:iot:region:account-
id:authorizerfunction/authorizer-function-name
iot:UpdateCACertificate
UpdateCACertificate arn:aws:iot:region:account-id:cacert/cert-id
IoT:UpdateCertificateUpdateCertificate arn:aws:iot:region:account-id:cert/cert-id
IoT:UpdateEventConfigurations
UpdateEventConfigurations
Ninguno
IoT:UpdateIndexingConfiguration
UpdateIndexingConfiguration
Ninguno
IoT:UpdateThingGroup
UpdateThingGroup arn:aws:iot:region:account-
id:thinggroup/thing-group-name
IoT:UpdateThingGroupsForThing
UpdateThingGroupsForThing
arn:aws:iot:region:account-id:thing/thing-name
Para obtener más información acerca del formato de los ARN, consulte Nombres de recursos de Amazon
(ARN) y espacios de nombres de servicios de AWS.
Algunas acciones de AWS IoT, como las empleadas para la creación de recursos, no se pueden llevar a
cabo en un recurso específico. En dichos casos, debe utilizar el carácter comodín (*).
"Resource": "*"
Para ver una lista deAWS IoTlos tipos de recursos y sus ARN a través deRecursos definidos porAWS
IoTen elIAM User Guide. Para obtener información sobre las acciones con las que puede especificar el
ARN de cada recursos, consulte Acciones definidas por AWS IoT.
Para definir restricciones a nivel de recursos paraAWS IoTLas políticas de IAM de Device Advisor utilizan
los siguientes formatos de ARN de recursos para las definiciones y ejecuciones de series.
426
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
arn:aws:iotdeviceadvisor:region:account-id:suitedefinition/suite-definition-
id
Ejecute el comando siguiente.
arn:aws:iotdeviceadvisor:region:account-id:suiterun/suite-definition-
id/suite-run-id
Claves de condición
Los administradores pueden utilizar las políticas JSON de AWS para especificar quién tiene acceso a qué.
Es decir, qué entidad principal puede realizar acciones en qué recursos y bajo qué condiciones.
El elemento Condition (o bloque de Condition) permite especificar condiciones en las que entra
en vigor una instrucción. El elemento Condition es opcional. Puede crear expresiones condicionales
que utilicen operadores de condición, tales como igual o menor que, para que la condición de la política
coincida con los valores de la solicitud.
Si especifica varios elementos de Condition en una instrucción o varias claves en un único elemento de
Condition, AWS las evalúa mediante una operación AND lógica. Si especifica varios valores para una
única clave de condición, AWS evalúa la condición con una operación lógica OR. Se deben cumplir todas
las condiciones antes de que se concedan los permisos de la instrucción.
También puede utilizar variables de marcador de posición al especificar condiciones. Por ejemplo, puede
conceder un permiso de usuario de IAM para acceder a un recurso solo si está etiquetado con su nombre
de usuario de IAM. Para obtener más información, consulte Elementos de la política de IAM: variables y
etiquetas en la Guía del usuario de IAM.
AWS admite claves de condición globales y claves de condición específicas del servicio. Para ver todas las
claves de condición globales de AWS, consulte Claves de contexto de condición globales de AWS en la
Guía del usuario de IAM.
AWS IoT define su propio conjunto de claves de condición y también admite el uso de algunas claves de
condición globales. Para ver todas las claves de condición globales de AWS, consulte Claves de contexto
de condición globales de AWS en la Guía del usuario de IAM.
427
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT funciona con IAM
Para ver una lista deAWS IoTclaves de condición, consulteClaves de condición paraAWS IoTen elIAM
User Guide. Para obtener más información acerca de las acciones y los recursos con los que puede utilizar
una clave de condición, consulte Acciones definidas por AWS IoT.
Ejemplos
Para ver ejemplos de políticas basadas en identidad de AWS IoT, consulte Ejemplos de políticas basadas
en identidad de AWS IoT (p. 429).
AWS IoTno es compatible con las políticas de IAM basadas en recursos. Sin embargo, sí es
compatibleAWS IoTpolíticas basadas en recursos. Para obtener más información, consulte Políticas de
AWS IoT Core (p. 351).
Para consultar un ejemplo de política basada en la identidad para limitar el acceso a un recurso en
función de las etiquetas de ese recurso, consulte Visualización de recursos de AWS IoT basados en
etiquetas (p. 431).
428
AWS IoT Core Guía para desarrolladores
Ejemplos de políticas basadas en identidad
de IAM y son propiedad del servicio. Un administrador de IAM puede ver, pero no editar, los permisos de
los roles vinculados a servicios.
Roles de servicio
Esta característica permite que un servicio asuma un rol de servicio en su nombre. Este rol permite que
el servicio obtenga acceso a los recursos de otros servicios para completar una acción en su nombre.
Los roles de servicio aparecen en su cuenta de IAM y son propiedad de la cuenta. Esto significa que un
administrador de IAM puede cambiar los permisos de este rol. Sin embargo, hacerlo podría deteriorar la
funcionalidad del servicio.
Para obtener información acerca de cómo crear una política basada en identidad de IAM con estos
documentos de políticas JSON de ejemplo, consulte Creación de políticas en la pestaña JSON en la Guía
del usuario de IAM.
Temas
• Prácticas recomendadas relativas a políticas (p. 429)
• Mediante la consola de AWS IoT (p. 430)
• Permitir a los usuarios consultar sus propios permisos (p. 430)
• Visualización de recursos de AWS IoT basados en etiquetas (p. 431)
• VisualizaciónAWS IoTRecursos de Device Advisor a través de las etiquetas (p. 431)
• Comience con las políticas administradas por AWS y continúe con los permisos de privilegio mínimo:
a fin de comenzar a conceder permisos a los usuarios y las cargas de trabajo, utilice las políticas
administradas por AWS, que conceden permisos para muchos casos de uso comunes. Están disponibles
en la Cuenta de AWS. Se recomienda definir políticas administradas por el cliente de AWS específicas
para sus casos de uso a fin de reducir aún más los permisos. Con el fin de obtener más información,
consulte las políticas administradas por AWS o las políticas administradas por AWS para funciones de
trabajo en la Guía de usuario de IAM.
• Aplique permisos de privilegio mínimo: cuando establezca permisos con políticas de IAM, conceda solo
los permisos necesarios para realizar una tarea. Para ello, debe definir las acciones que se pueden
llevar a cabo en determinados recursos en condiciones específicas, también conocidos como permisos
de privilegios mínimos. Con el fin de obtener más información sobre el uso de IAM para aplicar permisos,
consulte Políticas y permisos en IAM en la Guía de usuario de IAM.
• Use condiciones en las políticas de IAM para restringir aún más el acceso: puede agregar una condición
a sus políticas para limitar el acceso a las acciones y los recursos. Por ejemplo, puede escribir una
429
AWS IoT Core Guía para desarrolladores
Ejemplos de políticas basadas en identidad
condición de política para especificar que todas las solicitudes deben enviarse utilizando SSL. También
puede usar condiciones para conceder acceso a acciones de servicios si se emplean a través de un
Servicio de AWS determinado, como por ejemplo AWS CloudFormation. Para obtener más información,
consulte Elementos de la política JSON de IAM: condición en la Guía del usuario de IAM.
• Use el Analizador de acceso de IAM para validar las políticas de IAM con el fin de garantizar la
seguridad y funcionalidad de los permisos: el Analizador de acceso de IAM valida políticas nuevas y
existentes para que respeten el lenguaje (JSON) de las políticas de IAM y las prácticas recomendadas
de IAM. IAM Access Analyzer proporciona más de 100 verificaciones de políticas y recomendaciones
procesables para ayudar a crear políticas seguras y funcionales. Para obtener más información, consulte
la política de validación del Analizador de acceso de IAM en la Guía de usuario de IAM.
• Solicite la autenticación multifactor (MFA): si se encuentra en una situación en la que necesita usuarios
raíz o de IAM en su Cuenta de AWS, active la MFA para mayor seguridad. Para solicitar la MFA cuando
se invocan las operaciones de la API, agregue las condiciones de MFA a sus políticas. Para obtener más
información, consulte Configuración de acceso a una API protegida por MFA en la Guía de usuario de
IAM.
Para obtener más información sobre las prácticas recomendadas de IAM, consulte las Prácticas
recomendadas de seguridad en IAM en la Guía de usuario de IAM.
Para asegurarse de que esas entidades puedan seguir usando la consola de AWS IoT, asocie también
la política administrada de AWS siguiente a las entidades AWSIoTFullAccess. Para obtener más
información, consulte Adición de permisos a un usuario en la Guía del usuario de IAM.
No es necesario que conceda permisos mínimos para la consola a los usuarios que solo realizan llamadas
a la AWS CLI o a la API de AWS. En su lugar, permite acceso únicamente a las acciones que coincidan
con la operación de API que intenta realizar.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ViewOwnUserInfo",
"Effect": "Allow",
"Action": [
"iam:GetUserPolicy",
"iam:ListGroupsForUser",
"iam:ListAttachedUserPolicies",
"iam:ListUserPolicies",
"iam:GetUser"
],
"Resource": ["arn:aws:iam::*:user/${aws:username}"]
},
{
430
AWS IoT Core Guía para desarrolladores
Ejemplos de políticas basadas en identidad
"Sid": "NavigateInConsole",
"Effect": "Allow",
"Action": [
"iam:GetGroupPolicy",
"iam:GetPolicyVersion",
"iam:GetPolicy",
"iam:ListAttachedGroupPolicies",
"iam:ListGroupPolicies",
"iam:ListPolicyVersions",
"iam:ListPolicies",
"iam:ListUsers"
],
"Resource": "*"
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListBillingGroupsInConsole",
"Effect": "Allow",
"Action": "iot:ListBillingGroups",
"Resource": "*"
},
{
"Sid": "ViewBillingGroupsIfOwner",
"Effect": "Allow",
"Action": "iot:DescribeBillingGroup",
"Resource": "arn:aws:iot:*:*:billinggroup/*",
"Condition": {
"StringEquals": {"aws:ResourceTag/Owner": "${aws:username}"}
}
}
]
}
También puede asociar esta política al usuario de IAM en su cuenta. Si un usuario llamado richard-
roe intenta ver un grupo de facturación de AWS IoT, el grupo de facturación debe estar etiquetado como
Owner=richard-roe o como owner=richard-roe. De lo contrario, se le deniega el acceso. La clave
de la etiqueta de condición Owner coincide con los nombres de las claves de condición Owner y owner
porque no distinguen entre mayúsculas y minúsculas. Para obtener más información, consulte Elementos
de la política de JSON de IAM: Condition en la Guía del usuario de IAM.
431
AWS IoT Core Guía para desarrolladores
Políticas administradas de AWS
solo se concede si la etiqueta para definir la suiteSuiteTypeestablecido en el valor deMQTT. Esta política
también proporciona los permisos necesarios para llevar a cabo esta acción en la consola.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ViewSuiteDefinition",
"Effect": "Allow",
"Action": "iotdeviceadvisor:GetSuiteDefinition",
"Resource": "arn:aws:iotdeviceadvisor:*:*:suitedefinition/*",
"Condition": {
"StringEquals": {"aws:ResourceTag/SuiteType": "MQTT"}
}
}
]
}
Para agregar permisos a usuarios, grupos y roles, es más fácil utilizar las políticas administradas de AWS
que escribirlas uno mismo. Se necesita tiempo y experiencia para crear políticas de IAM administradas
por el cliente que proporcionen a su equipo solo los permisos necesarios. Para comenzar a hacerlo con
rapidez, puede utilizar nuestras políticas administradas de AWS. Estas políticas cubren casos de uso
comunes y están disponibles en su Cuenta de AWS. Para obtener más información acerca de las políticas
administradas de AWS, consulte Políticas administradas de AWS en la Guía del usuario de IAM.
Los servicios de AWS mantienen y actualizan las políticas administradas por AWS. No puede cambiar
los permisos en las políticas administradas por AWS. En ocasiones, los servicios agregan permisos
adicionales a una política administrada por AWS para admitir características nuevas. Este tipo de
actualización afecta a todas las identidades (usuarios, grupos y roles) donde se asocia la política. Es
más probable que los servicios actualicen una política administrada por AWS cuando se lanza una nueva
característica o cuando se ponen a disposición nuevas operaciones. Los servicios no quitan permisos de
una política administrada por AWS, por lo que las actualizaciones de políticas no deteriorarán los permisos
existentes.
Además, AWS admite políticas administradas para funciones de trabajo que abarcan varios servicios.
Por ejemplo, elReadOnlyAccess AWSla política gestionada proporciona acceso de solo lectura a
todosAWSservicios y recursos. Cuando un servicio lanza una nueva característica, AWS agrega permisos
de solo lectura para las operaciones y los recursos nuevos. Para obtener una lista y descripciones de las
políticas de funciones de trabajo, consulte Políticas administradas de AWS para funciones de trabajo en la
Guía del usuario de IAM.
Note
AWS IoTfunciona con ambosAWS IoTy políticas de IAM En este tema se analizan únicamente
las políticas de IAM, que definen una acción política para las operaciones de las API del plano de
control y del plano de datos. Véase también Políticas de AWS IoT Core (p. 351).
432
AWS IoT Core Guía para desarrolladores
Políticas administradas de AWS
Esta política otorga a las identidades asociadas los permisos que permiten el acceso a todosAWS
IoToperaciones de configuración. Esta política puede afectar al procesamiento y al almacenamiento de
datos. Para ver esta política enAWS Management Console, verAWSIoTConfigAccess.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:AcceptCertificateTransfer",
"iot:AddThingToThingGroup",
"iot:AssociateTargetsWithJob",
"iot:AttachPolicy",
"iot:AttachPrincipalPolicy",
"iot:AttachThingPrincipal",
"iot:CancelCertificateTransfer",
"iot:CancelJob",
"iot:CancelJobExecution",
"iot:ClearDefaultAuthorizer",
"iot:CreateAuthorizer",
"iot:CreateCertificateFromCsr",
"iot:CreateJob",
"iot:CreateKeysAndCertificate",
"iot:CreateOTAUpdate",
"iot:CreatePolicy",
"iot:CreatePolicyVersion",
"iot:CreateRoleAlias",
"iot:CreateStream",
"iot:CreateThing",
"iot:CreateThingGroup",
"iot:CreateThingType",
"iot:CreateTopicRule",
"iot:DeleteAuthorizer",
"iot:DeleteCACertificate",
"iot:DeleteCertificate",
"iot:DeleteJob",
"iot:DeleteJobExecution",
"iot:DeleteOTAUpdate",
"iot:DeletePolicy",
"iot:DeletePolicyVersion",
"iot:DeleteRegistrationCode",
"iot:DeleteRoleAlias",
"iot:DeleteStream",
"iot:DeleteThing",
"iot:DeleteThingGroup",
"iot:DeleteThingType",
"iot:DeleteTopicRule",
"iot:DeleteV2LoggingLevel",
"iot:DeprecateThingType",
433
AWS IoT Core Guía para desarrolladores
Políticas administradas de AWS
"iot:DescribeAuthorizer",
"iot:DescribeCACertificate",
"iot:DescribeCertificate",
"iot:DescribeDefaultAuthorizer",
"iot:DescribeEndpoint",
"iot:DescribeEventConfigurations",
"iot:DescribeIndex",
"iot:DescribeJob",
"iot:DescribeJobExecution",
"iot:DescribeRoleAlias",
"iot:DescribeStream",
"iot:DescribeThing",
"iot:DescribeThingGroup",
"iot:DescribeThingRegistrationTask",
"iot:DescribeThingType",
"iot:DetachPolicy",
"iot:DetachPrincipalPolicy",
"iot:DetachThingPrincipal",
"iot:DisableTopicRule",
"iot:EnableTopicRule",
"iot:GetEffectivePolicies",
"iot:GetIndexingConfiguration",
"iot:GetJobDocument",
"iot:GetLoggingOptions",
"iot:GetOTAUpdate",
"iot:GetPolicy",
"iot:GetPolicyVersion",
"iot:GetRegistrationCode",
"iot:GetTopicRule",
"iot:GetV2LoggingOptions",
"iot:ListAttachedPolicies",
"iot:ListAuthorizers",
"iot:ListCACertificates",
"iot:ListCertificates",
"iot:ListCertificatesByCA",
"iot:ListIndices",
"iot:ListJobExecutionsForJob",
"iot:ListJobExecutionsForThing",
"iot:ListJobs",
"iot:ListOTAUpdates",
"iot:ListOutgoingCertificates",
"iot:ListPolicies",
"iot:ListPolicyPrincipals",
"iot:ListPolicyVersions",
"iot:ListPrincipalPolicies",
"iot:ListPrincipalThings",
"iot:ListRoleAliases",
"iot:ListStreams",
"iot:ListTargetsForPolicy",
"iot:ListThingGroups",
"iot:ListThingGroupsForThing",
"iot:ListThingPrincipals",
"iot:ListThingRegistrationTaskReports",
"iot:ListThingRegistrationTasks",
"iot:ListThings",
"iot:ListThingsInThingGroup",
"iot:ListThingTypes",
"iot:ListTopicRules",
"iot:ListV2LoggingLevels",
"iot:RegisterCACertificate",
"iot:RegisterCertificate",
"iot:RegisterThing",
"iot:RejectCertificateTransfer",
"iot:RemoveThingFromThingGroup",
"iot:ReplaceTopicRule",
"iot:SearchIndex",
434
AWS IoT Core Guía para desarrolladores
Políticas administradas de AWS
"iot:SetDefaultAuthorizer",
"iot:SetDefaultPolicyVersion",
"iot:SetLoggingOptions",
"iot:SetV2LoggingLevel",
"iot:SetV2LoggingOptions",
"iot:StartThingRegistrationTask",
"iot:StopThingRegistrationTask",
"iot:TestAuthorization",
"iot:TestInvokeAuthorizer",
"iot:TransferCertificate",
"iot:UpdateAuthorizer",
"iot:UpdateCACertificate",
"iot:UpdateCertificate",
"iot:UpdateEventConfigurations",
"iot:UpdateIndexingConfiguration",
"iot:UpdateRoleAlias",
"iot:UpdateStream",
"iot:UpdateThing",
"iot:UpdateThingGroup",
"iot:UpdateThingGroupsForThing",
"iot:UpdateAccountAuditConfiguration",
"iot:DescribeAccountAuditConfiguration",
"iot:DeleteAccountAuditConfiguration",
"iot:StartOnDemandAuditTask",
"iot:CancelAuditTask",
"iot:DescribeAuditTask",
"iot:ListAuditTasks",
"iot:CreateScheduledAudit",
"iot:UpdateScheduledAudit",
"iot:DeleteScheduledAudit",
"iot:DescribeScheduledAudit",
"iot:ListScheduledAudits",
"iot:ListAuditFindings",
"iot:CreateSecurityProfile",
"iot:DescribeSecurityProfile",
"iot:UpdateSecurityProfile",
"iot:DeleteSecurityProfile",
"iot:AttachSecurityProfile",
"iot:DetachSecurityProfile",
"iot:ListSecurityProfiles",
"iot:ListSecurityProfilesForTarget",
"iot:ListTargetsForSecurityProfile",
"iot:ListActiveViolations",
"iot:ListViolationEvents",
"iot:ValidateSecurityProfileBehaviors"
],
"Resource": "*"
}
]
}
Esta política otorga a la identidad asociada los permisos de identidad que permiten el acceso de solo
lectura a todosAWS IoToperaciones de configuración. Para ver esta política enAWS Management Console,
verAWSIoTConfigReadOnlyAccess.
435
AWS IoT Core Guía para desarrolladores
Políticas administradas de AWS
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:DescribeAuthorizer",
"iot:DescribeCACertificate",
"iot:DescribeCertificate",
"iot:DescribeDefaultAuthorizer",
"iot:DescribeEndpoint",
"iot:DescribeEventConfigurations",
"iot:DescribeIndex",
"iot:DescribeJob",
"iot:DescribeJobExecution",
"iot:DescribeRoleAlias",
"iot:DescribeStream",
"iot:DescribeThing",
"iot:DescribeThingGroup",
"iot:DescribeThingRegistrationTask",
"iot:DescribeThingType",
"iot:GetEffectivePolicies",
"iot:GetIndexingConfiguration",
"iot:GetJobDocument",
"iot:GetLoggingOptions",
"iot:GetOTAUpdate",
"iot:GetPolicy",
"iot:GetPolicyVersion",
"iot:GetRegistrationCode",
"iot:GetTopicRule",
"iot:GetV2LoggingOptions",
"iot:ListAttachedPolicies",
"iot:ListAuthorizers",
"iot:ListCACertificates",
"iot:ListCertificates",
"iot:ListCertificatesByCA",
"iot:ListIndices",
"iot:ListJobExecutionsForJob",
"iot:ListJobExecutionsForThing",
"iot:ListJobs",
"iot:ListOTAUpdates",
"iot:ListOutgoingCertificates",
"iot:ListPolicies",
"iot:ListPolicyPrincipals",
"iot:ListPolicyVersions",
"iot:ListPrincipalPolicies",
"iot:ListPrincipalThings",
"iot:ListRoleAliases",
"iot:ListStreams",
"iot:ListTargetsForPolicy",
"iot:ListThingGroups",
"iot:ListThingGroupsForThing",
"iot:ListThingPrincipals",
"iot:ListThingRegistrationTaskReports",
"iot:ListThingRegistrationTasks",
"iot:ListThings",
"iot:ListThingsInThingGroup",
436
AWS IoT Core Guía para desarrolladores
Políticas administradas de AWS
"iot:ListThingTypes",
"iot:ListTopicRules",
"iot:ListV2LoggingLevels",
"iot:SearchIndex",
"iot:TestAuthorization",
"iot:TestInvokeAuthorizer",
"iot:DescribeAccountAuditConfiguration",
"iot:DescribeAuditTask",
"iot:ListAuditTasks",
"iot:DescribeScheduledAudit",
"iot:ListScheduledAudits",
"iot:ListAuditFindings",
"iot:DescribeSecurityProfile",
"iot:ListSecurityProfiles",
"iot:ListSecurityProfilesForTarget",
"iot:ListTargetsForSecurityProfile",
"iot:ListActiveViolations",
"iot:ListViolationEvents",
"iot:ValidateSecurityProfileBehaviors"
],
"Resource": "*"
}
]
}
Esta política otorga a las identidades asociadas los permisos que permiten el acceso a todosAWS
IoToperaciones de datos. Las operaciones de datos envían datos sobre protocolos MQTT y HTTP. Para
ver esta política enAWS Management Console, verAWSIoTDataAccess.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Connect",
"iot:Publish",
"iot:Subscribe",
"iot:Receive",
"iot:GetThingShadow",
"iot:UpdateThingShadow",
"iot:DeleteThingShadow",
"iot:ListNamedShadowsForThing"
],
"Resource": "*"
}
437
AWS IoT Core Guía para desarrolladores
Políticas administradas de AWS
]
}
Esta política otorga a las identidades asociadas los permisos que permiten el acceso a todosAWS
IoToperaciones de configuración y mensajería. Para ver esta política enAWS Management Console,
verAWSIoTFullAccess.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:*",
"iotjobsdata:*"
],
"Resource": "*"
}
]
}
Esta política concede los permisos de identidad asociados que permiten acceder a la creación de Amazon
CloudWatch Registra los grupos y transmite los registros a los grupos. Esta política se asocia al rol de
registro de CloudWatch. Para ver esta política enAWS Management Console, verAWSIoTLogging.
• logs— Recuperar CloudWatch registros. También permite la creación de CloudWatch Registra grupos y
transmite registros a los grupos.
438
AWS IoT Core Guía para desarrolladores
Políticas administradas de AWS
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:PutMetricFilter",
"logs:PutRetentionPolicy",
"logs:GetLogEvents",
"logs:DeleteLogStream"
],
"Resource": [
"*"
]
}
]
}
Esta política concede a la identidad asociada los permisos que permiten el acceso a la creaciónAWS
IoTempleos,AWS IoTtrabajos de firma de código y para describirAWStrabajos de firmante de código. Para
ver esta política enAWS Management Console, verAWSIoTOTAUpdate.
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"iot:CreateJob",
"signer:DescribeSigningJob"
],
"Resource": "*"
}
}
439
AWS IoT Core Guía para desarrolladores
Políticas administradas de AWS
Esta política otorga a las identidades asociadas los permisos que permiten el acceso a todosServicio
de AWSSe admite enAWS IoTacciones de reglas. Para ver esta política enAWS Management Console,
verAWSIoTRuleActions.
• iot- Realice acciones para publicar los mensajes de acción de las reglas.
• dynamodb- Inserte un mensaje en una tabla de DynamoDB o divida un mensaje en varias columnas de
una tabla de DynamoDB.
• s3- Guardar un objeto a través de un bucket de Amazon S3
• kinesis- Enviar un mensaje a un objeto de transmisión de Amazon Kinesis.
• firehose- Inserte un registro en un objeto de transmisión de Kinesis Data Firehose.
• cloudwatch- Rotar CloudWatch estado de alarma o enviar datos de mensajes a CloudWatch métrica.
• sns- Realice la operación para publicar una notificación mediante Amazon SNS. El ámbito de esta
operación esAWS IoTTemas de la CLI.
• sqs- Inserte un mensaje para añadirlo a la cola de SQS.
• es- Envíe un mensaje al OpenSearch Servicio de servicio.
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"dynamodb:PutItem",
"kinesis:PutRecord",
"iot:Publish",
"s3:PutObject",
"sns:Publish",
"sqs:SendMessage*",
"cloudwatch:SetAlarmState",
"cloudwatch:PutMetricData",
"es:ESHttpPut",
"firehose:PutRecord"
],
"Resource": "*"
}
}
Esta política concede a los permisos de identidad asociados que permiten acceder y registrar cosas
de forma masiva mediante elStartThingRegistrationTaskAPI. Esta política puede afectar al
440
AWS IoT Core Guía para desarrolladores
Políticas administradas de AWS
procesamiento y al almacenamiento de datos. Para ver esta política enAWS Management Console,
verAWSIoTThingsRegistration.
• iot- Realice acciones para crear cosas y adjuntar políticas y certificados al registrarse de forma masiva.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:AddThingToThingGroup",
"iot:AttachPolicy",
"iot:AttachPrincipalPolicy",
"iot:AttachThingPrincipal",
"iot:CreateCertificateFromCsr",
"iot:CreatePolicy",
"iot:CreateThing",
"iot:DescribeCertificate",
"iot:DescribeThing",
"iot:DescribeThingGroup",
"iot:DescribeThingType",
"iot:DetachPolicy",
"iot:DetachThingPrincipal",
"iot:GetPolicy",
"iot:ListAttachedPolicies",
"iot:ListPolicyPrincipals",
"iot:ListPrincipalPolicies",
"iot:ListPrincipalThings",
"iot:ListTargetsForPolicy",
"iot:ListThingGroupsForThing",
"iot:ListThingPrincipals",
"iot:RegisterCertificate",
"iot:RegisterThing",
"iot:RemoveThingFromThingGroup",
"iot:UpdateCertificate",
"iot:UpdateThing",
"iot:UpdateThingGroupsForThing",
"iot:AddThingToBillingGroup",
"iot:DescribeBillingGroup",
"iot:RemoveThingFromBillingGroup"
],
"Resource": [
"*"
]
}
]
}
441
AWS IoT Core Guía para desarrolladores
Solución de problemas
Es posible consultar los detalles sobre las actualizaciones de las políticas administradas de AWS para
AWS IoT debido a que este servicio comenzó a realizar el seguimiento de estos cambios. Para obtener
alertas automáticas sobre cambios en esta página, suscríbase a la fuente RSS en la página de historial de
documentos AWS IoT.
Temas
• No tengo autorización para realizar una acción en AWS IoT (p. 442)
• No estoy autorizado a realizar lo siguiente:PassRole (p. 443)
• Quiero permitir a personas externas a mi Cuenta de AWS el acceso a mis recursos de AWS
IoT (p. 443)
El siguiente ejemplo de error se produce cuando el usuario de IAM,mateojackson, intenta usar la consola
para ver los detalles sobre un recurso de opción, pero no tiene laiot:DescribeThingpermisos.
442
AWS IoT Core Guía para desarrolladores
Solución de problemas
En este caso, la política para elmateojacksonel usuario debe actualizarse para permitir el acceso al
recurso de la cosa mediante eliot:DescribeThingacción.
Si necesita ayuda, póngase en contacto con su administrador de AWS. El administrador es la persona que
le proporcionó las credenciales de inicio de sesión.
En este caso, la política para elmateojacksonel usuario debe actualizarse para permitir el acceso
aMySuiteDefinitionrecurso que utiliza eliotdeviceadvisor:GetSuiteDefinitionacción.
Algunos servicios de Servicios de AWS le permiten transferir un rol existente a dicho servicio en lugar de
crear un nuevo rol de servicio o uno vinculado al servicio. Para ello, debe tener permisos para transferir el
rol al servicio.
En el siguiente ejemplo, el error se produce cuando un usuario de IAM denominado marymajor intenta
utilizar la consola para realizar una acción en AWS IoT. Sin embargo, la acción requiere que el servicio
cuente con permisos que otorga un rol de servicio. Mary no tiene permisos para transferir el rol al servicio.
En este caso, las políticas de Mary se deben actualizar para permitirle realizar la acción iam:PassRole.
Si necesita ayuda, póngase en contacto con su administrador de AWS. El administrador es la persona que
le proporcionó las credenciales de inicio de sesión.
• Para obtener información acerca de si AWS IoT admite estas características, consulte Cómo AWS IoT
funciona con IAM (p. 411).
• Para obtener información acerca de cómo proporcionar acceso a los recursos de las Cuentas de AWS
de su propiedad, consulte Proporcionar acceso a un usuario de IAM a otra Cuenta de AWS de la que es
propietario en la Guía del usuario de IAM.
443
AWS IoT Core Guía para desarrolladores
Registro y monitorización
• Para obtener información acerca de cómo proporcionar acceso a los recursos a Cuentas de AWS de
terceros, consulte Proporcionar acceso a Cuentas de AWS que son propiedad de terceros en la Guía del
usuario de IAM.
• Para obtener información sobre cómo proporcionar acceso mediante una identidad federada, consulte
Proporcionar acceso a usuarios autenticados externamente (identidad federada) en la Guía del usuario
de IAM.
• Para obtener información sobre la diferencia entre los roles y las políticas basadas en recursos para el
acceso entre cuentas, consulte Cómo los roles de IAM difieren de las políticas basadas en recursos en la
Guía del usuario de IAM.
Registro y monitorización
La monitorización es una parte importante del mantenimiento de la fiabilidad, la disponibilidad y el
rendimiento de AWS IoT y sus soluciones de AWS. Debe recopilar datos de monitoreo de todas las partes
de su solución de AWS para que le resulte más sencillo depurar cualquier error que se produzca en
distintas partes del código, en caso de que ocurra. Para obtener información sobre los procedimientos de
registro y monitoreo, consulte Monitorización de AWS IoT (p. 458)
Herramientas de monitorización
AWS proporciona herramientas que puede utilizar para monitorear AWS IoT. Puede configurar algunas de
estas herramientas para que realicen la monitorización por usted. Algunas de las herramientas requieren
intervención manual. Le recomendamos que automatice las tareas de monitorización en la medida de lo
posible.
• Amazon CloudWatch Alarmas— Observe una única métrica durante un período de tiempo que se
especifique y lleve a cabo una o más acciones en función del valor de la métrica en relación con un
umbral determinado durante varios períodos de tiempo. La acción es una notificación enviada a un tema
de Amazon Simple Notification Service (Amazon SNS) o a una política de Auto Scaling de Amazon
EC2. CloudWatch las alarmas no invocan acciones simplemente porque se encuentran en un estado
en particular. El estado debe haber cambiado y debe mantenerse durante el número de periodos
especificado. Para obtener más información, consulte MonitorAWS IoTalarmas y métricas con Amazon
CloudWatch (p. 466).
• Amazon CloudWatch Registros— Supervise, almacene y acceda a sus archivos de registro desdeAWS
CloudTrailu otras fuentes. Amazon CloudWatch Los registros también le permiten ver los pasos
críticosAWS IoTLos casos de prueba de Device Advisor, los eventos generados y los mensajes MQTT
enviados desde sus dispositivos oAWS IoT Coredurante la ejecución de la prueba. Estos registros
permiten depurar y tomar medidas correctivas en sus dispositivos. Para obtener más información,
consulteSupervisarAWS IoTusando CloudWatch Registros (p. 482)Para más información sobre el
uso de Amazon CloudWatch, verSupervisión de archivos de registroen elAmazon CloudWatch Guía del
usuario.
• Amazon CloudWatch Eventos— Haga coincidir los eventos y enrutarlos a una o más funciones o flujos
de destino para realizar cambios, capturar información de estado y tomar medidas correctivas. Para
obtener más información, consulte¿Qué es Amazon CloudWatch ¿Eventosen elAmazon CloudWatch
Guía del usuario.
• AWS CloudTrailEl monitoreo de registros— Comparte archivos de registro entre cuentas, monitorea
CloudTrail registre los archivos en tiempo real enviándolos a CloudWatch Registra, se pueden crear
aplicaciones de procesamiento de registros en Java y validar que sus archivos de registro no se han
modificado después de su entrega con CloudTrail. Para obtener más información, consulteRegistro de
444
AWS IoT Core Guía para desarrolladores
Validación de conformidad
llamadas a la API de AWS IoT mediante AWS CloudTrail (p. 513)yTrabajando con CloudTrail Rotaren
elAWS CloudTrailGuía del usuario.
Puede descargar los informes de auditoría de terceros utilizando AWS Artifact. Para obtener más
información, consulte Descarga de informes en AWS Artifact.
No todos los Servicios de AWS son aptos para HIPAA. Para obtener más información, consulte
la Referencia de servicios aptos para HIPAA.
445
AWS IoT Core Guía para desarrolladores
Resiliencia
• Recursos de conformidad de AWS: este conjunto de manuales y guías podría aplicarse a su sector y
ubicación.
• Evaluación de recursos con reglas en la Guía para desarrolladores de AWS Config: el servicio AWS
Config evalúa en qué medida las configuraciones de sus recursos cumplen las prácticas internas, las
directrices del sector y las normativas.
• AWS Security Hub: este Servicio de AWS proporciona una visión completa de su estado de seguridad
en AWS. Security Hub utiliza controles de seguridad para evaluar sus recursos de AWS y comprobar su
cumplimiento con los estándares y las prácticas recomendadas del sector de la seguridad. Para obtener
una lista de los servicios y controles compatibles, consulte la referencia de controles de Security Hub.
• AWS Audit Manager: este servicio de Servicio de AWS lo ayuda a auditar continuamente el uso de AWS
con el fin de simplificar la forma en que administra el riesgo y la conformidad con las normativas y los
estándares del sector.
El ResilienciaAWSNúcleo de IoT
La infraestructura global de AWS se divide en Región de AWS y zonas de disponibilidad. Las Región
de AWS proporcionan varias zonas de disponibilidad físicamente independientes y aisladas que se
encuentran conectadas mediante redes con un alto nivel de rendimiento y redundancia, además de baja
latencia. Con las zonas de disponibilidad, puede diseñar y utilizar aplicaciones y bases de datos que
realizan una conmutación por error automática entre zonas de disponibilidad sin interrupciones. Las
zonas de disponibilidad tienen una mayor disponibilidad, tolerancia a errores y escalabilidad que las
infraestructuras tradicionales de centros de datos únicos o múltiples.
AWS IoT Core guarda la información sobre los dispositivos en el registro de dispositivos. También
almacena certificados de CA, certificados de dispositivo y datos de sombra de dispositivos. En caso de que
se produzcan fallos en el hardware o la red, estos datos se replican automáticamente en todas las zonas
de disponibilidad, pero no en todas las regiones.
AWS IoT Corepublica los eventos de MQTT cuando se actualiza el registro del dispositivo. Puede usar
estos mensajes para hacer una copia de seguridad de los datos de registro y guardarlos en algún lugar,
como una tabla de DynamoDB. Usted es responsable de guardar los certificados que AWS IoT Core cree
para usted o los que cree usted mismo. Device Shadow almacena los datos de estado de los dispositivos y
se puede volver a enviar cuando un dispositivo vuelve a estar en línea.AWS IoT Device Advisor almacena
información sobre la configuración del conjunto de pruebas. Estos datos se replican automáticamente en
caso de que se produzcan fallos en el hardware o en la red.
AWS IoT Corelos recursos son específicos de cada región y no se replican en todasRegiones de AWSa
menos que lo hagas específicamente.
Para obtener información sobre las prácticas recomendadas de seguridad, consultePrácticas de seguridad
recomendadas para AWS IoT Core (p. 451).
446
AWS IoT Core Guía para desarrolladores
Creación de puntos de enlace
de la VPC para AWS IoT Core
Para conectar dispositivos sobre el terreno en redes remotas, como una red corporativa, a suAWSVPC,
consulte las distintas opciones que se enumeran en laMatriz de conectividad de la red a la VPC de
Amazon.
• Creación de puntos de enlace de la VPC para AWS IoT Core (p. 447)
• Control de acceso aAWS IoT Corea través de puntos de conexión de VPC (p. 449)
• Limitaciones de los terminales de VPC (p. 450)
• Escalar los puntos finales de VPC con IoT Core (p. 450)
• Uso de dominios personalizados con puntos de enlace de VPC (p. 450)
• Disponibilidad de los puntos de conexión de la VPC a través deAWS IoT Core (p. 450)
Note
La función de VPC para crear automáticamente un registro DNS está deshabilitada. Para
conectarse a estos puntos finales, debe crear manualmente un registro de DNS privado. Para
obtener más información sobre los registros para DNS para VPC, consulteDNS privado para
puntos de enlace de interfaz. Para obtener más información sobreAWS IoT CoreLimitaciones de
VPC, consulteLimitaciones de los terminales de VPC (p. 450).
Para conectar los clientes MQTT a las interfaces de punto final de la VPC, debe crear manualmente
registros DNS en una zona alojada privada que esté conectada a la VPC.
447
AWS IoT Core Guía para desarrolladores
Creación de puntos de enlace
de la VPC para AWS IoT Core
• ParaHabilitar nombre de DNS, asegúrese de queHabilitar para este punto finalno está
seleccionado.AWS IoT CoreEl plano de datos no admite nombres DNS privados todavía.
• ¿ParaEl grupo de seguridad, elija los grupos de seguridad que desea asociar a las interfaces de red
de puntos de opción.
• Si lo desea, puede añadir o quitar etiquetas. Las etiquetas son pares de nombre-valor que se utilizan
para asociarlas al punto final.
3. Para crear su punto de conexión de VPC, elijaCreación de punto de conexión.
Tras crear una zona alojada privada, cree un registro que indique al DNS cómo enrutar el tráfico a ese
dominio.
Creación de un registro
Una vez que hayas creado una zona alojada privada, puedes crear un registro que indique al DNS cómo
quieres que se enrute el tráfico a ese dominio. Para crear un registro:
1. En la lista de zonas alojadas, elija la zona alojada que ha creado anteriormente y elijaCrear registro.
2. Utilice el método del asistente para crear el registro. Si la consola le presenta elCreación rápidamétodo,
eligeCambiar a asistente.
3. EligeEl enrutamiento de clienteporEl enrutamientoy, a continuación, elijaSiguiente.
4. En elConfigurar registrospágina, elijaDefinir registro simple.
5. En elDefinir registro simplepágina
• ParaNombre de registro, introduzcaiot:Data-ATSpunto final. Debe ser el mismo que el nombre de
la zona alojada privada.
• ¿ParaTipo de registro, mantenga el valor comoA - Routes traffic to an IPv4 address
and some AWS resources.
448
AWS IoT Core Guía para desarrolladores
Control de acceso aAWS IoT Corea
través de puntos de conexión de VPC
• ¿ParaValor/ruta de destino del tráfico, elijaAlias de punto de conexión de VPC. Luego, elige
tuRegióny, a continuación, elija el punto final que creó anteriormente, tal y como se describe enCree
un punto final de interfaz Amazon VPC (p. 1313)de la lista de puntos finales que se muestra.
6. ElijaDefinir registro simplepara crear su registro.
• SourceVpc
• SourceVpce
• VPCSourceIp
Note
Por ejemplo, la siguiente política otorga el permiso para conectarse aAWS IoT Coreusar un ID de cliente
que coincida con el nombre de la cosa y publicar en cualquier tema con el prefijo del nombre de la cosa,
siempre que el dispositivo se conecte a un punto final de VPC con un ID de punto final de VPC concreto.
Esta política denegaría los intentos de conexión a su punto final de datos de IoT público.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Connect"
],
"Resource": [
"arn:aws:iot:us-east-1:123456789012:client/
${iot:Connection.Thing.ThingName}"
],
"Condition": {
"StringEquals": {
"aws:SourceVpce": "vpce-1a2b3c4d"
}
}
},
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": [
"arn:aws:iot:us-east-1:123456789012:topic/
${iot:Connection.Thing.ThingName}/*"
]
}
]
}
449
AWS IoT Core Guía para desarrolladores
Limitaciones de los terminales de VPC
• Actualmente, los puntos finales de VPC son compatibles conPuntos de conexión de datos de
IoTsolamente
• Los períodos de mantenimiento activo de MQTT están limitados a 230 segundos. Mantener vivos más
tiempo que ese período se reducirá automáticamente a 230 segundos
• Cada punto final de VPC admite un total de 100 000 dispositivos conectados de forma simultánea. Si
necesita más conexiones, consulteEscalar los puntos finales de VPC con IoT Core (p. 450).
• Los puntos de enlace de la VPC a través de la CLI de la CLI
• Los puntos finales de VPC serviránCertificados ATSúnicamente, excepto para los dominios
personalizados.
• Políticas de punto de enlace de la VPCno se admiten en este momento.
• Para los puntos finales de VPC que se crean paraAWS IoT Coreplano de datos,AWS IoT Coreno admite
el uso de registros DNS públicos zonales o regionales.
AWS IoT CoreLos puntos finales de VPC de interfaz están disponibles en todosAWS IoT Coreregiones de
compatibles.
450
AWS IoT Core Guía para desarrolladores
Supervisión de la seguridad
Puede utilizar llamadas a la API publicadas en AWS para obtener acceso a AWS IoT a través de la red.
Los clientes deben ser compatibles con Transport Layer Security (TLS) 1.2 o una versión posterior. Los
clientes también deben ser compatibles con conjuntos de cifrado con confidencialidad directa total (PFS)
tales como Ephemeral Diffie-Hellman (DHE) o Elliptic Curve Ephemeral Diffie-Hellman (ECDHE). La
mayoría de los sistemas modernos, como Java 7 y posteriores, son compatibles con estos modos. Para
obtener más información, consulte Seguridad de transporte en AWS IoT Core (p. 402).
Las solicitudes deben estar firmadas mediante un ID de clave de acceso y una clave de acceso secreta
que esté asociada a una entidad principal de IAM. También puede utilizar AWS Security Token Service
(AWS STS) para generar credenciales de seguridad temporales para firmar solicitudes.
Para afrontar estos desafíos, AWS IoT Device Defender proporciona herramientas para identificar
los problemas de seguridad y las desviaciones de las prácticas recomendadas. Puede utilizarAWS
IoTDevice Defender para analizar, auditar y monitorear los dispositivos conectados para detectar un
comportamiento anormal y mitigar los riesgos de seguridad.AWS IoT Device Defenderpuede auditar
las flotas de dispositivos para garantizar que cumplen las mejores prácticas de seguridad y detectar
comportamientos anormales en los dispositivos. Esto posibilita aplicar políticas de seguridad coherentes
en toda su flota de dispositivos AWS IoT y responder rápidamente cuando los dispositivos sufren ataques.
Para obtener más información, consulte AWS IoT Device Defender (p. 966).
AWS IoTDevice Advisor actualiza y corrige su flota según sea necesario.AWS IoT Device Advisor actualiza
los casos de prueba automáticamente. Los casos de prueba que seleccione siempre tienen la última
versión. Para obtener más información, consulte Asesor de dispositivos (p. 1148).
451
AWS IoT Core Guía para desarrolladores
Protección de conexiones MQTT en AWS IoT
de cliente que ya se ha solicitado para otra conexión, el agente de mensajes de AWS IoT interrumpe la
conexión anterior para permitir la nueva conexión. Los ID de los clientes a través de cadaCuenta de AWSy
cada unoRegión de AWS. Esto significa que no es necesario que los ID de cliente fuera de suCuenta de
AWSo en todas las regiones de suCuenta de AWS.
• Su caso de uso (por ejemplo, los datos que los dispositivos envían a AWS IoT, la cantidad de datos y la
frecuencia con la que se envían).
• Su configuración de cliente MQTT (por ejemplo, configuración de reconexión automática,
temporizaciones de interrupción asociadas y uso de sesiones persistentes de MQTT (p. 92)).
• Las restricciones de recursos de dispositivos.
• La causa principal de las desconexiones, su agresividad y persistencia.
Para evitar conflictos de ID de cliente y sus posibles impactos negativos, asegúrate de que cada dispositivo
o aplicación móvil tenga unAWS IoTo una política de IAM que restrinja los ID de cliente que se pueden
usar para las conexiones de MQTT alAWS IoTagente de mensajes. Por ejemplo, puede usar una política
de IAM para evitar que un dispositivo cierre involuntariamente la conexión de otro dispositivo mediante un
ID de cliente que ya esté en uso. Para obtener más información, consulte Autorización (p. 349).
Todos los dispositivos de la flota deben tener credenciales con privilegios que autoricen únicamente las
acciones previstas; por ejemplo, acciones MQTT de AWS IoT, como la publicación de mensajes o la
suscripción a temas con un ámbito y un contexto específicos. Las políticas de permisos específicas pueden
variar en función de los casos de uso. Identifique las políticas de permisos que se ajusten mejor a sus
requisitos empresariales y de seguridad.
Para simplificar la creación y la gestión de las políticas de permisos, puede utilizarVariables de las políticas
de AWS IoT Core (p. 356)yVariables de política de IAM. Las variables de la política se pueden colocar
en una política y cuando se evalúa la política las variables se sustituyen por valores procedentes de la
solicitud del dispositivo. Al usar variables de la política, puede crear una única política para la concesión
de permisos a varios dispositivos. Puede identificar las variables de la política relevantes para su caso de
uso en función de su configuración de la cuenta de AWS IoT, el mecanismo de autenticación y el protocolo
de red utilizado en la conexión al agente de mensajes de AWS IoT. Sin embargo, para escribir las mejores
políticas de permisos, deben tenerse en cuenta los detalles concretos de su caso de uso y el modelo de
amenazas.
Por ejemplo, si has registrado tus dispositivos en elAWS IoTregistro, puede usarvariables de política de
cosas (p. 357)enAWS IoTpolíticas para conceder o denegar permisos en función de las propiedades
de las cosas, como los nombres, los tipos y los valores de los atributos de las cosas. El nombre
del objeto se obtiene a partir del ID de cliente del mensaje de MQTT Connect que se envía cuando
un objeto se conecta a AWS IoT. El objeto al que se sustituyen las variables de política cuando se
conecta un objetoAWS IoTa través de MQTT mediante la autenticación mutua TLS o MQTT a través
del WebSocket protocolo mediante autenticaciónIdentidades de Amazon Cognito. Puede utilizar
elAttachThingPrincipalAPI para adjuntar certificados e identidades autenticadas de Amazon Cognito a
una cosa.iot:Connection.Thing.ThingNamees una variable de política útil para hacer cumplir las
restricciones de identificación de los clientes. La siguiente política de AWS IoT de ejemplo requiere un
nombre del objeto registrado que se va a utilizar como el ID de cliente para las conexiones MQTT al agente
de mensajes de AWS IoT:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": [
452
AWS IoT Core Guía para desarrolladores
Mantener sincronizado el reloj del dispositivo
"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
]
}
]
}
Si desea identificar los conflictos de ID de cliente en curso, puede habilitarlos y usarCloudWatch Registra
paraAWS IoT (p. 482). Por cada conexión MQTT que el agente de mensajes de AWS IoT desconecta
debido a conflictos de ID de cliente, se genera un registro parecido a lo siguiente:
{
"timestamp": "2019-04-28 22:05:30.105",
"logLevel": "ERROR",
"traceId": "02a04a93-0b3a-b608-a27c-1ae8ebdb032a",
"accountId": "123456789012",
"status": "Failure",
"eventType": "Disconnect",
"protocol": "MQTT",
"clientId": "clientId01",
"principalId": "1670fcf6de55adc1930169142405c4a2493d9eb5487127cd0091ca0193a3d3f6",
"sourceIp": "203.0.113.1",
"sourcePort": 21335,
"reason": "DUPLICATE_CLIENT_ID",
"details": "A new connection was established with the same client ID"
}
Puede utilizarAWS IoTDevice Defenderpara identificar a los excesivamente permisivosAWS IoTy políticas
de IAM.AWS IoT Device Defender también proporciona una verificación de auditoría que le notifica si
varios dispositivos de su flota se están conectando alAWS IoTagente de mensajes a través de la misma ID
de cliente.
Puede utilizarAWS IoTDevice Advisor para validar que sus dispositivos se pueden conectar de forma fiable
aAWS IoT Corey seguir las mejores prácticas de seguridad.
Véase también
• AWS IoT Core
• Características de seguridad de AWS IoT (p. 310)
• Variables de las políticas de AWS IoT Core (p. 356)
• Variables de política de IAM
• Identidad de Amazon Cognito
• AWS IoT Device Defender
• CloudWatch Registros paraAWS IoT (p. 482)
453
AWS IoT Core Guía para desarrolladores
Validar el certificado de servidor
En la mayoría de los sistemas, esto significa que el software del dispositivo debe incluir un cliente NTP
(Protocolo de tiempo de red). El dispositivo debe esperar hasta que se sincronice con un servidor NTP
antes de intentar conectarse a AWS IoT Core. Si esto no es posible, el sistema debería proporcionar un
mecanismo para que el usuario establezca la hora del dispositivo, de forma que las conexiones posteriores
se realicen correctamente.
Una vez que el dispositivo se haya sincronizado con un servidor NTP, podrá abrir una conexión con AWS
IoT Core. La cantidad de sesgo de reloj permitida dependerá de lo que esté tratando de hacer con la
conexión.
Una de las primeras cosas que AWS IoT Core hace cuando se conecta un dispositivo es enviar al
dispositivo un certificado de servidor. Los dispositivos pueden comprobar que estaban esperando para
conectarse a iot.amazonaws.com y que el servidor al final de dicha conexión posee un certificado de
una autoridad de confianza para ese dominio.
Los certificados TLS tienen formato X.509 e incluyen información diversa, como el nombre de la
organización, la ubicación, el nombre de dominio y un período de validez. El período de validez se
especifica como un par de valores de tiempo llamados notBefore y notAfter. Algunos servicios como
AWS IoT Core utilizan períodos de validez limitados (por ejemplo, un año) para los certificados de servidor
y comienzan a proporcionar otros nuevos antes de que caduquen los antiguos.
Por ejemplo, tiene una aplicación que consiste en un dispositivo de teléfono móvil que recibe
actualizaciones de estado de dos objetos domésticos inteligentes diferentes: una bombilla y un termostato.
La bombilla envía el estado de su nivel de batería y el termostato envía mensajes que informan de la
temperatura.
AWS IoT autentica los dispositivos por separado y trata cada conexión individualmente. Puede aplicar
controles de acceso detallados a través de políticas de autorización. Puede definir una política para
el termostato que le permita publicar en un espacio de tema. Puede definir una política independiente
para la bombilla que le permita publicar en un espacio de tema diferente. Por último, puede definir una
política para la aplicación móvil que solo le permita conectarse y suscribirse a los temas del termostato y la
bombilla para recibir mensajes de estos dispositivos.
Aplique el principio de privilegios mínimos y amplíe los permisos por dispositivo tanto como sea posible.
Todos los dispositivos o usuarios deben tener una política de AWS IoT en AWS IoT que solo les permita
conectarse con un ID de cliente conocido, así como publicar y suscribirse a un conjunto de temas
identificado y fijo.
454
AWS IoT Core Guía para desarrolladores
Usar aprovisionamiento justo a tiempo
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "your-device-role-arn",
"Condition": {
"StringEquals": {
"iam:PassedToService": "iotdeviceadvisor.amazonaws.com"
}
}
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"execute-api:Invoke*",
"iam:ListRoles", // Required to list device roles in the Device Advisor
console
"iot:Connect",
"iot:CreateJob",
"iot:DeleteJob",
"iot:DescribeCertificate",
"iot:DescribeEndpoint",
"iot:DescribeJobExecution",
"iot:DescribeJob",
"iot:DescribeThing",
"iot:GetPendingJobExecutions",
"iot:GetPolicy",
"iot:ListAttachedPolicies",
"iot:ListCertificates",
"iot:ListPrincipalPolicies",
"iot:ListThingPrincipals",
"iot:ListThings",
"iot:Publish",
"iot:StartNextPendingJobExecution",
"iot:UpdateJobExecution",
"iot:UpdateThingShadow",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
"logs:PutLogEvents",
"logs:PutRetentionPolicy"
],
"Resource": "*"
455
AWS IoT Core Guía para desarrolladores
La prevención para Device Advisor para Device Advisor
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "iotdeviceadvisor:*",
"Resource": "*"
}
]
}
El valor deaws:SourceArndebe ser el ARN del recurso de definición de su suite. El recurso de definición
de suite hace referencia al conjunto de pruebas que creó con Device Advisor.
La forma más eficaz de protegerse contra el problema del suplente confuso es utilizar la clave de
contexto de condición global de aws:SourceArn con el ARN completo del recurso. Si no conoce
el ARN completo del recurso o si está especificando varios recursos, utilice la clave de condición de
contexto global aws:SourceArn con comodines (*) para las partes desconocidas del ARN. Por ejemplo,
arn:aws:iotdeviceadvisor:*:account-id:suitedefinition/* .
{
"Version": "2012-10-17",
"Statement": {
"Sid": "ConfusedDeputyPreventionExamplePolicy",
"Effect": "Allow",
"Principal": {
"Service": "iotdeviceadvisor.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:iotdeviceadvisor:us-east-1:123456789012:suitedefinition/
ygp6rxa3tzvn"
},
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}
456
AWS IoT Core Guía para desarrolladores
AWS Training and Certification
}
}
457
AWS IoT Core Guía para desarrolladores
Le recomendamos encarecidamente que recopile datos de monitoreo de todas las partes de su solución
de AWS para que le resulte más sencillo depurar cualquier error que se produzca en distintas partes del
código, en caso de que ocurra. Comience por crear un plan de monitoreo que responda a las siguientes
preguntas. Si no está seguro de cómo responderlas, puede continuar habilitando el registro (p. 459) y
estableciendo las líneas base de rendimiento.
El siguiente paso consiste en habilitar el registro (p. 459) y establecer un punto de referencia de
rendimiento de AWS IoT normal en el entorno midiendo el rendimiento varias veces y bajo distintas
condiciones de carga. A medida que monitorea AWS IoT, mantenga los datos de monitoreo históricos para
que pueda compararlos con los datos de rendimiento actuales. Esto le ayudará a identificar patrones de
rendimiento normales y anomalías de rendimiento, así como a idear métodos para abordarlos.
Para establecer el rendimiento previsto para AWS IoT, debe monitorear estas métricas para comenzar.
Siempre puede monitorear más métricas más adelante.
Los temas de esta sección pueden ayudarle a iniciar el registro y el monitoreo de AWS IoT.
Temas
• Configuración de registros de AWS IoT (p. 459)
• MonitorAWS IoTalarmas y métricas con Amazon CloudWatch (p. 466)
• SupervisarAWS IoTusando CloudWatch Registros (p. 482)
• Sube los registros del dispositivo a Amazon CloudWatch (p. 505)
• Registro de llamadas a la API de AWS IoT mediante AWS CloudTrail (p. 513)
458
AWS IoT Core Guía para desarrolladores
Configuración de registros de AWS IoT
Puede habilitar el registro para todo AWS IoT o solo para grupos de objetos específicos. Puede configurar
el registro de AWS IoT mediante la consola de AWS IoT, la CLI o la API; sin embargo, debe usar la CLI o
la API para configurar el registro para grupos de objetos específicos.
En este tema se describe el inicio de sesión desde la nubeAWS IoT. Para obtener información sobre el
registro y la supervisión del lado del dispositivo, consulteCargue los registros del lado del dispositivo a
CloudWatch.
También puede obtener información de para el registro de.AWS IoT Greengrass, véaseRegistro y
monitoreo enAWS IoT Greengrass. A partir del 30 de junio de 2023,AWS IoT GreengrassEl software
principal se ha migrado aAWS IoT Greengrass Version 2.
También es posible ver cómo crear un rol de registro deAWS IoT Corerecursos. Para obtener información
sobre cómo crear una función y una política de registro de IAM paraAWS IoT Corepor LoRaWAN,
consulteCree una función y una política de registro paraAWS IoT Wireless (p. 1450).
459
AWS IoT Core Guía para desarrolladores
Configuración del rol y la política de registro
Estos documentos se crearon para usted cuando creó el rol de registro. Los documentos tienen
variables,${partition}, ${region}, y${accountId}, que debes reemplazar con tus
valores.
Política de roles:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:PutMetricFilter",
"logs:PutRetentionPolicy",
"iot:GetLoggingOptions",
"iot:SetLoggingOptions",
"iot:SetV2LoggingOptions",
"iot:GetV2LoggingOptions",
"iot:SetV2LoggingLevel",
"iot:ListV2LoggingLevels",
"iot:DeleteV2LoggingLevel"
],
"Resource": [
"arn:${partition}:logs:${region}:${accountId}:log-group:AWSIotLogsV2:*"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
460
AWS IoT Core Guía para desarrolladores
Configure el registro predeterminado en AWS IoT (consola)
Para usar la consola de AWS IoT para configurar el registro predeterminado para todo AWS IoT
1. Inicie sesión en la consola de AWS IoT. Para obtener más información, consulte Abra elAWS
IoTconsola (p. 20).
2. En el panel de navegación izquierdo, elija Configuración. En elRegistrossección deAjustespágina,
eligeAdministrar registros.
ElRegistrosLa página muestra la función de registro y el nivel de detalle que utilizan todosAWS IoT.
461
AWS IoT Core Guía para desarrolladores
Configurar el registro predeterminado en AWS IoT (CLI)
4. Elija elNivel de registroque describe elnivel de detalle (p. 465)de las entradas de registro que desea
que aparezcan en el CloudWatch registros.
5. Elija Actualizar para guardar los cambios.
Después de habilitar el registro, visite VisualizaciónAWS IoTinicia sesión en CloudWatch consola (p. 482)
para obtener más información sobre cómo ver las entradas del registro.
462
AWS IoT Core Guía para desarrolladores
Configurar el registro predeterminado en AWS IoT (CLI)
Note
Necesita el nombre de recurso de Amazon (ARN) del rol que desea utilizar. Si necesita crear un
rol para usar en el registro, consulte Creación de un rol de registro (p. 459) antes de continuar.
La entidad principal que se utiliza para realizar la llamada a la API debe tener Transmisión de los
permisos de rol (p. 518) para el rol de registro.
También puede realizar este procedimiento con la API utilizando los métodos de la API de AWS que
corresponden a los comandos CLI que se muestran aquí.
Para usar la CLI para configurar el registro predeterminado para AWS IoT
1. Utilice el comando set-v2-logging-options para establecer las opciones de registro para su cuenta.
donde:
--role-arn
La función ARN que otorgaAWS IoTpermiso para escribir en tus inicios de sesión CloudWatch
Registros.
--default-log-level
El nivel de registro (p. 465) que se debe usar. Los valores válidos son: ERROR, WARN, INFO,
DEBUG o DISABLED
--no-disable-all-logs
Un parámetro opcional que habilita todo el registro de AWS IoT. Utilice este parámetro para
habilitar el registro cuando esté deshabilitado actualmente.
--disable-all-logs
Un parámetro opcional que deshabilita todo el registro de AWS IoT. Utilice este parámetro para
deshabilitar el registro cuando esté habilitado actualmente.
2. Utilice el comando get-v2-logging-options para obtener las opciones de registro actuales.
Después de habilitar el registro, visite VisualizaciónAWS IoTinicia sesión en CloudWatch consola (p. 482)
para obtener más información sobre cómo ver las entradas del registro.
Note
AWS IoT sigue siendo compatible con los comandos más antiguos (set-logging-options y get-
logging-options) para establecer y obtener el registro global en su cuenta. Tenga en cuenta
que, cuando se utilizan estos comandos, los registros resultantes contienen texto sin formato,
en lugar de cargas JSON y que la latencia de registro normalmente es mayor. No se realizarán
mejoras en la implementación de estos comandos más antiguos. Le recomendamos que utilice las
versiones "v2" para configurar las opciones de registro y, cuando sea posible, que modifique las
aplicaciones heredadas que utilizan las versiones más antiguas.
463
AWS IoT Core Guía para desarrolladores
Configurar el inicio de sesión específico
de recursos en AWS IoT (CLI)
Los grupos de objetos pueden contener otros grupos de objetos para crear una relación jerárquica. Este
procedimiento describe cómo configurar el registro de un solo grupo de objetos. Puede aplicar este
procedimiento al grupo de objetos principal de una jerarquía para configurar el registro de todos los grupos
de objetos de la jerarquía. También puede aplicar este procedimiento a un grupo de objetos secundario
para anular la configuración de registro de su principal.
Además de los grupos de cosas, también puedes registrar objetivos como el ID de cliente, la IP de origen y
el ID principal de un dispositivo.
Note
Necesita el nombre de recurso de Amazon (ARN) del rol que desea utilizar. Si necesita crear un
rol para usar en el registro, consulte Creación de un rol de registro (p. 459) antes de continuar.
La entidad principal que se utiliza para realizar la llamada a la API debe tener Transmisión de los
permisos de rol (p. 518) para el rol de registro.
También puede realizar este procedimiento con la API utilizando los métodos de la API de AWS que
corresponden a los comandos CLI que se muestran aquí.
Para usar la CLI para configurar el registro específico de recursos para AWS IoT
1. Utilice el comando set-v2-logging-options para establecer las opciones de registro para su cuenta.
donde:
--role-arn
La función ARN que otorgaAWS IoTpermiso para escribir en tus inicios de sesión CloudWatch
Registros.
--default-log-level
El nivel de registro (p. 465) que se debe usar. Los valores válidos son: ERROR, WARN, INFO,
DEBUG o DISABLED
--no-disable-all-logs
Un parámetro opcional que habilita todo el registro de AWS IoT. Utilice este parámetro para
habilitar el registro cuando esté deshabilitado actualmente.
--disable-all-logs
Un parámetro opcional que deshabilita todo el registro de AWS IoT. Utilice este parámetro para
deshabilitar el registro cuando esté habilitado actualmente.
2. Utilice el comando set-v2-logging-level para configurar el registro específico de recursos para un grupo
de objetos.
464
AWS IoT Core Guía para desarrolladores
Niveles de registro
--log-target targetType=THING_GROUP,targetName=thing_group_name \
--log-level log_level
--log-target
El tipo y nombre del recurso para el que está configurando el registro. Eltarget_typeel valor
debe ser uno de los siguientes:THING_GROUP|CLIENT_ID|SOURCE_IP|PRINCIPAL_ID. El valor
del parámetro log-target puede ser texto, como se muestra en el ejemplo de comando anterior, o
una cadena JSON, como en el ejemplo siguiente.
--log-level
El nivel de registro utilizado cuando se generan registros para el recurso especificado. Los valores
válidos son: DEBUG, INFO, ERROR, WARN y DISABLED.
--targetType
Después de habilitar el registro, visite VisualizaciónAWS IoTinicia sesión en CloudWatch consola (p. 482)
para obtener más información sobre cómo ver las entradas del registro.
Niveles de registro
Estos niveles de registro determinan los eventos que se registran y se aplican a los niveles de registro
predeterminados y específicos de recursos.
465
AWS IoT Core Guía para desarrolladores
MonitorAWS IoTalarmas y
métricas con Amazon CloudWatch
ERROR
Para ayudarle a empezar, estos temas exploran algunas de las preguntas que podría tener.
• ¿Cómo se me puede enviar una notificación si mis objetos no se conectan correctamente cada
día? (p. 467)
466
AWS IoT Core Guía para desarrolladores
Creando CloudWatch alarmas enAWS IoT
• ¿Cómo se me puede enviar una notificación si mis objetos no publican datos cada día? (p. 468)
• ¿Cómo se me puede enviar una notificación si las actualizaciones de la sombra de mi objeto se
rechazan cada día? (p. 468)
• ¿Cómo puedo crear un CloudWatch ¿alarma para Jobs? (p. 469)
En los temas siguientes se describen algunos ejemplos del uso de alarmas de CloudWatch.
• ¿Cómo se me puede enviar una notificación si mis objetos no se conectan correctamente cada
día? (p. 467)
• ¿Cómo se me puede enviar una notificación si mis objetos no publican datos cada día? (p. 468)
• ¿Cómo se me puede enviar una notificación si las actualizaciones de la sombra de mi objeto se
rechazan cada día? (p. 468)
• ¿Cómo puedo crear un CloudWatch ¿alarma para puestos de trabajo? (p. 469)
Puede ver todas las métricas que CloudWatch las alarmas pueden monitorear enMétricas y dimensiones
de AWS IoT (p. 470).
Para obtener más información sobre cómo crear una notificación de Amazon SNS, consulteCómo
empezar a usar Amazon SNS.
2. Cree la alarma.
467
AWS IoT Core Guía para desarrolladores
Creando CloudWatch alarmas enAWS IoT
--period 86400 \
--evaluation-periods 1 \
--alarm-actions sns-topic-arn
3. Pruebe la alarma.
Para obtener más información sobre cómo crear una notificación de Amazon SNS, consulteCómo
empezar a usar Amazon SNS.
2. Cree la alarma.
3. Pruebe la alarma.
468
AWS IoT Core Guía para desarrolladores
Creando CloudWatch alarmas enAWS IoT
Para obtener más información sobre cómo crear una notificación de Amazon SNS, consulteCómo
empezar a usar Amazon SNS.
2. Cree la alarma.
3. Pruebe la alarma.
El comando siguiente, escriba CloudWatch alarma para monitorear el número total de ejecuciones de
tareas fallidas para JobSampleotaJoby le notifica cuando se han producido errores en más de 20
ejecuciones de trabajos. La alarma supervisa la métrica de trabajos FailedJobExecutionTotalCount
comprobando el valor notificado cada 300 segundos. Se activa cuando un único valor notificado es mayor
que 20, lo que significa que hubo más de 20 ejecuciones de trabajo fallidas desde que se inició el trabajo.
Cuando suena la alarma, envía una notificación al tema de Amazon SNS proporcionado.
469
AWS IoT Core Guía para desarrolladores
Métricas y dimensiones de AWS IoT
El comando siguiente, escriba CloudWatch alarma para monitorear el número de ejecuciones de tareas
fallidas para JobSampleotaJoben un período determinado. A continuación, le notifica cuando más de
cinco ejecuciones de un trabajo han fracasado durante ese período. La alarma supervisa la métrica de
trabajos FailedJobExecutionCount comprobando el valor notificado cada 3600 segundos. Se activa
cuando un único valor notificado es mayor que 5, lo que significa que hubo más de 5 ejecuciones de
trabajo fallidas en la última hora. Cuando suena la alarma, envía una notificación al tema de Amazon SNS
proporcionado.
470
AWS IoT Core Guía para desarrolladores
Métricas y dimensiones de AWS IoT
Métrica Descripción
Métrica Descripción
CredentialExchangeSuccess El número de
exitosasAssumeRoleWithCertificatesolicitudes
aAWS IoT Coreproveedor de credenciales.
Métricas de reglas
Métrica Descripción
471
AWS IoT Core Guía para desarrolladores
Métricas y dimensiones de AWS IoT
Métrica Descripción
Métrica Descripción
Métrica Descripción
472
AWS IoT Core Guía para desarrolladores
Métricas y dimensiones de AWS IoT
Métrica Descripción
Métrica Descripción
473
AWS IoT Core Guía para desarrolladores
Métricas y dimensiones de AWS IoT
Métrica Descripción
La dimensión Protocol contiene el protocolo usado
para publicar el mensaje. HTTP Publish no admite esta
métrica.
474
AWS IoT Core Guía para desarrolladores
Métricas y dimensiones de AWS IoT
Métrica Descripción
475
AWS IoT Core Guía para desarrolladores
Métricas y dimensiones de AWS IoT
Métrica Descripción
Métrica Descripción
476
AWS IoT Core Guía para desarrolladores
Métricas y dimensiones de AWS IoT
Métrica Descripción
Métricas de trabajos
Métrica Descripción
477
AWS IoT Core Guía para desarrolladores
Métricas y dimensiones de AWS IoT
Métrica Descripción
CloudWatch métricas, consulteAmazon CloudWatch
Métricas.) La dimensión JobId contiene el ID del trabajo.
Métrica Descripción
478
AWS IoT Core Guía para desarrolladores
Métricas y dimensiones de AWS IoT
Métrica Descripción
Métrica Descripción
479
AWS IoT Core Guía para desarrolladores
Métricas y dimensiones de AWS IoT
Métrica Descripción
La métrica se emite tanto en casos de éxito (valor = 0)
como de error (valor = 1). Esta métrica se puede utilizar
para realizar un seguimiento del número de certificados
creados y registrados durante el CloudWatch-ventanas
de agregación compatibles, como 5 minutos o 1 hora.
480
AWS IoT Core Guía para desarrolladores
Métricas y dimensiones de AWS IoT
481
AWS IoT Core Guía para desarrolladores
SupervisarAWS IoTusando CloudWatch Registros
Dimensión Descripción
• Has activado el inicio de sesiónAWS IoT. Para obtener más información sobre cómo habilitar el
inicio de sesiónAWS IoT, véaseConfiguración de registros de AWS IoT (p. 459)
• Algunas entradas de registro han sido escritas porAWS IoToperaciones
También puede escribir una consulta en el cuadro de texto Filter events (Filtrar eventos). Aquí tiene
algunas consultas interesantes que probar:
• { $.logLevel = "INFO" }
482
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
Busque todos los registros que tengan un estado de Success y un tipo de evento de
GetThingShadow.
También puede obtener más información sobre la creación de expresiones de filtro de.CloudWatch
Registra consultas.
Temas
• Entradas de registro del agente de mensajes (p. 483)
• Entradas de registro de sombre de dispositivo (p. 491)
• Entradas del registro del motor de reglas (p. 493)
• Entradas del registro de Job (p. 498)
• Entradas de registro de aprovisionamiento de dispositivos (p. 501)
• Entradas de registro de grupo de objetos dinámicos (p. 502)
• Entradas del registro de indexación (p. 503)
• Común CloudWatch Registra los atributos (p. 504)
Temas
• Entrada de registro Connect (p. 483)
• Entrada de registro Disconnect (p. 484)
• GetRetainedMessage entrada de registro (p. 485)
• ListRetainedMessage entrada de registro (p. 486)
• Entrada de registro Publish-In (p. 486)
• Entrada de registro Publish-Out (p. 487)
• Ejemplo de registro (p. 488)
• Entrada de registro Subscribe (p. 490)
{
"timestamp": "2017-08-10 15:37:23.476",
"logLevel": "INFO",
"traceId": "20b23f3f-d7f1-feae-169f-82263394fbdb",
483
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
"accountId": "123456789012",
"status": "Success",
"eventType": "Connect",
"protocol": "MQTT",
"clientId": "abf27092886e49a8a5c1922749736453",
"principalId": "145179c40e2219e18a909d896a5340b74cf97a39641beec2fc3eeafc5a932167",
"sourceIp": "205.251.233.181",
"sourcePort": 13490
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro Connect
contienen los siguientes atributos:
clientId
El protocolo utilizado para realizar la solicitud. Los valores válidos son MQTT o HTTP.
sourceIp
{
"timestamp": "2017-08-10 15:37:23.476",
"logLevel": "INFO",
"traceId": "20b23f3f-d7f1-feae-169f-82263394fbdb",
"accountId": "123456789012",
"status": "Success",
"eventType": "Disconnect",
"protocol": "MQTT",
"clientId": "abf27092886e49a8a5c1922749736453",
"principalId": "145179c40e2219e18a909d896a5340b74cf97a39641beec2fc3eeafc5a932167",
"sourceIp": "205.251.233.181",
"sourcePort": 13490,
"reason": "DUPLICATE_CLIENT_ID",
"details": "A new connection was established with the same client ID",
"disconnectReason": "CLIENT_INITIATED_DISCONNECT"
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro Disconnect
contienen los siguientes atributos:
clientId
484
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
principalId
El protocolo utilizado para realizar la solicitud. Los valores válidos son MQTT o HTTP.
sourceIp
{
"timestamp": "2017-08-07 18:47:56.664",
"logLevel": "INFO",
"traceId": "1a60d02e-15b9-605b-7096-a9f584a6ad3f",
"accountId": "123456789012",
"status": "Success",
"eventType": "GetRetainedMessage",
"protocol": "HTTP",
"topicName": "a/b/c",
"qos": "1",
"lastModifiedDate": "2017-08-07 18:47:56.664"
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro
GetRetainedMessage contienen los siguientes atributos:
lastModifiedDate
La fecha y hora de la época, en milisegundos, en la que el mensaje retenido fue almacenado porAWS
IoT.
protocolo
El nivel de calidad de servicio (QoS) utilizado en la solicitud de publicación de. Los valores válidos son
0 o 1.
485
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
topicName
{
"timestamp": "2017-08-07 18:47:56.664",
"logLevel": "INFO",
"traceId": "1a60d02e-15b9-605b-7096-a9f584a6ad3f",
"accountId": "123456789012",
"status": "Success",
"eventType": "ListRetainedMessage",
"protocol": "HTTP"
}
protocolo
{
"timestamp": "2017-08-10 15:39:30.961",
"logLevel": "INFO",
"traceId": "672ec480-31ce-fd8b-b5fb-22e3ac420699",
"accountId": "123456789012",
"status": "Success",
"eventType": "Publish-In",
"protocol": "MQTT",
"topicName": "$aws/things/MyThing/shadow/get",
"clientId": "abf27092886e49a8a5c1922749736453",
"principalId": "145179c40e2219e18a909d896a5340b74cf97a39641beec2fc3eeafc5a932167",
"sourceIp": "205.251.233.181",
"sourcePort": 13490,
"retain": "True"
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro Publish-In
contienen los siguientes atributos:
clientId
486
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
principalId
El protocolo utilizado para realizar la solicitud. Los valores válidos son MQTT o HTTP.
retener
El atributo que se utiliza cuando un mensaje tiene el indicador RETAIN establecido con un valor
deTrue. Si el mensaje no tiene activado el indicador RETAIN, este atributo no aparece en la entrada
del registro. Para obtener más información, consulte Mensajes retenidos en MQTT (p. 95).
sourceIp
{
"timestamp": "2017-08-10 15:39:30.961",
"logLevel": "INFO",
"traceId": "672ec480-31ce-fd8b-b5fb-22e3ac420699",
"accountId": "123456789012",
"status": "Success",
"eventType": "Publish-Out",
"protocol": "MQTT",
"topicName": "$aws/things/MyThing/shadow/get",
"clientId": "abf27092886e49a8a5c1922749736453",
"principalId": "145179c40e2219e18a909d896a5340b74cf97a39641beec2fc3eeafc5a932167",
"sourceIp": "205.251.233.181",
"sourcePort": 13490
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro Publish-Out
contienen los siguientes atributos:
clientId
El ID del cliente suscrito que recibe mensajes sobre ese tema de MQTT.
principalId
El protocolo utilizado para realizar la solicitud. Los valores válidos son MQTT o HTTP.
sourceIp
487
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
sourcePort
Ejemplo de registro
Cuando se desconecta un dispositivo con una sesión persistente, el intermediario de mensajes MQTT
almacena los mensajes del dispositivo yAWS IoTgenera entradas de registro con un EventType
deQueued. También es posible obtener más información de las sesiones de MQTT de.Sesiones
persistentes de MQTT (p. 92).
{
"timestamp": "2022-08-10 15:39:30.961",
"logLevel": "ERROR",
"traceId": "672ec480-31ce-fd8b-b5fb-22e3ac420699",
"accountId": "123456789012",
"topicName": "$aws/things/MyThing/get",
"clientId": "123123123",
"qos": "1",
"protocol": "MQTT",
"eventType": "Queued",
"status": "Failure",
"details": "Server Error"
}
Además delComún CloudWatch Registra los atributos (p. 504),Queuedlas entradas del registro de
errores del servidor contienen los siguientes atributos:
clientId
Server Error
El nivel de calidad de servicio (QoS) de la solicitud de. El valor siempre será 1 porque los mensajes
con una QoS de 0 no se almacenan.
topicName
{
"timestamp": "2022-08-10 15:39:30.961",
"logLevel": "INFO",
488
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
"traceId": "672ec480-31ce-fd8b-b5fb-22e3ac420699",
"accountId": "123456789012",
"topicName": "$aws/things/MyThing/get",
"clientId": "123123123",
"qos": "1",
"protocol": "MQTT",
"eventType": "Queued",
"status": "Success"
}
Además delComún CloudWatch Registra los atributos (p. 504),Queuedlas entradas del registro de
resultados contienen los siguientes atributos:
clientId
El nivel de calidad de servicio (QoS) de la solicitud de. El valor siempre será 1 porque los mensajes
con una QoS de 0 no se almacenan.
topicName
{
"timestamp": "2022-08-10 15:39:30.961",
"logLevel": "ERROR",
"traceId": "672ec480-31ce-fd8b-b5fb-22e3ac420699",
"accountId": "123456789012",
"topicName": "$aws/things/MyThing/get",
"clientId": "123123123",
"qos": "1",
"protocol": "MQTT",
"eventType": "Queued",
"status": "Failure",
"details": "Throttled while queueing offline message"
}
Además delComún CloudWatch Registra los atributos (p. 504),Queuedlas entradas de registro reguladas
contienen los siguientes atributos:
clientId
El cliente ha superado elQueued messages per second per accountlímite, por lo que el
mensaje no se almacenó.
protocolo
489
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
qos
El nivel de calidad de servicio (QoS) de la solicitud de. El valor siempre será 1 porque los mensajes
con una QoS de 0 no se almacenan.
topicName
{
"timestamp": "2017-08-10 15:39:04.413",
"logLevel": "INFO",
"traceId": "7aa5c38d-1b49-3753-15dc-513ce4ab9fa6",
"accountId": "123456789012",
"status": "Success",
"eventType": "Subscribe",
"protocol": "MQTT",
"topicName": "$aws/things/MyThing/shadow/#",
"clientId": "abf27092886e49a8a5c1922749736453",
"principalId": "145179c40e2219e18a909d896a5340b74cf97a39641beec2fc3eeafc5a932167",
"sourceIp": "205.251.233.181",
"sourcePort": 13490
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro Subscribe
contienen los siguientes atributos:
clientId
El protocolo utilizado para realizar la solicitud. Los valores válidos son MQTT o HTTP.
sourceIp
{
"timestamp": "2022-11-30 16:24:15.628",
"logLevel": "INFO",
490
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
"traceId": "7aa5c38d-1b49-3753-15dc-513ce4ab9fa6",
"accountId": "123456789012",
"status": "Success",
"eventType": "Subscribe",
"protocol": "MQTT",
"topicName": "test/topic1,$invalid/reserved/topic",
"subscriptions": [
{
"topicName": "test/topic1",
"reasonCode": 1
},
{
"topicName": "$invalid/reserved/topic",
"reasonCode": 143
}
],
"clientId": "abf27092886e49a8a5c1922749736453",
"principalId": "145179c40e2219e18a909d896a5340b74cf97a39641beec2fc3eeafc5a932167",
"sourceIp": "205.251.233.181",
"sourcePort": 13490
}
Para las operaciones de suscripción de MQTT 5, además deComún CloudWatch Registra los
atributos (p. 504)y elAtributos de entrada del registro de suscripción de MQTT 3 (p. 490), MATT
5Subscribelas entradas de registro contienen el siguiente atributo:
suscripciones
Una lista de asignaciones entre los temas solicitados en la solicitud de suscripción y el código de
motivo individual de MQTT 5. Para obtener más información, consulteCódigos de motivo MQTT.
Temas
• DeleteThingShadow entrada de registro (p. 491)
• GetThingShadow entrada de registro (p. 492)
• UpdateThingShadow entrada de registro (p. 492)
{
"timestamp": "2017-08-07 18:47:56.664",
"logLevel": "INFO",
"traceId": "1a60d02e-15b9-605b-7096-a9f584a6ad3f",
"accountId": "123456789012",
"status": "Success",
"eventType": "DeleteThingShadow",
"protocol": "MQTT",
"deviceShadowName": "Jack",
"topicName": "$aws/things/Jack/shadow/delete"
}
491
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro
DeleteThingShadow contienen los siguientes atributos:
deviceShadowName
El protocolo utilizado para realizar la solicitud. Los valores válidos son MQTT o HTTP.
topicName
{
"timestamp": "2017-08-09 17:56:30.941",
"logLevel": "INFO",
"traceId": "b575f19a-97a2-cf72-0ed0-c64a783a2504",
"accountId": "123456789012",
"status": "Success",
"eventType": "GetThingShadow",
"protocol": "MQTT",
"deviceShadowName": "MyThing",
"topicName": "$aws/things/MyThing/shadow/get"
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro
GetThingShadow contienen los siguientes atributos:
deviceShadowName
El protocolo utilizado para realizar la solicitud. Los valores válidos son MQTT o HTTP.
topicName
{
"timestamp": "2017-08-07 18:43:59.436",
"logLevel": "INFO",
"traceId": "d0074ba8-0c4b-a400-69df-76326d414c28",
492
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
"accountId": "123456789012",
"status": "Success",
"eventType": "UpdateThingShadow",
"protocol": "MQTT",
"deviceShadowName": "Jack",
"topicName": "$aws/things/Jack/shadow/update"
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro
UpdateThingShadow contienen los siguientes atributos:
deviceShadowName
El protocolo utilizado para realizar la solicitud. Los valores válidos son MQTT o HTTP.
topicName
Temas
• FunctionExecution entrada de registro (p. 493)
• RuleExecution entrada de registro (p. 494)
• RuleMatch entrada de registro (p. 495)
• RuleExecutionThrottled entrada de registro (p. 495)
• RuleNotFound entrada de registro (p. 496)
• StartingRuleExecution entrada de registro (p. 497)
{
"timestamp": "2017-07-13 18:33:51.903",
"logLevel": "DEBUG",
"traceId": "180532b7-0cc7-057b-687a-5ca1824838f5",
"status": "Success",
"eventType": "FunctionExecution",
"clientId": "N/A",
"topicName":"rules/test",
"ruleName": "ruleTestPredict",
"ruleAction": "MachinelearningPredict",
"resources": {
"ModelId": "predict-model"
},
"principalId": "145179c40e2219e18a909d896a5340b74cf97a39641beec2fc3eeafc5a932167"
493
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro
FunctionExecution contienen los siguientes atributos:
clientId
{
"timestamp": "2017-08-10 16:32:46.070",
"logLevel": "INFO",
"traceId": "30aa7ccc-1d23-0b97-aa7b-76196d83537e",
"accountId": "123456789012",
"status": "Success",
"eventType": "RuleExecution",
"clientId": "abf27092886e49a8a5c1922749736453",
"topicName": "rules/test",
"ruleName": "JSONLogsRule",
"ruleAction": "RepublishAction",
"resources": {
"RepublishTopic": "rules/republish"
},
"principalId": "145179c40e2219e18a909d896a5340b74cf97a39641beec2fc3eeafc5a932167"
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro RuleExecution
contienen los siguientes atributos:
clientId
494
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
ruleAction
{
"timestamp": "2017-08-10 16:32:46.002",
"logLevel": "INFO",
"traceId": "30aa7ccc-1d23-0b97-aa7b-76196d83537e",
"accountId": "123456789012",
"status": "Success",
"eventType": "RuleMatch",
"clientId": "abf27092886e49a8a5c1922749736453",
"topicName": "rules/test",
"ruleName": "JSONLogsRule",
"principalId": "145179c40e2219e18a909d896a5340b74cf97a39641beec2fc3eeafc5a932167"
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro RuleMatch
contienen los siguientes atributos:
clientId
{
"timestamp": "2017-10-04 19:25:46.070",
"logLevel": "ERROR",
495
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
"traceId": "30aa7ccc-1d23-0b97-aa7b-76196d83537e",
"accountId": "123456789012",
"status": "Failure",
"eventType": "RuleMessageThrottled",
"clientId": "abf27092886e49a8a5c1922749736453",
"topicName": "$aws/rules/example_rule",
"ruleName": "example_rule",
"principalId": "145179c40e2219e18a909d896a5340b74cf97a39641beec2fc3eeafc5a932167",
"reason": "RuleExecutionThrottled",
"details": "Exection of Rule example_rule throttled"
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro
RuleExecutionThrottled contienen los siguientes atributos:
clientId
La cadena»RuleExecutionThrottled».
ruleName
{
"timestamp": "2017-10-04 19:25:46.070",
"logLevel": "ERROR",
"traceId": "30aa7ccc-1d23-0b97-aa7b-76196d83537e",
"accountId": "123456789012",
"status": "Failure",
"eventType": "RuleNotFound",
"clientId": "abf27092886e49a8a5c1922749736453",
"topicName": "$aws/rules/example_rule",
"ruleName": "example_rule",
"principalId": "145179c40e2219e18a909d896a5340b74cf97a39641beec2fc3eeafc5a932167",
"reason": "RuleNotFound",
"details": "Rule example_rule not found"
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro RuleNotFound
contienen los siguientes atributos:
496
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
clientId
La cadena»RuleNotFound».
ruleName
{
"timestamp": "2017-08-10 16:32:46.002",
"logLevel": "DEBUG",
"traceId": "30aa7ccc-1d23-0b97-aa7b-76196d83537e",
"accountId": "123456789012",
"status": "Success",
"eventType": "StartingRuleExecution",
"clientId": "abf27092886e49a8a5c1922749736453",
"topicName": "rules/test",
"ruleName": "JSONLogsRule",
"ruleAction": "RepublishAction",
"principalId": "145179c40e2219e18a909d896a5340b74cf97a39641beec2fc3eeafc5a932167"
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro rule- contienen
los siguientes atributos:
clientId
497
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
Temas
• DescribeJobExecution entrada de registro (p. 498)
• GetPendingJobExecution entrada de registro (p. 499)
• ReportFinalJobExecutionCount entrada de registro (p. 499)
• StartNextPendingJobExecution entrada de registro (p. 500)
• UpdateJobExecution entrada de registro (p. 500)
{
"timestamp": "2017-08-10 19:13:22.841",
"logLevel": "DEBUG",
"accountId": "123456789012",
"status": "Success",
"eventType": "DescribeJobExecution",
"protocol": "MQTT",
"clientId": "thingOne",
"jobId": "002",
"topicName": "$aws/things/thingOne/jobs/002/get",
"clientToken": "myToken",
"details": "The request status is SUCCESS."
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro
GetJobExecution contienen los siguientes atributos:
clientId
Un identificador único que distingue entre mayúsculas y minúsculas para garantizar la idempotencia
de la solicitud. Para obtener más información, consulte How to Ensure Idempotency.
details
El protocolo utilizado para realizar la solicitud. Los valores válidos son MQTT o HTTP.
topicName
498
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
{
"timestamp": "2018-06-13 17:45:17.197",
"logLevel": "DEBUG",
"accountId": "123456789012",
"status": "Success",
"eventType": "GetPendingJobExecution",
"protocol": "MQTT",
"clientId": "299966ad-54de-40b4-99d3-4fc8b52da0c5",
"topicName": "$aws/things/299966ad-54de-40b4-99d3-4fc8b52da0c5/jobs/get",
"clientToken": "24b9a741-15a7-44fc-bd3c-1ff2e34e5e82",
"details": "The request status is SUCCESS."
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro
GetPendingJobExecution contienen los siguientes atributos:
clientId
Identificador único con distinción entre mayúsculas y minúsculas que permite garantizar la
idempotencia de la solicitud. Para obtener más información, consulte How to Ensure Idempotency.
details
El protocolo utilizado para realizar la solicitud. Los valores válidos son MQTT o HTTP.
topicName
{
"timestamp": "2017-08-10 19:44:16.776",
"logLevel": "INFO",
"accountId": "123456789012",
"status": "Success",
"eventType": "ReportFinalJobExecutionCount",
"jobId": "002",
"details": "Job 002 completed. QUEUED job execution count: 0 IN_PROGRESS job execution
count: 0 FAILED job execution count: 0 SUCCEEDED job execution count: 1 CANCELED job
execution count: 0 REJECTED job execution count: 0 REMOVED job execution count: 0"
}
499
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro
ReportFinalJobExecutionCount contienen los siguientes atributos:
details
{
"timestamp": "2018-06-13 17:49:51.036",
"logLevel": "DEBUG",
"accountId": "123456789012",
"status": "Success",
"eventType": "StartNextPendingJobExecution",
"protocol": "MQTT",
"clientId": "95c47808-b1ca-4794-bc68-a588d6d9216c",
"topicName": "$aws/things/95c47808-b1ca-4794-bc68-a588d6d9216c/jobs/start-next",
"clientToken": "bd7447c4-3a05-49f4-8517-dd89b2c68d94",
"details": "The request status is SUCCESS."
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro
StartNextPendingJobExecution contienen los siguientes atributos:
clientId
Identificador único con distinción entre mayúsculas y minúsculas que permite garantizar la
idempotencia de la solicitud. Para obtener más información, consulte How to Ensure Idempotency.
details
El protocolo utilizado para realizar la solicitud. Los valores válidos son MQTT o HTTP.
topicName
500
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro
UpdateJobExecution contienen los siguientes atributos:
clientId
Identificador único con distinción entre mayúsculas y minúsculas que permite garantizar la
idempotencia de la solicitud. Para obtener más información, consulte How to Ensure Idempotency.
details
El protocolo utilizado para realizar la solicitud. Los valores válidos son MQTT o HTTP.
topicName
Temas
• GetDeviceCredentials entrada de registro (p. 501)
• ProvisionDevice entrada de registro (p. 502)
501
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro
GetDeviceCredentials contienen los siguientes atributos:
details
{
"timestamp" : "2019-02-20 20:31:22.932",
"logLevel" : "INFO",
"traceId" : "8d9c016f-6cc7-441e-8909-7ee3d5563405",
"accountId" : "123456789101",
"status" : "Success",
"eventType" : "ProvisionDevice",
"provisioningTemplateName" : "myTemplate",
"deviceCertificateId" :
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"details" : "Additional details about this log."
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro
ProvisionDevice contienen los siguientes atributos:
details
Temas
502
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
Para obtener más información, consulte este artículo sobre las limitaciones y conflictos de los grupos de
objetos dinámicos (p. 301).
{
"timestamp": "2020-03-16 22:24:43.804",
"logLevel": "ERROR",
"traceId": "70b1f2f5-d95e-f897-9dcc-31e68c3e1a30",
"accountId": "57EXAMPLE833",
"status": "Failure",
"eventType": "AddThingToDynamicThingGroupsFailed",
"thingName": "TestThing",
"dynamicThingGroupNames": [
"DynamicThingGroup11",
"DynamicThingGroup12",
"DynamicThingGroup13",
"DynamicThingGroup14"
],
"reason": "The thing failed to be added to the given dynamic thing group(s) because the
thing already belongs to the maximum allowed number of groups."
}
Además de Común CloudWatch Registra los atributos (p. 504), las entradas de registro
AddThingToDynamicThingGroupsFailed contienen los siguientes atributos:
dynamicThingGroupNombres
Matriz de los grupos de objetos dinámicos a los que no pudo agregarse el objeto.
reason
503
AWS IoT Core Guía para desarrolladores
CloudWatch RegistrosAWS IoTregistro de entrada
Temas
• NamedShadowCountForDynamicGroupQueryLimitExceeded entrada de registro (p. 504)
{
"timestamp": "2020-03-16 22:24:43.804",
"logLevel": "ERROR",
"traceId": "70b1f2f5-d95e-f897-9dcc-31e68c3e1a30",
"accountId": "571032923833",
"status": "Failure",
"eventType": "NamedShadowCountForDynamicGroupQueryLimitExceeded",
"thingName": "TestThing",
"reason": "A maximum of 25 named shadows per thing are processed for non-data source
specific query terms in dynamic groups."
}
accountId
TuCuenta de AWSJID.
eventType
El tipo de evento para el que se generó el registro. El valor del tipo de evento depende del evento que
generó la entrada de registro. Cada descripción de entrada de registro incluye el valor de eventType
para esa entrada de registro.
logLevel
El nivel de registro que se está utilizando. Para obtener más información, consulte the section called
“Niveles de registro” (p. 465).
status
El estado de la solicitud.
timestamp
La marca de tiempo UTC legible por humanos del momento en que el cliente se conectó alAWS
IoTagente de mensajes.
traceId
Un identificador generado aleatoriamente que puede utilizarse para correlacionar todos los registros
para una solicitud específica.
504
AWS IoT Core Guía para desarrolladores
Sube los registros del dispositivo a Amazon CloudWatch
Cómo funciona
El proceso comienza cuando unAWS IoTel dispositivo envía mensajes MQTT que contienen archivos de
registro formateados a unAWS IoTtema. UnAWS IoTla regla supervisa el tema del mensaje y envía los
archivos de registro a CloudWatch Grupo de registros que usted defina. También puede revisar y analizar
la información de.
Temas
• Temas de MQTT (p. 505)
• Acción de la regla (p. 505)
Temas de MQTT
Elija un espacio de nombres de temas de MQTT que utilizará para publicar los registros. Recomendamos
usar este formato para el espacio de temas común,$aws/rules/things/thing_name/logs, y este
formato para los temas de error,$aws/rules/things/thing_name/logs/errors. Se recomienda la
estructura de nomenclatura de los registros y los temas de error, pero no es obligatoria. Para obtener más
información, consulteDiseño de temas de MQTT paraAWS IoT Core.
Si usa BatchMode para cargar archivos de registro, sus mensajes deben seguir un formato específico que
incluya una marca de tiempo y un mensaje de UNIX. Para obtener más información, consulte la .Requisitos
de formato de mensaje MQTT para BatchModetema dentroCloudWatch Registra la acción de la regla.
Acción de la regla
¿Cuándo?AWS IoTrecibe los mensajes MQTT de los dispositivos cliente, yAWS IoTrule supervisa el tema
definido por el cliente y publica el contenido en un CloudWatch grupo de registros que usted defina. Este
proceso utiliza un CloudWatch Acción de la regla de registros para supervisar el MQTT en busca de lotes
de archivos de registro. Para obtener más información, consulte la .CloudWatch Registros AWS IoTacción
de regla.
Modo Batch
batchModees un parámetro booleano dentro delAWS IoT CloudWatch Registra la acción de la regla. Este
parámetro es opcional y está desactivado (false) de forma predeterminada. Para cargar archivos de
registro del dispositivo por lotes, debe activar este parámetro (true) al crearAWS IoTregla. Para obtener
más información, consulteCloudWatch Registrosen elAWS IoTacciones de reglassección.
505
AWS IoT Core Guía para desarrolladores
Cargar registros del lado del
dispositivo medianteAWS IoTreglas
Para empezar a cargar los registros del lado del dispositivo en CloudWatch, es posible completar los
siguientes requisitos de.
Requisitos previos
Antes de comenzar, haga lo siguiente:
• Cree al menos un dispositivo IoT de destino que esté registrado enAWS IoT CorecomoAWS IoTcosa.
Para obtener más información, consulteCrear una cosa, objeto.
• Determine el espacio temático de MQTT para la ingesta y los errores. Para obtener más información
sobre los temas de MQTT y las convenciones de nomenclatura recomendadas, consulteTemas de
MQTT (p. 505) Temas de MQTTsección enSube los registros del dispositivo a Amazon CloudWatch.
También puede obtener más información de estos requisitos de.Cargue los registros del lado del
dispositivo a CloudWatch.
AWS CLI
1. También es posible crear el grupo de. Para obtener más información, consultecreate-log-
groupen elAWS CLIReferencia de comandos v2.
Sustituya el nombre del grupo de registros en el ejemplo (uploadLogsGroup) por el nombre que
prefiera.
506
AWS IoT Core Guía para desarrolladores
Cargar registros del lado del
dispositivo medianteAWS IoTreglas
Resultados de ejemplo:
{
"logGroups": [
{
"logGroupName": "uploadLogsGroup",
"creationTime": 1674521804657,
"metricFilterCount": 0,
"arn": "arn:aws:logs:us-east-1:111122223333:log-
group:uploadLogsGroup:*",
"storedBytes": 0
}
]
}
También es posible crear una regla de tema de mediante elAWS Management Console
a. Introduzca una sentencia SQL utilizando el tema de MQTT que definió para la ingesta.
También es posible tener una función de IAM de para la regla de, es posible hacer lo
siguiente.
507
AWS IoT Core Guía para desarrolladores
Cargar registros del lado del
dispositivo medianteAWS IoTreglas
AWS CLI
También puede crear un rol de IAM y una regla de tema mediante elAWS CLI
1. También puede crear un rol de IAM que otorgue derechos deAWS IoTregla.
También es posible crear una política de IAM, es posible ejecutar el siguiente comando de.
Asegúrese de actualizar elpolicy-namevalor de parámetro Para obtener más información,
consultecreate-policyen elAWS CLIReferencia de comandos v2.
Note
Resultados de ejemplo:
{
"Policy": {
"PolicyName": "uploadLogsPolicy",
"PermissionsBoundaryUsageCount": 0,
"CreateDate": "2023-01-23T18:30:10Z",
"AttachmentCount": 0,
508
AWS IoT Core Guía para desarrolladores
Cargar registros del lado del
dispositivo medianteAWS IoTreglas
"IsAttachable": true,
"PolicyId": "AAABBBCCCDDDEEEFFFGGG",
"DefaultVersionId": "v1",
"Path": "/",
"Arn": "arn:aws:iam::111122223333:policy/uploadLogsPolicy",
"UpdateDate": "2023-01-23T18:30:10Z"
}
}
También es posible crear una política de IAM, es posible ejecutar el siguiente comando de.
Asegúrese de actualizar elrole-namevalor de parámetro Para obtener más información,
consultecreate-roleen elAWS CLIReferencia de comandos v2.
También es posible crear una política de IAM, es posible ejecutar el siguiente comando de.
Asegúrese de actualizar elrole-nameypolicy-arnvalores de parámetros. Para obtener
más información, consulteattach-role-policyen elAWS CLIReferencia de comandos v2.
e. Revisa el rol
Para confirmar que el rol de IAM se creó correctamente. Asegúrese de actualizar elrole-
namevalor de parámetro Para obtener más información, consulteget-roleen elAWS
CLIReferencia de comandos v2.
Resultados de ejemplo:
{
"Role": {
"Path": "/",
"RoleName": "uploadLogsRole",
"RoleId": "AAABBBCCCDDDEEEFFFGGG",
"Arn": "arn:aws:iam::111122223333:role/uploadLogsRole",
"CreateDate": "2023-01-23T19:17:15+00:00",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
509
AWS IoT Core Guía para desarrolladores
Cargar registros del lado del
dispositivo medianteAWS IoTreglas
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
},
"Description": "",
"MaxSessionDuration": 3600,
"RoleLastUsed": {}
}
}
a. Para crear unAWS IoTregla de tema, ejecute el siguiente comando de. Asegúrese
de actualizar el--rule-name,sqldeclaración,description,roleARN ,
ylogGroupNamevalores de parámetros. Para obtener más información, consultecreate-topic-
ruleen elAWS CLIReferencia de comandos v2.
b. Para confirmar que la regla se creó correctamente, ejecute el comando siguiente. Asegúrese
de actualizar elrole-namevalor de parámetro Para obtener más información, consulteget-
topic-ruleen elAWS CLIReferencia de comandos v2.
Resultados de ejemplo:
{
"ruleArn": "arn:aws:iot:us-east-1:111122223333:rule/uploadLogsRule",
"rule": {
"ruleName": "uploadLogsRule",
"sql": "SELECT * FROM rules/things/thing_name/logs",
"description": "Upload logs test rule",
"createdAt": "2023-01-24T16:28:15+00:00",
"actions": [
{
"cloudwatchLogs": {
"roleArn": "arn:aws:iam::111122223333:role/uploadLogsRole",
"logGroupName": "uploadLogsGroup",
"batchMode": true
510
AWS IoT Core Guía para desarrolladores
Cargar registros del lado del
dispositivo medianteAWS IoTreglas
}
}
],
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23"
}
}
1. Para enviar registros históricos aAWS IoT, comuníquese con sus dispositivos para garantizar lo
siguiente.
• La información del registro se envía al espacio de nombres del tema correcto, tal y como se
especifica enRequisitos previossección de este procedimiento.
511
AWS IoT Core Guía para desarrolladores
Cargar registros del lado del
dispositivo medianteAWS IoTreglas
512
AWS IoT Core Guía para desarrolladores
Registro de llamadas a la API de
AWS IoT mediante AWS CloudTrail
Para mantener un registro continuo de eventos en la Cuenta de AWS, incluidos los eventos de AWS IoT,
cree un registro de seguimiento. Un sendero permite CloudTrail para entregar los archivos de. De forma
predeterminada, cuando se crea un registro de seguimiento en la consola, el registro de seguimiento se
aplica a todas las Región de AWS. El seguimiento registra los eventos de todas las Región de AWS en
la partición de AWS y envía los archivos de registro al bucket de Simple Storage Service (Amazon S3)
especificado. Puede configurar otrosAWSservicios de para analizar y actuar en función de los datos de
eventos recopilados en CloudTrail registros. Para obtener más información, consulte:
Note
AWS IoTlas acciones del plano de datos (en el lado del dispositivo) no son registradas por
CloudTrail. Uso CloudWatch para supervisar estas acciones.
En términos generales,AWS IoTlas acciones del plano de control que realizan cambios se registran
mediante CloudTrail. Llamadas comoCreateThing,CreateKeysAndCertificate, yUpdateCertificatesalir
CloudTrail entradas, mientras que llamadas comoListThingsyListTopicRulesno
Cada entrada de registro o evento contiene información sobre quién generó la solicitud. La información de
identidad del usuario le ayuda a determinar lo siguiente:
513
AWS IoT Core Guía para desarrolladores
Descripción de las entradas de los
archivos de registro de AWS IoT
AWS IoTlas acciones están documentadas en elAWS IoTEjemplo de API.AWS IoT Las acciones
inalámbricas están documentadas en elAWS IoTReferencia de API inalámbrica.
{
"timestamp":"1460159496",
"AdditionalEventData":"",
"Annotation":"",
"ApiVersion":"",
"ErrorCode":"",
"ErrorMessage":"",
"EventID":"8bff4fed-c229-4d2d-8264-4ab28a487505",
"EventName":"AttachPolicy",
"EventTime":"2016-04-08T23:51:36Z",
"EventType":"AwsApiCall",
"ReadOnly":"",
"RecipientAccountList":"",
"RequestID":"d4875df2-fde4-11e5-b829-23bf9b56cbcd",
"RequestParamters":{
"principal":"arn:aws:iot:us-
east-1:123456789012:cert/528ce36e8047f6a75ee51ab7beddb4eb268ad41d2ea881a10b67e8e76924d894",
"policyName":"ExamplePolicyForIoT"
},
"Resources":"",
"ResponseElements":"",
"SourceIpAddress":"52.90.213.26",
"UserAgent":"aws-internal/3",
"UserIdentity":{
"type":"AssumedRole",
"principalId":"AKIAI44QH8DHBEXAMPLE",
"arn":"arn:aws:sts::12345678912:assumed-role/iotmonitor-us-east-1-beta-
InstanceRole-1C5T1YCYMHPYT/i-35d0a4b6",
"accountId":"222222222222",
"accessKeyId":"access-key-id",
"sessionContext":{
"attributes":{
"mfaAuthenticated":"false",
"creationDate":"Fri Apr 08 23:51:10 UTC 2016"
},
"sessionIssuer":{
"type":"Role",
"principalId":"AKIAI44QH8DHBEXAMPLE",
"arn":"arn:aws:iam::123456789012:role/executionServiceEC2Role/iotmonitor-
us-east-1-beta-InstanceRole-1C5T1YCYMHPYT",
"accountId":"222222222222",
"userName":"iotmonitor-us-east-1-InstanceRole-1C5T1YCYMHPYT"
}
},
514
AWS IoT Core Guía para desarrolladores
Descripción de las entradas de los
archivos de registro de AWS IoT
"invokedBy":{
"serviceAccountId":"111111111111"
}
},
"VpcEndpointId":""
}
515
AWS IoT Core Guía para desarrolladores
Sus reglas pueden usar mensajes MQTT que pasen por el protocolo de publicación/suscripción compatible
con elthe section called “Protocolos de comunicación de dispositivos” (p. 87). También puede utilizar
elIngesta de base (p. 609)función para enviar de forma segura los datos del dispositivo alServicios de
AWSenumerados anteriormente, sin incurrir encostes de mensajería. ElIngesta de base (p. 609)La
función optimiza el flujo de datos al eliminar el agente de mensajes de publicación/suscripción de la ruta de
ingesta. Esto la hace rentable y, al mismo tiempo, mantiene las funciones de seguridad y procesamiento de
datos deAWS IoT.
AntesAWS IoTpuede realizar estas acciones, debe concederle permiso para acceder a suAWSrecursos en
su nombre. Cuando se llevan a cabo las acciones, usted incurre en los cargos estándar por elServicios de
AWSque usas.
Contenido
• Otorgar unAWS IoTreglamentar el acceso que requiere (p. 517)
• Transmisión de los permisos de rol (p. 518)
• Creación de una regla de AWS IoT (p. 519)
• Visualización de las reglas (p. 523)
• Eliminar una regla (p. 524)
• Acciones de reglas de AWS IoT (p. 524)
• Solución de problemas de las reglas (p. 601)
• Acceda a los recursos de varias cuentasAWS IoTreglas (p. 601)
516
AWS IoT Core Guía para desarrolladores
Otorgar unAWS IoTreglamentar el acceso que requiere
Complete los siguientes pasos para crear el rol de IAM yAWS IoTpolítica que otorga unAWS
IoTreglamentar el acceso que requiere (AWS CLI).
1. Guarde el siguiente documento de política de confianza, que otorgaAWS IoTpermiso para asumir el
rol, a un archivo llamadoiot-role-trust.json.
{
"Version":"2012-10-17",
"Statement":[{
"Effect": "Allow",
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": "sts:AssumeRole"
}]
}
Utilice el comando create-role para crear un rol de IAM especificando el archivo iot-role-
trust.json:
{
"Role": {
"AssumeRolePolicyDocument": "url-encoded-json",
"RoleId": "AKIAIOSFODNN7EXAMPLE",
"CreateDate": "2015-09-30T18:43:32.821Z",
"RoleName": "my-iot-role",
"Path": "/",
"Arn": "arn:aws:iam::123456789012:role/my-iot-role"
}
}
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "*"
517
AWS IoT Core Guía para desarrolladores
Transmisión de los permisos de rol
}]
}
Este JSON es un ejemplo de documento de política que otorgaAWS IoTel acceso de administrador a
DynamoDB.
Ejecute el comando create-policy para conceder a AWS IoT acceso a sus recursos de AWS en el
momento en que asuma el rol pasando el archivo my-iot-policy.json:
Para obtener más información sobre cómo conceder el acceso aServicios de AWSen las políticas
deAWS IoT, véaseCreación de una regla de AWS IoT (p. 519).
La salida del comando create-policy contendrá el ARN de la política. El rol de IAM que permite el
acceso a un rol.
{
"Policy": {
"PolicyName": "my-iot-policy",
"CreateDate": "2015-09-30T19:31:18.620Z",
"AttachmentCount": 0,
"IsAttachable": true,
"PolicyId": "ZXR6A36LTYANPAI7NJ5UV",
"DefaultVersionId": "v1",
"Path": "/",
"Arn": "arn:aws:iam::123456789012:policy/my-iot-policy",
"UpdateDate": "2015-09-30T19:31:18.620Z"
}
}
De hecho, cuando crea o sustituye una regla, está transfiriendo un rol al motor de reglas.
Eliam:PassRolese requiere permiso para realizar esta operación. Para comprobar que dispone de este
permiso, cree una política que conceda eliam:PassRoleConceda permiso y adjúntelo a su usuario de
IAM. La política siguiente muestra cómo conceder un permiso iam:PassRole para un rol.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1",
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
518
AWS IoT Core Guía para desarrolladores
Creación de una regla de AWS IoT
"Resource": [
"arn:aws:iam::123456789012:role/myRole"
]
}
]
}
En este ejemplo de política, se concede el permiso iam:PassRole para el rol myRole. El rol se especifica
mediante el ARN del rol. Adjunta esta política al usuario o rol de la IAM al que pertenece el usuario. Para
obtener más información, consulte Uso de políticas administradas.
Note
Las funciones de Lambda utilizan una política basada en recursos. Esta política está
directamente asociada a la función de Lambda en sí. Cuando se crea una regla que invoca
una función de Lambda, no se transfiere un rol, por lo que el usuario que crea la regla no
necesitaiam:PassRolepermiso. Para obtener más información sobre la autorización de la
función Lambda, consulteOtorgar permiso mediante una política de recursos.
Nombre de la regla
El nombre de la regla de .
Note
No es recomendable utilizar información de identificación personal en los nombres de regla.
Descripción opcional
Sintaxis de SQL simplificada para filtrar los mensajes recibidos sobre un tema MQTT e insertar
los datos en otro punto. Para obtener más información, consulte Referencia de la SQL de AWS
IoT (p. 610).
Versión de SQL
Versión del motor de reglas SQL que debe utilizarse al evaluar la regla. Aunque esta propiedad es
opcional, recomendamos encarecidamente que especifique la versión de SQL. ¿ElAWS IoT Corela
consola establece esta propiedad en2016-03-23de forma predeterminada. Si esta propiedad no está
establecida, como en unAWS CLIcomando o unAWS CloudFormationplantilla2015-10-08se uso*
Para obtener más información, consulte Versiones de SQL (p. 681).
Una o varias acciones
Las accionesAWS IoTse ejecuta al promulgar la regla. Por ejemplo, puede insertar datos en una tabla
de DynamoDB, escribir datos en un bucket de Amazon S3, publicarlos en un tema de Amazon SNS o
invocar una función de Lambda.
Una acción de error
519
AWS IoT Core Guía para desarrolladores
Creación de una regla de AWS IoT
Cuando crees una regla, ten en cuenta la cantidad de datos que publicas sobre los temas. Si crea
reglas que incluyen un patrón de tema comodín, es posible que coincidan con un gran porcentaje de sus
mensajes. Si este es el caso, es posible que tenga que aumentar la capacidad delAWSrecursos utilizados
por las acciones objetivo. Asimismo, si crea una regla para volver a publicar que contenga un patrón de
tema con comodín, puede acabar teniendo una regla circular que genere un bucle infinito.
Note
La creación y la actualización de reglas son acciones de nivel de administrador. Todo usuario que
tenga permiso para crear o actualizar reglas podrá tener acceso a los datos procesados por las
reglas.
El siguiente es un ejemplo de archivo de carga útil con una regla que inserta todos los mensajes enviados
aliot/testtema en tabla de DynamoDB. La sentencia SQL filtra los mensajes y el rol que otorga el
ARN.AWS IoTpermiso para escribir en la tabla de DynamoDB.
{
"sql": "SELECT * FROM 'iot/test'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [{
"dynamoDB": {
"tableName": "my-dynamodb-table",
"roleArn": "arn:aws:iam::123456789012:role/my-iot-role",
"hashKeyField": "topic",
"hashKeyValue": "${topic(2)}",
"rangeKeyField": "timestamp",
"rangeKeyValue": "${timestamp()}"
}
}]
}
A continuación, se muestra un ejemplo de archivo de carga con una regla que inserta todos los mensajes
enviados al tema iot/test en el bucket de S3 especificado. La sentencia SQL filtra los mensajes y el rol
que otorga el ARNAWS IoTpermiso para escribir en bucket de Amazon S3.
{
"awsIotSqlVersion": "2016-03-23",
"sql": "SELECT * FROM 'iot/test'",
"ruleDisabled": false,
"actions": [
{
"s3": {
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_s3",
"bucketName": "my-bucket",
"key": "myS3Key"
}
}
]
}
El siguiente es un ejemplo de archivo de carga útil con una regla que envía datos a Amazon OpenSearch
Servicio
520
AWS IoT Core Guía para desarrolladores
Creación de una regla de AWS IoT
A continuación se muestra un ejemplo de un archivo de carga útil con una regla que invoca una función de
la Lambda:
{
"sql": "expression",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [{
"lambda": {
"functionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-lambda-
function"
}
}]
}
El siguiente es un ejemplo de archivo de carga útil con una regla que se publica en un tema de Amazon
SNS:
{
"sql": "expression",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [{
"sns": {
"targetArn": "arn:aws:sns:us-west-2:123456789012:my-sns-topic",
"roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
}
}]
}
Ejemplo de archivo de carga con una regla que vuelve a publicar en otro tema MQTT:
{
"sql": "expression",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [{
"republish": {
"topic": "my-mqtt-topic",
"roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
}
}]
}
A continuación se muestra un ejemplo de archivo de carga útil con una regla que envía los datos a una
transmisión de Amazon Kinesis Data Firehose:
521
AWS IoT Core Guía para desarrolladores
Creación de una regla de AWS IoT
{
"sql": "SELECT * FROM 'my-topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [{
"firehose": {
"roleArn": ""arn:aws:iam::123456789012:role/my-iot-role",
"deliveryStreamName": "my-stream-name"
}
}]
}
A continuación, se muestra un ejemplo de un archivo de carga útil con una regla que utiliza el archivo de
carga, SageMaker machinelearning_predictfunción para volver a publicar un tema si los datos de la
carga útil MQTT están clasificados como 1.
{
"sql": "SELECT * FROM 'iot/test' where machinelearning_predict('my-model',
'arn:aws:iam::123456789012:role/my-iot-aml-role', *).predictedLabel=1",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [{
"republish": {
"roleArn": "arn:aws:iam::123456789012:role/my-iot-role",
"topic": "my-mqtt-topic"
}
}]
}
A continuación se incluye un archivo de carga de ejemplo con una regla que publica mensajes en un flujo
de entrada de Salesforce IoT Cloud.
{
"sql": "expression",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [{
"salesforce": {
"token": "ABCDEFGHI123456789abcdefghi123456789",
"url": "https://ingestion-cluster-id.my-env.sfdcnow.com/streams/stream-id/
connection-id/my-event"
}
}]
}
Ejemplo de archivo de carga con una regla que inicia la ejecución de una máquina de estado de Step
Functions.
{
"sql": "expression",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [{
"stepFunctions": {
"stateMachineName": "myCoolStateMachine",
"executionNamePrefix": "coolRunning",
"roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
}
}]
}
522
AWS IoT Core Guía para desarrolladores
My custom
My custom
Para añadir otro nivel de especificidad a las reglas nuevas o existentes, puede aplicar el etiquetado. El
etiquetado aprovecha los pares clave-valor de sus reglas para proporcionarle un mayor control sobre
cómo y dónde se aplican sus reglas a susAWS IoTrecursos y servicios. Por ejemplo, puedes limitar el
alcance de tu regla para que solo se aplique en tu entorno beta para las pruebas previas al lanzamiento
(Key=environment, Value=beta) o capturar todos los mensajes enviados aliot/testel tema se
puede utilizar únicamente para un escenario específico de, y se puede almacenar en un escenario de la
VPC, que se puede utilizar con un escenario de la VPC
My IAM
Para ver un ejemplo que muestre cómo conceder permisos de etiquetado a una regla, pensemos en un
usuario que ejecuta el siguiente comando para crear una regla y etiquetarla para aplicarla únicamente a su
entorno beta.
En el ejemplo, sustituya:
{
"Version": "2012-10-17",
"Statement":
{
"Action": [ "iot:CreateTopicRule", "iot:TagResource" ],
"Effect": "Allow",
"Resource": [
"arn:aws:iot:us-east-1:123456789012:rule/MyTopicRuleName"
]
}
}
El ejemplo anterior muestra una regla recién creada llamadaMyTopicRuleNameque se aplica solo a
su entorno beta. Eliot:TagResourceen la declaración de política conMyTopicRuleNamedestacado
específicamente permite etiquetar al crear o actualizarMyTopicRuleName. El parámetro--tags
"environment=beta"utilizado al crear la regla limita el alcance deMyTopicRuleNamesolo a su entorno
beta. Si eliminas el parámetro--tags "environment=beta", entoncesMyTopicRuleNamese aplicará a
todos los entornos.
Para obtener más información sobre la creación de funciones y políticas de la IAM específicas para
unAWS IoTregla, consulteOtorgar unAWS IoTreglamentar el acceso que requiere (p. 517)
Para obtener información general sobre cómo etiquetar los recursos, consulteEtiquetado de los recursos
de AWS IoT (p. 304).
523
AWS IoT Core Guía para desarrolladores
Eliminar una regla
524
AWS IoT Core Guía para desarrolladores
Acciones de reglas de AWS IoT
AWS IoT Events (p. 573) Envía un mensaje a unAWS IoT iotEvents
Eventsentrada
AWS IoT SiteWise (p. 574) Envía los datos del mensaje iotSiteWise
aAWS IoT SiteWisepropiedades
de los activos.
Notas
• Defina la regla en la mismaRegión de AWScomo el recurso de otro servicio para que la acción
de la regla pueda interactuar con ese recurso.
• ElAWS IoTEl motor de reglas puede realizar varios intentos para realizar una acción si se
producen errores intermitentes. Si todos los intentos fallan, el mensaje se descarta y el error
525
AWS IoT Core Guía para desarrolladores
Apache Kafka
aparece en su CloudWatch Registros. Es posible especificar una acción de error para cada
regla que se invoca cuando se produce un error. Para obtener más información, consulte
Control de errores (acción de error) (p. 607).
• Algunas acciones de reglas activan acciones en los servicios que se integran conAWS Key
Management Service(AWS KMS) para el acceso al cifrado de datos. Si utilizas un sistema
gestionado por el clienteAWS KMS key(clave KMS) para cifrar datos en reposo, el servicio
debe tener permiso para usar la clave KMS en nombre de la persona que llama. Para obtener
información sobre cómo administrar los permisos de su clave KMS administrada por el cliente,
consulte los temas sobre el cifrado de datos en la guía de servicio correspondiente. Para
obtener más información sobre las claves KMS administradas por el cliente, consulteAWS Key
Management Serviceconceptosen elAWS Key Management ServiceGuía de desarrolladores.
Apache Kafka
La acción Apache Kafka (Kafka) envía mensajes directamente a su Amazon Managed Streaming para
Apache Kafka (Amazon MSK) o a clústeres de Apache Kafka autoadministrado para el análisis y la
visualización de datos.
Note
En este tema se presupone estar familiarizado con la plataforma Apache Kafka y los conceptos
relacionados. Para obtener más información sobre Apache Kafka, consulteApache Kafka. No
puedes invocar una acción de Apache Kafka en unAcción de error (p. 607).
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoT Corepara realizar esta acción de
regla.
Para obtener más información sobre las interfaces de red, consulteInterfaces de red elásticasen el
Manual del usuario de IAM EC2.
La política adjunta a la función que se muestra con el aspecto que se muestra en el ejemplo siguiente.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateNetworkInterface",
"ec2:DescribeNetworkInterfaces",
"ec2:CreateNetworkInterfacePermission",
"ec2:DeleteNetworkInterface",
"ec2:DescribeSubnets",
"ec2:DescribeVpcs",
"ec2:DescribeVpcAttribute",
"ec2:DescribeSecurityGroups"
],
"Resource": "*"
526
AWS IoT Core Guía para desarrolladores
Apache Kafka
}
]
}
La política adjunta a la función que se muestra con el aspecto que se muestra en el ejemplo siguiente.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret"
],
"Resource": [
"arn:aws:secretsmanager:region:123456789012:secret:kafka_client_truststore-*",
"arn:aws:secretsmanager:region:123456789012:secret:kafka_keytab-*"
]
}
]
}
• Puede ejecutar sus clústeres de Apache Kafka con Amazon Virtual Private Cloud (Amazon VPC).
Debe crear un destino de Amazon VPC y utilizar una puerta de enlace NAT en las subredes para
reenviar los mensajes desdeAWS IoTa un clúster público de Kafka. ElAWS IoTEl motor de reglas crea
una interfaz de red en cada una de las subredes enumeradas en el destino de la VPC para enrutar
el tráfico directamente a la VPC. Al crear un destino de IAM IAM, elAWS IoTel motor de reglas crea
automáticamente una acción de regla de VPC. Para obtener más información sobre las acciones de la
regla de la VPC, consulteDestinos de nube privada virtual (VPC) (p. 531).
• Si utilizas un servicio gestionado por el clienteAWS KMS key(clave KMS) para cifrar datos en reposo, el
servicio debe tener permiso para usar la clave KMS en nombre de la persona que llama. Para obtener
más información, consulteCifrado de Amazon MSKen elGuía para desarrolladores de Amazon Managed
Streaming for Apache Kafka.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
ARN de destino
El nombre de recurso de Amazon (ARN) del destino de la VPC. Para obtener información sobre la
creación de un destino de VPC, consulteDestinos de nube privada virtual (VPC) (p. 531).
tema
Puede sustituir este campo mediante una plantilla de sustitución. Para obtener más información,
consulte the section called “Plantillas de sustitución” (p. 674).
clave (opcional)
527
AWS IoT Core Guía para desarrolladores
Apache Kafka
Puede sustituir este campo mediante una plantilla de sustitución. Para obtener más información,
consulte the section called “Plantillas de sustitución” (p. 674).
partición (opcional)
Puede sustituir este campo mediante una plantilla de sustitución. Para obtener más información,
consulte the section called “Plantillas de sustitución” (p. 674).
Propiedades del cliente
Un objeto que define las propiedades del cliente productor de Apache Kafka.
Paquetes (opcional)
El número de agradecimientos que el productor requiere que el servidor haya recibido antes de
dar por finalizada una solicitud.
Si especificas 0 como valor, el productor no esperará a que el servidor envíe ningún acuse de
recibo. Si el servidor no recibe el mensaje, el productor no volverá a intentar enviarlo.
Una lista de pares de hosts y puertos (host1:port1,host2:port2, etc.) que se utiliza para
establecer la conexión inicial con el clúster de Kafka.
tipo de compresión (opcional)
Especifica cómo girar los objetos clave que proporciona con elProducerRecorden bytes.
Especifica cómo convertir los objetos de valor que se proporcionan con elProducerRecorden
bytes.
El archivo truststore en formato base64 o la ubicación del archivo truststore enAWS Secrets
Manager. Este valor no es obligatorio si las autoridades de certificación (CA) de Amazon confían
en tu tienda de confianza.
Este campo admite plantillas de sustitución. Si usa Secrets Manager para almacenar las
credenciales necesarias para conectarse a su agente de Kafka, puede usar la función SQL
get_secret para recuperar el valor de este campo. Para obtener más información sobre las
plantillas de sustitución, consulte the section called “Plantillas de sustitución” (p. 674). Para
obtener más información sobre la función SQL get_secret, consultethe section called “get_secret
(SecretID, SecretType, key, roLearn)” (p. 643). Si el truststore tiene el formato de un archivo,
utilice elSecretBinaryparámetro. Si el truststore tiene la forma de una cadena, utilice
elSecretStringparámetro.
528
AWS IoT Core Guía para desarrolladores
Apache Kafka
El archivo del almacén de claves. Este valor es obligatorio cuando se especificaSSLcomo el valor
desecurity.protocol.
Este campo admite plantillas de sustitución. Utilice Secrets Manager para almacenar las
credenciales necesarias para conectarse a su agente de Kafka. Utilice la función SQL get_secret
para recuperar el valor de este campo. Para obtener más información sobre las plantillas de
sustitución, consulte the section called “Plantillas de sustitución” (p. 674). Para obtener más
información sobre la función SQL get_secret, consultethe section called “get_secret (SecretID,
SecretType, key, roLearn)” (p. 643). Utilice el parámetro SecretBinary.
ssl.keystore.password
El valor de este campo puede ser texto sin formato. Este campo también admite plantillas de
sustitución. Utilice Secrets Manager para almacenar las credenciales necesarias para conectarse
a su agente de Kafka. Utilice la función SQL get_secret para recuperar el valor de este campo.
Para obtener más información sobre las plantillas de sustitución, consulte the section called
“Plantillas de sustitución” (p. 674). Para obtener más información sobre la función SQL
get_secret, consultethe section called “get_secret (SecretID, SecretType, key, roLearn)” (p. 643).
Utilice el parámetro SecretString.
ssl.key.password
Este campo admite plantillas de sustitución. Utilice Secrets Manager para almacenar las
credenciales necesarias para conectarse a su agente de Kafka. Utilice la función SQL get_secret
para recuperar el valor de este campo. Para obtener más información sobre las plantillas de
sustitución, consulte the section called “Plantillas de sustitución” (p. 674). Para obtener más
información sobre la función SQL get_secret, consultethe section called “get_secret (SecretID,
SecretType, key, roLearn)” (p. 643). Utilice el parámetro SecretString.
sasl.mechanism
529
AWS IoT Core Guía para desarrolladores
Apache Kafka
sasl.scram.username
El nombre de usuario que se utiliza para recuperar la cadena secreta de Secrets Manager.
Este valor es obligatorio cuando se especificaSASL_SSLporsecurity.protocolySCRAM-
SHA-512porsasl.mechanism.
sasl.scram.password
La contraseña que se utiliza para recuperar la cadena secreta de Secrets Manager. Este
valor es obligatorio cuando se especificaSASL_SSLporsecurity.protocolySCRAM-
SHA-512porsasl.mechanism.
sasl.kerberos.keytab
El archivo keytab para la autenticación de Kerberos en Secrets Manager. Este valor es obligatorio
cuando se especificaSASL_SSLporsecurity.protocolyGSSAPIporsasl.mechanism.
Este campo admite plantillas de sustitución. Utilice Secrets Manager para almacenar las
credenciales necesarias para conectarse a su agente de Kafka. Utilice la función SQL get_secret
para recuperar el valor de este campo. Para obtener más información sobre las plantillas de
sustitución, consulte the section called “Plantillas de sustitución” (p. 674). Para obtener más
información sobre la función SQL get_secret, consultethe section called “get_secret (SecretID,
SecretType, key, roLearn)” (p. 643). Utilice el parámetro SecretBinary.
sasl.kerberos.service.name
El nombre principal de Kerberos con el que se ejecuta Apache Kafka. Este valor es obligatorio
cuando se especificaSASL_SSLporsecurity.protocolyGSSAPIporsasl.mechanism.
sasl.kerberos.krb5.kdc
El ámbito al que se conecta su cliente productor de Apache Kafka. Este valor es obligatorio
cuando se especificaSASL_SSLporsecurity.protocolyGSSAPIporsasl.mechanism.
sasl.kerberos.principal
La identidad única de Kerberos a la que Kerberos puede asignar tickets para acceder
a los servicios compatibles con Kerberos. Este valor es obligatorio cuando se
especificaSASL_SSLporsecurity.protocolyGSSAPIporsasl.mechanism.
Ejemplos
El siguiente ejemplo de JSON define una acción de Apache Kafka en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"kafka": {
"destinationArn": "arn:aws:iot:region:123456789012:ruledestination/
vpc/VPCDestinationARN",
"topic": "TopicName",
530
AWS IoT Core Guía para desarrolladores
Apache Kafka
"clientProperties": {
"bootstrap.servers": "kafka.com:9092",
"security.protocol": "SASL_SSL",
"ssl.truststore": "${get_secret('kafka_client_truststore', 'SecretBinary',
'arn:aws:iam::123456789012:role/kafka-get-secret-role-name')}",
"ssl.truststore.password": "kafka password",
"sasl.mechanism": "GSSAPI",
"sasl.kerberos.service.name": "kafka",
"sasl.kerberos.krb5.kdc": "kerberosdns.com",
"sasl.kerberos.keytab": "${get_secret('kafka_keytab',
'SecretBinary', 'arn:aws:iam::123456789012:role/kafka-get-secret-role-
name')}",
"sasl.kerberos.krb5.realm": "KERBEROSREALM",
"sasl.kerberos.principal": "kafka-keytab/kafka-keytab.com"
}
}
}
]
• Su centro de distribución de claves (KDC) debe poder resolverse mediante un sistema de nombres de
dominio (DNS) privado dentro de la VPC de destino. Un enfoque posible consiste en añadir la entrada
DNS del KDC a una zona alojada privada. Para obtener más información sobre este enfoque, consulteEl
trabajo con zonas alojadas privadas.
• Cada VPC debe tener habilitada la resolución de DNS. Para obtener más información, consulte
Utilización de DNS con su VPC.
• Los grupos de seguridad de la interfaz de red y los grupos de seguridad a nivel de instancia del destino
de la VPC deben permitir el tráfico desde dentro de la VPC en los siguientes puertos.
• El tráfico TCP en el puerto bootstrap Broker Listener (normalmente 9092, pero debe estar dentro del
rango de 9000 a 9100)
• Tráfico TCP y UDP en el puerto 88 del KDC
• SCRAM-SHA-512es el único mecanismo de seguridad que se puede utilizar con el escenario de la CN-
North, la CN-Northwest-1, us-gov-east-1, y us-gov-west-1 Regiones.
Un destino de VPC contiene una lista de subredes dentro de la VPC. El motor de reglas crea una interfaz
de red elástica en cada subred que especifique en esta lista. Para obtener más información sobre las
interfaces de red, consulteInterfaces de red elásticasen el Manual del usuario de IAM EC2.
Requisitos y consideraciones
• Si utiliza un clúster de Apache Kafka autogestionado al que se accederá mediante un punto final público
a través de Internet:
• Cree una puerta de enlace NAT para las instancias de sus subredes. La puerta de enlace NAT tiene
una dirección IP pública que puede conectarse a Internet, lo que permite al motor de reglas reenviar
mensajes al clúster de Kafka público.
• Asigne una dirección IP elástica con las interfaces de red elásticas (ENI) que crea el destino de la
VPC. Los grupos de seguridad que utilice deben estar configurados para bloquear el tráfico entrante.
531
AWS IoT Core Guía para desarrolladores
Apache Kafka
Note
Si el destino de la VPC se inhabilita y, a continuación, se vuelve a habilitar, debe volver a
asociar las IP elásticas a los nuevos ENI.
• Si el destino de una regla temática de VPC no recibe tráfico durante 30 días seguidos, se deshabilitará.
• Si algún recurso utilizado por el destino de la VPC cambia, el destino se deshabilitará y no se podrá
utilizar.
• Algunos cambios que pueden deshabilitar un destino de VPC incluyen: eliminar la VPC, las subredes, los
grupos de seguridad o el rol utilizado; modificar el rol para que deje de tener los permisos necesarios; y
deshabilitar el destino.
Precios
A efectos de fijación de precios, se mide una acción de regla de VPC además de la acción que envía un
mensaje a un recurso cuando el recurso está en su VPC. Para obtener información sobre los precios,
consulte Precios de AWS IoT Core.
vpcId
Una lista de subredes en las que el motor de reglas crea interfaces de red elásticas. El motor de reglas
asigna una única interfaz de red para cada subred de la lista.
Grupos de seguridad (opcional)
El nombre de Amazon (ARN) de un rol que tiene permiso para crear interfaces de red en su nombre.
Este ARN debe tener una política que se parece a la del ejemplo siguiente.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateNetworkInterface",
"ec2:DescribeNetworkInterfaces",
"ec2:DescribeVpcs",
"ec2:DeleteNetworkInterface",
"ec2:DescribeSubnets",
"ec2:DescribeVpcAttribute",
"ec2:DescribeSecurityGroups"
],
"Resource": "*"
},
{
"Effect": "Allow",
532
AWS IoT Core Guía para desarrolladores
Apache Kafka
"Action": "ec2:CreateNetworkInterfacePermission",
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:ResourceTag/VPCDestinationENI": "true"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:CreateAction": "CreateNetworkInterface",
"aws:RequestTag/VPCDestinationENI": "true"
}
}
}
]
}
Después de ejecutar este comando, el estado de destino de la VPC seráIN_PROGRESS. Después de unos
minutos, su estado cambiará aERROR(si el comando no se ejecuta correctamente) oENABLED. Cuando el
estado del destino esENABLED, ya está listo para su uso.
Para ver el estado del destino de la VPC, se puede utilizar el siguiente comando para ver el estado de la
VPC, se puede utilizar el siguiente comando para ver el estado de
• ID de VPC
• ID de subred
• Security Group
3. Seleccione un rol que tiene los permisos necesarios para crear interfaces de red. El ejemplo anterior
de política contiene estos permisos.
533
AWS IoT Core Guía para desarrolladores
CloudWatch alarmas
CloudWatch alarmas
El CloudWatch alarma (cloudWatchAlarm) la acción cambia el estado de un Amazon CloudWatch
alarma Puede especificar el motivo del cambio de estado y el valor de esta llamada.
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
alarmName
El rol de IAM que permite el acceso al CloudWatch alarma Para obtener más información, consulte
Requisitos (p. 534).
Ejemplos
El siguiente ejemplo de JSON define un CloudWatch acción de alarma en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"cloudwatchAlarm": {
"alarmName": "IotAlarm",
"stateReason": "Temperature stabilized.",
534
AWS IoT Core Guía para desarrolladores
CloudWatch Registros
"stateValue": "OK",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_cw"
}
}
]
}
}
Véase también
• Qué es Amazon CloudWatch?en elAmazon CloudWatch Guía de uso*
• Uso de Amazon CloudWatchalarmasen elAmazon CloudWatch Guía de uso*
CloudWatch Registros
El CloudWatch Registros (cloudwatchLogsLa acción) envía datos a Amazon CloudWatch Registros.
Puedes usarbatchModepara cargar y marcar la hora de varios registros de dispositivos en un mensaje.
También puede especificar el grupo de registros al que la acción envía los datos.
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
• Si utiliza un servicio gestionado por el clienteAWS KMS key(clave KMS) para cifrar los datos de registro
CloudWatch Para los registros, el servicio debe tener permiso para utilizar la clave KMS en nombre de
la persona que llama. Para obtener más información, consulteCifrar los datos de registro en CloudWatch
Registra uso*AWS KMSen elAmazon CloudWatch Guía de usuario de registros.
[
{"timestamp": 1673520691093, "message": "Test message 1"},
{"timestamp": 1673520692879, "message": "Test message 2"},
{"timestamp": 1673520693442, "message": "Test message 3"}
]
Según cómo se generen los registros del dispositivo, es posible que sea necesario filtrarlos y
reformatearlos antes de enviarlos para cumplir con este requisito. Para obtener más información,
consulteCarga útil de un mensaje de MQTT.
535
AWS IoT Core Guía para desarrolladores
CloudWatch métricas
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
logGroupName
La función de IAM que permite acceder al CloudWatch grupo de registros Para obtener más
información, consulte Requisitos (p. 535).
Indica si los lotes de registros se van a extraer y cargar en CloudWatch. Los valores
incluyentrueofalse(predeterminado). Para obtener más información, consulte Requisitos (p. 535).
Ejemplos
El siguiente ejemplo de JSON define un CloudWatch Registra la acción en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"cloudwatchLogs": {
"logGroupName": "IotLogs",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_cw",
"batchMode": false
}
}
]
}
}
Véase también
• Qué es Amazon CloudWatch ¿Registros?en elAmazon CloudWatch Guía de usuario de registros
CloudWatch métricas
El CloudWatch métrica (cloudwatchMetric) la acción captura un Amazon CloudWatchmétrica. Puede
especificar el espacio de nombres, el nombre, el valor, la unidad y la marca de tiempo de la métrica.
536
AWS IoT Core Guía para desarrolladores
CloudWatch métricas
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
metricName
(Opcional) Una cadena que contiene la marca de tiempo, expresada en segundos en tiempo de época
de Unix. El valor predeterminado es la hora de la época actual de Unix.
La función de IAM que permite acceder al CloudWatch métrica. Para obtener más información,
consulte Requisitos (p. 537).
Ejemplos
El siguiente ejemplo de JSON define un CloudWatch acción métrica en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
537
AWS IoT Core Guía para desarrolladores
DynamoDB
{
"cloudwatchMetric": {
"metricName": "IotMetric",
"metricNamespace": "IotNamespace",
"metricUnit": "Count",
"metricValue": "1",
"metricTimestamp": "1456821314",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_cw"
}
}
]
}
}
El siguiente ejemplo de JSON define una CloudWatch acción métrica con plantillas de sustitución en
unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"cloudwatchMetric": {
"metricName": "${topic()}",
"metricNamespace": "${namespace}",
"metricUnit": "${unit}",
"metricValue": "${value}",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_cw"
}
}
]
}
}
Véase también
• Qué es Amazon CloudWatch?en elAmazon CloudWatch Guía de uso*
• Uso de Amazon CloudWatchmétricasen elAmazon CloudWatch Guía de uso*
DynamoDB
El DynamoDB (dynamoDB), la acción escribe todo o parte de un mensaje de MQTT en una tabla de
Amazon DynamoDB.
Para ver un tutorial que muestra cómo crear y probar una regla con una acción de DynamoDB,
consulte un tutorial que muestra cómo crear y probar una regla con una acción de DynamoDB. Para
obtener más información, consulte Tutorial: Almacenamiento de datos del dispositivo en una tabla de
DynamoDB (p. 224).
Note
Esta regla escribe datos que no son de JSON en DynamoDB como datos binarios. La consola
DynamoDB muestra los datos como texto codificado en base64.
Requisitos
Esta acción de regla tiene los siguientes requisitos:
538
AWS IoT Core Guía para desarrolladores
DynamoDB
En laAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
• Si utilizas una gestionada por el clienteAWS KMS key(clave KMS) para cifrar los datos en reposo en
DynamoDB, el servicio debe tener permiso para usar la clave KMS en nombre de la persona que llama.
Para obtener más información, consulteClave KMS gestionada por el clienteen elGuía de introducción a
Amazon DynamoDB.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
tableName
(Opcional) El tipo de datos de la clave hash (también denominada clave de la partición). Valores
válidos: STRING, NUMBER.
(Opcional) El valor de la clave de rango. Considere la posibilidad de utilizar una plantilla de sustitución
como${topic()}o${timestamp()}.
(Opcional) El nombre de la columna en la que está escrita la carga útil. Si omite este valor, la carga útil
se escribe en la columna denominadapayload.
539
AWS IoT Core Guía para desarrolladores
DynamoDBv2
operation
(Opcional) El tipo de operación que se va a realizar. Valores válidos: INSERT, UPDATE, DELETE.
El rol de IAM que permite tener acceso a la tabla de DynamoDB. Para obtener más información,
consulte Requisitos (p. 538).
Los datos escritos en la tabla de DynamoDB son el resultado de la sentencia SQL de la regla.
Ejemplos
El siguiente ejemplo de JSON define una acción de DynamoDB en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * AS message FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"dynamoDB": {
"tableName": "my_ddb_table",
"hashKeyField": "key",
"hashKeyValue": "${topic()}",
"rangeKeyField": "timestamp",
"rangeKeyValue": "${timestamp()}",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_dynamoDB"
}
}
]
}
}
Véase también
• ¿Qué es Amazon DynamoDB?en elGuía del desarrollador de Amazon DynamoDB
• Introducción a DynamoDBen elGuía del desarrollador de Amazon DynamoDB
• Tutorial: Almacenamiento de datos del dispositivo en una tabla de DynamoDB (p. 224)
DynamoDBv2
El DynamoDBv2 (dynamoDBv2), la acción escribe todo o parte de un mensaje de MQTT en una tabla de
Amazon DynamoDB. Cada atributo de la carga se escribe en una columna independiente de la base de
datos de DynamoDB.
Requisitos
Esta acción de regla tiene los siguientes requisitos:
540
AWS IoT Core Guía para desarrolladores
DynamoDBv2
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
• La carga del mensaje MQTT debe contener una clave de nivel de raíz que coincida con la clave de
partición principal de la tabla y una clave de nivel de raíz que coincida con la clave de ordenación
principal de la tabla, si hay una definida.
• Si utiliza un servicio gestionado por el clienteAWS KMS key(clave KMS) para cifrar los datos en reposo
en DynamoDB, el servicio debe tener permiso para usar la clave KMS en nombre de la persona que
llama. Para obtener más información, consulteClave KMS gestionada por el clienteen elGuía de
introducción a Amazon DynamoDB.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
putItem
Un objeto que especifica la tabla de DynamoDB en la que se escribirán los datos de los mensajes.
Este objeto debe contener la siguiente información:
tableName
El rol de IAM que permite tener acceso a la tabla de DynamoDB. Para obtener más información,
consulte Requisitos (p. 540).
Los datos escritos en la tabla de DynamoDB son el resultado de la sentencia SQL de la regla.
Ejemplos
En el siguiente ejemplo de JSON se define una acción de DynamoDBv2 en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * AS message FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"dynamoDBv2": {
"putItem": {
"tableName": "my_ddb_table"
},
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_dynamoDBv2",
}
}
]
}
}
El siguiente ejemplo de JSON define una acción de DynamoDB con plantillas de sustitución en unAWS
IoTregla.
541
AWS IoT Core Guía para desarrolladores
Elasticsearch
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2015-10-08",
"actions": [
{
"dynamoDBv2": {
"putItem": {
"tableName": "${topic()}"
},
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_dynamoDBv2"
}
}
]
}
}
Véase también
• ¿Qué es Amazon DynamoDB?en elGuía del desarrollador de Amazon DynamoDB
• Introducción a DynamoDBen elGuía del desarrollador de Amazon DynamoDB
Elasticsearch
The Elasticsearch (elasticsearch) la acción escribe los datos de los mensajes MQTT en un Amazon
OpenSearch Un dominio de servicio. A continuación, puede utilizar herramientas como OpenSearch
Paneles para consultar y visualizar datos en OpenSearch Servicio
Warning
La acción Elasticsearch solo puede ser utilizado por acciones de reglas existentes. Para crear
una nueva acción de regla o actualizar una acción de regla existente, use la acción de la regla
OpenSearch en su lugar. Para obtener más información, consulte OpenSearch (p. 586).
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En laAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
• Si utilizas un servicio gestionado por el clienteAWS KMS key(clave de IAM) para el cifrado de los
datos en reposo OpenSearch, el servicio debe tener permiso para utilizar la clave KMS en nombre de
la persona que llama. Para obtener más información, consulteEl cifrado de los datos en reposo para
Amazon OpenSearch Servicioen elAmazon OpenSearch Guía para desarrolladores de servicios.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
endpoint
542
AWS IoT Core Guía para desarrolladores
Elasticsearch
La función de IAM que permite acceder al OpenSearch Un dominio de servicio. Para obtener más
información, consulte Requisitos (p. 542).
Ejemplos
El siguiente ejemplo de JSON define una acción de Elasticsearch en unAWS IoTregla y cómo
se pueden especificar los campos paraelasticsearchacción. Para obtener más información,
consulteElasticsearchAction.
{
"topicRulePayload": {
"sql": "SELECT *, timestamp() as timestamp FROM 'iot/test'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"elasticsearch": {
"endpoint": "https://my-endpoint",
"index": "my-index",
"type": "my-type",
"id": "${newuuid()}",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_es"
}
}
]
}
}
El siguiente ejemplo de JSON define una acción de Elasticsearch con plantillas de sustitución en unAWS
IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"elasticsearch": {
"endpoint": "https://my-endpoint",
543
AWS IoT Core Guía para desarrolladores
HTTP
"index": "${topic()}",
"type": "${type}",
"id": "${newuuid()}",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_es"
}
}
]
}
}
Véase también
• OpenSearch (p. 586)
• Qué es Amazon OpenSearch ¿Servicio?
HTTP
El HTTPS (http) la acción envía datos de un mensaje MQTT a una aplicación o servicio web.
Requisitos
Esta acción de regla tiene los siguientes requisitos:
• Debe confirmar y habilitar los puntos de enlace HTTPS antes de que el motor de reglas pueda usarlos.
Para obtener más información, consulte Trabajar con destinos de reglas de temas HTTP (p. 546).
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
url
El punto final de HTTPS al que se envía el mensaje mediante el método HTTP POST. Si utiliza
una dirección IP en lugar de un nombre de host, debe ser una dirección IPv4. El soporte para las
direcciones IAM IAM IAM.
544
AWS IoT Core Guía para desarrolladores
HTTP
(Opcional) La lista de encabezados que se van a incluir en las solicitudes HTTP al punto final. Cada
encabezado debe contener la siguiente información:
key
(Opcional) La autenticación utilizada por el motor de reglas para conectarse a la URL del punto final
especificada enurlargumento. Actualmente, Signature Version 4 es el único tipo de autenticación
admitido. Para obtener más información, consulte Autorización HTTP.
Ejemplos
El siguiente ejemplo de JSON define unAWS IoTregla con una acción HTTP.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"http": {
"url": "https://www.example.com/subpath",
"confirmationUrl": "https://www.example.com",
"headers": [
{
"key": "static_header_key",
"value": "static_header_value"
},
{
"key": "substitutable_header_key",
"value": "${value_from_payload}"
}
]
}
}
]
}
}
545
AWS IoT Core Guía para desarrolladores
HTTP
Note
Véase también
• Trabajar con destinos de reglas de temas HTTP (p. 546)
• Enrute los datos directamente desdeAWS IoT Corea sus servicios weben elInternet de las cosas
enAWSblog
AntesAWS IoT Corepuede enviar datos a otro servicio web, debe confirmar que puede acceder al punto
final del servicio.
El destino de una regla de tema HTTP puede estar con uno de los siguientes estados:
ENABLED
El destino se ha confirmado y una acción de regla lo puede utilizar. Un destino debe tener el estado
ENABLED para que se utilice en una regla. Solo puedes habilitar un destino que esté en estado
DESACTIVADO.
DISABLED
El destino se ha confirmado, pero una acción de regla no lo puede usar. Esto es útil si desea impedir
temporalmente el tráfico a su punto de enlace sin tener que pasar de nuevo por el proceso de
confirmación. Solo puedes deshabilitar un destino que esté en estado ACTIVADO.
546
AWS IoT Core Guía para desarrolladores
HTTP
IN_PROGRESS
Una vez que se haya confirmado y habilitado el destino de una regla temática HTTP, podrá utilizarla con
cualquier regla de su cuenta.
En las siguientes secciones se describen las acciones comunes de los destinos de las reglas de los temas
HTTP.
Después de que hayas creado el destino,AWS IoTenvía una solicitud de confirmación a la URL de
confirmación. La solicitud de confirmación tiene el siguiente formato:
arn
El nombre del recurso de Amazon (ARN) del destino de la regla del tema que se debe confirmar.
confirmationToken
El token de confirmación enviado porAWS IoT Core. El token del ejemplo está truncado. Su token será
mayor. Necesitarás este token para confirmar tu destino conAWS IoT Core.
enableUrl
La dirección URL a la que se desplaza para confirmar el destino de una regla del tema.
messageType
Tipo de mensaje.
Para completar el proceso de confirmación del punto final, debe realizar una de las siguientes acciones
después de que su URL de confirmación reciba la solicitud de confirmación.
547
AWS IoT Core Guía para desarrolladores
HTTP
548
AWS IoT Core Guía para desarrolladores
HTTP
Certificate fingerprints:
MD5: 30:C9:E7:1E:6B:E6:14:EB:65:B2:16:69:20:31:67:4D
SHA1: 3B:C0:38:0B:33:C3:F6:A6:0C:86:15:22:93:D9:DF:F5:4B:81:C0:04
SHA256:
C1:B4:82:99:AB:A5:20:8F:E9:63:0A:CE:55:CA:68:A0:3E:DA:5A:51:9C:88:02:A0:D3:A6:73:BE:8F:8E:55:7D
549
AWS IoT Core Guía para desarrolladores
HTTP
SHA256:
04:04:80:28:BF:1F:28:64:D4:8F:9A:D4:D8:32:94:36:6A:82:88:56:55:3F:3B:14:30:3F:90:14:7F:5D:40:EF
550
AWS IoT Core Guía para desarrolladores
HTTP
551
AWS IoT Core Guía para desarrolladores
HTTP
SHA1: 30:46:D8:C8:88:FF:69:30:C3:4A:FC:CD:49:27:08:7C:60:56:7B:0D
SHA256:
A9:15:45:DB:D2:E1:9C:4C:CD:F9:09:AA:71:90:0D:18:C7:35:1C:89:B3:15:F0:F1:3D:05:C1:3A:8F:FB:46:87
552
AWS IoT Core Guía para desarrolladores
HTTP
553
AWS IoT Core Guía para desarrolladores
HTTP
MD5: E1:4B:52:73:D7:1B:DB:93:30:E5:BD:E4:09:6E:BE:FB
SHA1: 21:6B:2A:29:E6:2A:00:CE:82:01:46:D8:24:41:41:B9:25:11:B2:79
SHA256:
CC:C8:94:89:37:1B:AD:11:1C:90:61:9B:EA:24:0A:2E:6D:AD:D9:9F:9F:6E:1D:4D:41:E5:8E:D6:DE:3D:02:85
554
AWS IoT Core Guía para desarrolladores
HTTP
SHA256:
9A:11:40:25:19:7C:5B:B9:5D:94:E6:3D:55:CD:43:79:08:47:B6:46:B2:3C:DF:11:AD:A4:A0:0E:FF:15:FB:48
555
AWS IoT Core Guía para desarrolladores
HTTP
556
AWS IoT Core Guía para desarrolladores
HTTP
SHA1: AA:DB:BC:22:23:8F:C4:01:A1:27:BB:38:DD:F4:1D:DB:08:9E:F0:12
SHA256:
A4:31:0D:50:AF:18:A6:44:71:90:37:2A:86:AF:AF:8B:95:1F:FB:43:1D:83:7F:1E:56:88:B4:59:71:ED:15:57
557
AWS IoT Core Guía para desarrolladores
HTTP
558
AWS IoT Core Guía para desarrolladores
HTTP
SHA256:
46:ED:C3:68:90:46:D5:3A:45:3F:B3:10:4A:B8:0D:CA:EC:65:8B:26:60:EA:16:29:DD:7E:86:79:90:64:87:16
559
AWS IoT Core Guía para desarrolladores
HTTP
560
AWS IoT Core Guía para desarrolladores
HTTP
SHA1: A7:B7:F6:15:8A:FF:1E:C8:85:13:38:BC:93:EB:A2:AB:A4:09:EF:06
SHA256:
0E:DE:63:C1:DC:7A:8E:11:F1:AB:BC:05:4F:59:EE:49:9D:62:9A:2F:DE:9C:A7:16:32:A2:64:29:3E:8B:66:AA
561
AWS IoT Core Guía para desarrolladores
HTTP
562
AWS IoT Core Guía para desarrolladores
HTTP
MD5: 21:D8:4C:82:2B:99:09:33:A2:EB:14:24:8D:8E:5F:E8
SHA1: 40:54:DA:6F:1C:3F:40:74:AC:ED:0F:EC:CD:DB:79:D1:53:FB:90:1D
SHA256:
76:7C:95:5A:76:41:2C:89:AF:68:8E:90:A1:C7:0F:55:6C:FD:6B:60:25:DB:EA:10:41:6D:7E:B6:83:1F:8C:40
563
AWS IoT Core Guía para desarrolladores
HTTP
SHA256:
85:A0:DD:7D:D7:20:AD:B7:FF:05:F8:3D:54:2B:20:9D:C7:FF:45:28:F7:D6:77:B1:83:89:FE:A5:E5:C4:9E:86
564
AWS IoT Core Guía para desarrolladores
HTTP
565
AWS IoT Core Guía para desarrolladores
HTTP
SHA1: 85:B5:FF:67:9B:0C:79:96:1F:C8:6E:44:22:00:46:13:DB:17:92:84
SHA256:
7D:3B:46:5A:60:14:E5:26:C0:AF:FC:EE:21:27:D2:31:17:27:AD:81:1C:26:84:2D:00:6A:F3:73:06:CC:80:BD
566
AWS IoT Core Guía para desarrolladores
HTTP
567
AWS IoT Core Guía para desarrolladores
HTTP
MD5: FC:11:B8:D8:08:93:30:00:6D:23:F9:7E:EB:52:1E:02
SHA1: 70:17:9B:86:8C:00:A4:FA:60:91:52:22:3F:9F:3E:32:BD:E0:05:62
SHA256:
69:FA:C9:BD:55:FB:0A:C7:8D:53:BB:EE:5C:F1:D5:97:98:9F:D0:AA:AB:20:A2:51:51:BD:F1:73:3E:E7:D1:22
568
AWS IoT Core Guía para desarrolladores
HTTP
SHA256:
B6:76:F2:ED:DA:E8:77:5C:D3:6C:B0:F6:3C:D1:D4:60:39:61:F4:9E:62:65:BA:01:3A:2F:03:07:B6:D0:B8:04
569
AWS IoT Core Guía para desarrolladores
HTTP
570
AWS IoT Core Guía para desarrolladores
IoT Analytics
SHA1: B8:23:6B:00:2F:1D:16:86:53:01:55:6C:11:A4:37:CA:EB:FF:C3:BB
SHA256:
BD:71:FD:F6:DA:97:E4:CF:62:D1:64:7A:DD:25:81:B0:7D:79:AD:F8:39:7E:B4:EC:BA:9C:5E:84:88:82:14:23
IoT Analytics
ElAWS IoT Analytics(iotAnalytics) la acción envía datos de un mensaje MQTT a unAWS IoT
Analyticscano*.
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
La política adjunta a la función que se muestra con el aspecto que se muestra en el ejemplo siguiente.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iotanalytics:BatchPutMessage",
"Resource": [
"arn:aws:iotanalytics:us-west-2:account-id:channel/mychannel"
]
}
]
}
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
batchMode
El nombre del canal de AWS IoT Analytics en el que se escriben los datos.
571
AWS IoT Core Guía para desarrolladores
IoT Analytics
La función de IAM que permite acceder alAWS IoT Analyticscano*. Para obtener más información,
consulte Requisitos (p. 571).
Ejemplos
El siguiente ejemplo de JSON define unAWS IoT Analyticsacción en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"iotAnalytics": {
"channelName": "mychannel",
"roleArn": "arn:aws:iam::123456789012:role/analyticsRole",
}
}
]
}
}
Véase también
• ¿Qué es AWS IoT Analytics? en la Guía del usuario de AWS IoT Analytics
• ElAWS IoT Analyticsla consola también tiene unUn inicio rápidofunción que le permite crear un canal,
un almacén de datos, una canalización y un almacén de datos con un solo clic. Para obtener más
información, consulteAWS IoT Analyticsguía de inicio rápido de la consolaen laAWS IoT AnalyticsGuía
de uso*.
572
AWS IoT Core Guía para desarrolladores
AWS IoT Events
Si la carga útil se envía aAWS IoT Coresin elInput attribute Key, o si la clave no está en la
misma ruta JSON especificada en la clave, la regla de IoT fallará y mostrará el errorFailed to
send message to Iot Events.
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
batchMode
(Opcional) Si se deben procesar las acciones del evento como un lote. El valor predeterminado es
false.
(Opcional) Se puede utilizar para comprobar que solo hay una entrada (mensaje) con un escenario
dadomessageIdes procesado por unAWS IoT Eventsdetector Puede utilizar el${newuuid()}plantilla
de sustitución para generar un identificador único para cada solicitud.
El rol de IAM que permiteAWS IoTenviar un rol a unAWS IoT Eventsdetector Para obtener más
información, consulte Requisitos (p. 573).
573
AWS IoT Core Guía para desarrolladores
AWS IoT SiteWise
Ejemplos
El siguiente ejemplo de JSON define una acción de IoT Events en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"iotEvents": {
"inputName": "MyIoTEventsInput",
"messageId": "${newuuid()}",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_events"
}
}
]
}
}
Véase también
• ¿Qué es AWS IoT Events? en la Guía para desarrolladores de AWS IoT Events
Puede seguir un tutorial que le muestra cómo incorporar datos de objetos de AWS IoT. Para obtener más
información, consulte la .MyAWS IoT SiteWisedeAWS IoTcosasUn tutorial deIngerir datos medianteAWS
IoTnormas de basesección deAWS IoT SiteWiseGuía de uso*.
Requisitos
Esta acción de regla tiene los siguientes requisitos:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iotsitewise:BatchPutAssetPropertyValue",
"Resource": "*"
}
]
}
Para mejorar la seguridad, puede especificar una ruta jerárquica de recursos de AWS IoT SiteWise en
la propiedad Condition. El siguiente ejemplo es una política de confianza que especifica una ruta
jerárquica de recursos.
574
AWS IoT Core Guía para desarrolladores
AWS IoT SiteWise
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iotsitewise:BatchPutAssetPropertyValue",
"Resource": "*",
"Condition": {
"StringLike": {
"iotsitewise:assetHierarchyPath": [
"/root node asset ID",
"/root node asset ID/*"
]
}
}
}
]
}
• Cuando envías datos aAWS IoT SiteWisecon esta acción, sus datos deben cumplir los requisitos
deBatchPutAssetPropertyValueOperación Para obtener más información, consulte
BatchPutAssetPropertyValue en la Referencia de la API de AWS IoT SiteWise.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
putAssetPropertyValueEntries
Una lista de entradas de valor de propiedad de recurso, en la que cada entrada contiene la siguiente
información:
propertyAlias
575
AWS IoT Core Guía para desarrolladores
AWS IoT SiteWise
propertyValues
Una lista de valores de propiedad que se van a insertar, en la que cada valor contiene una marca
temporal, la calidad y el valor (TQV) en el formato siguiente:
timestamp
Una cadena que contiene el tiempo en segundos en formato de tiempo Unix. Si su carga
de mensajes no tiene una marca temporal, puede usar timestamp() (p. 665), que
devuelve la hora actual en milisegundos. Para convertir ese tiempo en segundos, puede
utilizar la siguiente plantilla de sustitución: ${floor(timestamp() / 1E3)}.
(Opcional) Una cadena que contiene el desfase temporal de nanosegundos con respecto
al tiempo expresado en segundos. Si su carga de mensajes no tiene una marca temporal,
puede usar timestamp() (p. 665), que devuelve la hora actual en milisegundos. Para
calcular el desfase en nanosegundos a partir de ese tiempo, puede utilizar la siguiente
plantilla de sustitución: ${(timestamp() % 1E3) * 1E6}.
Con respecto a la época de Unix,AWS IoT SiteWisesolo acepta entradas que tengan una
marca de tiempo de hasta 7 días en el pasado y hasta 5 minutos en el futuro.
quality
(Opcional) Una cadena que describe la calidad del valor. Valores válidos: GOOD, BAD,
UNCERTAIN.
Una estructura de valores que contiene uno de los siguientes campos de valor, en función del
tipo de datos de la propiedad del recurso:
booleanValue
576
AWS IoT Core Guía para desarrolladores
AWS IoT SiteWise
roleArn
El ARN del rol de IAM que permite el rol de IAM que permiteAWS IoTpermiso para enviar el valor
de una propiedad de un activo aAWS IoT SiteWise. Para obtener más información, consulte
Requisitos (p. 574).
Ejemplos
El siguiente ejemplo de JSON define un IoT básico SiteWise acción en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"iotSiteWise": {
"putAssetPropertyValueEntries": [
{
"propertyAlias": "/some/property/alias",
"propertyValues": [
{
"timestamp": {
"timeInSeconds": "${my.payload.timeInSeconds}"
},
"value": {
"integerValue": "${my.payload.value}"
}
}
]
}
],
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_sitewise"
}
}
]
}
}
El siguiente ejemplo de JSON define un IoT SiteWise acción en unAWS IoTregla. En este ejemplo se
utiliza el tema como alias de propiedad y función timestamp(). Por ejemplo, si publica datos en/
company/windfarm/3/turbine/7/rpm, esta acción envía los datos a la propiedad del activo con un
alias de propiedad que coincide con el tema que especificó.
{
"topicRulePayload": {
"sql": "SELECT * FROM '/company/windfarm/+/turbine/+/+'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"iotSiteWise": {
"putAssetPropertyValueEntries": [
{
"propertyAlias": "${topic()}",
"propertyValues": [
{
"timestamp": {
577
AWS IoT Core Guía para desarrolladores
Kinesis Data Firehose
Véase también
• ¿Qué es AWS IoT SiteWise? en la Guía del usuario de AWS IoT SiteWise
• Ingerir datos medianteAWS IoT Corereglasen elAWS IoT SiteWiseGuía de uso*
• MyAWS IoT SiteWisedeAWS IoTcosasen elAWS IoT SiteWiseGuía de uso*
• MyAWS IoT SiteWiseacción de reglaen elAWS IoT SiteWiseGuía de uso*
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
• Si utiliza Kinesis Data Firehose para enviar datos a un depósito de Amazon S3 y utiliza unAWS
KMSgestionado por el clienteAWS KMS keypara cifrar los datos en reposo en Amazon S3, Kinesis Data
Firehose debe tener acceso a su bucket y permiso para usar elAWS KMS keyen nombre de la persona
que llama. Para obtener más información, consulteConceda a Kinesis Data Firehose acceso a un destino
de Amazon S3en elGuía para desarrolladores de Amazon Kinesis Data Firehose.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
batchMode
Cuando batchMode es true y la instrucción de SQL de la regla se evalúa como una matriz, cada
elemento de la matriz forma un registro en la solicitud PutRecordBatch. La matriz resultante no
puede tener más de 500 registros.
578
AWS IoT Core Guía para desarrolladores
Kinesis Data Firehose
La transmisión de Kinesis Data Firehose en la que se van a escribir los datos del mensaje.
(Opcional) Un separador de caracteres que se usa para separar registros escritos en la transmisión
de Kinesis Data Firehose. Si se omite este parámetro, el flujo no utiliza ningún separador. Valores
válidos:,(coma),\t(pestaña),\n(nueva línea),\r\n(nueva línea de Windows).
La función de la IAM que permite el acceso a la transmisión de la Kinesis Data Firehose. Para obtener
más información, consulte Requisitos (p. 578).
Ejemplos
El siguiente ejemplo de JSON define una acción de Kinesis Data Firehose en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"firehose": {
"deliveryStreamName": "my_firehose_stream",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_firehose"
}
}
]
}
}
El siguiente ejemplo de JSON define una acción de Kinesis Data Firehose con plantillas de sustitución en
unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"firehose": {
"deliveryStreamName": "${topic()}",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_firehose"
}
}
]
}
}
579
AWS IoT Core Guía para desarrolladores
Kinesis Data Streams
Véase también
• ¿Qué es el IAM IAM IAM IAM IAM IAM IAM IAM IAM?en elGuía para desarrolladores de Amazon Kinesis
Data Firehose
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En laAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
• Si usa unAWS KMSgestionado por el clienteAWS KMS key(clave KMS) para cifrar los datos en reposo
en Kinesis Data Streams, el servicio debe tener permiso para usar elAWS KMS keyen nombre de
la persona que llama. Para obtener más información, consultePermisos de uso generados por los
usuariosAWS KMS keysen elGuía para desarrolladores de Amazon Kinesis Data Streams.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
stream
La clave de partición utilizada para determinar en qué fragmento se escriben los datos. La clave de
partición suele estar compuesta por una expresión (por ejemplo,${topic()}o${timestamp()}).
El ARN del rol de IAM que permite el rol de IAM que permiteAWS IoTpermiso para acceder a la
transmisión de datos de Kinesis. Para obtener más información, consulte Requisitos (p. 580).
Ejemplos
El siguiente ejemplo de JSON define una acción de Kinesis Data Streams en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
580
AWS IoT Core Guía para desarrolladores
Lambda
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"kinesis": {
"streamName": "my_kinesis_stream",
"partitionKey": "${topic()}",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_kinesis"
}
}
]
}
}
El siguiente ejemplo de JSON define una acción de Kinesis con plantillas de sustitución en unAWS
IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"kinesis": {
"streamName": "${topic()}",
"partitionKey": "${timestamp()}",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_kinesis"
}
}
]
}
}
Véase también
• ¿Qué es Amazon Kinesis Data Streams?en elGuía para desarrolladores de Amazon Kinesis Data
Streams
Lambda
Una Lambda (lambda) una acción invoca unAWS Lambdafunción, que permite el paso de un mensaje de
IAM.AWS IoTinvoca funciones de Lambda de forma asíncrona.
Para ver un tutorial que muestra cómo crear y probar una regla con una acción de Lambda. Para obtener
más información, consulte Tutorial: Formatear una notificación mediante unAWS Lambdafunción (p. 229).
Requisitos
Esta acción de regla tiene los siguientes requisitos:
• ParaAWS IoTpara invocar una función Lambda, debe configurar una política que
otorguelambda:InvokeFunctionpermiso paraAWS IoT. Solo puede invocar una función Lambda
definida en el mismoRegión de AWSdonde existe su política de Lambda. Las funciones de Lambda
utilizan políticas basadas en recursos, por lo que debe adjuntar la política a la propia función de Lambda.
581
AWS IoT Core Guía para desarrolladores
Lambda
El nombre de la función de IAM. Agrega un permiso nuevo para actualizar la política de recursos de
la función.
--region
El ARN de la regla. Puede utilizar elget-topic-rule AWS CLIcomando para el ARN del ARN de
una regla.
--source-account
La acción de Lambda que se quiere permitir en esta declaración. Para permitirAWS IoTpara el
acceso a una función de Lambda, especifiquelambda:InvokeFunction.
Important
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
functionArn
El ARN de la función de Lambda a invocar.AWS IoTdebe tener permiso para invocar a la función. Para
obtener más información, consulte Requisitos (p. 581).
Si no especifica una versión o un alias para la función Lambda, se cierra la versión más reciente de la
función. Puede especificar una versión o un alias si desea cerrar una versión específica de la función
582
AWS IoT Core Guía para desarrolladores
Location
Lambda. Para especificar una versión o un alias, añada la versión o el alias al ARN de la función
Lambda.
arn:aws:lambda:us-east-2:123456789012:function:myLambdaFunction:someAlias
Para obtener más información sobre el control de versiones y los alias, consulteAWS
Lambdafunciones, control de versiones y alias.
Ejemplos
El siguiente ejemplo de JSON define una acción Lambda en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"lambda": {
"functionArn": "arn:aws:lambda:us-
east-2:123456789012:function:myLambdaFunction"
}
}
]
}
}
El siguiente ejemplo de JSON define una acción Lambda con plantillas de sustitución en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"lambda": {
"functionArn": "arn:aws:lambda:us-east-1:123456789012:function:
${topic()}"
}
}
]
}
}
Véase también
• ¿Qué es AWS Lambda? en la Guía para desarrolladores de AWS Lambda
• Tutorial: Formatear una notificación mediante unAWS Lambdafunción (p. 229)
Location
La ubicación (locationLa acción) envía sus datos de ubicación geográfica aAmazon Location Service.
583
AWS IoT Core Guía para desarrolladores
Location
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
deviceId
El ID único del dispositivo que proporciona los datos de ubicación. Para obtener más información,
consulteDeviceIddeEl IAM IAM IAM IAM.
Una cadena que se evalúa como un valor doble que representa la latitud de la ubicación del
dispositivo.
Una cadena que se evalúa como un valor doble que representa la longitud de la ubicación del
dispositivo.
La función de la IAM que permite el acceso al dominio de Amazon Location Service. Para obtener más
información, consulte Requisitos (p. 584).
timestamp
La hora en que se muestrearon los datos de ubicación. El valor por defecto es el momento en el que
se procesó el mensaje MQTT.
El nombre del recurso de seguimiento de Amazon Location en el que se actualiza la ubicación. Para
obtener más información, consulterastreadordeGuía para desarrolladores de Amazon Location.
584
AWS IoT Core Guía para desarrolladores
Location
Ejemplos
El siguiente ejemplo de JSON define una acción de ubicación en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"location": {
"roleArn": "arn:aws:iam::123454962127:role/service-role/ExampleRole",
"trackerName": "MyTracker",
"deviceId": "001",
"sampleTime": {
"value": "${timestamp()}",
"unit": "MILLISECONDS"
},
"latitude": "-12.3456",
"longitude": "65.4321"
}
}
]
}
}
El siguiente ejemplo de JSON define una acción de ubicación con plantillas de sustitución en unAWS
IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"location": {
"roleArn": "arn:aws:iam::123456789012:role/service-role/ExampleRole",
"trackerName": "${TrackerName}",
"deviceId": "${DeviceID}",
"timestamp": {
"value": "${timestamp()}",
"unit": "MILLISECONDS"
},
"latitude": "${get(position, 0)}",
"longitude": "${get(position, 1)}"
}
}
]
}
}
El siguiente ejemplo de carga útil de MQTT muestra cómo las plantillas de sustitución del ejemplo anterior
acceden a los datos. Puede utilizar elget-device-position-historyComando CLI para verificar que los datos
de carga útil de MQTT se entreguen en su rastreador de ubicación.
{
"TrackerName": "mytracker",
"DeviceID": "001",
"position": [
"-12.3456",
585
AWS IoT Core Guía para desarrolladores
OpenSearch
"65.4321"
]
}
{
"DevicePositions": [
{
"DeviceId": "001",
"Position": [
-12.3456,
65.4321
],
"ReceivedTime": "2022-11-11T01:31:54.464000+00:00",
"SampleTime": "2022-11-11T01:31:54.308000+00:00"
}
]
}
Véase también
• ¿Qué es el IAM IAM IAM IAM?en elGuía para desarrolladores de Amazon Location.
OpenSearch
El OpenSearch (openSearch) la acción escribe los datos de los mensajes MQTT en un Amazon
OpenSearch Un dominio de servicio. A continuación, puede utilizar herramientas como OpenSearch
Paneles para consultar y visualizar datos en OpenSearch Servicio
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
• Si utiliza un servicio gestionado por el clienteAWS KMS keypara cifrar los datos en reposo en
OpenSearch Servicio, el servicio debe tener permiso para utilizar la clave KMS en nombre de la persona
que llama. Para obtener más información, consulteEl cifrado de los datos en reposo para Amazon
OpenSearch Servicioen elAmazon OpenSearch Guía para desarrolladores de servicios.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
endpoint
586
AWS IoT Core Guía para desarrolladores
OpenSearch
La función de IAM que permite acceder al OpenSearch Un dominio de servicio. Para obtener más
información, consulte Requisitos (p. 586).
Limitaciones
El OpenSearch (openSearch) no se puede utilizar la acción para entregar datos a los clústeres de
Elasticsearch de VPC.
Ejemplos
En el siguiente ejemplo de JSON se define una OpenSearch acción en unAWS IoTregla y cómo
se pueden especificar los campos paraOpenSearchacción. Para obtener más información,
consulteOpenSearchAction.
{
"topicRulePayload": {
"sql": "SELECT *, timestamp() as timestamp FROM 'iot/test'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"openSearch": {
"endpoint": "https://my-endpoint",
"index": "my-index",
"type": "my-type",
"id": "${newuuid()}",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_os"
}
}
]
}
}
El siguiente ejemplo de JSON define un OpenSearch acción con plantillas de sustitución en unAWS
IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"openSearch": {
"endpoint": "https://my-endpoint",
587
AWS IoT Core Guía para desarrolladores
Republish
"index": "${topic()}",
"type": "${type}",
"id": "${newuuid()}",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_os"
}
}
]
}
}
Véase también
Qué es Amazon OpenSearch ¿Servicio?en elAmazon OpenSearch Guía para desarrolladores de servicios
Republish
La republicación (republish) la acción vuelve a publicar un mensaje MQTT en otro tema MQTT.
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
headers
Para volver a publicar en un tema reservado, que comienza por$, utilice$$en su lugar. Por ejemplo,
para volver a publicar en el tema oculto del dispositivo$aws/things/MyThing/shadow/update,
especifique el tema como$$aws/things/MyThing/shadow/update.
Note
Volver a publicar entemas de trabajo reservados (p. 121)no se admite.
AWS IoT Device Defenderlos temas de reserva no admiten la publicación en HTTP.
(Opcional) El nivel de calidad de servicio (QoS) que se debe utilizar para volver a publicar los
mensajes. Valores válidos: 0, 1. El valor predeterminado es 0. Para obtener más información sobre
QoS de MQTTMQTT (p. 90).
588
AWS IoT Core Guía para desarrolladores
Republish
roleArn
El rol de IAM que permiteAWS IoTpara el registro del tema de IAM IAM. Para obtener más
información, consulte Requisitos (p. 588).
Ejemplos
El siguiente ejemplo de JSON define una acción de republicación en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"republish": {
"topic": "another/topic",
"qos": 1,
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_republish"
}
}
]
}
}
El siguiente ejemplo de JSON define una acción de republicación con plantillas de sustitución en unAWS
IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"republish": {
"topic": "${topic()}/republish",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_republish"
}
}
]
}
}
El siguiente ejemplo de JSON define una acción de republicación conheadersen unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"republish": {
"topic": "${topic()}/republish",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_republish",
"headers": {
"payloadFormatIndicator": "UTF8_DATA",
589
AWS IoT Core Guía para desarrolladores
S3
"contentType": "rule/contentType",
"correlationData": "cnVsZSBjb3JyZWxhdGlvbiBkYXRh",
"userProperties": [
{
"key": "ruleKey1",
"value": "ruleValue1"
},
{
"key": "ruleKey2",
"value": "ruleValue2"
}
]
}
}
}
]
}
}
S3
El S3 (s3), la acción escribe los datos de un mensaje MQTT en un bucket de Amazon Simple Storage
(Amazon S3).
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
• Si usa unAWS KMSgestionado por el clienteAWS KMS keypara cifrar los datos inactivos de Amazon S3,
el servicio debe tener permiso para utilizar elAWS KMS keyen nombre de la persona que llama. Para
obtener más información, consulteAWSlogróAWS KMS keysy gestionado por el clienteAWS KMS keysen
elGuía para desarrolladores de Amazon Simple Storage.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
bucket
(Opcional) La ACL predefinida de Amazon S3 que controla el acceso al objeto identificado por la clave
del objeto. Para obtener más información, incluidos los valores permitidos, consulteACL enlatada.
590
AWS IoT Core Guía para desarrolladores
IoT de Salesforce
esta acción escribe los datos en un archivo llamado1460685389en elsome/topiccarpeta del bucket
de S3.
Note
Si usa una clave estática,AWS IoTsobrescribe un único archivo cada vez que se invoca la
regla. Le recomendamos que utilice la marca de tiempo del mensaje u otro identificador de
mensaje único para guardar un archivo nuevo en Amazon S3 por cada mensaje recibido.
El rol de IAM que permite el acceso al depósito de Amazon S3. Para obtener más información,
consulte Requisitos (p. 590).
Ejemplos
El siguiente ejemplo de JSON define una acción de S3 en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"s3": {
"bucketName": "my-bucket",
"cannedacl": "public-read",
"key": "${topic()}/${timestamp()}",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_s3"
}
}
]
}
}
Véase también
• ¿Qué es Amazon S3?en elGuía del usuario de Amazon Simple Storage
IoT de Salesforce
El IoT de Salesforce (salesforce): la acción envía datos del mensaje MQTT que activó la regla a un flujo
de entrada de Salesforce IoT.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
url
La dirección URL expuesta por el flujo de entrada de Salesforce IoT. La dirección URL está disponible
en la plataforma de Salesforce IoT cuando crea un flujo de entrada. Para obtener más información,
consulte la documentación de Salesforce IoT.
591
AWS IoT Core Guía para desarrolladores
SNS
El token que se utiliza para autenticar el acceso al flujo de entrada de Salesforce IoT especificado.
El token está disponible en la plataforma de Salesforce IoT cuando se crea un flujo de entrada. Para
obtener más información, consulte la documentación de Salesforce IoT.
Ejemplos
El siguiente ejemplo de JSON define una acción de Salesforce IoT en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"salesforce": {
"token": "ABCDEFGHI123456789abcdefghi123456789",
"url": "https://ingestion-cluster-id.my-env.sfdcnow.com/streams/stream-
id/connection-id/my-event"
}
}
]
}
}
SNS
SNS (sns), la acción envía los datos de un mensaje MQTT como una notificación push de Amazon Simple
Notification Service (Amazon Simple Notification Service).
Para ver un tutorial que muestra cómo crear y probar una regla con una acción de la SNS. Para obtener
más información, consulte Tutorial: Enviar una notificación de Amazon SNS (p. 216).
Note
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
• Si usa unAWS KMSgestionado por el clienteAWS KMS keypara cifrar los datos inactivos de Amazon
SNS, el servicio debe tener permiso para utilizar elAWS KMS keyen nombre de la persona que llama.
Para obtener más información, consulteAdministración de clavesen elGuía para desarrolladores de
Amazon Simple Notification Service.
592
AWS IoT Core Guía para desarrolladores
SNS
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
targetArn
El formato del mensaje (opcional) El formato del mensaje. Amazon SNS usa esta configuración para
determinar si la carga útil debe analizarse y si deben extraerse las partes de la carga relevantes de la
plataforma. Valores válidos: JSON, RAW. El valor predeterminado es RAW.
La función de IAM que permite acceder al SNS. Para obtener más información, consulte
Requisitos (p. 592).
Ejemplos
El siguiente ejemplo de JSON define una acción de SNS en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"sns": {
"targetArn": "arn:aws:sns:us-east-2:123456789012:my_sns_topic",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_sns"
}
}
]
}
}
El siguiente ejemplo de JSON define una acción de SNS con plantillas de sustitución en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"sns": {
"targetArn": "arn:aws:sns:us-east-1:123456789012:${topic()}",
"messageFormat": "JSON",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_sns"
}
}
]
593
AWS IoT Core Guía para desarrolladores
SQS
}
}
Véase también
• ¿Qué es Amazon Simple Notification Service?en elGuía para desarrolladores de Amazon Simple
Notification Service
• Tutorial: Enviar una notificación de Amazon SNS (p. 216)
SQS
SQS (sqs) la acción envía datos de un mensaje MQTT a una cola de Amazon Simple Queue Service
(Amazon Queue Service).
Note
El rol de IAM IAM no permitecolas FIFO de Amazon SQS. Como el motor de reglas es un servicio
totalmente distribuido, no se garantiza el orden de los mensajes cuando se desencadena la acción
de SQS.
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
• Si usa unAWS KMSgestionado por el clienteAWS KMS keypara cifrar los datos inactivos de Amazon
SQS, el servicio debe tener permiso para utilizar laAWS KMS keyen nombre de la persona que llama.
Para obtener más información, consulteAdministración de clavesen elGuía para desarrolladores de
Amazon Simple Queue.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
queueUrl
Defina este parámetro entruepara configurar la acción de la regla para codificar en base64 los datos
del mensaje antes de escribirlos en la cola de Amazon SQS. El valor predeterminado es false.
La función de IAM que permite el acceso a la cola de Amazon SQS. Para obtener más información,
consulte Requisitos (p. 594).
594
AWS IoT Core Guía para desarrolladores
Step Functions
Ejemplos
El siguiente ejemplo de JSON define una acción de SQS en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"sqs": {
"queueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/
my_sqs_queue",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_sqs"
}
}
]
}
}
El siguiente ejemplo de JSON define una acción de SQS con plantillas de sustitución en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"sqs": {
"queueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/
${topic()}",
"useBase64": true,
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_sqs"
}
}
]
}
}
Véase también
• ¿Qué es Amazon Simple Queue Service? en la Guía para desarrolladores de Amazon Simple Queue
Service
Step Functions
The Step Functions (stepFunctions) la acción inicia unAWS Step Functionsmáquina de estado.
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir o crear un rol para permitirAWS IoTpara realizar esta acción de
regla.
595
AWS IoT Core Guía para desarrolladores
Timestream
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
stateMachineName
(Opcional) El nombre dado a la ejecución de la máquina de estado consiste en este prefijo seguido de
un UUID. Step Functions crea un nombre único para cada ejecución de la máquina de estado, si no se
proporciona uno.
El ARN del rol que permite el rol de IAMAWS IoTpermiso para iniciar la máquina de estados. Para
obtener más información, consulte Requisitos (p. 595).
Ejemplos
El siguiente ejemplo de JSON define una acción de Step Functions en unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'some/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"stepFunctions": {
"stateMachineName": "myStateMachine",
"executionNamePrefix": "myExecution",
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_step_functions"
}
}
]
}
}
Véase también
• ¿Qué es AWS Step Functions? en la Guía para desarrolladores de AWS Step Functions
Timestream
La acción de la regla Timestream escribe los atributos (medidas) de un mensaje MQTT en una tabla de
Amazon Timestream. Para obtener más información sobre Amazon Timestream, consulte¿Qué es Amazon
Timestream?.
Note
Amazon Timestream no está disponible en todosRegión de AWSs. Si Amazon Timestream no
está disponible en tu región, no aparecerá en la lista de acciones de reglas.
596
AWS IoT Core Guía para desarrolladores
Timestream
Los atributos que esta regla almacena en la base de datos de Timestream son los que resultan de la
declaración de consulta de la regla. El valor de cada atributo del resultado de la declaración de consulta se
analiza para deducir su tipo de datos (como en unthe section called “DynamoDBv2” (p. 540)acción). El
valor de cada atributo se escribe en su propio registro de la tabla Timestream. Para especificar o cambiar
el tipo de datos de un atributo, utilicecast() (p. 630)función en la sentencia de consulta. Para ver más
información sobre el contenido de cada registro de la cadena de, consultethe section called “Crear un
registro de Timestream” (p. 598).
Note
Con SQL V2 (23 de marzo de 2016), valores numéricos que son números enteros, como10.0,
se convierten en su representación de números enteros (10). Emitirlos explícitamente
a unDecimalvalor, por ejemplo, mediante elcast () (p. 630)función, no impide este
comportamiento; el resultado sigue siendo unIntegervalor. Esto puede provocar errores de
discordancia de tipos que impidan que los datos se registren en la base de datos de Timestream.
Para procesar valores numéricos de números enteros comoDecimalvalores, utilice SQL V1
(08-10-2015) para la sentencia de consulta de reglas.
Note
El número máximo de valores que una acción de regla Timestream puede escribir en una tabla
de Amazon Timestream es 100. Para obtener más información, consulteReferencia de cuotas de
Amazon Timestream.
Requisitos
Esta acción de regla tiene los siguientes requisitos:
En elAWS IoTconsola, puede elegir, actualizar o crear un rol para permitirAWS IoTpara realizar esta
acción de regla.
• Si utilizas un servicio gestionado por el clienteAWS KMSpara cifrar los datos inactivos de Timestream,
el servicio debe tener permiso para utilizar elAWS KMS keyen nombre de la persona que llama. Para
obtener más información, consulte¿CómoAWSuso de serviciosAWSKILOMETROS.
Parámetros
MyAWS IoTEn el ejemplo siguiente se debe especificar la siguiente información:
databaseName
Nombre de una base de datos de Amazon Timestream que contiene la tabla para recibir los registros
que crea esta acción. Véase también tableName.
Atributos de metadatos de las series de tiempo que se escriben en cada registro de medida. Por
ejemplo, el nombre y la zona de disponibilidad de una instancia EC2 o el nombre del fabricante de un
aerogenerador son dimensiones.
name
597
AWS IoT Core Guía para desarrolladores
Timestream
El nombre de recurso de Amazon (ARN) del rol que concede permiso a AWS IoT para escribir en la
tabla de base de datos Timestream. Para obtener más información, consulte Requisitos (p. 597).
El nombre de la tabla de la base de datos en la que se van a escribir los registros de la base de datos
en la que se van Véase también databaseName.
El valor que se va a utilizar para la marca de tiempo de la entrada. Si está en blanco, se utiliza la hora
en que se procesó la entrada.
unit
La precisión del valor de marca de tiempo que resulta de la expresión que se describe en value.
Puede utilizar elthe section called “time_to_epoch (Cadena, Cadena)” (p. 665)función para
crear una marca de tiempo válida a partir de un valor de fecha u hora pasado en la carga útil del
mensaje.
Para cada atributo (medida) del resultado de la sentencia de consulta, esta acción de regla escribe un
registro en la tabla Timestream especificada con estas columnas.
598
AWS IoT Core Guía para desarrolladores
Timestream
* El valor del atributo leído en la carga útil del mensaje se interpreta de la siguiente manera. Acceso a la
consolathe section called “Ejemplos” (p. 599)para ver una ilustración de cada uno de estos casos.
Ejemplos
El siguiente ejemplo de JSON define una acción de regla Timestream con una plantilla de sustitución en
unAWS IoTregla.
{
"topicRulePayload": {
"sql": "SELECT * FROM 'iot/topic'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"timestream": {
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_timestream",
599
AWS IoT Core Guía para desarrolladores
Timestream
"tableName": "devices_metrics",
"dimensions": [
{
"name": "device_id",
"value": "${clientId()}"
},
{
"name": "device_firmware_sku",
"value": "My Static Metadata"
}
],
"databaseName": "record_devices"
}
}
]
}
}
Si se utiliza la acción de regla del tema Timestream definida en el ejemplo anterior con la carga útil del
mensaje siguiente, se obtienen los registros de Amazon Timestream escritos en la tabla siguiente.
{
"boolean_value": true,
"integer_value": 123456789012,
"double_value": 123.456789012,
"string_value": "String value",
"boolean_value_as_string": "true",
"integer_value_as_string": "123456789012",
"double_value_as_string": "123.456789012",
"array_of_integers": [23,36,56,72],
"array of strings": ["red", "green","blue"],
"complex_value": {
"simple_element": 42,
"array_of_integers": [23,36,56,72],
"array of strings": ["red", "green","blue"]
}
}
En la siguiente tabla se muestran las columnas y los registros de la base de datos que se crean al
utilizar la acción de la regla temática especificada para procesar la carga útil del mensaje anterior.
Eldevice_firmware_skuydevice_idlas columnas son las DIMENSIONES definidas en la
acción de la regla del tema. La acción de la regla temática Timestream crea eltimela columna y
elmeasure_nameymeasure_value::*columnas, que rellena con los valores del resultado de la
declaración de consulta de la acción de la regla temática.
device_firmware_sku
device_id nombre_medida
valor_medida:valor_medida:
:bigint valor_medida:
:varchar valor_medida:
:doble time
:booleano
My Ejemplo valor_complejo
- {"simple_element»
- :42, - 2020-08-26
estáticos 738-0 de "array_of_integers»: 22:42:16,423
la consola [23,36,56,72], 000000
IoT 159 "matriz de
cadenas»:
["rojo»,
"verde»,
"azul "]}
600
AWS IoT Core Guía para desarrolladores
Solución de problemas de las reglas
device_firmware_sku
device_id nombre_medida
valor_medida:valor_medida:
:bigint valor_medida:
:varchar valor_medida:
:doble time
:booleano
My Ejemplo valor_booleano
- - - TRUE 2020-08-26
estáticos 738-0 de 22:42:16,423
la consola 000000
IoT 159
My Ejemplo matriz_de_enteros
- [23,36,56,72] - - 2020-08-26
estáticos 738-0 de 22:42:16,423
la consola 000000
IoT 159
601
AWS IoT Core Guía para desarrolladores
Requisitos previos
continuación se explica el modo de IAMAWS IoTreglas para la ingesta de datos entre cuentas, desde un
tema de MQTT de una cuenta hasta un destino de otra cuenta.
Las reglas entre cuentas se pueden configurar mediantepermisos basados en recursosen el recurso de
destino. Por lo tanto, solo los destinos que admiten permisos basados en recursos pueden habilitarse para
el acceso entre cuentas conAWS IoTreglas. Los destinos compatibles incluyen Amazon SQS, Amazon
SNS, Amazon S3 yAWS Lambda.
Note
Debe definir la regla en la mismaRegión de AWScomo recurso de otro servicio para que la acción
de la regla pueda interactuar con ese recurso. Para obtener más información sobreAWS IoTreglas
sobre las acciones, consulteAWS IoTacciones de reglas (p. 524).
Requisitos previos
• Familiaridad conAWS IoTreglas
• Una comprensión deUsuarios de IAM,papeles, ypermiso basado en recursos
• TenerAWS CLIinstalada
• ARN:
arn:aws:sqs:region:2222-2222-2222:ExampleQueue
• URL:https://
sqs.region.amazonaws.com/2222-2222-2222/
ExampleQueue
A continuación se muestra un ejemplo de archivo de carga útil con una regla que inserta todos los
mensajes enviados aliot/testtema en cola de Amazon SQS. La sentencia SQL filtra los mensajes y
el rol que otorga el ARN.AWS IoTpermisos para añadir el mensaje a la cola de Amazon SQS.
602
AWS IoT Core Guía para desarrolladores
Configuración de varias cuentas para Amazon SNS
{
"sql": "SELECT * FROM 'iot/test'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"sqs": {
"queueUrl": "https://sqs.region.amazonaws.com/2222-2222-2222/ExampleQueue",
"roleArn": "arn:aws:iam::1111-1111-1111:role/my-iot-role",
"useBase64": false
}
}
]
}
Para obtener más información sobre cómo definir una acción de Amazon SQS en unAWS IoTregla,
consulteAWS IoTacciones de reglas - Amazon SQS.
Para ejecutar los siguientes comandos, su usuario de IAM debe tener permisos
paraiot:CreateTopicRulecon la regla ARN como recurso y permisos
paraiam:PassRoleacción con un recurso como ARN de rol.
603
AWS IoT Core Guía para desarrolladores
Configuración de varias cuentas para Amazon S3
A continuación, se muestra un ejemplo de archivo de carga útil con una regla que inserta todos los
mensajes enviados aiot/testen tema de Amazon SNS. La sentencia SQL filtra los mensajes y el rol
que otorga el ARNAWS IoTpermisos para enviar el mensaje al tema de Amazon SNS.
{
"sql": "SELECT * FROM 'iot/test'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"sns": {
"targetArn": "arn:aws:sns:region:2222-2222-2222:ExampleTopic",
"roleArn": "arn:aws:iam::1111-1111-1111:role/my-iot-role"
}
}
]
}
Para obtener más información sobre cómo definir una acción de Amazon SNS en unAWS IoTregla,
consulteAWS IoTacciones de reglas - Amazon SNS.
Para ejecutar los siguientes comandos, su usuario de IAM debe tener permisos
paraiot:CreateTopicRulecon la regla ARN como recurso y permisos
paraiam:PassRoleacción con un recurso como ARN de rol.
604
AWS IoT Core Guía para desarrolladores
Configuración de varias cuentas para Amazon S3
2. Cree un rol de IAM que confíeAWS IoTreglas del motor y adjunta una política que permite el acceso
al bucket de Amazon S3 de la cuenta B. Para ver ejemplos de comandos y documentos de políticas,
consulteConcesiónAWS IoTel acceso requerido.
3. Para crear una regla que se adjunte al bucket de S3 de destino, ejecuta elcreate-topic-rule orden.
A continuación se muestra un ejemplo de archivo de carga útil con una regla que inserta todos los
mensajes enviados aliot/testtema en bucket de Amazon S3. La sentencia SQL filtra los mensajes
y el rol que otorga el ARNAWS IoTpermisos para añadir el mensaje al depósito de Amazon S3.
{
"sql": "SELECT * FROM 'iot/test'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"s3": {
"bucketName": "ExampleBucket",
"key": "${topic()}/${timestamp()}",
"roleArn": "arn:aws:iam::1111-1111-1111:role/my-iot-role"
}
}
]
}
Para obtener más información sobre cómo definir una acción de Amazon S3 en unAWS IoTregla,
consulteAWS IoTacciones de reglas - Amazon S3.
El siguiente es un ejemplo de archivo de carga útil que define una política de bucket que confía en el
capital de otra cuenta.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddCannedAcl",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::1111-1111-1111:root"
]
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::ExampleBucket/*"
}
]
}
605
AWS IoT Core Guía para desarrolladores
Configuración de varias cuentas paraAWS Lambda
4. Para que el acceso entre cuentas, asegúrese de tener la cuenta correctaBloquear todo el acceso
públicoparámetros Para obtener más información, consultePrácticas recomendadas de seguridad para
Amazon S3.
Para ejecutar los siguientes comandos, su usuario de IAM debe tener permisos
paraiot:CreateTopicRulecon la regla ARN como recurso y permisos
paraiam:PassRoleacción con el recurso como ARN de rol.
A continuación se muestra un ejemplo de archivo de carga útil con una regla que inserta todos los
mensajes enviados aiot/testtema en función de Lambda especificada. La sentencia SQL filtra los
mensajes y el rol que otorga el ARN.AWS IoTpermiso para pasar los datos a la función Lambda.
{
"sql": "SELECT * FROM 'iot/test'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"lambda": {
"functionArn": "arn:aws:lambda:region:2222-2222-2222:function:example-function"
}
}
]
}
Para obtener más información sobre cómo definirAWS Lambdaacción en unAWS IoTregla, leeAWS
IoTacciones de reglas - Lambda.
606
AWS IoT Core Guía para desarrolladores
Control de errores (acción de error)
Opciones:
--director
--source-arn
--cuenta de origen
Este campo confirma queAWS IoTactiva esta función Lambda únicamente en nombre
del1111-1111-1111cuenta.
Notas
Si se produce un problema al activar una acción, el motor de reglas activa una acción de error, si se ha
especificado alguna para la regla. Esto podría ocurrir cuando:
Note
La gestión de errores que se trata en este tema es paraacciones de reglas (p. 524). Para
depurar problemas de SQL, incluidas las funciones externas, puede configurarAWS IoTregistro.
Para obtener más información, consulte ??? (p. 459).
607
AWS IoT Core Guía para desarrolladores
Formato de mensaje de acción de error
{
"ruleName": "TestAction",
"topic": "testme/action",
"cloudwatchTraceId": "7e146a2c-95b5-6caf-98b9-50e3969734c7",
"clientId": "iotconsole-1511213971966-0",
"base64OriginalPayload": "ewogICJtZXNzYWdlIjogIkhlbGxvIHZyb20gQVdTIElvVCBjb25zb2xlIgp9",
"failures": [
{
"failedAction": "S3Action",
"failedResource": "us-east-1-s3-verify-user",
"errorMessage": "Failed to put S3 object. The error received was The
specified bucket does not exist (Service: Amazon S3; Status Code: 404; Error
Code: NoSuchBucket; Request ID: 9DF5416B9B47B9AF; S3 Extended Request ID:
yMah1cwPhqTH267QLPhTKeVPKJB8BO5ndBHzOmWtxLTM6uAvwYYuqieAKyb6qRPTxP1tHXCoR4Y=).
Message arrived on: error/action, Action: s3, Bucket: us-
east-1-s3-verify-user, Key: \"aaa\". Value of x-amz-id-2:
yMah1cwPhqTH267QLPhTKeVPKJB8BO5ndBHzOmWtxLTM6uAvwYYuqieAKyb6qRPTxP1tHXCoR4Y="
}
]
}
ruleName
Inicia sesión con una identidad única que hace referencia al error CloudWatch.
clientId
608
AWS IoT Core Guía para desarrolladores
Ejemplo de acción de error
{
"sql" : "SELECT * FROM ..."
"actions" : [{
"dynamoDB" : {
"table" : "PoorlyConfiguredTable",
"hashKeyField" : "AConstantString",
"hashKeyValue" : "AHashKey"}}
],
"errorAction" : {
"s3" : {
"roleArn": "arn:aws:iam::123456789012:role/aws_iot_s3",
"bucketName" : "message-processing-errors",
"key" : "${replace(topic(), '/', '-') + '-' + timestamp() + '-' + newuuid()}"
}
}
}
Puede utilizar cualquier función o sustitución en una instrucción SQL de la acción de error, excepto en
funciones externas (por ejemplo, get_thing_shadow, aws_lambda y machinelearning_predict).
Para obtener más información acerca de reglas y cómo especificar una acción de error, consulte Creación
de una regla de AWS IoT.
Para más información sobre el uso CloudWatch para supervisar el éxito o el fracaso de las reglas,
consulteMétricas y dimensiones de AWS IoT (p. 470).
Basic Ingest puede enviar mensajes desde tus dispositivos o aplicaciones. Los mensajes tienen nombres
de temas que comienzan con $aws/rules/rule_name los tres primeros niveles, donde rule_name es
el nombre de la AWS IoT regla que desea invocar.
Puedes usar una regla existente con Basic Ingest añadiendo el prefijo Basic Ingest ($aws/
rules/rule_name) al tema del mensaje que usarías para invocar la regla. Por ejemplo, si tienes una
regla denominada BuildingManager que se invoca en mensajes con temas como Buildings/
Building5/Floor2/Room201/Lights ("sql": "SELECT * FROM 'Buildings/#'"),
puedes invocar la misma regla con Basic Ingest enviando un mensaje con topic. $aws/rules/
BuildingManager/Buildings/Building5/Floor2/Room201/Lights
Nota:
• Tus dispositivos y reglas no pueden suscribirse a los temas reservados de Basic Ingest. Para obtener
más información, consulte Temas reservados (p. 115).
• Si necesita un agente de publicación/suscripción para distribuir mensajes a varios suscriptores (por
ejemplo para entregar mensajes a otros dispositivos y al motor de reglas), debe seguir utilizando el
agente de mensajes de AWS IoT para gestionar la distribución de los mensajes. Sin embargo, asegúrate
de publicar tus mensajes en temas distintos a los de Basic Ingest.
609
AWS IoT Core Guía para desarrolladores
Uso de Basic Ingest
Puede crear reglas de para que sus reglas de para. Tenga en cuenta lo siguiente:
SELECT
El filtro de temas (p. 114) de mensajes de MQTT que identifica los mensajes de los que extraer datos.
La regla se activa para cada mensaje enviado a un tema de MQTT que coincida con el filtro de temas
610
AWS IoT Core Guía para desarrolladores
Cláusula SELECT
especificado aquí. Necesario para las reglas que se activan mediante mensajes que pasan por el
agente de mensajes. Opcional para las reglas que solo se activan mediante la función de ingesta
básica (p. 609).
WHERE
(Opcional) Añade una lógica condicional que determina si se llevan a cabo las acciones especificadas
en una regla.
La cláusula WHERE admite Tipos de datos (p. 614), Operadores (p. 618), Funciones (p. 624),
Literales (p. 671), Instrucciones case (p. 671), Extensiones JSON (p. 672), Plantillas de
sustitución (p. 674) y Consultas de objetos anidados (p. 675).
Un mensaje MQTT de ejemplo (también denominado carga de entrada) tiene este aspecto:
{
"color":"red",
"temperature":100
}
{
"rgb":"red"
}
Estos datos se reenvían después a la acción de la regla, que envía los datos para seguirlos procesando.
Para obtener más información sobre las acciones de las reglas, consulte Acciones de reglas de AWS
IoT (p. 524).
Note
Cláusula SELECT
La cláusula SELECT de AWS IoT es básicamente la misma que la cláusula SELECT ANSI SQL con
algunas diferencias menores.
611
AWS IoT Core Guía para desarrolladores
Cláusula SELECT
Puede utilizar la cláusula SELECT para extraer información de los mensajes MQTT de entrada. También
puede utilizar SELECT * para recuperar toda la carga del mensaje de entrada. Por ejemplo:
Si la carga es un objeto JSON, puede hacer referencia a claves en el objeto. La carga de salida contiene el
par clave-valor. Por ejemplo:
Puede utilizar la palabra clave AS para cambiar el nombre de las claves. Por ejemplo:
Puede seleccionar varios elementos separándolos con una coma. Por ejemplo:
Puede seleccionar varios elementos incluido '*' para agregar elementos a la carga de entrada. Por ejemplo:
Puede utilizar la palabra clave "VALUE" para generar cargas de salida que no sean objetos JSON. Con la
versión 2015-10-08 de SQL, solo se puede seleccionar un elemento. Con la versión SQL 2016-03-23 o
posterior, también puede seleccionar una matriz para generar como objeto de nivel superior.
Example
Puede utilizar la sintaxis '.' para explorar objetos JSON anidados en la carga de entrada. Por ejemplo:
Para obtener información sobre cómo utilizar nombres de objetos y propiedades JSON que incluyen
caracteres reservados, como números o el carácter de guión (signo negativo), consulte Extensiones
JSON (p. 672)
Puede utilizar funciones (consulte Funciones (p. 624)) para transformar la carga de entrada. Puede
utilizar paréntesis para realizar agrupaciones. Por ejemplo:
612
AWS IoT Core Guía para desarrolladores
Cláusula FROM
Cláusula FROM
La cláusula FROM suscribe tu regla a un tema (p. 113) o filtro (p. 114) de temas. Incluya el tema o el filtro
de temas entre comillas simples ('). La regla se activa para cada mensaje enviado a un tema de MQTT
que coincide con el filtro de temas especificado aquí. Puedes suscribirte a un grupo de temas similares
mediante un filtro de temas.
Ejemplo:
La regla se suscribe a 'topic/subtopic', por lo que la carga de entrada se pasa a la regla. La carga
de salida, que se pasa a las acciones de regla, es: {t: 50}. La regla no está suscrita a 'topic/
subtopic-2', por lo que la regla no se activa para el mensaje publicado en 'topic/subtopic-2'.
Ejemplo de comodín #:
Puede utilizar el carácter comodín '#' (multinivel) para buscar coincidencias con uno o varios elementos de
ruta en particular:
La regla se suscribe a cualquier tema que comience por'topic', por lo que se ejecuta tres veces y envía
cargas salientes de (para el tema/subtema), {t: 50} (para el tema/subtema-2) y {t: 60} (para el tema/
subtema 3/detalles) a sus acciones. {t: 70} No está suscrito'topic-2/subtopic-x', por lo que la
regla no se activa para el {temperature: 80} mensaje.
Ejemplo de comodín +:
Puede utilizar el carácter comodín '+' (nivel único) para buscar coincidencias con cualquier elemento de
ruta en particular:
613
AWS IoT Core Guía para desarrolladores
Cláusula WHERE
La regla está suscrita a todos los temas que tengan dos elementos de ruta donde el primer elemento
sea 'topic'. La regla se ejecuta para los mensajes enviados a 'topic/subtopic' y'topic/
subtopic-2', pero no 'topic/subtopic-3/details' (tiene más niveles que el filtro de temas) o
'topic-2/subtopic-x' (no empieza portopic).
Cláusula WHERE
La cláusula WHERE determina si se llevan a cabo las acciones especificadas por una regla. Si la cláusula
WHERE se evalúa en true, se llevan a cabo las acciones de la regla. De lo contrario, las acciones de la
regla no se llevan a cabo.
La cláusula WHERE admite Tipos de datos (p. 614), Operadores (p. 618), Funciones (p. 624),
Literales (p. 671), Instrucciones case (p. 671), Extensiones JSON (p. 672), Plantillas de
sustitución (p. 674) y Consultas de objetos anidados (p. 675).
Ejemplo:
SQL: SELECT color AS my_color FROM 'topic/subtopic' WHERE temperature > 50 AND
color <> 'red'.
En este caso, se activará la regla, pero no se realizarán las acciones especificadas en la regla. No habrá
ninguna carga útil saliente.
Puede utilizar funciones y operadores en la cláusula WHERE. Sin embargo, no puede hacer referencia
a ningún alias creado con la palabra clave AS en la cláusula SELECT. La cláusula WHERE se evalúa en
primer lugar para determinar si SELECT debe evaluarse.
En este caso, se activará la regla y se realizarán las acciones especificadas en la regla. La cláusula
SELECT transformará la carga útil saliente en una carga {"value":80} JSON.
Tipos de datos
El motor de reglas de AWS IoT admite todos los tipos de datos JSON.
Tipo Significado
614
AWS IoT Core Guía para desarrolladores
Tipos de datos
Tipo Significado
Con SQL V2 (23 de marzo de 2016),
los valores numéricos que son números
enteros, como10.0, se procesan como
un Int valor (10) en lugar del Decimal
valor esperado (). 10.0 Para procesar
de manera confiable valores numéricos
de números enteros como Decimal
valores, utilice SQL V1 (2015-10-08) como
sentencia de consulta de reglas.
{"foo":null, "bar":undefined}
{"foo":null}
Conversiones
En la tabla siguiente se muestra una lista de los resultados que se producen cuando un valor de un tipo se
convierte en otro tipo (cuando se da un valor de tipo incorrecto a una función). Por ejemplo, si a la función
de valor absoluto "abs" (que espera un valor Int o Decimal) se le da un valor String, esta función
615
AWS IoT Core Guía para desarrolladores
Tipos de datos
intentará convertir el valor String en un valor Decimal, de acuerdo con estas reglas. En este caso, 'abs
("-5.123")' se trata como 'abs(-5.123)'.
Note
En valor decimal
Objeto Undefined.
Null Null.
En valor entero
Objeto Undefined.
616
AWS IoT Core Guía para desarrolladores
Tipos de datos
Null Null.
En valor booleano
Objeto Undefined.
Null Undefined.
En cadena
617
AWS IoT Core Guía para desarrolladores
Operadores
Null Undefined.
Operadores
Los operadores siguientes se pueden utilizar en las cláusulas SELECT y WHERE.
Operador AND
Devuelve un resultado Boolean. Realiza una operación AND lógica. Devuelve el valor true si los
operandos izquierdo y derecho son true. De lo contrario, devuelve el valor false. Se necesitan operandos
de tipo Boolean u operandos de cadena "true" o "false" que no distingan entre mayúsculas y minúsculas.
Operador AND
String/Boolean String/Boolean Si todas las cadenas son "true" o "false" (no se distingue entre
mayúsculas y minúsculas), se convierten en valores de tipo
Boolean y se procesan normalmente como boolean AND
boolean.
Operador OR
Devuelve un resultado Boolean. Realiza una operación OR lógica. Devuelve el valor true si el operando
izquierdo o el operando derecho es true. De lo contrario, devuelve el valor false. Se necesitan operandos
de tipo Boolean u operandos de cadena "true" o "false" que no distingan entre mayúsculas y minúsculas.
Operador OR
String/Boolean String/Boolean Si todas las cadenas son "true" o "false" (no se distingue
entre mayúsculas y minúsculas), se convierten en valores
booleanos y se procesan normalmente como boolean OR
boolean.
618
AWS IoT Core Guía para desarrolladores
Operadores
Operador NOT
Devuelve un resultado Boolean. Realiza una operación NOT lógica. Devuelve true si el operado es false.
De lo contrario, devuelve true. Se necesita un operando Boolean o un operando de cadena "true" o "false"
que no distinga entre mayúsculas y minúsculas.
Operador NOT
Operando Output
> operador
Devuelve un resultado Boolean. Devuelve el valor true si el operando izquierdo es superior al operando
derecho. Los dos operandos se convierten en un valor Decimal y, a continuación, se comparan.
> operador
>= operador
Devuelve un resultado Boolean. Devuelve el valor true si el operando izquierdo es superior o igual al
operando derecho. Los dos operandos se convierten en un valor Decimal y, a continuación, se comparan.
619
AWS IoT Core Guía para desarrolladores
Operadores
>= operador
Operador <
Devuelve un resultado Boolean. Devuelve el valor true si el operando izquierdo es inferior al operando
derecho. Los dos operandos se convierten en un valor Decimal y, a continuación, se comparan.
Operador <
Operador <=
Devuelve un resultado Boolean. Devuelve el valor true si el operando izquierdo es inferior o igual al
operando derecho. Los dos operandos se convierten en un valor Decimal y, a continuación, se comparan.
Operador <=
620
AWS IoT Core Guía para desarrolladores
Operadores
Operador <>
Devuelve un resultado Boolean. Devuelve el valor true si los operandos izquierdo y derecho no son
iguales. De lo contrario, devuelve el valor false.
Operador <>
Array (Matriz) Array (Matriz) True si los elementos de cada operando no son iguales y no
están en el mismo orden. De lo contrario, devuelve false.
Objeto Objeto True si las claves y los valores de cada operando no son
iguales. De lo contrario, devuelve false. El orden de las claves
y los valores no tiene importancia.
Operador =
Devuelve un resultado Boolean. Devuelve el valor true si los operandos izquierdo y derecho son iguales.
De lo contrario, devuelve el valor false.
621
AWS IoT Core Guía para desarrolladores
Operadores
Operador =
Array (Matriz) Array (Matriz) True si los elementos de cada operando son iguales y están
en el mismo orden. De lo contrario, devuelve false.
Objeto Objeto True si las claves y los valores de cada operando son iguales.
De lo contrario, devuelve false. El orden de las claves y los
valores no tiene importancia.
Operador +
El símbolo "+" es un operador sobrecargado. Se puede utilizar para la concatenación o la adición de
cadenas.
Operador +
String Cualquier valor Convierte el operando derecho en una cadena que concatena
al final del operando izquierdo.
Operador -
Resta el operando derecho del operando izquierdo.
622
AWS IoT Core Guía para desarrolladores
Operadores
Operador -
Operador *
Multiplica el operando izquierdo por el operando derecho.
Operador *
Operador /
Divide el operando izquierdo por el operando derecho.
623
AWS IoT Core Guía para desarrolladores
Funciones
Operador /
Operador %
Devuelve el resto de la división del operando izquierdo por el operando derecho.
Operador %
Funciones
Puede utilizar las funciones integradas siguientes en las cláusulas SELECT o WHERE de sus expresiones
SQL.
abs(Decimal)
Devuelve el valor absoluto de un número. Es compatible con la versión 2015-10-08 de SQL y versiones
posteriores.
624
AWS IoT Core Guía para desarrolladores
Funciones
Boolean Undefined.
Objeto Undefined.
Null Undefined.
accountid()
Devuelve el ID de la cuenta que posee esta regla como un valor de tipo String. Es compatible con la
versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo:
accountid() = "123456789012"
acos(Decimal)
Devuelve el coseno inverso de un número en radianes. Los argumentos Decimal se redondean con doble
precisión antes de la aplicación de la función. Es compatible con la versión 2015-10-08 de SQL y versiones
posteriores.
Boolean Undefined.
Objeto Undefined.
Null Undefined.
625
AWS IoT Core Guía para desarrolladores
Funciones
asin(Decimal)
Devuelve el seno inverso de un número en radianes. Los argumentos Decimal se redondean con doble
precisión antes de la aplicación de la función. Es compatible con la versión 2015-10-08 de SQL y versiones
posteriores.
Boolean Undefined.
Objeto Undefined.
Null Undefined.
atan(Decimal)
Devuelve la tangente inversa de un número en radianes. Los argumentos Decimal se redondean con
doble precisión antes de la aplicación de la función. Es compatible con la versión 2015-10-08 de SQL y
versiones posteriores.
Boolean Undefined.
626
AWS IoT Core Guía para desarrolladores
Funciones
Objeto Undefined.
Null Undefined.
atan2(Decimal, Decimal)
Devuelve el ángulo, en radianes, entre el eje x positivo y el punto (x, y) definido en los dos argumentos. El
ángulo es positivo para los ángulos en sentido contrario a las agujas del reloj (plano medio superior y > 0)
y es negativo para los ángulos que siguen el sentido de las agujas del reloj (plano medio inferior y < 0). Los
argumentos Decimal se redondean con doble precisión antes de aplicar la función. Es compatible con la
versión 2015-10-08 de SQL y versiones posteriores.
aws_lambda(functionArn, inputJson)
Llama a la función Lambda especificada pasando inputJson a la función Lambda y devuelve el JSON
generado por la función Lambda.
Argumentos
Argumento Descripción
627
AWS IoT Core Guía para desarrolladores
Funciones
--statement-id "unique_id"
--action "lambda:InvokeFunction"
--function-name
Nombre de la función Lambda. Añades un nuevo permiso para actualizar la política de recursos de la
función.
--region
La entidad principal que obtiene el permiso. Esto debería ser iot.amazonaws.com para permitir el
AWS IoT permiso para llamar a una función Lambda.
--source-arn
El ARN de la regla. Puede usar el get-topic-rule AWS CLI comando para obtener el ARN de una regla.
--source-account
La acción de Lambda que desea permitir en esta sentencia. Para AWS IoT permitir invocar una
función Lambda, especifique. lambda:InvokeFunction
Important
Si añades un permiso para un AWS IoT principal sin proporcionar el source-arn osource-
account, cualquiera Cuenta de AWS que cree una regla con tu acción de Lambda puede
activar reglas desde las que invocar tu función Lambda. AWS IoT Para obtener más información,
consulte Modelo de permisos de Lambda.
{
"attribute1": 21,
"attribute2": "value"
}
La aws_lambda función se puede utilizar para llamar a la función Lambda de la siguiente manera.
SELECT
aws_lambda("arn:aws:lambda:us-east-1:account_id:function:lambda_function",
{"payload":attribute1}) as output FROM 'topic-filter'
Si desea transferir la carga completa del mensaje MQTT, puede especificar la carga útil de JSON con '*',
como en el ejemplo siguiente.
SELECT
aws_lambda("arn:aws:lambda:us-east-1:account_id:function:lambda_function", *) as output
FROM 'topic-filter'
628
AWS IoT Core Guía para desarrolladores
Funciones
El motor de reglas limita la duración de la ejecución de las funciones de Lambda. Las llamadas a
funciones de Lambda desde las reglas deben completarse en 2000 milisegundos.
bitand(Int, Int)
Ejecuta una operación AND bit a bit en las representaciones de bits de los dos argumentos Int(-
convertidos). Es compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo: bitand(13, 5) = 5
bitor(Int, Int)
Realiza una operación OR bit a bit de las representaciones de bit de los dos argumentos. Es compatible
con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo: bitor(8, 5) = 13
629
AWS IoT Core Guía para desarrolladores
Funciones
bitxor(Int, Int)
Ejecuta una operación XOR bit a bit en las representaciones de bits de los dos argumentos Int(-
convertidos). Es compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo:bitor(13, 5) = 8
bitnot(Int)
Ejecuta una operación NOT bit a bit en las representaciones de bits del argumento Int (convertido). Es
compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo: bitnot(13) = 2
Decimal Int, una operación NOT bit a bit del argumento. El valor
Decimal se redondea al valor Int inferior más cercano.
String Int, una operación NOT bit a bit del argumento. Las
cadenas se convierten en decimales y se redondean al
valor Int inferior más cercano. Si se produce un error en
la conversión, el resultado obtenido es Undefined.
cast()
Convierte un valor de un tipo de datos a otro tipo. Cast se comporta básicamente como las conversiones
estándar, salvo que puede convertir números en valores booleanos o viceversa. Si AWS IoT no puede
determinar cómo convertir un tipo en otro, el resultado es Undefined. Es compatible con la versión
2015-10-08 de SQL y versiones posteriores. Formato: cast(valor as tipo).
630
AWS IoT Core Guía para desarrolladores
Funciones
Ejemplo:
cast(true as Int) = 1
Las siguientes palabras clave pueden aparecer después de "as" cuando se llama a cast:
Reglas de conversión:
Conversión en decimal
631
AWS IoT Core Guía para desarrolladores
Funciones
Objeto Undefined.
Null Undefined.
Conversión en entero
Objeto Undefined.
Null Undefined.
632
AWS IoT Core Guía para desarrolladores
Funciones
Objeto Undefined.
Null Undefined.
Conversión en cadenas
Null Undefined.
ceil(Decimal)
Redondea el valor Decimal indicado al valor Int superior más cercano. Es compatible con la versión
2015-10-08 de SQL y versiones posteriores.
Ejemplos:
ceil(1.2) = 2
ceil(-1.2) = -1
633
AWS IoT Core Guía para desarrolladores
Funciones
chr(String)
Devuelve el carácter ASCII que corresponde al argumento Int determinado. Es compatible con la versión
2015-10-08 de SQL y versiones posteriores.
Ejemplos:
chr(65) = "A".
chr(49) = "1".
Boolean Undefined.
Objeto Undefined.
Null Undefined.
clientid()
Devuelve el ID del cliente MQTT que envía el mensaje o n/a si el mensaje no se ha enviado por MQTT.
Es compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo:
clientid() = "123456789012"
634
AWS IoT Core Guía para desarrolladores
Funciones
concat()
Concatena matrices o cadenas. Esta función acepta cualquier cantidad de argumentos y devuelve un valor
String o un valor Array. Es compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplos:
concat() = Undefined.
concat(1) = "1".
concat("he","is","man") = "heisman"
0 Undefined.
cos(Decimal)
Devuelve el coseno de un número en radianes. Los argumentos Decimal se redondean con doble
precisión antes de la aplicación de la función. Es compatible con la versión 2015-10-08 de SQL y versiones
posteriores.
Ejemplo:
cos(0) = 1.
635
AWS IoT Core Guía para desarrolladores
Funciones
Boolean Undefined.
Objeto Undefined.
Null Undefined.
cosh(Decimal)
Devuelve el coseno hiperbólico de un número en radianes. Los argumentos Decimal se redondean con
doble precisión antes de la aplicación de la función. Es compatible con la versión 2015-10-08 de SQL y
versiones posteriores.
Boolean Undefined.
Objeto Undefined.
Null Undefined.
636
AWS IoT Core Guía para desarrolladores
Funciones
value
Un valor de cadena o cualquiera de las expresiones válidas, tal como se definen enReferencia de la
SQL de AWS IoT (p. 610), que devuelven una cadena.
Esquema de decodificación
Cadena literal que representa el esquema utilizado para decodificar el valor. Actualmente, solo
'base64' y 'proto' son compatibles.
{
encoded_temp: "eyAidGVtcGVyYXR1cmUiOiAzMyB9Cg=="
}
La decode función de esta sentencia SQL decodifica el valor de la carga del mensaje.
Al decodificar el encoded_temp valor, se obtiene el siguiente documento JSON válido, que permite que la
sentencia SELECT lea el valor de la temperatura.
{ "temperature": 33 }
{ "temp": 33 }
Si el valor decodificado no era un documento JSON válido, el valor decodificado se devolvería como una
cadena.
decode(<ENCODED DATA>, 'proto', '<S3 BUCKET NAME>', '<S3 OBJECT KEY>', '<PROTO NAME>',
'<MESSAGE TYPE>')
ENCODED DATA
Especifica los datos codificados en protobuf que se van a decodificar. Si todo el mensaje enviado
a la regla son datos codificados en protobug, puede hacer referencia a la carga binaria entrante sin
procesar utilizando. * De lo contrario, este campo debe ser una cadena JSON codificada en base 64 y
se puede pasar directamente una referencia a la cadena.
1) Para decodificar una carga útil entrante de protobuf binaria sin procesar:
637
AWS IoT Core Guía para desarrolladores
Funciones
2) Para decodificar un mensaje codificado en protobuf representado por una cadena 'a.b' codificada en
base64:
proto
Especifica los datos que se van a decodificar en un formato de mensaje protobuf. Si especifica
base64 en lugar deproto, esta función decodificará las cadenas codificadas en base64 como JSON.
S3 BUCKET NAME
La clave de objeto que especifica el FileDescriptorSet archivo dentro del bucket de Amazon S3.
PROTO NAME
El nombre del .proto archivo (sin incluir la extensión) a partir del cual se generó el
FileDescriptorSet archivo.
MESSAGE TYPE
Un ejemplo de expresión SQL que utiliza la función decodificar SQL puede tener el siguiente aspecto:
• *
Representa una carga binaria entrante, que se ajusta al tipo de mensaje protobuf denominado.
mymessagetype
• messageformat.desc
El tipo de mensaje llamado messagetype (junto con cualquier dependencia importada) tal como se
define enmyproto.proto.
encode(value, encodingScheme)
Utilice la función encode para codificar la carga, que puede estar constituida por datos que no son JSON,
en su representación de cadena basada en el esquema de codificación. Es compatible con la versión SQL
2016-03-23 y versiones posteriores.
638
AWS IoT Core Guía para desarrolladores
Funciones
value
Cualquiera de las expresiones válidas, tal y como se define en Referencia de la SQL de AWS
IoT (p. 610). Puede especificar * para codificar toda la carga, con independencia de si está en
formato JSON o no. Si suministra una expresión, el resultado de la evaluación se convierte en una
cadena antes de codificarla.
encodingScheme
Una cadena literal que representa el esquema de codificación que desea utilizar. En la actualidad, solo
se admite 'base64'.
endswith(String, String)
Devuelve un valor Boolean que indica si el primer argumento String termina con el segundo argumento
String. Si alguno de los argumentos es Null o Undefined, el resultado es Undefined. Es compatible
con la versión 2015-10-08 de SQL y versiones posteriores.
exp(Decimal)
Devuelve e elevado al argumento Decimal. Los argumentos Decimal se redondean con doble precisión
antes de la aplicación de la función. Es compatible con la versión 2015-10-08 de SQL y versiones
posteriores.
Ejemplo: exp(1) = e.
floor(Decimal)
Redondea a la baja el valor Decimal indicado al valor Int más cercano. Es compatible con la versión
2015-10-08 de SQL y versiones posteriores.
639
AWS IoT Core Guía para desarrolladores
Funciones
Ejemplos:
floor(1.2) = 1
floor(-1.2) = -2
get
Extrae un valor de un tipo de recopilación (matriz, cadena, objeto). No se aplica ninguna conversión al
primer argumento. La conversión se aplica tal y como se documenta en la tabla del segundo argumento.
Es compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplos:
640
AWS IoT Core Guía para desarrolladores
Funciones
tableName
Nombre de la tabla de particiones. Para obtener más información, consulte Claves de DynamoDB.
partitionKeyValue
Valor de la clave de partición utilizada para identificar un registro. Para obtener más información,
consulte Claves de DynamoDB.
sortKeyName
El ARN de un rol de IAM que otorga acceso a la tabla de DynamoDB. El motor de reglas asume
esta función para acceder a la tabla de DynamoDB en su nombre. Evite usar un rol excesivamente
permisivo. Otorgue al rol solo los permisos requeridos por la regla. A continuación se muestra un
ejemplo de política que concede acceso a una tabla de DynamoDB.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "dynamodb:GetItem",
"Resource": "arn:aws:dynamodb:aws-region:account-id:table/table-name"
}
]
}}
Como ejemplo de usoget_dynamodb(), supongamos que tiene una tabla de DynamoDB que contiene
información sobre el identificador del dispositivo y la ubicación de todos los dispositivos a los que está
conectado. AWS IoT La siguiente instrucción SELECT utiliza la función get_dynamodb() para recuperar
la ubicación del ID de dispositivo especificado:
641
AWS IoT Core Guía para desarrolladores
Funciones
Note
• Puede llamar a get_dynamodb() un máximo de una vez por instrucción SQL. Llamar a
get_dynamodb() varias veces en una sola instrucción SQL hace que la regla termine sin
invocar ninguna acción.
• Si get_dynamodb() devuelve más de 8 KB de datos, no se puede invocar la acción de la
regla.
get_mqtt_property (nombre)
Hace referencia a cualquiera de los siguientes encabezados de
MQTT5:contentType,payLoadFormatIndicator, responseTopic y. correlationData
Esta función toma como argumento cualquiera de las siguientes cadenas literales:
content_typeformat_indicator,response_topic, ycorrelation_data. Para obtener más
información, consulte la siguiente tabla de argumentos de funciones.
Tipo de contenido
Cadena: cadena codificada en UTF-8 que describe el contenido del mensaje de publicación.
payLoadFormatIndicador
Cadena: un valor de cadena de enumeración que indica si la carga tiene el formato UTF-8. Los valores
válidos son UNSPECIFIED_BYTES y UTF8_DATA.
Tema de respuesta
Cadena: cadena codificada en UTF-8 que se usa como nombre de tema para un mensaje de
respuesta. El tema de respuesta se usa para describir el tema en el que el receptor debe publicar
como parte del flujo de solicitud-respuesta. El tema no debe contener caracteres comodín.
Datos de correlación
Cadena: los datos binarios codificados en base64 que utiliza el remitente del mensaje de solicitud para
identificar a qué solicitud se dirige el mensaje de respuesta cuando se recibe.
La siguiente tabla muestra los argumentos de la función aceptables y sus tipos de devolución asociados a
la get_mqtt_property función:
Argumentos de la función
Cadena
get_mqtt_property("format_indicator") Cadena (UNSPECIFIED_BYTES)
(UNSPECIFIED_BYTES o
UTF8_DATA)
Cadena
get_mqtt_property("content_type") Sin definir
Cadena
get_mqtt_property("response_topic") Sin definir
Sin definir
get_mqtt_property("some_invalid_name") Sin definir
El siguiente ejemplo de Rules SQL hace referencia a cualquiera de los siguientes encabezados de
MQTT5:contentType,payLoadFormatIndicator, responseTopic y. correlationData
642
AWS IoT Core Guía para desarrolladores
Funciones
secretId
Cadena: el nombre del recurso de Amazon (ARN) o el nombre descriptivo del secreto que se va a
recuperar.
Tipo de secreto
Si especificas un valor para este parámetro y el secreto no contiene un objeto JSON dentro de su
SecretString campo, esta función fallará con una excepción.
roleArn
Note
Esta función siempre devuelve la versión actual del secreto (la versión con la AWSCURRENT
etiqueta). El motor de AWS IoT reglas almacena en caché cada secreto durante un máximo de
15 minutos. Como resultado, el motor de reglas puede tardar hasta 15 minutos en actualizar un
643
AWS IoT Core Guía para desarrolladores
Funciones
secreto. Esto significa que si recupera un secreto hasta 15 minutos después de una actualización
conAWS Secrets Manager, esta función podría devolver la versión anterior.
Esta función no se mide, pero se aplica un AWS Secrets Manager suplemento. Debido al
mecanismo secreto de almacenamiento en caché, el motor de reglas llama AWS Secrets Manager
de vez en cuando. Como el motor de reglas es un servicio totalmente distribuido, es posible que
veas varias llamadas a la API de Secrets Manager desde el motor de reglas durante el período de
almacenamiento en caché de 15 minutos.
Ejemplos:
Puede utilizar la get_secret función en un encabezado de autenticación en una acción de regla HTTPS,
como en el siguiente ejemplo de autenticación con clave de API.
Para obtener más información sobre la acción de la regla HTTPS, consultethe section called
“HTTP” (p. 544).
thingName
Cadena (opcional): nombre de la sombra. Este parámetro solo es necesario cuando se hace
referencia a sombras con nombre.
roleArn
Ejemplos:
Cuando se utilice con una sombra con nombre, proporcione el parámetro shadowName.
Cuando se utiliza con una sombra sin nombre, omita el parámetro shadowName.
get_user_properties () userPropertyKey
Hace referencia a las propiedades de usuario, que es un tipo de encabezados de propiedad admitidos en
MQTT5.
644
AWS IoT Core Guía para desarrolladores
Funciones
Propiedad de usuario
Cadena: una propiedad de usuario es un par clave-valor. Esta función toma la clave como argumento
y devuelve una matriz de todos los valores que coinciden con la clave asociada.
Argumentos de funciones
Clave Valor
El siguiente ejemplo de Rules SQL hace referencia a las propiedades de usuario (un tipo de encabezado
de propiedad MQTT5) en la carga útil:
Funciones de hash
AWS IoT ofrece las siguientes funciones de hash:
• md2
• md5
• sha1
• sha224
• sha256
• sha384
• sha512
645
AWS IoT Core Guía para desarrolladores
Funciones
Todas las funciones de hash esperan un argumento de cadena. El resultado es el valor con hash de dicha
cadena. Las conversiones de cadena estándar se aplican a los argumentos que no son cadenas. Todas
las funciones de hash son compatibles con la versión 2015-10-08 de SQL y con versiones posteriores.
Ejemplos:
md2("hello") = "a9046c73e00331af68917d3804f70655"
md5("hello") = "5d41402abc4b2a76b9719d911017c592"
indexof(String, String)
Devuelve el primer índice (basado en 0) del segundo argumento como subcadena del primer argumento.
Se espera que ambos argumentos sean cadenas. Los argumentos que no sean cadenas están sujetos
a las reglas de conversión estándar de cadenas. Esta función no se aplica a matrices, únicamente a
cadenas. Es compatible con la versión SQL 2016-03-23 y versiones posteriores.
Ejemplos:
indexof("abcd", "bc") = 1
isNull()
Devuelve verdadero si el argumento es el valor Null. Es compatible con la versión 2015-10-08 de SQL y
versiones posteriores.
Ejemplos:
isNull(5) = false.
isNull(Null) = true.
Int falso
Decimal falso
Boolean falso
String falso
Array falso
Object falso
Null true
Undefined falso
isUndefined()
Devuelve verdadero si el argumento tiene el valor Undefined. Es compatible con la versión SQL
2016-03-23 y versiones posteriores.
Ejemplos:
isUndefined(5) = false.
isUndefined(floor([1,2,3]))) = true.
646
AWS IoT Core Guía para desarrolladores
Funciones
Int falso
Decimal falso
Boolean falso
String falso
Array falso
Object falso
Null falso
Undefined true
length(String)
Devuelve el número de caracteres de la cadena suministrada. Se aplican las reglas de conversión
estándar a los argumentos que no sean String. Es compatible con la versión SQL 2016-03-23 y
versiones posteriores.
Ejemplos:
length("hi") = 2
length(false) = 5
ln(Decimal)
Devuelve el logaritmo natural del argumento. Los argumentos Decimal se redondean con doble precisión
antes de la aplicación de la función. Es compatible con la versión 2015-10-08 de SQL y versiones
posteriores.
Ejemplo: ln(e) = 1.
Boolean Undefined.
Objeto Undefined.
Null Undefined.
647
AWS IoT Core Guía para desarrolladores
Funciones
log(Decimal)
Devuelve el logaritmo decimal del argumento. Los argumentos Decimal se redondean con doble precisión
antes de la aplicación de la función. Es compatible con la versión 2015-10-08 de SQL y versiones
posteriores.
Boolean Undefined.
Objeto Undefined.
Null Undefined.
lower(String)
Muestra la versión en minúsculas del valor String indicado. Los argumentos que no son cadenas se
convierten en cadenas con las reglas de conversión estándar. Es compatible con la versión 2015-10-08 de
SQL y versiones posteriores.
Ejemplos:
lower("HELLO") = "hello".
lower(["HELLO"]) = "[\"hello\"]".
lpad(String, Int)
Devuelve el argumento String, rellenado en el lado izquierdo con el número de espacios especificado
por el segundo argumento. El argumento Int debe estar comprendido entre 0 y 1000. Si el valor
proporcionado se encuentra fuera de este rango válido, el argumento se establece en el valor válido más
cercano (0 o 1000). Es compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplos:
648
AWS IoT Core Guía para desarrolladores
Funciones
ltrim(String)
Elimina todos los espacios en blanco del principio (tabuladores y espacios) del valor String
proporcionado. Es compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo:
649
AWS IoT Core Guía para desarrolladores
Funciones
Null Undefined.
modelId
El ID del modelo en el que se ejecutará la predicción. El punto de enlace en tiempo real del modelo
debe estar activado.
roleArn
Los datos que van a transmitirse a la API de previsión SageMaker. Debe representarse como un
objeto JSON de capa única. Si el registro es un objeto JSON de varias capas, el registro se aplana
serializando sus valores. Por ejemplo, el JSON siguiente:
se convertiría en:
predictedLabel
El algoritmo utilizado por SageMaker para realizar las predicciones. El valor debe ser SGD.
predictedScores
650
AWS IoT Core Guía para desarrolladores
Funciones
mod(Decimal, Decimal)
Devuelve el resto de la división del primer argumento por el segundo argumento. Es igual que
remainder(Decimal, Decimal) (p. 656). También puede utilizar "%" como un operador infijo para la misma
funcionalidad modulo. Es compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo: mod(8, 3) = 2.
Ejemplo: Nanvl(8, 3) = 8.
newuuid()
Devuelve un UUID aleatorio de 16 bytes. Es compatible con la versión 2015-10-08 de SQL y versiones
posteriores.
numbytes(String)
Devuelve el número de bytes de la codificación UTF-8 de la cadena proporcionada. Se aplican las reglas
de conversión estándar a los argumentos que no sean String. Es compatible con la versión SQL
2016-03-23 y versiones posteriores.
Ejemplos:
651
AWS IoT Core Guía para desarrolladores
Funciones
numbytes("hi") = 2
numbytes("€") = 3
pattern
(Long) La hora que se va a formatear en milisegundos a partir del formato de hora Unix. Consulte la
función timestamp() (p. 665).
timezone
Ejemplos:
Cuando este mensaje se publica en el tema "A/B", la carga {"ts": "1970.01.01 AD at 21:46:40
CST"} se envía al bucket de S3:
{
"ruleArn": "arn:aws:iot:us-east-2:ACCOUNT_ID:rule/RULE_NAME",
"topicRulePayload": {
"sql": "SELECT parse_time(\"yyyy.MM.dd G 'at' HH:mm:ss z\", 100000000, 'America/
Belize' ) as ts FROM 'A/B'",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [
{
"s3": {
"roleArn": "arn:aws:iam::ACCOUNT_ID:rule:role/ROLE_NAME",
"bucketName": "BUCKET_NAME",
"key": "KEY_NAME"
}
}
],
"ruleName": "RULE_NAME"
}
}
Cuando este mensaje se publica en el tema "A/B", una carga similar a {"ts": "2017.06.09 AD at
17:19:46 UTC"} (pero con la fecha y hora actuales) se envía al bucket de S3:
{
"ruleArn": "arn:aws:iot:us-east-2:ACCOUNT_ID:rule/RULE_NAME",
"topicRulePayload": {
"sql": "SELECT parse_time(\"yyyy.MM.dd G 'at' HH:mm:ss z\", timestamp() ) as ts
FROM 'A/B'",
"awsIotSqlVersion": "2016-03-23",
"ruleDisabled": false,
"actions": [
652
AWS IoT Core Guía para desarrolladores
Funciones
{
"s3": {
"roleArn": "arn:aws:iam::ACCOUNT_ID:rule:role/ROLE_NAME",
"bucketName": "BUCKET_NAME",
"key": "KEY_NAME"
}
}
],
"ruleName": "RULE_NAME"
}
}
parse_time() se puede usar también como una plantilla de sustitución. Por ejemplo, cuando este
mensaje se publica en el tema "A/B", la carga se envía al bucket de S3 con la clave = "2017":
{
"ruleArn": "arn:aws:iot:us-east-2:ACCOUNT_ID:rule/RULE_NAME",
"topicRulePayload": {
"sql": "SELECT * FROM 'A/B'",
"awsIotSqlVersion": "2016-03-23",
"ruleDisabled": false,
"actions": [{
"s3": {
"roleArn": "arn:aws:iam::ACCOUNT_ID:rule:role/ROLE_NAME",
"bucketName": "BUCKET_NAME",
"key": "${parse_time('yyyy', timestamp(), 'UTC')}"
}
}],
"ruleName": "RULE_NAME"
}
}
power(Decimal, Decimal)
Devuelve el primer argumento elevado al segundo argumento. Los argumentos Decimal se redondean
con doble precisión antes de la aplicación de la función. Es compatible con la versión 2015-10-08 de SQL y
versiones posteriores. Es compatible con la versión 2015-10-08 de SQL y versiones posteriores.
principal()
Devuelve el principal que el dispositivo utiliza para la autenticación, en función de cómo se publicó el
mensaje de activación. En la siguiente tabla se describe la entidad principal devuelta para cada método y
protocolo de publicación.
653
AWS IoT Core Guía para desarrolladores
Funciones
SDK de dispositivos de AWS IoT MQTT sobre WebSocket Usuario o rol de IAM
Los siguientes ejemplos muestran los diferentes tipos de valores que principal() se pueden devolver:
rand()
Devuelve un valor pseudoaleatorio, distribuido de forma uniforme entre 0,0 y 1,0. Es compatible con la
versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo:
rand() = 0.8231909191640703
regexp_matches(String, String)
Devuelve verdadero si la cadena (primer argumento) contiene una coincidencia para la expresión regular
(segundo argumento).
Ejemplo:
Primer argumento:
654
AWS IoT Core Guía para desarrolladores
Funciones
Null Undefined.
Segundo argumento:
Tiene que ser una expresión regex válida. Los tipos que no son cadenas se convierten en valores de tipo
String mediante reglas de conversión estándar. En función del tipo, es posible que la cadena obtenida
no sea una expresión regular válida. Si el argumento (convertido) no es un regex válido, el resultado es
Undefined.
Ejemplo:
Primer argumento:
Null Undefined.
Segundo argumento:
Tiene que ser una expresión regex válida. Los tipos que no son cadenas se convierten en valores de tipo
String mediante reglas de conversión estándar. En función del tipo, es posible que la cadena obtenida
no sea una expresión regular válida. Si el argumento (convertido) no es una expresión regex válida, el
resultado es Undefined.
Tercer argumento:
655
AWS IoT Core Guía para desarrolladores
Funciones
Debe ser una cadena de sustitución de regex válida. (Puede hacer referencia a grupos de capturas).
Los tipos que no son cadenas se convierten en valores de tipo String mediante reglas de conversión
estándar. Si el argumento (convertido) no es una cadena de sustitución de regex válida, el resultado es
Undefined.
regexp_substr(String, String)
Busca la primera coincidencia del segundo parámetro (regex) en el primer parámetro. Hace referencia a
los grupos de captura con "$". Es compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo:
Primer argumento:
Null Undefined.
Segundo argumento:
Tiene que ser una expresión regex válida. Los tipos que no son cadenas se convierten en valores de tipo
String mediante reglas de conversión estándar. En función del tipo, es posible que la cadena obtenida
no sea una expresión regular válida. Si el argumento (convertido) no es una expresión regex válida, el
resultado es Undefined.
remainder(Decimal, Decimal)
Devuelve el resto de la división del primer argumento por el segundo argumento. Es igual que
mod(Decimal, Decimal) (p. 651). También puede utilizar "%" como un operador infijo para la misma
funcionalidad modulo. Es compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo: remainder(8, 3) = 2.
656
AWS IoT Core Guía para desarrolladores
Funciones
Ejemplo:
Null Undefined.
rpad(String, Int)
Devuelve el argumento de cadena, rellenado en el lado derecho con el número de espacios especificado
en el segundo argumento. El argumento Int debe estar comprendido entre 0 y 1000. Si el valor
proporcionado se encuentra fuera de este rango válido, el argumento se establece en el valor válido más
cercano (0 o 1000). Es compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplos:
657
AWS IoT Core Guía para desarrolladores
Funciones
String Int El
valor
String
se
rellena
en el
lado
derecho
con un
número
de
espacios
igual al
valor
Int
proporcionado.
String Decimal El
argumento
Decimal
se
redondea
al
valor
Int
inferior
más
cercano
y la
cadena
se
rellena
en el
lado
derecho
con
una
serie
de
espacios
igual al
valor
Int
proporcionado.
String String El
segundo
argumento
se
convierte
en un
valor
Decimal
que se
redondea
658
AWS IoT Core Guía para desarrolladores
Funciones
659
AWS IoT Core Guía para desarrolladores
Funciones
round(Decimal)
Redondea el valor Decimal indicado al valor Int más cercano. Si el valor Decimal está a la misma
distancia de dos valores Int, (por ejemplo, 0,5), el valor Decimal se redondea al valor superior. Es
compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo: Round(1.2) = 1.
Round(1.5) = 2.
Round(1.7) = 2.
Round(-1.1) = -1.
Round(-1.5) = -2.
Int El argumento.
rtrim(String)
Elimina todos los espacios en blanco del final (tabuladores y espacios) del valor String proporcionado. Es
compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplos:
Null Undefined.
660
AWS IoT Core Guía para desarrolladores
Funciones
sign(Decimal)
Devuelve el signo del número especificado. Cuando el signo del argumento es positivo, se devuelve 1.
Cuando el signo del argumento es negativo, se devuelve -1. Si el argumento es 0, se devuelve 0. Es
compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplos:
sign(-7) = -1.
sign(0) = 0.
sign(13) = 1.
sin(Decimal)
Devuelve el seno de un número en radianes. Los argumentos Decimal se redondean con doble precisión
antes de la aplicación de la función. Es compatible con la versión 2015-10-08 de SQL y versiones
posteriores.
Boolean Undefined.
Objeto Undefined.
Null Undefined.
Undefined Undefined.
661
AWS IoT Core Guía para desarrolladores
Funciones
sinh(Decimal)
Devuelve el seno hiperbólico de un número. Los valores Decimal se redondean con doble precisión antes
de la aplicación de la función. El resultado es un valor Decimal de doble precisión. Es compatible con la
versión 2015-10-08 de SQL y versiones posteriores.
Boolean Undefined.
Objeto Undefined.
Null Undefined.
Si los argumentos proporcionados no son (String, Int) ni (String, Int, Int), se les aplican las
conversiones estándar para intentar convertirlos en los tipos adecuados. Si no es posible convertirlos, el
resultado de la función será Undefined. Es compatible con la versión 2015-10-08 de SQL y versiones
posteriores.
Ejemplos:
substring("012345", 0) = "012345".
substring("012345", 2) = "2345".
substring(123, 2) = "3".
662
AWS IoT Core Guía para desarrolladores
Funciones
substring("012345", 1, 3) = "12".
substring("012345", 3, 1) = "".
sql_version()
Devuelve la versión de SQL especificada en esta regla. Es compatible con la versión 2015-10-08 de SQL y
versiones posteriores.
Ejemplo:
sql_version() = "2016-03-23"
sqrt(Decimal)
Devuelve la raíz cuadrada de un número. Los argumentos Decimal se redondean con doble precisión
antes de la aplicación de la función. Es compatible con la versión 2015-10-08 de SQL y versiones
posteriores.
Boolean Undefined.
Objeto Undefined.
Null Undefined.
startswith(String, String)
Devuelve Boolean, si el primer argumento de cadena comienza con el segundo argumento de cadena.
Si alguno de los argumentos es Null o Undefined, el resultado es Undefined. Es compatible con la
versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo:
startswith("ranger","ran") = true
663
AWS IoT Core Guía para desarrolladores
Funciones
tan(Decimal)
Devuelve la tangente de un número en radianes. Los valores Decimal se redondean con doble precisión
antes de la aplicación de la función. Es compatible con la versión 2015-10-08 de SQL y versiones
posteriores.
Boolean Undefined.
Objeto Undefined.
Null Undefined.
tanh(Decimal)
Devuelve la tangente hiperbólica de un número en radianes. Los valores Decimal se redondean con doble
precisión antes de la aplicación de la función. Es compatible con la versión 2015-10-08 de SQL y versiones
posteriores.
Boolean Undefined.
664
AWS IoT Core Guía para desarrolladores
Funciones
Objeto Undefined.
Null Undefined.
timestamp
(Cadena) La cadena de fecha y hora que se va a convertir en milisegundos desde la época de Unix. Si
la cadena de marca de tiempo no especifica una zona horaria, la función usa la zona horaria UTC.
pattern
Ejemplos:
timestamp()
Devuelve la marca de hora actual en milisegundos desde las 00:00:00 UTC (hora universal coordinada),
jueves 1 de enero de 1970, según lo observado por el motor de reglas de AWS IoT. Es compatible con la
versión 2015-10-08 de SQL y versiones posteriores.
topic(Decimal)
Devuelve el tema al que se ha enviado el mensaje que activó la regla. Si no se especifica ningún
parámetro, se devuelve todo el tema. El parámetro Decimal se utiliza para especificar un segmento
de tema concreto. 1 designa el primer segmento. Para el tema foo/bar/baz, topic(1) devuelve foo,
topic(2) devuelve bar y así sucesivamente. Es compatible con la versión 2015-10-08 de SQL y versiones
posteriores.
665
AWS IoT Core Guía para desarrolladores
Funciones
Ejemplos:
topic() = "things/myThings/thingOne"
topic(1) = "things"
Cuando se usa Basic Ingest (p. 609), el prefijo inicial del tema ($aws/rules/rule-name) no está
disponible para la función topic(). Por ejemplo, con el tema:
$aws/rules/BuildingManager/Buildings/Building5/Floor2/Room201/Lights
topic() = "Buildings/Building5/Floor2/Room201/Lights"
topic(3) = "Floor2"
traceid()
Devuelve el ID de seguimiento (UUID) del mensaje MQTT o Undefined si el mensaje no se ha enviado
por MQTT. Es compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo:
traceid() = "12345678-1234-1234-1234-123456789012"
Cadena
El modo de transformación que se va a utilizar. Consulte la siguiente tabla para conocer los modos de
transformación admitidos y cómo se crean Result a partir de los Array parámetros Object y.
Objeto
Objeto que contiene los atributos que se van a aplicar a cada elemento delArray.
Array (Matriz)
Cada objeto de esta matriz corresponde a un objeto de la respuesta de la función. Cada objeto
de la respuesta de la función contiene los atributos presentes en el objeto original y los atributos
proporcionados por, Object según lo determinado por el modo de transformación especificado
enString.
666
AWS IoT Core Guía para desarrolladores
Funciones
Note
{
"attributes": {
"data1": 1,
"data2": 2
},
"values": [
{
"a": 3
},
{
"b": 4
},
{
"c": 5
}
]
}
Esta sentencia SQL para una acción de regla de tema usa la transform() función con un String valor
deenrichArray. En este ejemplo, Object es la attributes propiedad de la carga útil del mensaje y
Array es la values matriz, que contiene tres objetos.
Al recibir la carga útil del mensaje, la sentencia SQL da como resultado la siguiente respuesta.
[
{
"a": 3,
"data1": 1,
"data2": 2
},
{
"b": 4,
"data1": 1,
"data2": 2
},
{
"c": 5,
"data1": 1,
"data2": 2
}
]
667
AWS IoT Core Guía para desarrolladores
Funciones
En este ejemplo, se publica el siguiente mensaje en el tema A/B MQTT. Este es el mismo mensaje que se
usó enthe section called “Ejemplo 1 de la función de transformación” (p. 667).
{
"attributes": {
"data1": 1,
"data2": 2
},
"values": [
{
"a": 3
},
{
"b": 4
},
{
"c": 5
}
]
}
Esta sentencia SQL para una acción de regla de tema usa la transform() función con un String valor
deenrichArray. La transform() función Object in the tiene un único atributo denominado key con el
valor de attributes.data1 en la carga útil del mensaje y Array es la values matriz, que contiene los
mismos tres objetos utilizados en el ejemplo anterior.
Al recibir la carga del mensaje, esta sentencia SQL da como resultado la siguiente respuesta. Observe
cómo se nombra la data1 propiedad key en la respuesta.
[
{
"a": 3,
"key": 1
},
{
"b": 4,
"key": 1
},
{
"c": 5,
"key": 1
}
]
{
"data1": "example",
668
AWS IoT Core Guía para desarrolladores
Funciones
"data2": {
"a": "first attribute",
"b": "second attribute",
"c": [
{
"x": {
"someInt": 5,
"someString": "hello"
},
"y": true
},
{
"x": {
"someInt": 10,
"someString": "world"
},
"y": false
}
]
}
}
La función Object for this transform es el objeto devuelto por la sentencia SELECT, que contiene los b
elementos a y del data2 objeto del mensaje. El Array parámetro se compone de los dos objetos de la
data2.c matriz del mensaje original.
[
{
"x": {
"someInt": 5,
"someString": "hello"
},
"y": true,
"a": "first attribute",
"b": "second attribute"
},
{
"x": {
"someInt": 10,
"someString": "world"
},
"y": false,
"a": "first attribute",
"b": "second attribute"
}
]
La matriz devuelta en esta respuesta podría usarse con las acciones de las reglas del tema que
admitanbatchMode.
trim(String)
Elimina todos los espacios en blanco del principio y del final del valor String proporcionado. Es
compatible con la versión 2015-10-08 de SQL y versiones posteriores.
Ejemplo:
669
AWS IoT Core Guía para desarrolladores
Funciones
Null Undefined.
trunc(Decimal, Int)
Trunca el primer argumento según el número del valor Decimal especificado por el segundo argumento.
Si el segundo argumento es inferior a cero, se establece en cero. Si el segundo argumento es superior
a 34, se establece en 34. Los ceros del final se eliminan del resultado. Es compatible con la versión
2015-10-08 de SQL y versiones posteriores.
Ejemplos:
trunc(2.3, 0) = 2.
trunc(2.3123, 2) = 2.31.
trunc(2.888, 2) = 2,88.
trunc(2.00, 5) = 2.
670
AWS IoT Core Guía para desarrolladores
Literales
upper(String)
Muestra la versión en mayúsculas del valor String indicado. Los argumentos que no sean String
se convierten en String mediante las reglas de conversión estándar. Es compatible con la versión
2015-10-08 de SQL y versiones posteriores.
Ejemplos:
upper("hello") = "HELLO"
upper(["hello"]) = "[\"HELLO\"]"
Literales
Puede especificar directamente objetos literales en las cláusulas SELECT y WHERE de su regla SQL, lo
que puede ser útil para pasar información.
Note
Los literales solo están disponibles cuando se utiliza SQL versión 2016-03-23 o versiones
posteriores.
Se utiliza una sintaxis de objeto JSON (pares clave-valor separados con comas, donde las claves son
cadenas y los valores son de tipo JSON escritos entre llaves {}). Por ejemplo:
También puede especificar directamente matrices en las cláusulas SELECT y WHERE de su regla SQL, lo
que le permite agrupar información. Se utiliza una sintaxis JSON (elementos separados con comas entre
corchetes [] para crear un literal de Array). Por ejemplo:
Instrucciones case
Las sentencias de caso se pueden utilizar para la ejecución ramificada, como una sentencia switch.
Sintaxis:
671
AWS IoT Core Guía para desarrolladores
Extensiones JSON
La expresión vse evalúa y se compara para determinar su igualdad con el t[i]valor de cada WHEN
cláusula. Si se encuentra una coincidencia, la r[i]expresión correspondiente se convierte en el
resultado de la CASE sentencia. Las WHEN cláusulas se evalúan de manera que, si hay más de una
cláusula coincidente, el resultado de la primera cláusula coincidente se convierte en el resultado de la
CASE declaración. Si no hay coincidencias, r[e]de la ELSE cláusula es el resultado. Si no hay ninguna
coincidencia ni ELSE cláusula, el resultado esUndefined.
CASElas declaraciones requieren al menos una WHEN cláusula. Las ELSE cláusulas son opcionales.
Por ejemplo:
{
"color":"yellow"
}
Declaración SQL:
{
"instructions":"caution"
}
Note
Extensiones JSON
Puede utilizar las siguientes extensiones de la sintaxis ANSI SQL para facilitar el trabajo con objetos JSON
anidados.
«.» Operador
Este operador accede a los miembros de los objetos y funciones JSON incrustados de forma idéntica a
ANSI SQL y. JavaScript Por ejemplo:
selecciona el valor de la bar propiedad del foo objeto de la siguiente carga de mensajes enviada al
topic/subtopic tema.
{
"foo": {
"bar": "RED",
"bar1": "GREEN",
"bar2": "BLUE"
672
AWS IoT Core Guía para desarrolladores
Extensiones JSON
}
}
Si el nombre de una propiedad JSON incluye un guión o caracteres numéricos, la notación de «puntos» no
funcionará. En su lugar, debe utilizar la función get (p. 640) para extraer el valor de la propiedad.
{
"mydata": {
"item2": {
"0": {
"my-key": "myValue"
}
}
}
}
Sin embargo, dado que el nombre de la propiedad my-key contiene un guión y item2 un carácter
numérico, la función get (p. 640) se debe utilizar como se muestra en la siguiente consulta.
Operador *
Funciona igual que el comodín * en ANSI SQL. Solo se utiliza en la cláusula SELECT y crea un objeto
JSON nuevo que contiene los datos del mensaje. Si la carga del mensaje no tiene el formato JSON, *
devuelve toda la carga del mensaje como bytes sin procesar. Por ejemplo:
{
"deviceid" : "iot123",
"temp" : 54.98,
"humidity" : 32.43,
"coords" : {
"latitude" : 47.615694,
"longitude" : -122.3359976
}
}
En el ejemplo siguiente se aplica una función a un valor de atributo de una carga JSON:
673
AWS IoT Core Guía para desarrolladores
Plantillas de sustitución
"temp": 54.98,
"hashed_id": "e37f81fb397e595c4aeb5645b8cbbbd1"
}
Plantillas de sustitución
Puede utilizar una plantilla de sustitución para aumentar los datos JSON que se devuelven cuando
se activa una regla y AWS IoT realiza una acción. La sintaxis de una plantilla de sustitución es
${expression}, donde expression puede ser cualquier expresión compatible con AWS IoT en las cláusulas
SELECT o WHERE y en Acciones de reglas de AWS IoT (p. 524). Esta expresión se puede conectar
a un campo de acción de una regla, lo que le permite configurar dinámicamente una acción. En efecto,
esta función sustituye a una parte de información de una acción. Esto incluye funciones, operadores e
información presente en la carga del mensaje original.
Important
Como una expresión de una plantilla de sustitución se evalúa por separado de la sentencia
«SELECT...», no puedes hacer referencia a un alias creado con la cláusula AS. Solo puede
hacer referencia a la información presente en la carga útil, las funciones (p. 624) y los
operadores (p. 618) originales.
Para obtener más información acerca de las expresiones admitidas, consulte Referencia de la SQL de
AWS IoT (p. 610).
Las siguientes acciones de las reglas admiten plantillas de sustitución. Cada acción admite diferentes
campos que se pueden sustituir.
Las plantillas de sustitución aparecen en los parámetros de acción dentro de una regla:
674
AWS IoT Core Guía para desarrolladores
Consultas de objetos anidados
{
"sql": "SELECT *, timestamp() AS timestamp FROM 'my/iot/topic'",
"ruleDisabled": false,
"actions": [{
"republish": {
"topic": "${topic()}/republish",
"roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
}
}]
}
{
"deviceid": "iot123",
"temp": 54.98,
"humidity": 32.43,
"coords": {
"latitude": 47.615694,
"longitude": -122.3359976
}
}
Esta regla publica el siguiente JSON en my/iot/topic/republish, que AWS IoT utiliza para sustituir
${topic()}/republish:
{
"deviceid": "iot123",
"temp": 54.98,
"humidity": 32.43,
"coords": {
"latitude": 47.615694,
"longitude": -122.3359976
},
"timestamp": 1579637878451
}
{
"e": [
{ "n": "temperature", "u": "Cel", "t": 1234, "v": 22.5 },
{ "n": "light", "u": "lm", "t": 1235, "v": 135 },
{ "n": "acidity", "u": "pH", "t": 1235, "v": 7 }
]
}
Example
675
AWS IoT Core Guía para desarrolladores
Cargas binarias
{
"sensors": [
"temperature",
"light",
"acidity"
]
}
Example
Usando el mismo mensaje MQTT, también puede consultar un valor específico dentro de un objeto
anidado con la siguiente regla.
{
"temperature": [
{
"v": 22.5
}
]
}
Example
{
"temperature": 22.5
}
En este tema:
• Ejemplos de carga binaria (p. 676)
• Decodificación de cargas de mensajes protobuf (p. 677)
676
AWS IoT Core Guía para desarrolladores
Cargas binarias
• Puede utilizar las siguientes SELECT cláusulas con solo un * para cargas binarias.
•
SELECT * FROM 'topic/subtopic'
•
SELECT * FROM 'topic/subtopic' WHERE timestamp() % 12 = 0
•
SELECT encode(*, 'base64') AS data, timestamp() AS ts FROM 'topic/subtopic'
{
"sql": "SELECT * FROM 'topic/subtopic'",
"actions": [
{
"republish": {
"topic": "device/${device_id}"
}
}
]
}
Las siguientes acciones de la regla no admiten cargas binarias, por lo que debes decodificarlas.
• Algunas acciones de reglas no admiten la entrada de carga binaria, como una acción Lambda, por lo
que debe decodificar las cargas binarias. La acción de la regla Lambda puede recibir datos binarios, si
están codificados en base64 y en una carga JSON. Para ello, cambie la regla por la siguiente.
• La sentencia SQL no admite cadenas como entrada. Para convertir una entrada de cadena en JSON,
puede ejecutar el siguiente comando.
En esta sección:
• Requisitos previos (p. 678)
677
AWS IoT Core Guía para desarrolladores
Cargas binarias
Requisitos previos
• Una comprensión básica de los búferes de protocolo (protobuf)
• Los .protoarchivos que definen los tipos de mensajes y las dependencias relacionadas
• Instalación del compilador Protobuf (protoc) en su sistema
1. Cree .proto archivos que definan los tipos de mensajes. Un .proto archivo de ejemplo puede tener
el siguiente aspecto:
syntax = "proto3";
message Person {
optional string name = 1;
optional int32 id = 2;
optional string email = 3;
}
En este .proto archivo de ejemplo, utiliza la sintaxis proto3 y define el tipo de Person mensaje. La
definición del Person mensaje especifica tres campos (nombre, identificador y correo electrónico).
Para obtener más información sobre los formatos de mensajes de .proto archivo, consulte la Guía
de idioma (proto3).
2. Utilice el compilador protoc para compilar los .proto archivos y generar un archivo descriptor. Un
comando de ejemplo para crear un archivo descriptor (.desc) puede ser el siguiente:
protoc --descriptor_set_out=<FILENAME>.desc \
--proto_path=<PATH_TO_IMPORTS_DIRECTORY> \
--include_imports \
<PROTO_FILENAME>.proto
Este comando de ejemplo genera un archivo <FILENAME>.desc descriptor que AWS IoT Core Rules
puede utilizar para decodificar las cargas protobuf que se ajustan a la estructura de datos definida en.
<PROTO_FILENAME>.proto
• --descriptor_set_out
Especifica las ubicaciones de los .proto archivos importados a los que hace referencia el archivo
que se está compilando. Puede especificar la marca varias veces si tiene varios .proto archivos
importados con diferentes ubicaciones.
678
AWS IoT Core Guía para desarrolladores
Cargas binarias
• --include_imports
Especifica que todos .proto los archivos importados también deben compilarse e incluirse en el
archivo <FILENAME>.desc descriptor.
• <PROTO_FILENAME>.proto
Para obtener más información sobre la referencia del protocolo, consulte la referencia de la API.
Consideraciones importantes
• Asegúrese de subir los archivos descriptores a un bucket de Amazon S3 en su servidor, Cuenta de AWS
en el mismo Región de AWS lugar en el que pretende configurar sus reglas.
• Asegúrese de conceder AWS IoT Core acceso para leer el FileDescriptorSet desde S3. Si su
bucket de S3 tiene deshabilitado el cifrado del lado del servidor (SSE) o si su bucket de S3 está cifrado
mediante claves gestionadas por Amazon S3 (SSE-S3), no se requieren configuraciones de políticas
adicionales. Esto se puede lograr con el ejemplo de política de bucket:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": "s3:Get*",
"Resource": "arn:aws:s3:::<BUCKET NAME>/<FILENAME>.desc"
}
]
}
• Si su bucket de S3 está cifrado mediante una AWS Key Management Service clave (SSE-KMS),
asegúrese de conceder AWS IoT Core permiso para usar la clave al acceder a su bucket de S3. Para
ello, añada esta declaración a su política clave:
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "arn:aws:kms:us-
west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
679
AWS IoT Core Guía para desarrolladores
Cargas binarias
A continuación se muestra un ejemplo de expresión SQL que utiliza la función decode (value,
decodingScheme (p. 636)):
• Utilice la función SQL decode (value, DecodingScheme) para decodificar (p. 636) la carga útil del
mensaje binario a la que hace referencia. * Puede ser una carga útil binaria codificada en protobuf o una
cadena JSON que represente una carga útil protobuf codificada en base64.
• La carga útil del mensaje proporcionada se codifica mediante el tipo de Person mensaje definido en.
PROTO_FILENAME.proto
• El bucket de Amazon S3 denominado BUCKET NAME contiene lo FILENAME.desc generado
desdePROTO_FILENAME.proto.
Tras completar la configuración, publique un mensaje AWS IoT Core en sobre el tema al que está suscrita
la regla.
Limitaciones
AWS IoT CoreLas reglas admiten protobuf con las siguientes limitaciones:
• No se admite la decodificación de las cargas de mensajes protobuf dentro de las plantillas de sustitución.
• Al decodificar las cargas de mensajes protobuf, puede utilizar la función decodificar SQL (p. 636) en
una sola expresión SQL hasta dos veces.
• El tamaño máximo de la carga útil de entrada es de 128 KB (1 KB = 1024 bytes), el tamaño máximo
de la carga útil de salida es de 128 KB y el tamaño máximo de un FileDescriptorSet objeto
almacenado en un bucket de Amazon S3 es de 32 KB.
• No se admiten los buckets de Amazon S3 cifrados con el cifrado SSE-C.
Prácticas recomendadas
Estas son algunas de las mejores prácticas y consejos para la solución de problemas.
• Realice una copia de seguridad de sus archivos de prototipos en el bucket de Amazon S3.
Es una buena práctica hacer copias de seguridad de los archivos de prototipos en caso de que algo
salga mal. Por ejemplo, si modifica incorrectamente los archivos de prototipos sin copias de seguridad
al ejecutar el protocolo, esto puede provocar problemas en su pila de producción. Hay varias formas
de hacer copias de seguridad de los archivos en un bucket de Amazon S3. Por ejemplo, puede utilizar
el control de versiones en buckets de S3. Para obtener más información sobre cómo hacer copias de
seguridad de los archivos en los buckets de Amazon S3, consulte la Guía para desarrolladores de
Amazon S3.
• Configure AWS IoT el registro para ver las entradas del registro.
Se recomienda configurar el AWS IoT registro para poder comprobar AWS IoT los registros de tu cuenta
enCloudWatch. Cuando la consulta SQL de una regla llama a una función externa, AWS IoT Core
680
AWS IoT Core Guía para desarrolladores
Versiones de SQL
Rules genera una entrada de registro con un eventType valor deFunctionExecution, que contiene
el campo motivo que le ayudará a solucionar los errores. Los posibles errores incluyen un objeto de
Amazon S3 no encontrado o un descriptor de archivo protobuf no válido. Para obtener más información
sobre cómo configurar el AWS IoT registro y ver las entradas de registro, consulte Configurar el AWS IoT
registro y las entradas de registro del motor de reglas.
• Actualice FileDescriptorSet con una nueva clave de objeto y actualice la clave de objeto en su
regla.
Versiones de SQL
El motor de reglas de AWS IoT utiliza una sintaxis similar a SQL para seleccionar los datos de los
mensajes de MQTT. Las instrucciones SQL se interpretan según la versión de SQL especificada en
la propiedad awsIotSqlVersion de un documento JSON que describe la regla. Para obtener más
información acerca de la estructura de los documentos de reglas JSON, consulte Creación de una
regla (p. 519). La propiedad awsIotSqlVersion le permite especificar la versión del motor de reglas
SQL de AWS IoT que desea utilizar. Cuando se implementa una nueva versión, puede continuar utilizando
una versión anterior o cambiar la regla para utilizar la nueva versión. Las reglas actuales seguirán
utilizando la versión con la que se crearon.
En el siguiente ejemplo de JSON se muestra cómo especificar la versión de SQL mediante la propiedad
awsIotSqlVersion:
{
"sql": "expression",
"ruleDisabled": false,
"awsIotSqlVersion": "2016-03-23",
"actions": [{
"republish": {
"topic": "my-mqtt-topic",
"roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
}
}]
}
681
AWS IoT Core Guía para desarrolladores
Versiones de SQL
• Adición de la función encode(value, encodingScheme), que se puede aplicar en datos con formato
JSON y no JSON. Para obtener más información, consulte la función de codificación (p. 638).
{
"a": {"b":"c"},
"arr":[1,2,3,4]
}
Y la regla siguiente:
[1,2,3,4]
682
AWS IoT Core Guía para desarrolladores
Uso de sombras
AWS IoTlos objetos de tipo cosa no tienen sombras con nombre hasta que se crean de forma explícita;
sin embargo, se crea una sombra clásica sin nombre para una cosa cuando se crea la cosa. Las
sombras se pueden crear, actualizar y eliminar mediante la consola de AWS IoT. Los dispositivos, otros
clientes web y servicios pueden crear, actualizar y eliminar sombras mediante MQTT ytemas de MQTT
reservados (p. 125), HTTP medianteAPI REST de Device Shadow (p. 709), y laAWS CLIporAWS IoT.
Porque las sombras las almacenanAWSen la nube, pueden recopilar y generar informes sobre el estado
del dispositivo desde aplicaciones y otros servicios en la nube, independientemente de que el dispositivo
esté conectado o no.
Uso de sombras
Las sombras proporcionan un almacén de datos de confianza para dispositivos, aplicaciones y otros
servicios en la nube para compartir datos. Permiten que dispositivos, aplicaciones y otros servicios en la
nube se conecten y desconecten sin perder el estado de un dispositivo.
Mientras los dispositivos, las aplicaciones y otros servicios en la nube están conectados a AWS IoT,
pueden acceder y controlar el estado actual de un dispositivo a través de sus sombras. Por ejemplo, una
aplicación puede solicitar un cambio en el estado de un dispositivo actualizando una sombra. AWS IoT
publica un mensaje que indica el cambio en el dispositivo. El dispositivo recibe este mensaje, actualiza
su estado para que coincida y publica un mensaje con su estado actualizado. El servicio Device Shadow
refleja este estado actualizado en la sombra correspondiente. La aplicación puede suscribirse a la
actualización de la sombra o puede consultar la sombra para conocer su estado actual.
Cuando un dispositivo se desconecta, una aplicación puede seguir comunicándose con AWS IoT y
las sombras del dispositivo. Cuando el dispositivo se vuelve a conectar, recibe el estado actual de sus
sombras para que pueda actualizar su estado para que coincida con el de sus sombras y, a continuación,
publicar un mensaje con su estado actualizado. Del mismo modo, cuando una aplicación se desconecta y
el estado del dispositivo cambia mientras está fuera de línea, el dispositivo mantiene la sombra actualizada
para que la aplicación pueda consultar las sombras para conocer su estado actual cuando se vuelva a
conectar.
Si tus dispositivos están desconectados con frecuencia y quieres configurarlos para que reciban mensajes
delta después de que se vuelvan a conectar, puedes usar la función de sesión persistente. Para obtener
más información sobre el período de caducidad de la sesión persistente,Periodo de caducidad de la sesión
persistente.
Un objeto puede tener sombras con nombre y sin nombre al mismo tiempo; sin embargo, la API utilizada
para acceder a cada una es ligeramente diferente, por lo que podría ser más eficiente decidir qué tipo de
683
AWS IoT Core Guía para desarrolladores
Acceso a sombras
sombra funcionaría mejor para su solución y usar solo dicho tipo. Para obtener más información acerca de
la API para acceder a las sombras, consulte Temas de sombra (p. 125).
Mediante las sombras con nombre, puede crear distintas vistas del estado de un objeto. Por ejemplo,
podría dividir un objeto con muchas propiedades en sombras con grupos lógicos de propiedades, cada una
identificada por su nombre de sombra. También puede limitar el acceso a las propiedades agrupándolas
en distintas sombras y utilizando políticas para controlar el acceso. Para obtener más información sobre
las políticas que se utilizan con las sombras de los dispositivos, consulteAcciones, recursos y claves de
condición paraAWS IoTyAWS IoT Corepolíticas.
Las sombras clásicas sin nombre son más sencillas, pero algo más limitadas que las sombras con nombre.
Cada objeto de AWS IoT puede tener solo una sombra sin nombre. Si espera que la solución de IoT tenga
una necesidad limitada de datos de sombra, puede que así sea como desee comenzar a usar sombras.
Sin embargo, si cree que es posible que desee agregar sombras adicionales en el futuro, plantéese la
posibilidad de utilizar sombras con nombre desde el principio.
La indexación de flotas admite sombras sin nombre y sombras con nombre de forma diferente. Para
obtener más información, consulteGestione la indexación de la flota (p. 922).
Acceso a sombras
Cada sombra tiene un tema MQTT (p. 125) reservado y una URL HTTP (p. 709) que admite las acciones
get, update y delete en la sombra.
Las sombras utilizan documentos de sombra JSON (p. 721) para almacenar y recuperar datos. Un
documento de sombra contiene una propiedad de estado que describe estos aspectos del estado del
dispositivo:
• desired
Las aplicaciones especifican los estados deseados de las propiedades del dispositivo actualizando el
objeto desired.
• reported
AWS IoT notifica las diferencias entre el estado deseado y el notificado en el objeto delta.
Los datos almacenados en una sombra están determinados por la propiedad de estado del cuerpo del
mensaje de la acción de actualización. Las acciones de actualización posteriores pueden modificar los
valores de un objeto de datos existente y también agregar y eliminar claves y otros elementos del objeto de
estado de la sombra. Para obtener más información sobre cómo acceder a las sombras, consulte Uso de
sombras en dispositivos (p. 687) y Uso de sombras en aplicaciones y servicios (p. 690).
Important
El permiso para realizar solicitudes de actualización debe limitarse a aplicaciones y dispositivos de
confianza. Esto evita que la propiedad de estado de la sombra se cambie de forma inesperada; de
lo contrario, los dispositivos y aplicaciones que usan la sombra deben diseñarse para esperar que
cambien las claves de la propiedad de estado.
684
AWS IoT Core Guía para desarrolladores
Orden de los mensajes
envía mensajes cuando cambia el estado de la sombra y responde a los mensajes que cambian su estado.
Los dispositivos, las aplicaciones y otros servicios en la nube de la solución IoT deben administrar su
estado y mantenerlo coherente con el estado de la sombra del dispositivo.
Los datos de estado de sombra son dinámicos y los pueden modificar los dispositivos, las aplicaciones y
otros servicios en la nube con permiso para acceder a la sombra. Por esta razón, es importante considerar
cómo interactuarán con la sombra cada dispositivo, aplicación y otro servicio en la nube. Por ejemplo:
• Los dispositivos deben escribir solo en la propiedad reported del estado de la sombra al comunicar
datos de estado a la sombra.
• Las aplicaciones y otros servicios en la nube deben escribir solo en la propiedad desired al comunicar
solicitudes de cambio de estado al dispositivo a través de la sombra.
Important
Los datos contenidos en un objeto de datos de sombra son independientes de los de otras
sombras y otras propiedades de objetos, como los atributos de un objeto y el contenido de los
mensajes MQTT que el dispositivo de un objeto podría publicar. Sin embargo, un dispositivo
puede notificar los mismos datos en diferentes temas y sombras de MQTT si es necesario.
Un dispositivo que admita varias sombras debe mantener la coherencia de los datos que notifica
en las distintas sombras.
{
"state": {
"reported": {
"color": "blue"
}
},
"version": 9,
"timestamp": 123456776
}
Actualización 1:
{
"state": {
"desired": {
"color": "RED"
}
},
"version": 10,
"timestamp": 123456777
}
Actualización 2:
{
"state": {
"desired": {
"color": "GREEN"
}
685
AWS IoT Core Guía para desarrolladores
Recorte de mensajes de sombra
},
"version": 11,
"timestamp": 123456778
}
{
"state": {
"reported": {
"color": "GREEN"
}
},
"version": 12,
"timestamp": 123456779
}
{
"state": {
"color": "RED"
},
"version": 11,
"timestamp": 123456778
}
{
"state": {
"color": "GREEN"
},
"version": 12,
"timestamp": 123456779
}
El dispositivo puede recibir estos mensajes de forma desordenada. Dado que el estado de estos mensajes
es acumulable, un dispositivo puede descartar con toda seguridad todos los mensajes cuyo número de
versión sea anterior a la del mensaje del cual se hace un seguimiento. Si el dispositivo recibe el delta de la
versión 12 antes que el de la versión 11, puede descartar sin problemas el mensaje de la versión 11.
{
"sql": "SELECT state, version FROM '$aws/things/+/shadow/update/delta'",
"ruleDisabled": false,
"actions": [
{
"republish": {
"topic": "${topic(3)}/delta",
"roleArn": "arn:aws:iam:123456789012:role/my-iot-role"
}
}
]
686
AWS IoT Core Guía para desarrolladores
Uso de sombras en dispositivos
La instrucción SELECT determina qué campos del mensaje se volverán a publicar en el tema especificado.
Se usa el comodín "+" para seleccionar todos los nombres de sombra. La regla especifica que todos
los mensajes coincidentes deben volver a publicarse en el tema especificado. En tal caso, la función
"topic()" se utiliza para especificar el tema en el que se vuelve a publicar. topic(3) toma el valor del
nombre de objeto del tema original. Para obtener más información sobre la creación de reglas, consulte
Reglas para AWS IoT (p. 516).
Si desea que las aplicaciones y servicios puedan determinar si un dispositivo está conectado, consulte
Detección de un dispositivo conectado (p. 691).
Important
En los ejemplos de esta sección se utiliza una forma abreviada del tema en el
queShadowTopicPrefixpuede hacer referencia a una sombra con nombre o sin nombre, tal y como se
describe en esta tabla.
Las sombras pueden ser con nombre o sin nombre (clásico). Los temas utilizados por cada uno solo
difieren en el prefijo del tema. Esta tabla muestra el prefijo de tema utilizado por cada tipo de sombra.
Important
Asegúrese de que el uso de las sombras por parte de la aplicación o servicio sea coherente y
compatible con las implementaciones correspondientes en los dispositivos. Por ejemplo, tenga
en cuenta cómo se crean, actualizan y eliminan las sombras. Tenga en cuenta también cómo
se tratan las actualizaciones en el dispositivo y en las aplicaciones o servicios que acceden
al dispositivo a través de una sombra. El diseño debe ser claro respecto a cómo se actualiza
y notifica el estado del dispositivo y cómo interactúan las aplicaciones y los servicios con el
dispositivo y sus sombras.
Para crear un tema completo, seleccione el ShadowTopicPrefix para el tipo de sombra al que desea
hacer referencia, reemplace thingName y shadowName si procede, con sus valores correspondientes y,
687
AWS IoT Core Guía para desarrolladores
Inicialización del dispositivo en
la primera conexión a AWS IoT
a continuación, anexe el código auxiliar del tema como se muestra en la tabla siguiente. Recuerde que los
temas distinguen entre mayúsculas y minúsculas.
Consulte Temas de sombra (p. 125) para obtener más información acerca de los temas reservados para
las sombras.
ShadowTopicPrefix/get/ AWS IoT aceptó la solicitud get Las acciones necesarias para
accepted y el cuerpo del mensaje contiene procesar el documento de estado
el documento de sombra actual. en el cuerpo del mensaje.
Después de suscribirse a los mensajes de la tabla anterior para cada sombra, el dispositivo debe probar
si las sombras que admite ya se han creado publicando un tema /get en cada sombra. Si se recibe un
688
AWS IoT Core Guía para desarrolladores
Procesamiento de mensajes mientras el
dispositivo está conectado a AWS IoT
mensaje /get/accepted, el cuerpo del mensaje contiene el documento de sombra, que el dispositivo
puede utilizar para inicializar su estado. Si se recibe un mensaje /get/rejected, la sombra debe crearse
publicando un mensaje /update con el estado actual del dispositivo.
Por ejemplo, supongamos que seMy_IoT_Thingque no tiene sombras clásicas ni con nombre. Si
ahora publicas un/getsolicitud sobre el tema reservado$aws/things/My_IoT_Thing/shadow/get,
devuelve un error en el$aws/things/My_IoT_Thing/shadow/get/rejectedtema porque la cosa no
tiene sombras. Para resolver este error, en primer lugar se/updateenvíe un mensaje mediante el$aws/
things/My_IoT_Thing/shadow/updatetema con el estado actual del dispositivo, como la siguiente
carga útil.
{
"state": {
"reported": {
"welcome": "aws-iot",
"color": "yellow"
}
}
}
Ahora se crea una sombra clásica para la cosa y el mensaje se publica en$aws/things/
My_IoT_Thing/shadow/update/acceptedtema. Si se utiliza el tema$aws/things/My_IoT_Thing/
shadow/get, se muestra una respuesta a$aws/things/My_IoT_Thing/shadow/get/acceptedtema
con el estado del dispositivo.
En el caso de las sombras con nombre, primero debe crear la sombra con nombre asignado o publicar
una actualización con el nombre de la sombra antes de utilizar la solicitud get. Por ejemplo, para crear
una sombra con nombrenamedShadow1, publique primero la información del estado del dispositivo en
el tema$aws/things/My_IoT_Thing/shadow/name/namedShadow1/update. Para recuperar la
información del estado, utilice el/getsolicitud de la sombra nombrada,$aws/things/My_IoT_Thing/
shadow/name/namedShadow1/get.
1. Leer todos los mensajes /update/delta recibidos y sincronizar el estado del dispositivo para que coincida.
2. Publicando un mensaje /update con un cuerpo de mensaje reported que tenga el estado actual del
dispositivo, siempre que cambie el estado del dispositivo.
Mientras un dispositivo está conectado, debe publicar estos mensajes cuando se indique.
689
AWS IoT Core Guía para desarrolladores
Procesamiento de mensajes cuando el
dispositivo se vuelve a conectar a AWS IoT
1. Leer todos los mensajes /update/delta recibidos y sincronizar el estado del dispositivo para que coincida.
2. Publicando un mensaje /update con un cuerpo de mensaje reported que tenga el estado actual del
dispositivo.
En este ejemplo se utiliza la API REST del servicio Device Shadow de AWS IoT para interactuar con las
sombras. A diferencia del ejemplo utilizado en Uso de sombras en dispositivos (p. 687), que utiliza un
modelo de comunicaciones de publicación/suscripción, este ejemplo utiliza el modelo de comunicaciones
de solicitud/respuesta de la API REST. Esto significa que la aplicación o el servicio deben realizar una
solicitud antes de poder recibir una respuesta de AWS IoT. Una desventaja de este modelo, sin embargo,
es que no admite notificaciones. Si su aplicación o servicio requiere notificaciones oportunas de cambios
en el estado del dispositivo, tenga en cuenta los protocolos MQTT o MQTT sobre WSS, que admiten
el modelo de comunicación de publicación/suscripción, tal como se describe en Uso de sombras en
dispositivos (p. 687).
Important
Asegúrese de que el uso de las sombras por parte de la aplicación o servicio sea coherente y
compatible con las implementaciones correspondientes en los dispositivos. Tenga en cuenta, por
ejemplo, cómo se crean, actualizan y eliminan las sombras, y cómo se tratan las actualizaciones
en el dispositivo y en las aplicaciones o servicios que acceden a la sombra. El diseño debe
especificar claramente cómo se actualiza y notifica el estado del dispositivo, y cómo interactúan
las aplicaciones y los servicios con el dispositivo y sus sombras.
https://endpoint/things/thingName/shadow?name=shadowName
https://endpoint/things/thingName/shadow
donde:
punto de conexión
690
AWS IoT Core Guía para desarrolladores
Inicialización de la aplicación o el
servicio al conectarse a AWS IoT
thingName
El nombre de la sombra con nombre. Este parámetro no se utiliza con sombras sin nombre.
Cuando un usuario final interactúa con la aplicación o el servicio para cambiar el estado del dispositivo,
la aplicación o el servicio pueden enviar una solicitud HTTP POST a las URL de las sombras que utiliza
para actualizar el estado desired de la sombra. Esta solicitud devuelve el cambio que se aceptó, pero es
posible que tenga que sondear la sombra realizando solicitudes HTTP GET hasta que el dispositivo haya
actualizado la sombra con su nuevo estado.
Los mensajes MQTT LWT enviados a temas reservados de AWS IoT (temas que comienzan
por $) son omitidos por el servicio Device Shadow de AWS IoT. Sin embargo, los procesan los
clientes suscritos y el motor de reglas de AWS IoT, por lo que deberá crear un mensaje LWT
que se envíe a un tema no reservado y una regla que vuelva a publicar el mensaje MQTT LWT
como un mensaje de actualización de sombra en el tema de actualización reservado de la sombra
ShadowTopicPrefix/update.
1. Cree una regla que vuelva a publicar el mensaje MQTT LWT en el tema reservado. El siguiente
ejemplo es una regla que escucha los mensajes delmy/things/myLightBulb/updatetema y lo
vuelve a publicar en$aws/things/myLightBulb/shadow/update.
{
"rule": {
"ruleDisabled": false,
"sql": "SELECT * FROM 'my/things/myLightBulb/update'",
"description": "Turn my/things/ into $aws/things/",
691
AWS IoT Core Guía para desarrolladores
Simulación de comunicaciones del servicio Device Shadow
"actions": [
{
"republish": {
"topic": "$$aws/things/myLightBulb/shadow/update",
"roleArn": "arn:aws:iam:123456789012:role/aws_iot_republish"
}
}
]
}
}
2. Cuando el dispositivo se conecta a AWS IoT, registra un mensaje LWT en un tema no reservado
para que la regla de republicación lo reconozca. En este ejemplo, ese tema es my/things/
myLightBulb/update y establece la propiedad conectada en false.
{
"state": {
"reported": {
"connected":"false"
}
}
}
{
"state": {
"reported": {
"connected":"true"
}
}
}
{
"state": {
"reported": {
"connected":"false"
}
}
}
692
AWS IoT Core Guía para desarrolladores
Configuración de la simulación
Para demostrar la interacción descrita en este tema y explorarla más a fondo, necesitarás unCuenta de
AWSy un sistema en el que pueda ejecutar elAWS CLI. Si no dispone de ello, aún puede ver la interacción
en los ejemplos de código.
En este ejemplo, la consola de AWS IoT representa el dispositivo. La AWS CLI representa la aplicación o
servicio que accede al dispositivo a través de la sombra. La interfaz de AWS CLI es muy similar a la API
con la que una aplicación podría usar para comunicarse con AWS IoT. El dispositivo de este ejemplo es
una bombilla inteligente y la aplicación muestra el estado de la bombilla y puede cambiar el estado de la
bombilla.
Configuración de la simulación
Estos procedimientos inicializan la simulación abriendo la consola de AWS IoT, que simula su dispositivo, y
la ventana de línea de comandos que simula su aplicación.
1. En el que se utilizaCuenta de AWSpara ejecutar los ejemplos de este tema por su cuenta. En el caso
de que no seCuenta de AWS, cree uno, tal y como se describe enConfigura tuCuenta de AWS (p. 19).
2. Abra la consola de AWS IoT y, en el menú de la izquierda, elija Probar para abrir el cliente MQTT.
3. En otra ventana, abra una ventana de terminal en un sistema que tenga instalada la AWS CLI.
Debe tener dos ventanas abiertas: una con la consola de AWS IoT en la página Prueba y otra con un
símbolo de línea de comandos.
Inicializar el dispositivo
En esta simulación, trabajaremos con un objeto llamadomySimulatedThing, y su sombra llamada,Sim
Shadow1.
Puedes crear una sombra con nombre para una cosa publicando una solicitud de actualización en el
tema$aws/things/mySimulatedThing/shadow/name/simShadow1/updatecomo se muestra a
continuación.
693
AWS IoT Core Guía para desarrolladores
Inicializar el dispositivo
En la consola, suscríbase a los temas secundarios reservados de MQTT. Estos temas son las respuestas
a las acciones get, update y delete para que el dispositivo esté listo para recibir las respuestas
después de publicar una acción.
• $aws/things/mySimulatedThing/shadow/name/simShadow1/delete/accepted
• $aws/things/mySimulatedThing/shadow/name/simShadow1/delete/rejected
• $aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted
• $aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected
• $aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted
• $aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected
• $aws/things/mySimulatedThing/shadow/name/simShadow1/update/delta
• $aws/things/mySimulatedThing/shadow/name/simShadow1/update/documents
En este punto, el dispositivo simulado está listo para recibir los temas a medida que los publica AWS
IoT.
Después de que un dispositivo se haya inicializado y suscrito a los temas de respuesta, debe consultar
las sombras que admite. Esta simulación solo admite una sombra, la sombra que soporta un objeto
llamadomySimulatedThing, llamado,Sim Shadow 1.
{
"code": 404,
"message": "No shadow exists with name: 'simShadow1'"
}
694
AWS IoT Core Guía para desarrolladores
Inicializar el dispositivo
$aws/things/mySimulatedThing/shadow/name/simShadow1/update
2. En la ventana del cuerpo del mensaje debajo donde introdujo el tema, escriba este documento de
sombra para mostrar que el dispositivo está notificando su ID y su color actual en valores RGB.
EligePublicarpara publicar la solicitud.
{
"state": {
"reported": {
"ID": "SmartLamp21",
"ColorRGB": [
128,
128,
128
]
}
},
"clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6"
}
{
"state": {
"reported": {
"ID": "SmartLamp21",
"ColorRGB": [
128,
128,
128
]
}
},
"metadata": {
"reported": {
"ID": {
"timestamp": 1591140517
},
"ColorRGB": [
{
"timestamp": 1591140517
},
{
"timestamp": 1591140517
},
{
"timestamp": 1591140517
}
695
AWS IoT Core Guía para desarrolladores
Enviar una actualización desde la aplicación
]
}
},
"version": 3,
"timestamp": 1591140517,
"clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6"
}
Dado que la sombra existe y la ha inicializado el dispositivo para reflejar su estado actual, debe devolver el
siguiente documento de sombra.
{
"state": {
"reported": {
"ID": "SmartLamp21",
"ColorRGB": [
128,
128,
128
]
}
},
"metadata": {
"reported": {
"ID": {
"timestamp": 1591140517
},
"ColorRGB": [
{
"timestamp": 1591140517
},
{
"timestamp": 1591140517
},
{
"timestamp": 1591140517
}
]
}
},
"version": 3,
"timestamp": 1591141111
}
La aplicación puede usar esta respuesta para inicializar su representación del estado del dispositivo.
696
AWS IoT Core Guía para desarrolladores
Responder a la actualización en el dispositivo
Si la aplicación actualiza el estado, como cuando un usuario final cambia el color de nuestra bombilla
inteligente a amarillo, la aplicación enviará un comando update-thing-shadow. Este comando corresponde
a la API REST UpdateThingShadow.
{
"state": {
"desired": {
"ColorRGB": [
255,
255,
0
]
}
},
"metadata": {
"desired": {
"ColorRGB": [
{
"timestamp": 1591141596
},
{
"timestamp": 1591141596
},
{
"timestamp": 1591141596
}
]
}
},
"version": 4,
"timestamp": 1591141596,
"clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab"
}
697
AWS IoT Core Guía para desarrolladores
Responder a la actualización en el dispositivo
{
"version": 4,
"timestamp": 1591141596,
"state": {
"ColorRGB": [
255,
255,
0
]
},
"metadata": {
"ColorRGB": [
{
"timestamp": 1591141596
},
{
"timestamp": 1591141596
},
{
"timestamp": 1591141596
}
]
},
"clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab"
}
El dispositivo procesaría el contenido de este mensaje para establecer el estado del dispositivo para que
coincida con el estado desired del mensaje.
Después de que el dispositivo actualice el estado para que coincida con el estado desired del mensaje,
debe enviar el nuevo estado notificado de nuevo a AWS IoT publicando un mensaje de actualización. Este
procedimiento simula esto en el cliente MQTT.
{
"state": {
"reported": {
"ColorRGB": [255,255,0]
}
},
"clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258"
}
Si el mensaje fue recibido correctamente porAWS IoT, se muestra una nueva respuesta en$aws/
things/mySimulatedThing/shadow/name/simShadow1/actualizar/aceptadoregistro de mensajes en
elcliente MQTTcon el estado actual de la sombra, como en este ejemplo.
698
AWS IoT Core Guía para desarrolladores
Responder a la actualización en el dispositivo
{
"state": {
"reported": {
"ColorRGB": [
255,
255,
0
]
}
},
"metadata": {
"reported": {
"ColorRGB": [
{
"timestamp": 1591142747
},
{
"timestamp": 1591142747
},
{
"timestamp": 1591142747
}
]
}
},
"version": 5,
"timestamp": 1591142747,
"clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258"
}
Una actualización correcta del estado notificado del dispositivo también hace que AWS IoT envíe una
descripción completa del estado de sombra en un mensaje al tema , como este cuerpo del mensaje
resultante de la actualización de instantáneas realizada por el dispositivo en el procedimiento anterior.
{
"previous": {
"state": {
"desired": {
"ColorRGB": [
255,
255,
0
]
},
"reported": {
"ID": "SmartLamp21",
"ColorRGB": [
128,
128,
128
]
}
},
"metadata": {
"desired": {
"ColorRGB": [
{
"timestamp": 1591141596
},
{
"timestamp": 1591141596
},
699
AWS IoT Core Guía para desarrolladores
Responder a la actualización en el dispositivo
{
"timestamp": 1591141596
}
]
},
"reported": {
"ID": {
"timestamp": 1591140517
},
"ColorRGB": [
{
"timestamp": 1591140517
},
{
"timestamp": 1591140517
},
{
"timestamp": 1591140517
}
]
}
},
"version": 4
},
"current": {
"state": {
"desired": {
"ColorRGB": [
255,
255,
0
]
},
"reported": {
"ID": "SmartLamp21",
"ColorRGB": [
255,
255,
0
]
}
},
"metadata": {
"desired": {
"ColorRGB": [
{
"timestamp": 1591141596
},
{
"timestamp": 1591141596
},
{
"timestamp": 1591141596
}
]
},
"reported": {
"ID": {
"timestamp": 1591140517
},
"ColorRGB": [
{
"timestamp": 1591142747
},
{
"timestamp": 1591142747
700
AWS IoT Core Guía para desarrolladores
Observe la actualización en la aplicación
},
{
"timestamp": 1591142747
}
]
}
},
"version": 5
},
"timestamp": 1591142747,
"clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258"
}
2. Dado que el dispositivo acaba de actualizar la sombra para reflejar su estado actual, debe devolver el
siguiente documento de sombra.
{
"state": {
"desired": {
"ColorRGB": [
255,
255,
0
]
},
"reported": {
"ID": "SmartLamp21",
"ColorRGB": [
255,
255,
0
]
}
},
"metadata": {
"desired": {
"ColorRGB": [
{
"timestamp": 1591141596
},
{
"timestamp": 1591141596
},
{
"timestamp": 1591141596
701
AWS IoT Core Guía para desarrolladores
Más allá de la simulación
}
]
},
"reported": {
"ID": {
"timestamp": 1591140517
},
"ColorRGB": [
{
"timestamp": 1591142747
},
{
"timestamp": 1591142747
},
{
"timestamp": 1591142747
}
]
}
},
"version": 5,
"timestamp": 1591143269
}
UPDATE
Crea una sombra si no existe o actualiza el contenido de una sombra existente con la información
de estado proporcionada en el cuerpo del mensaje. AWS IoT registra una marca temporal con cada
actualización para indicar cuándo se actualizó el estado por última vez. Cuando cambia el estado de
la sombra, AWS IoT envía mensajes /delta a todos los suscriptores de MQTT con la diferencia entre
los estados desired y reported. Los dispositivos o aplicaciones que reciben un mensaje /delta
pueden realizar acciones en función de la diferencia. Por ejemplo, un dispositivo puede actualizar su
estado al estado deseado o una aplicación puede actualizar su interfaz de usuario para mostrar el
cambio de estado del dispositivo.
GET
Recupera un documento de sombra actual que contiene el estado completo de la sombra, incluidos los
metadatos.
DELETE
No puede restaurar un documento oculto de un dispositivo eliminado, pero puede crear uno nuevo
con el nombre de un documento oculto del dispositivo eliminado. Si creas un documento oculto de
un dispositivo que tenga el mismo nombre que uno que se haya eliminado en las últimas 48 horas, el
número de versión del nuevo documento virtual del dispositivo será el mismo que el del documento
702
AWS IoT Core Guía para desarrolladores
Compatibilidad del protocolo
Actualización de la sombra
La aplicación o el servicio pueden actualizar el estado de una sombra mediante la API
UpdateThingShadow (p. 711) o publicando en el tema /update (p. 716). Las actualizaciones afectan
únicamente a los campos especificados en la solicitud.
1. El cliente debe tener un documento de sombra actual para que pueda identificar las propiedades que
se van a cambiar. Consulte la acción /get para ver cómo obtener el documento de sombra actual.
2. El cliente se suscribe a los siguientes temas de MQTT:
• $aws/things/thingName/shadow/name/shadowName/update/accepted
• $aws/things/thingName/shadow/name/shadowName/update/rejected
• $aws/things/thingName/shadow/name/shadowName/update/delta
• $aws/things/thingName/shadow/name/shadowName/update/documents
3. El cliente publica un tema de solicitud de $aws/things/thingName/shadow/name/shadowName/
update con un documento de estado que contiene el estado deseado de la sombra. Solo las
propiedades que se van a cambiar deben incluirse en el documento. Este es un ejemplo de un
documento con el estado deseado.
{
"state": {
"desired": {
"color": {
"r": 10
},
"engine": "ON"
}
}
703
AWS IoT Core Guía para desarrolladores
Actualización de la sombra
4. Si la solicitud de actualización es válida, AWS IoT actualiza el estado deseado en la sombra y publica
mensajes sobre estos temas:
• $aws/things/thingName/shadow/name/shadowName/update/accepted
• $aws/things/thingName/shadow/name/shadowName/update/delta
Cuando un cliente solicita un cambio de estado en una sombra mediante el uso de la API
1. El cliente llama a la API UpdateThingShadow (p. 711) con un documento de estado Documento
de estado de la solicitud (p. 722) como cuerpo del mensaje.
2. Si la solicitud fuera válida, AWS IoT devuelve un código de respuesta HTTP correcta y un documento
de sombra Documento de estado de la respuesta /aceptado (p. 722) como cuerpo del mensaje de
respuesta.
Cuando el dispositivo recibe el estado /desired en el tema /update/delta, realiza los cambios
deseados en el dispositivo. A continuación, envía un mensaje al tema /update para notificar su estado
actual a la sombra.
• $aws/things/thingName/shadow/name/shadowName/update/accepted
• $aws/things/thingName/shadow/name/shadowName/update/rejected
• $aws/things/thingName/shadow/name/shadowName/update/delta
• $aws/things/thingName/shadow/name/shadowName/update/documents
2. El dispositivo notifica su estado actual publicando un mensaje en el tema $aws/
things/thingName/shadow/name/shadowName/update que notifica estado actual, como en
este ejemplo.
{
"state": {
"reported" : {
"color" : { "r" : 10 },
"engine" : "ON"
704
AWS IoT Core Guía para desarrolladores
Actualización de la sombra
}
}
}
Bloqueo optimista
Puede utilizar la versión del documento de estado para asegurarse de que actualiza la versión más
reciente del documento de sombra de un dispositivo. Cuando se suministra una versión con una
solicitud de actualización, el servicio rechaza la solicitud con un código de respuesta de conflicto HTTP
409 si la versión actual del documento de estado no coincide con la versión suministrada. El código
de respuesta a conflictos también puede aparecer en cualquier API que modifiqueThingShadow,
incluyendoDeleteThingShadow.
Por ejemplo:
Documento inicial:
{
"state": {
"desired": {
"colors": [
"RED",
"GREEN",
"BLUE"
]
}
},
"version": 10
}
{
"state": {
"desired": {
"colors": [
"BLUE"
705
AWS IoT Core Guía para desarrolladores
Recuperación de un documento de sombra
]
}
},
"version": 9
}
Resultado:
{
"code": 409,
"message": "Version conflict",
"clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6"
}
{
"state": {
"desired": {
"colors": [
"BLUE"
]
}
},
"version": 10
}
Estado final:
{
"state": {
"desired": {
"colors": [
"BLUE"
]
}
},
"version": 11
}
1. El dispositivo o cliente debe suscribirse a estos temas de MQTT antes de actualizar la sombra:
• $aws/things/thingName/shadow/name/shadowName/get/accepted
• $aws/things/thingName/shadow/name/shadowName/get/rejected
2. El dispositivo o cliente publica un mensaje en el tema $aws/things/thingName/shadow/
name/shadowName/get con un cuerpo de mensaje vacío.
3. Si la solicitud se realiza correctamente, AWS IoT publica un mensaje en el tema $aws/
things/thingName/shadow/name/shadowName/get/accepted con un Documento de estado
de la respuesta /aceptado (p. 722) en el cuerpo del mensaje.
706
AWS IoT Core Guía para desarrolladores
Eliminación de datos de sombra
1. El dispositivo o cliente llama a la API GetThingShadow (p. 710) con un cuerpo de mensaje vacío.
2. Si la solicitud es válida, AWS IoT devuelve un código de respuesta HTTP correcto con un documento
de sombra Documento de estado de la respuesta /aceptado (p. 722) como cuerpo del mensaje de
respuesta.
3. Si la solicitud no es válida, AWS IoT devuelve un código de respuesta de error HTTP y Documento de
respuesta de error (p. 725) como cuerpo del mensaje de respuesta.
• Para eliminar propiedades específicas de una sombra, actualice la sombra; sin embargo, establezca
el valor de las propiedades que desea eliminar en null. Los campos con un valor null se quitan del
documento de sombra.
• Para eliminar toda la sombra, use la API DeleteThingShadow (p. 711) o publique en el tema /
delete (p. 719).
Note
1. El dispositivo o cliente debe tener un documento de sombra actual para que pueda identificar las
propiedades que se van a cambiar. Consulte Recuperación de un documento de sombra (p. 706)
para obtener información sobre cómo obtener el documento de sombra actual.
2. El dispositivo o cliente se suscribe a estos temas de MQTT:
• $aws/things/thingName/shadow/name/shadowName/update/accepted
• $aws/things/thingName/shadow/name/shadowName/update/rejected
3. El dispositivo o cliente publica un tema de solicitud $aws/things/thingName/shadow/
name/shadowName/update con un documento de estado que asigna valores null a las
propiedades de la sombra que se va a eliminar. Solo las propiedades que se van a cambiar deben
incluirse en el documento. Este es un ejemplo de un documento que elimina la propiedad engine.
{
"state": {
"desired": {
"engine": null
}
}
}
707
AWS IoT Core Guía para desarrolladores
Eliminación de datos de sombra
4. Si la solicitud de actualización es válida, AWS IoT elimina las propiedades especificadas en la sombra
y publica un mensaje con el tema $aws/things/thingName/shadow/name/shadowName/
update/accepted con un documento de sombra Documento de estado de la respuesta /
aceptado (p. 722) en el cuerpo del mensaje.
5. Si la solicitud de actualización no es válida, AWS IoT publica un mensaje con el tema $aws/
things/thingName/shadow/name/shadowName/update/rejected con un documento de
sombra Documento de respuesta de error (p. 725) que describe el error.
{
"state": {
"desired": {
"engine": null
}
}
}
2. Si la solicitud fuera válida, AWS IoT devuelve un código de respuesta HTTP correcta y un documento
de sombra Documento de estado de la respuesta /aceptado (p. 722) como cuerpo del mensaje de
respuesta.
3. Si la solicitud no era válida, AWS IoT devuelve un código de respuesta de error HTTP y Documento de
respuesta de error (p. 725) como cuerpo del mensaje de respuesta.
• $aws/things/thingName/shadow/name/shadowName/delete/accepted
• $aws/things/thingName/shadow/name/shadowName/delete/rejected
2. El dispositivo o cliente publica un $aws/things/thingName/shadow/name/shadowName/delete
con un búfer de mensaje vacío.
3. Si la solicitud de eliminación es válida, AWS IoT elimina la sombra y publica un mensaje con el tema
$aws/things/thingName/shadow/name/shadowName/delete/accepted y un documento
de sombra Documento de estado de la respuesta /aceptado (p. 722) abreviado en el cuerpo del
mensaje. Este es un ejemplo del mensaje de eliminación aceptado:
708
AWS IoT Core Guía para desarrolladores
API REST de sombra de dispositivo
"version": 4,
"timestamp": 1591057529
}
4. Si la solicitud de actualización no es válida, AWS IoT publica un mensaje con el tema $aws/
things/thingName/shadow/name/shadowName/delete/rejected con un documento de
sombra Documento de respuesta de error (p. 725) que describe el error.
1. El dispositivo o cliente llama a la API DeleteThingShadow (p. 711) con un búfer de mensaje
vacío.
2. Si la solicitud era válida, AWS IoT devuelve un código de respuesta HTTP correcta Documento de
estado de la respuesta /aceptado (p. 722) y un documento de sombra Documento de estado de la
respuesta /aceptado (p. 722) abreviado en el cuerpo del mensaje. Este es un ejemplo del mensaje
de eliminación aceptado:
{
"version": 4,
"timestamp": 1591057529
}
3. Si la solicitud no era válida, AWS IoT devuelve un código de respuesta de error HTTP y Documento de
respuesta de error (p. 725) como cuerpo del mensaje de respuesta.
https://account-specific-prefix-ats.iot.region.amazonaws.com/things/thingName/shadow
El punto final es específico de suCuenta de AWS. Para encontrar su punto de destino, puede:
identifier.iot.region.amazonaws.com
La API de REST de sombras sigue los mismos mapeos de puertos y protocolos HTTPS que se describen
en Protocolos de comunicación de dispositivos (p. 87).
Note
Para utilizar las API seiotdevicegatewaycomo nombre del servicio para la autenticación. Para
obtener más información, consulteIoTDataPlane.
709
AWS IoT Core Guía para desarrolladores
GetThingShadow
Acciones de API
• GetThingShadow (p. 710)
• UpdateThingShadow (p. 711)
• DeleteThingShadow (p. 711)
• ListNamedShadowsForThing (p. 712)
En la API se utiliza una sección con nombre si se utilizaname=shadowNamecomo parte del parámetro de
consulta de la API.
GetThingShadow
Obtiene la sombra de objeto especificado.
El documento de estado de respuesta incluye el delta entre los estados desired y reported.
Solicitud
Respuesta
En caso de éxito, la respuesta incluye encabezados HTTP estándar, así como el código y el cuerpo
siguientes:
HTTP 200
Response Body: response state document
Para obtener más información, consulte Ejemplo de documento de estado de respuesta (p. 722).
Autorización
Para recuperar una sombra, se necesita una política que permita al intermediario ejecutar la acción
iot:GetThingShadow. El servicio Device Shadow acepta dos formas de autenticación: Signature
Version 4 con credenciales de IAM o autenticación mutua TLS con un certificado de cliente.
A continuación, se muestra una política de ejemplo que permite a un intermediario recuperar la sombra de
un dispositivo:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:GetThingShadow",
"Resource": [
"arn:aws:iot:region:account:thing/thing"
]
}
]
}
710
AWS IoT Core Guía para desarrolladores
UpdateThingShadow
UpdateThingShadow
Actualiza la sombra del objeto especificado.
Las actualizaciones solo afectan a los campos especificados en el documento de estado de la solicitud.
Todos los campos que tengan el valor null se eliminarán de la sombra del dispositivo.
Solicitud
La solicitud incluye los encabezados HTTP estándar, así como el URI y el cuerpo siguientes:
Para obtener más información, consulte Ejemplo de documento de estado de solicitud (p. 722).
Respuesta
En caso de éxito, la respuesta incluye encabezados HTTP estándar, así como el código y el cuerpo
siguientes:
HTTP 200
Response body: response state document
Para obtener más información, consulte Ejemplo de documento de estado de respuesta (p. 722).
Autorización
Para actualizar una sombra se necesita una política que permita al intermediario ejecutar la acción
iot:UpdateThingShadow. El servicio Device Shadow acepta dos formas de autenticación: Signature
Version 4 con credenciales de IAM o autenticación mutua TLS con un certificado de cliente.
A continuación, se muestra una política de ejemplo que permite a un intermediario actualizar la sombra de
un dispositivo:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:UpdateThingShadow",
"Resource": [
"arn:aws:iot:region:account:thing/thing"
]
}
]
}
DeleteThingShadow
Elimina la sombra de objeto especificado.
Solicitud
711
AWS IoT Core Guía para desarrolladores
ListNamedShadowsForThing
Respuesta
En caso de éxito, la respuesta incluye encabezados HTTP estándar, así como el código y el cuerpo
siguientes:
HTTP 200
Response body: Empty response state document
Autorización
Para eliminar la sombra de un dispositivo se necesita una política que permita al intermediario ejecutar
la acción iot:DeleteThingShadow. El servicio Device Shadow acepta dos formas de autenticación:
Signature Version 4 con credenciales de IAM o autenticación mutua TLS con un certificado de cliente.
A continuación, se muestra una política de ejemplo que permite a un intermediario eliminar la sombra de
un dispositivo:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:DeleteThingShadow",
"Resource": [
"arn:aws:iot:region:account:thing/thing"
]
}
]
}
ListNamedShadowsForThing
Muestra las sombras del objeto especificado.
Solicitud
nextToken
Este valor se devuelve en los resultados paginados y se utiliza en la llamada que devuelve la página
siguiente.
pageSize
El número de nombres de sombra que devolver en cada llamada. Véase también nextToken.
thingName
El nombre del objeto para el que mostrar las sombras con nombre.
712
AWS IoT Core Guía para desarrolladores
Temas MQTT de sombra de dispositivo
Respuesta
En caso de éxito, la respuesta incluye los encabezados HTTP estándar, además del siguiente código de
respuesta y unDocumento de respuesta de lista de nombres de sombra (p. 725).
Note
La sombra sin nombre (clásica) no aparece en esta lista. La respuesta es una lista vacía si solo
tienes una sombra clásica o si lathingNameque se ha especificado no existe.
HTTP 200
Response body: Shadow name list document
Autorización
Para incluir la sombra de un dispositivo, se requiere una política que permita a la persona que llama
realizar lasiot:ListNamedShadowsForThingacción. El servicio Device Shadow acepta dos formas de
autenticación: Signature Version 4 con credenciales de IAM o autenticación mutua TLS con un certificado
de cliente.
A continuación, se muestra una política de ejemplo que permite a un intermediario mostrar las sombras
con nombre de un objeto:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:ListNamedShadowsForThing",
"Resource": [
"arn:aws:iot:region:account:thing/thing"
]
}
]
}
La publicación y suscripción de temas de sombra requiere una autorización basada en temas. AWS
IoT se reserva el derecho a añadir nuevos temas a la estructura de temas existente. Por este motivo, le
recomendamos que evite las suscripciones de tipo comodín a los temas de sombra. Por ejemplo, evite
suscribirse a filtros de temas como $aws/things/thingName/shadow/#, ya que el número de temas
que coinciden con este filtro de temas puede aumentar a medida que AWS IoT incorpora nuevos temas
de sombra. Para consultar ejemplos de mensajes publicados en estos temas vaya a Interacción con
sombras (p. 702).
Las sombras pueden ser con nombre o sin nombre (clásico). Los temas utilizados por cada uno solo
difieren en el prefijo del tema. Esta tabla muestra el prefijo de tema utilizado por cada tipo de sombra.
713
AWS IoT Core Guía para desarrolladores
/get
Para crear un tema completo, seleccione el ShadowTopicPrefix para el tipo de sombra al que desea
hacer referencia, reemplace thingName y shadowName si procede, por sus valores correspondientes y, a
continuación, anéxelo al código auxiliar del tema como se muestra en las secciones siguientes.
A continuación se muestran los temas MQTT utilizados para interactuar con las sombras.
Temas
• /get (p. 714)
• /get/accepted (p. 714)
• /get/rejected (p. 715)
• /update (p. 716)
• /update/delta (p. 717)
• /update/accepted (p. 717)
• /update/documents (p. 718)
• /update/rejected (p. 719)
• /delete (p. 719)
• /delete/accepted (p. 720)
• /delete/rejected (p. 721)
/get
Publique un mensaje vacío en este tema para obtener la sombra de objeto:
ShadowTopicPrefix/get
AWS IoT responde publicando en /get/accepted (p. 714) o en /get/rejected (p. 715).
Ejemplo de política de
A continuación, mostramos un ejemplo de la política requerida:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": [
"arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/get"
]
}
]
}
/get/accepted
AWS IoT publica un documento de sombra de respuesta en este tema cuando devuelve la sombra del
dispositivo:
ShadowTopicPrefix/get/accepted
714
AWS IoT Core Guía para desarrolladores
/get/rejected
Para obtener más información, consulte Documentos de estado de la respuesta (p. 722).
Ejemplo de política de
A continuación, mostramos un ejemplo de la política requerida:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/get/accepted"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/get/accepted"
]
}
]
}
/get/rejected
AWS IoT publica un documento de respuesta de error en este tema cuando no puede devolver la sombra
del dispositivo:
ShadowTopicPrefix/get/rejected
Para obtener más información, consulte Documento de respuesta de error (p. 725).
Ejemplo de política de
A continuación, mostramos un ejemplo de la política requerida:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/get/rejected"
]
},
{
"Action": [
"iot:Receive"
],
"Resource": [
715
AWS IoT Core Guía para desarrolladores
/update
"arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/get/rejected"
]
}
]
}
/update
Publique un documento de estado de solicitud en este tema para actualizar la sombra del dispositivo:
ShadowTopicPrefix/update
El cuerpo del mensaje contiene un documento de estado de solicitud parcial (p. 722).
Un cliente que intente actualizar el estado de un dispositivo enviaría un documento de estado de solicitud
JSON con la propiedad desired como esta:
{
"state": {
"desired": {
"color": "red",
"power": "on"
}
}
}
Un dispositivo que actualice su sombra enviaría un documento de estado de solicitud JSON con la
propiedad reported, como esta:
{
"state": {
"reported": {
"color": "red",
"power": "on"
}
}
}
AWS IoT responde publicando en /update/accepted (p. 717) o en /update/rejected (p. 719).
Ejemplo de política de
A continuación, mostramos un ejemplo de la política requerida:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": [
"arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update"
]
}
]
}
716
AWS IoT Core Guía para desarrolladores
/update/delta
/update/delta
AWS IoT publica un documento de estado de respuesta en este tema cuando acepta un cambio de la
sombra del dispositivo y el documento de estado de solicitud contiene valores distintos para los estados
desired y reported:
ShadowTopicPrefix/update/delta
El búfer del mensaje contiene un Documento de estado de la respuesta /delta (p. 723).
Ejemplo de política de
A continuación, mostramos un ejemplo de la política requerida:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/update/delta"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update/delta"
]
}
]
}
/update/accepted
AWS IoT publica un documento de estado de respuesta en este tema cuando acepta un cambio de la
sombra del dispositivo:
717
AWS IoT Core Guía para desarrolladores
/update/documents
ShadowTopicPrefix/update/accepted
El búfer del mensaje contiene un Documento de estado de la respuesta /aceptado (p. 722).
Ejemplo de política de
A continuación, mostramos un ejemplo de la política requerida:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/update/
accepted"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update/accepted"
]
}
]
}
/update/documents
AWS IoT publica un documento de estado en este tema siempre que se realiza una actualización correcta
de la sombra:
ShadowTopicPrefix/update/documents
El cuerpo del mensaje contiene un Documento de estado de respuesta /documentos (p. 723).
Ejemplo de política de
A continuación, mostramos un ejemplo de la política requerida:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/update/
documents"
718
AWS IoT Core Guía para desarrolladores
/update/rejected
]
},
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update/documents"
]
}
]
}
/update/rejected
AWS IoT publica un documento de respuesta de error en este tema cuando rechaza un cambio de la
sombra del dispositivo:
ShadowTopicPrefix/update/rejected
Ejemplo de política de
A continuación, mostramos un ejemplo de la política requerida:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/update/
rejected"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/update/rejected"
]
}
]
}
/delete
Para eliminar la sombra de un dispositivo, publique un mensaje vacío para eliminar el tema:
ShadowTopicPrefix/delete
719
AWS IoT Core Guía para desarrolladores
/delete/accepted
AWS IoT responde publicando en /delete/accepted (p. 720) o en /delete/rejected (p. 721).
Ejemplo de política de
A continuación, mostramos un ejemplo de la política requerida:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": [
"arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/delete"
]
}
]
}
/delete/accepted
AWS IoT publica un mensaje en este tema cuando se elimina la sombra de un dispositivo:
ShadowTopicPrefix/delete/accepted
Ejemplo de política de
A continuación, mostramos un ejemplo de la política requerida:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/delete/
accepted"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/delete/accepted"
]
}
]
}
720
AWS IoT Core Guía para desarrolladores
/delete/rejected
/delete/rejected
AWS IoT publica un documento de respuesta de error en este tema cuando no puede eliminar la sombra
del dispositivo:
ShadowTopicPrefix/delete/rejected
Ejemplo de política de
A continuación, mostramos un ejemplo de la política requerida:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:region:account:topicfilter/$aws/things/thingName/shadow/delete/
rejected"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iot:region:account:topic/$aws/things/thingName/shadow/delete/rejected"
]
}
]
}
Contenido
• Ejemplos de documento de sombra (p. 721)
• Propiedades del documento (p. 726)
• Estado delta (p. 727)
• Control de versiones de documentos de sombra (p. 728)
• Tokens de cliente en documentos de sombra (p. 728)
• Propiedades de documento de sombra vacío (p. 728)
• Valores de matriz en documentos sombra (p. 729)
721
AWS IoT Core Guía para desarrolladores
Ejemplos de documento de sombra
El servicio Device Shadow utiliza los siguientes documentos en operaciones UPDATE, GET y DELETE
mediante la API REST (p. 709) o mensajes de publicación/suscripción MQTT (p. 713).
Ejemplos
• Documento de estado de la solicitud (p. 722)
• Documentos de estado de la respuesta (p. 722)
• Documento de respuesta de error (p. 725)
• Documento de respuesta de lista de nombres de sombra (p. 725)
{
"state": {
"desired": {
"attribute1": integer2,
"attribute2": "string2",
...
"attributeN": boolean2
},
"reported": {
"attribute1": integer1,
"attribute2": "string1",
...
"attributeN": boolean1
}
},
"clientToken": "token",
"version": version
}
• state: las actualizaciones solo afectan a los campos especificados. Normalmente, utilizará la propiedad
desired o la propiedad reported, pero no ambas en la misma solicitud.
• desired— Las propiedades y valores del estado que se solicita actualizar en el dispositivo.
• reported— Las propiedades y valores de estado informados por el dispositivo.
• clientToken— Si se usa, puede hacer coincidir la solicitud y la respuesta correspondiente mediante el
token del cliente.
• version: si se utiliza, el servicio Device Shadow procesa la actualización solo si la versión especificada
coincide con la versión más reciente que tiene.
{
"state": {
"desired": {
"attribute1": integer2,
"attribute2": "string2",
...
"attributeN": boolean2
}
722
AWS IoT Core Guía para desarrolladores
Ejemplos de documento de sombra
},
"metadata": {
"desired": {
"attribute1": {
"timestamp": timestamp
},
"attribute2": {
"timestamp": timestamp
},
...
"attributeN": {
"timestamp": timestamp
}
}
},
"timestamp": timestamp,
"clientToken": "token",
"version": version
}
{
"state": {
"attribute1": integer2,
"attribute2": "string2",
...
"attributeN": boolean2
},
"metadata": {
"attribute1": {
"timestamp": timestamp
},
"attribute2": {
"timestamp": timestamp
},
...
"attributeN": {
"timestamp": timestamp
}
},
"timestamp": timestamp,
"clientToken": "token",
"version": version
}
{
"previous" : {
"state": {
"desired": {
"attribute1": integer2,
"attribute2": "string2",
...
"attributeN": boolean2
},
"reported": {
"attribute1": integer1,
"attribute2": "string1",
...
"attributeN": boolean1
}
723
AWS IoT Core Guía para desarrolladores
Ejemplos de documento de sombra
},
"metadata": {
"desired": {
"attribute1": {
"timestamp": timestamp
},
"attribute2": {
"timestamp": timestamp
},
...
"attributeN": {
"timestamp": timestamp
}
},
"reported": {
"attribute1": {
"timestamp": timestamp
},
"attribute2": {
"timestamp": timestamp
},
...
"attributeN": {
"timestamp": timestamp
}
}
},
"version": version-1
},
"current": {
"state": {
"desired": {
"attribute1": integer2,
"attribute2": "string2",
...
"attributeN": boolean2
},
"reported": {
"attribute1": integer2,
"attribute2": "string2",
...
"attributeN": boolean2
}
},
"metadata": {
"desired": {
"attribute1": {
"timestamp": timestamp
},
"attribute2": {
"timestamp": timestamp
},
...
"attributeN": {
"timestamp": timestamp
}
},
"reported": {
"attribute1": {
"timestamp": timestamp
},
"attribute2": {
"timestamp": timestamp
},
...
"attributeN": {
724
AWS IoT Core Guía para desarrolladores
Ejemplos de documento de sombra
"timestamp": timestamp
}
}
},
"version": version
},
"timestamp": timestamp,
"clientToken": "token"
}
{
"code": error-code,
"message": "error-message",
"timestamp": timestamp,
"clientToken": "token"
}
Para obtener más información, consulte Mensajes de error de Device Shadow (p. 730).
725
AWS IoT Core Guía para desarrolladores
Propiedades del documento
"results": [
"shadowName-1",
"shadowName-2",
"shadowName-3",
"shadowName-n"
],
"nextToken": "nextToken",
"timestamp": timestamp
}
state
desired
El estado deseado del dispositivo. Las aplicaciones pueden escribir en esta parte del documento
para actualizar el estado de un dispositivo directamente sin tener que conectarse a él.
reported
El estado notificado del dispositivo. Los dispositivos escriben en esta parte del documento para
notificar su nuevo estado. Las aplicaciones leen esta parte del documento para determinar el
último estado notificado del dispositivo.
metadata
Información acerca de los datos almacenados en la sección state del documento. Esto incluye las
marcas de tiempo, según la fecha de inicio Unix, para cada atributo de la sección state, lo que le
permite determinar cuándo se actualizaron.
Note
Los metadatos no contribuyen al tamaño de documento para establecer los límites del
servicio o el precio. Para obtener más información, consulte AWS IoT Service Limits.
timestamp
Indica cuándo AWS IoT envió el mensaje. Mediante el uso de la marca temporal en el mensaje y las
marcas temporales para atributos individuales en la sección desired o reported, un dispositivo
puede determinar la antigüedad de una propiedad, incluso si el dispositivo no tiene un reloj interno.
clientToken
Una cadena única del dispositivo que le permite asociar respuestas a solicitudes en un entorno de
MQTT.
version
La versión del documento. Cada vez que el documento se actualiza, su número de versión se
incrementa. Se utiliza para garantizar que la versión del documento que se actualiza sea la más
reciente.
Para obtener más información, consulte Ejemplos de documento de sombra (p. 721).
726
AWS IoT Core Guía para desarrolladores
Estado delta
Estado delta
El estado delta es un tipo de estado virtual que contiene la diferencia entre los estados desired y
reported. Los campos de la sección desired que no están incluidos en la sección reported se
incluyen en el delta. Los campos que están en la sección reported y no están en la sección desired no
se incluyen en el delta. El delta contiene metadatos, y sus valores son iguales a los metadatos del campo
desired. Por ejemplo:
{
"state": {
"desired": {
"color": "RED",
"state": "STOP"
},
"reported": {
"color": "GREEN",
"engine": "ON"
},
"delta": {
"color": "RED",
"state": "STOP"
}
},
"metadata": {
"desired": {
"color": {
"timestamp": 12345
},
"state": {
"timestamp": 12345
}
},
"reported": {
"color": {
"timestamp": 12345
},
"engine": {
"timestamp": 12345
}
},
"delta": {
"color": {
"timestamp": 12345
},
"state": {
"timestamp": 12345
}
}
},
"version": 17,
"timestamp": 123456789
}
}
Cuando los objetos anidados difieren, el delta contiene la ruta de acceso a la raíz.
{
"state": {
"desired": {
"lights": {
"color": {
"r": 255,
727
AWS IoT Core Guía para desarrolladores
Control de versiones de documentos de sombra
"g": 255,
"b": 255
}
}
},
"reported": {
"lights": {
"color": {
"r": 255,
"g": 0,
"b": 255
}
}
},
"delta": {
"lights": {
"color": {
"g": 255
}
}
}
},
"version": 18,
"timestamp": 123456789
}
El servicio Device Shadow calcula la diferencia iterando por cada campo con el estado desired y
comparándolo con el estado reported.
Las matrices se tratan como valores. Si una matriz de la sección desired no coincide con la matriz de la
sección reported, toda la matriz deseada se copia en el delta.
• Un cliente puede recibir un error si intenta sobrescribir una sombra con una versión más antigua. Se
informa al cliente de que debe volver a sincronizarlo para poder actualizar la sombra de un dispositivo.
• Un cliente puede decidir omitir un mensaje recibido si su versión es anterior a la que tiene almacenada.
Un cliente puede omitir la coincidencia de versiones al no incluir una versión en el documento de sombra.
728
AWS IoT Core Guía para desarrolladores
Valores de matriz en documentos sombra
propiedad desired solo si tiene un estado deseado. A continuación se muestra un ejemplo válido de un
documento de estado sin propiedad desired:
{
"reported" : { "temp": 55 }
}
La propiedad reported también puede estar vacía, por ejemplo, si el dispositivo no ha actualizado la
sombra:
{
"desired" : { "color" : "RED" }
}
Si una actualización hace que las propiedades desired o reported se conviertan en nulas, se quita
del documento. A continuación se muestra cómo quitar la propiedad desired estableciéndola en null.
Puede hacerlo cuando un dispositivo actualice su estado, por ejemplo.
{
"state": {
"reported": {
"color": "red"
},
"desired": null
}
}
Un documento de sombra también puede no tener ni la propiedad desired ni reported, lo que hace que
el documento de sombra esté vacío. Este es un ejemplo de un documento de sombra vacío pero válido.
{
}
Estado inicial:
{
"desired" : { "colors" : ["RED", "GREEN", "BLUE" ] }
}
Actualizar:
{
"desired" : { "colors" : ["RED"] }
}
Estado final:
{
"desired" : { "colors" : ["RED"] }
}
729
AWS IoT Core Guía para desarrolladores
Mensajes de error de Device Shadow
Las matrices no pueden tener valores nulos. Por ejemplo, la matriz siguiente no es válida y se rechazará.
{
"desired" : {
"colors" : [ null, "RED", "GREEN" ]
}
}
429 (demasiadas solicitudes) • El servicio Device Shadow generará este mensaje de error
cuando haya más de 10 solicitudes en vuelo en una sola
conexión. Una solicitud en vuelo es una solicitud en curso
que se ha iniciado pero que aún no se ha completado.
730
AWS IoT Core Guía para desarrolladores
Acceder a AWS IoT los trabajos
Trabajos
Utilice AWS IoT Trabajos para definir un conjunto de operaciones remotas que se pueden enviar y ejecutar
en uno o más dispositivos conectados a ellosAWS IoT. Por ejemplo, puede definir un trabajo que indique a
un conjunto de dispositivos que descarguen e instalen aplicaciones, ejecuten actualizaciones de firmware,
reinicien, roten certificados o realicen operaciones de solución de problemas remotas.
Con la consola
Inicie sesión en AWS Management Console y vaya a la AWS IoT consola. En el panel de navegación, elija
Manage (Administrar) y, a continuación, Jobs (Trabajos). Puede crear y administrar trabajo desde esta
sección. Si desea crear y administrar plantillas de Job, en el panel de navegación, seleccione Plantillas de
trabajo. Para obtener más información, consulte Cree y administre trabajos mediante elAWS Management
Console (p. 741).
Puede empezar mediante las operaciones de la AWS IoT Core API. Para obtener más información,
consulte Referencia de la API de AWS IoT. El AWS SDK admite la AWS IoT Core API en la que se basan
los AWS IoT trabajos. Para obtener más información, consulte AWSSDK y conjuntos de herramientas.
Puede utilizar los comandos AWS CLI para ejecutar para crear y administrar trabajos y plantillas de
trabajos. Para obtener más información, consulte Referencia AWS IoT de CLI.
Para crear trabajos, defina primero un documento de trabajo que contenga una lista de instrucciones
que describan las operaciones que el dispositivo debe realizar de forma remota. Para realizar estas
operaciones, especifique una lista de objetivos, que son cosas individuales, grupos de cosas (p. 288) o
ambos. El documento de trabajo y los objetivos juntos constituyen un despliegue.
• Despliegue: esta configuración define cuántos dispositivos reciben el documento de trabajo cada minuto.
• Anular: si un número determinado de dispositivos no reciben la notificación del trabajo, utilice esta
configuración para cancelar el trabajo. Esto evita enviar una mala actualización a toda la flota.
731
AWS IoT Core Guía para desarrolladores
Conceptos clave de trabajos
• Tiempo de espera: si no recibes ninguna respuesta de tus objetivos de trabajo dentro de un período
determinado, el trabajo puede fallar. Puede realizar un seguimiento del trabajo que se ejecuta en estos
dispositivos.
• Reintentar: si un dispositivo informa de un error o se agota el tiempo de espera de un trabajo, puedes
usar AWS IoT Trabajos para volver a enviar el documento de trabajo al dispositivo automáticamente.
• Programación: esta configuración le permite programar un trabajo para una fecha y hora future. También
le permite crear ventanas de mantenimiento periódicas que actualicen los dispositivos durante períodos
predefinidos y de poco tráfico.
Jobs de AWS IoT envía un mensaje para informar a los destinos de que el trabajo está disponible. El
destino inicia la ejecución del trabajo descargando el documento de trabajo, realizando las operaciones
que especifica e informando de su progreso a AWS IoT. Puede realizar un seguimiento del progreso de
un trabajo para un objetivo específico o para todos los destinos mediante la ejecución de los comandos
proporcionados por AWS IoT Jobs. Cuando se inicia un trabajo, tiene el estado En curso. A continuación,
los dispositivos informan sobre las actualizaciones incrementales y muestran este estado hasta que la
tarea se complete correctamente, falle o se agote el tiempo de espera.
En los siguientes temas se describen algunos conceptos clave de los trabajos y el ciclo de vida de los
trabajos y las ejecuciones de los trabajos.
Temas
• Conceptos clave de trabajos (p. 732)
• Trabajos y estados de ejecución de trabajos (p. 735)
Conceptos básicos
Los siguientes son conceptos básicos que debe conocer al utilizar AWS IoT Jobs.
Tarea
Un trabajo es una operación remota que se envía a uno o más dispositivos conectados a ellos y
se ejecuta en ellosAWS IoT. Por ejemplo, puede definir un trabajo que indique a un conjunto de
dispositivos que descarguen e instalen una aplicación o ejecuten actualizaciones de firmware,
reinicien, roten certificados o realicen operaciones de solución de problemas remotas.
Documento de Job
Para crear un trabajo, primero debe crear un documento de trabajo, que es una descripción de las
operaciones remotas que deben realizar los dispositivos.
Los documentos de Job son documentos JSON codificados en UTF-8 y contienen la información que
los dispositivos necesitan para realizar un trabajo. Un documento de trabajo contiene una o más URL
en las que el dispositivo puede descargar una actualización u otros datos. El documento de trabajo se
puede almacenar en un bucket de Amazon S3 o se puede incluir en línea con el comando que crea el
trabajo.
Tip
732
AWS IoT Core Guía para desarrolladores
Conceptos clave de trabajos
Target
Cuando cree un trabajo, debe especificar una lista de destinos que son los dispositivos que deben
realizar las operaciones. Los destinos pueden ser objetos, grupos de objetos (p. 288) o ambos. El
servicio Jobs de AWS IoT envía un mensaje a cada destino para informarle de que hay un trabajo
disponible.
Deployment (Implementación)
Trabajo de instantánea
De forma predeterminada, un trabajo se envía a todos los destinos especificados al crearlo. Cuando
esos objetivos finalicen la tarea (o informen de que no pueden hacerlo), la tarea estará completa.
Trabajo continuo
Un trabajo continuo se envía a todos los destinos especificados al crearlo. Sigue ejecutándose y se
envía a todos los nuevos dispositivos (objetos) que se añaden al grupo de destino. Por ejemplo, se
puede utilizar un trabajo continuo para incorporar o actualizar dispositivos a medida que se agregan a
un grupo. Puede hacer que un trabajo sea continuo estableciendo un parámetro opcional al crearlo.
Note
URL prefirmadas
Para acceder de forma segura y por tiempo limitado a los datos que no están incluidos en el documento
de trabajo, puede utilizar las URL de Amazon S3 prefirmadas. Coloque sus datos en un bucket de Amazon
S3 y añada un enlace marcador a los datos del documento de trabajo. Cuando AWS IoT Jobs recibe
una solicitud para el documento de trabajo, analiza el documento de trabajo buscando los enlaces de los
marcadores de posición y, a continuación, los reemplaza por URL de Amazon S3 prefirmadas.
${aws:iot:s3-presigned-url:https://s3.amazonaws.com/bucket/key}
733
AWS IoT Core Guía para desarrolladores
Conceptos clave de trabajos
en donde bucket es el nombre del bucket y clave es el objeto en el bucket para el que se está
realizando la vinculación.
En las regiones de Beijing y Ningxia, las URL prefirmadas solo funcionan si el propietario del recurso tiene
una licencia de ICP (proveedor de contenido de Internet). Para obtener más información, consulte Amazon
Simple Storage Service en la documentación de introducción a AWS los servicios en China.
Lanzamientos
Puede especificar la rapidez con la que se notifica a los destinos la ejecución de un trabajo pendiente.
Esto le permite crear un despliegue por etapas para administrar mejor las actualizaciones, los reinicios
y otras operaciones. Puede crear una configuración de despliegue mediante una velocidad de
despliegue estática o una velocidad de despliegue exponencial. Para especificar el número máximo de
objetivos de trabajo a informar por minuto, utilice una velocidad de despliegue estática.
Para ver ejemplos de cómo configurar las tasas de implementación y para obtener más información
sobre cómo configurar las implementaciones de tareas, consulte. Configuraciones de implementación,
programación y cancelación de tareas (p. 771)
Programación
Puede crear un conjunto de condiciones para cancelar las implementaciones cuando se cumplan los
criterios especificados. Para obtener más información, consulte Configuraciones de implementación,
programación y cancelación de tareas (p. 771).
Tiempos de espera
Los tiempos de espera de un Job le notifican cada vez que una implementación de trabajo se queda
estancada en el IN_PROGRESS estado durante un período de tiempo inesperadamente largo. Existen
dos tipos de temporizadores: temporizadores en curso y temporizadores de pasos. Cuando finalice el
trabajoIN_PROGRESS, puede supervisar y realizar un seguimiento del progreso de la implementación
del trabajo.
Los reintentos de un Job permiten volver a intentar la ejecución del trabajo cuando se produce un
error, se agota el tiempo de espera o ambas cosas. Puede tener hasta 10 intentos de reintento para
ejecutar el trabajo. Puede supervisar y realizar un seguimiento del progreso del reintento y comprobar
si la ejecución del trabajo se realizó correctamente.
734
AWS IoT Core Guía para desarrolladores
Trabajos y estados de ejecución de trabajos
Las configuraciones de implementación y cancelación son específicas de su trabajo, mientras que las
configuraciones de tiempo de espera y reintento son específicas de la ejecución de un trabajo. Para
obtener más información, consulte Configuraciones de tiempo de espera y reintento de ejecución del
trabajo (p. 777).
Estados de Job
En el siguiente diagrama, se muestran los diferentes estados de un AWS IoT trabajo.
Un trabajo que se crea mediante AWS IoT trabajo puede estar en uno de los siguientes estados:
• PROGRAMADO
Durante la creación inicial del trabajo o la plantilla de trabajo mediante la AWS IoT consola, CreateJobla
CreateJobTemplateAPI o la API, puede seleccionar la configuración de programación opcional en la
AWS IoT consola o SchedulingConfig en la CreateJobAPI o la CreateJobTemplateAPI. Al iniciar un
trabajo programado que contiene un, ystartTime, específico endTimeendBehavoir, el estado del
trabajo se actualiza aSCHEDULED. Cuando el trabajo llegue a la ventana startTime de mantenimiento
seleccionada startTime o a la siguiente (si seleccionó la implementación del trabajo durante una
ventana de mantenimiento), el estado se actualizará de SCHEDULED a IN_PROGRESS y comenzará la
implementación del documento de trabajo en todos los dispositivos del grupo objetivo.
• IN_PROGRESS
Al crear un trabajo mediante la AWS IoT consola o la CreateJobAPI, el estado del trabajo se actualiza
aIN_PROGRESS. Durante la creación de AWS IoT trabajos, Jobs comienza a implementar las
ejecuciones de trabajos en los dispositivos del grupo objetivo. Una vez ejecutadas todas las tareas, AWS
IoT Jobs espera a que los dispositivos finalicen la acción remota.
Para obtener información sobre la concurrencia y los límites que se aplican a los trabajos en curso,
consulte. Límites de los trabajos (p. 838)
Note
735
AWS IoT Core Guía para desarrolladores
Trabajos y estados de ejecución de trabajos
• Para un trabajo continuo sin seleccionar la configuración de programación opcional, siempre está en
curso y continúa ejecutándose para cualquier dispositivo nuevo que se añada al grupo de destino.
Nunca alcanzará un estado deCOMPLETED.
• Para un trabajo continuo con la configuración de programación opcional seleccionada, se cumple lo
siguiente:
• Si endTime se proporcionó un, un trabajo continuo alcanzará COMPLETED el estado cuando
endTime haya pasado y todas las ejecuciones del trabajo hayan alcanzado el estado terminal.
• Si no endTime se proporcionó una en la configuración de programación opcional, el trabajo
continuo seguirá realizando la implementación del documento de trabajo.
Para obtener información sobre la concurrencia y los límites que se aplican a los trabajos que se
cancelan, consulteLímites de los trabajos (p. 838).
• ELIMINACIÓN_EN CURSO
Al eliminar un trabajo mediante la AWS IoT consola o la DeleteJobAPI, el estado del trabajo cambia
aDELETION_IN_PROGRESS. Durante la eliminación de AWS IoT tareas, Jobs comienza a eliminar las
ejecuciones de tareas creadas anteriormente. Una vez eliminadas todas las ejecuciones del trabajo, el
trabajo desaparecerá de su AWS cuenta.
Estado de ejecución de ¿Iniciado por ¿Iniciado por ¿Estado ¿Se puede volver a
Job dispositivo? AWS IoT Jobs? terminal? intentar?
QUEUED No Sí No No aplicable
IN_PROGRESS Sí No No No aplicable
SUCCEEDED Sí No Sí No aplicable
FAILED Sí No Sí Sí
TIMED_OUT No Sí Sí Sí
REJECTED Sí No Sí No
REMOVED No Sí Sí No
CANCELED No Sí Sí No
En la siguiente sección se describe más información sobre los estados de la ejecución de un trabajo que
se implementa al crear un trabajo con AWS IoT Jobs.
736
AWS IoT Core Guía para desarrolladores
Trabajos y estados de ejecución de trabajos
• QUEUED
Cuando AWS IoT Jobs implementa la ejecución de un trabajo para un dispositivo de destino, el estado
de ejecución del trabajo se establece enQUEUED. La ejecución del trabajo permanece en el QUEUED
estado hasta que:
• El dispositivo recibe la ejecución del trabajo, invoca las operaciones de la API de trabajos e informa
del estado comoIN_PROGRESS.
• Cancela el trabajo o la ejecución del trabajo o cuando se cumplen los criterios de cancelación que
especificó y el estado cambia aCANCELED.
• El dispositivo se elimina del grupo objetivo y el estado cambia aREMOVED.
• IN_PROGRESS
Si su dispositivo de IoT se suscribe a la reserva Temas de trabajos (p. 121) $notify y $notify-
next su dispositivo invoca la StartPendingJobExecution API o la UpdateJobExecution API
con un estado deIN_PROGRESS, AWS IoT Jobs establecerá el estado de ejecución del trabajo en.
IN_PROGRESS
La UpdateJobExecution API se puede invocar varias veces con un estado deIN_PROGRESS. Puede
especificar detalles adicionales sobre los pasos de ejecución mediante el statusDetails objeto.
Note
Si creas varios trabajos para cada dispositivo, AWS IoT Jobs y el protocolo MQTT no garantizan
el orden de entrega.
• SUCCEEDED
• FAILED
737
AWS IoT Core Guía para desarrolladores
Trabajos y estados de ejecución de trabajos
• TIMED_OUT
Cuando el dispositivo no completa un paso de una tarea cuando el estado esIN_PROGRESS, o cuando
no puede completar la operación remota dentro del tiempo de espera del temporizador en curso, AWS
IoT Jobs establece el estado de ejecución del trabajo en. TIMED_OUT También tiene un temporizador
de pasos para cada paso de un trabajo en curso y solo se aplica a la ejecución del trabajo. La duración
del temporizador en curso se especifica mediante la inProgressTimeoutInMinutes propiedad
de. Configuración del tiempo de espera de ejecución del trabajo (p. 778) Puede volver a intentar la
ejecución de este trabajo para el dispositivo mediante elConfiguración de reintentos de ejecución de
trabajos (p. 779).
• RECHAZADO
Cuando el dispositivo ya no es un destino válido para la ejecución del trabajo, por ejemplo, cuando está
separado de un grupo de cosas dinámico, AWS IoT Jobs establece el estado de ejecución del trabajo
enREMOVED. Puede volver a adjuntar la cosa a su grupo objetivo y reiniciar la ejecución del trabajo en el
dispositivo.
• CANCELED
738
AWS IoT Core Guía para desarrolladores
Administrar trabajos
Administrar trabajos
Utilice las tareas para notificar a los dispositivos de una actualización de software o firmware. Puede utilizar
elAWS IoTconsola, elOperaciones de API de gestión y control de trabajos (p. 806), elAWS Command
Line Interface, o elAWSSDKpara crear y gestionar puestos de trabajo.
Para obtener más información, consulte¿Para qué sirve la firma de código?AWS IoT?.
Documento de trabajo
Antes de crear un trabajo debe crear un documento del trabajo. Si utilizas la firma de código paraAWS IoT,
debe subir su documento de trabajo a un bucket de Amazon S3 versionado. Para obtener más información
sobre cómo crear un bucket de Amazon S3 y cargar archivos en él, consulteIntroducción a Amazon Simple
Storage Serviceen elGuía de introducción a Amazon S3.
Tip
URL prefirmadas
Su documento de trabajo puede contener una URL de Amazon S3 prefirmada que apunte a su archivo de
código (u otro archivo). Las URL prefirmadas de Amazon S3 son válidas solo durante un período de tiempo
limitado y se generan cuando un dispositivo solicita un documento de trabajo. Como la URL prefirmada
no se crea al crear el documento de trabajo, utilice en su lugar una URL de marcador de posición en el
documento de trabajo. La URL de un marcador de posición tiene el siguiente aspecto:
${aws:iot:s3-presigned-url:https://s3.region.amazonaws.com/<bucket>/<code
file>}
donde:
Cuando un dispositivo solicita el documento de trabajo, AWS IoT genera la URL prefirmada y sustituye la
URL de marcador de posición por la URL prefirmada. El documento del trabajo se envía al dispositivo.
Al crear un trabajo que utilice URL de Amazon S3 prefirmadas, debe proporcionar un rol de IAM. El rol
debe conceder permiso para descargar archivos del bucket de Amazon S3 donde se almacenan los datos
o las actualizaciones. El rol debe conceder permiso también para que AWS IoT asuma el rol.
Puede especificar un tiempo de espera opcional para la URL prefirmada. Para obtener más información,
consulteCreateJob.
739
AWS IoT Core Guía para desarrolladores
URL prefirmadas
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": [
"iot.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
3. Para protegerse contra el confuso problema del adjunto, añada las claves de contexto de las
condiciones globalesaws:SourceArnyaws:SourceAccounta la política.
Important
{
"Effect": "Allow",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service":
"iot.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "123456789012"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:iot:*:123456789012:job/*"
}
}
}
]
}
4. Si su trabajo utiliza un documento de trabajo que es un objeto de Amazon S3, elijaPermisosy usa el
siguiente JSON. Esto añade una política que otorga permiso para descargar archivos de su bucket de
Amazon S3:
{
"Version": "2012-10-17",
"Statement": [
{
740
AWS IoT Core Guía para desarrolladores
Cree y administre trabajos mediante la consola
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your_S3_bucket/*"
}
]
}
Temas
• Cree y administre trabajos mediante elAWS Management Console (p. 741)
• Cree y administre trabajos mediante elAWS CLI (p. 742)
Note
Elija Siguiente.
6. En elConfiguración de archivospágina en elObjetivos laboralescuadro de diálogo,
seleccioneCosasoGrupos de cosasque quieres ejecutar este trabajo.
• Desde archivo: un archivo de trabajo JSON que ha subido anteriormente a un bucket de Amazon S3
• Firma de código
741
AWS IoT Core Guía para desarrolladores
Cree y administre trabajos mediante la CLI
En elFunción previa a la firmamenú desplegable, elija el rol de IAM que creó enURL prefirmadas.
Uso${aws:iot:s3-presigned-url:prefirmar URL para objetos ubicados en Amazon S3 es
una práctica de seguridad recomendada para los dispositivos que descargan objetos de Amazon
S3.
Si quieres usar URL prefirmadas como marcador de posición para la firma de código, usa la
siguiente plantilla de ejemplo:
${aws:iot:s3-presigned-url:${aws:iot:code-sign-signature:<S3 URL>}
Si vas a crear un trabajo para realizar acciones remotas de uso frecuente, como reiniciar el
dispositivo, puedes usar unAWSplantilla gestionada. Estas plantillas ya están preconfiguradas
para su uso. Para obtener más información, consulte Crear una plantilla de trabajo
personalizada (p. 765) y Cree plantillas de trabajo personalizadas a partir de plantillas
gestionadas (p. 762).
7. En elConfiguración de tareaspágina en elConfiguración de tareascuadro de diálogo, seleccione uno de
los siguientes tipos de trabajo:
• Configuración de despliegue
• Configuración de programación
• Configuración del tiempo de espera de las ejecuciones de trabajos
• Ejecuciones de trabajos: reintento de configuración: nuevo
• Abortar configuración
Consulte las siguientes secciones para obtener información adicional sobre las configuraciones de
tareas:
Después de crear el trabajo, la consola genera una firma JSON y la coloca en su documento del trabajo.
Puede usar la consola de AWS IoT para ver el estado de un trabajo, cancelarlo o eliminarlo. Para gestionar
los trabajos, vaya aCentro de tareas de la consola.
742
AWS IoT Core Guía para desarrolladores
Cree y administre trabajos mediante la CLI
Creación de trabajos
Para crear unAWS IoTtrabajo, usa elCreateJobcomando. El trabajo se pone en cola para la ejecución en
los destinos (objetos o grupos de objetos) que especifique. Para crear unAWS IoTtrabajo, necesita un
documento de trabajo que pueda incluirse en el cuerpo de la solicitud o como enlace a un documento de
Amazon S3. Si el trabajo incluye descargar archivos mediante URL prefirmadas de Amazon S3, necesitará
un rol de IAM Nombre de recurso de Amazon (ARN) que tenga permiso para descargar el archivo y
conceda permiso aAWS IoTServicio de empleos para asumir el rol.
Para obtener más información sobre la sintaxis al introducir la fecha y la hora mediante un comando de la
API o elAWS CLI, consulteMarca de tiempo.
${aws:iot:code-sign-signature:s3://region.bucket/code-file@code-file-version-id}
Su documento de trabajo debe contener un marcador de URL prefirmado para su archivo de código y el
resultado de la firma JSON colocado en un bucket de Amazon S3 mediante elstart-signing-jobcomando:
{
"presign": "${aws:iot:s3-presigned-url:https://s3.region.amazonaws.com/bucket/image}",
}
743
AWS IoT Core Guía para desarrolladores
Cree y administre trabajos mediante la CLI
El parámetro timeout-config opcional especifica la cantidad de tiempo que cada dispositivo tiene para
finalizar su ejecución del trabajo. El temporizador comienza cuando el estado de ejecución del trabajo
se establece en IN_PROGRESS. Si el estado de ejecución del trabajo no se establece en otro estado de
terminal antes de que venza el tiempo, se establece enTIMED_OUT.
El temporizador en curso no se puede actualizar y se aplica a todas las ejecuciones de trabajos para el
trabajo. Siempre que la ejecución de un trabajo permanezca enIN_PROGRESSestado durante más tiempo
que este intervalo, se produce un error y se conmuta al terminalTIMED_OUTestado.AWS IoTtambién
publica una notificación MQTT.
Actualización de un trabajo
Para actualizar un trabajo, utiliceUpdateJobcomando. Puede actualizar los campos description,
presignedUrlConfig, jobExecutionsRolloutConfig, abortConfig y timeoutConfig para un
trabajo.
Cancelación de un trabajo
Para cancelar un trabajo, utiliceCancelJobcomando. Al cancelar un trabajo, AWS IoT dejará de desplegar
nuevas ejecuciones de trabajos para el trabajo. También cancela cualquier ejecución de tareas que
se encuentre en unQUEUEDestado.AWS IoTmantiene intactas las ejecuciones del trabajo en estado
terminal porque el dispositivo ya ha completado el trabajo. Si el estado de la ejecución de un trabajo es
IN_PROGRESS, también se mantendrá intacta a menos que se use el parámetro opcional --force.
744
AWS IoT Core Guía para desarrolladores
Cree y administre trabajos mediante la CLI
"jobArn": "string",
"jobId": "string",
"description": "string"
}
Cuando se cancela un trabajo, se cancelan las ejecuciones de trabajos con estado QUEUED. Ejecuciones
de trabajos que se encuentran en unIN_PROGRESSse cancelan los estados, pero solo si se especifica la
opción--forceparámetro. Las ejecuciones de trabajos en estado terminal no se cancelan.
Warning
El estado de un trabajo cancelado o de una de sus ejecuciones de trabajos es a la larga coherente: AWS
IoT detiene lo antes posible la programación de nuevas ejecuciones de trabajos y las ejecuciones en
dispositivos de trabajos con estado QUEUED. Cambiar el estado de la ejecución de un trabajo a CANCELED
puede llevar algo de tiempo, según el número de dispositivos y otros factores.
Si se cancela un trabajo porque cumple los criterios definidos por unAbortConfigobjeto, el servicio
añade valores rellenados automáticamente paracommentyreasonCodecampos. Puede crear sus propios
valores reasonCode cuando el trabajo se cancela por iniciativa del usuario.
El siguiente comando muestra cómo cancelar la ejecución de un trabajo del trabajo 010 que se ejecuta en
myThing.
Una ejecución de trabajo que se encuentra en unQUEUEDel estado está cancelado. Una ejecución de
trabajo que se encuentra en unIN_PROGRESSel estado se cancela, pero solo si se especifica la opción--
forceparámetro. Las ejecuciones de trabajos en estado terminal no se pueden cancelar.
Warning
Si la ejecución del trabajo está en estado terminal, o si la ejecución del trabajo está en
unIN_PROGRESSestado y el--forceel parámetro no está configurado entrue, este comando provoca
unaInvalidStateTransitionException.
745
AWS IoT Core Guía para desarrolladores
Cree y administre trabajos mediante la CLI
Eliminación de un trabajo
Para eliminar un trabajo y sus ejecuciones, utiliceDeleteJobcomando. De forma predeterminada, solo
puede eliminar un trabajo que esté en estado terminal (SUCCEEDEDoCANCELED). En caso contrario, se
produce una excepción. Puede eliminar un trabajo enIN_PROGRESSestado, sin embargo, solo si elforceel
parámetro está establecido entrue.
Eliminar un trabajo podría llevar algún tiempo, en función del número de ejecuciones de trabajos creadas
para el trabajo y otros factores. Aunque el trabajo se esté eliminando, como estado del trabajo se muestra
DELETION_IN_PROGRESS. Se produce un error si intentas eliminar o cancelar un trabajo con un estado
que ya estáDELETION_IN_PROGRESS.
Solo puede haber 10 trabajos con estado DELETION_IN_PROGRESS al mismo tiempo. De lo contrario, se
genera LimitExceededException.
{
"document": "{\n\t\"operation\":\"install\",\n\t\"url\":\"http://amazon.com/
firmWareUpate-01\",\n\t\"data\":\"${aws:iot:s3-presigned-url:https://s3.amazonaws.com/job-
test-bucket/datafile}\"\n}"
}
Note
Al utilizar este comando para recuperar un documento de trabajo, las URL de los marcadores
de posición no se reemplazan por URL de Amazon S3 prefirmadas. Cuando un dispositivo
llama alGetPendingJobExecutionsOperación de API: las URL de los marcadores de posición se
sustituyen por URL de Amazon S3 prefirmadas en el documento de trabajo.
Enumeración de trabajos
Para obtener una lista de todos los trabajos de suCuenta de AWS, utilice elListJobscomando. Los datos del
trabajo y los datos de ejecución del trabajo se conservan durante un tiempo limitado. Ejecute el siguiente
comando para enumerar todos los trabajos de suCuenta de AWS:
746
AWS IoT Core Guía para desarrolladores
Cree y administre trabajos mediante la CLI
El comando devuelve todos los trabajos en su cuenta ordenados por estado del trabajo:
{
"jobs": [
{
"status": "IN_PROGRESS",
"lastUpdatedAt": 1486687079.743,
"jobArn": "arn:aws:iot:us-east-1:123456789012:job/013",
"createdAt": 1486687079.743,
"targetSelection": "SNAPSHOT",
"jobId": "013"
},
{
"status": "SUCCEEDED",
"lastUpdatedAt": 1486685868.444,
"jobArn": "arn:aws:iot:us-east-1:123456789012:job/012",
"createdAt": 1486685868.444,
"completedAt": 148668789.690,
"targetSelection": "SNAPSHOT",
"jobId": "012"
},
{
"status": "CANCELED",
"lastUpdatedAt": 1486678850.575,
"jobArn": "arn:aws:iot:us-east-1:123456789012:job/011",
"createdAt": 1486678850.575,
"targetSelection": "SNAPSHOT",
"jobId": "011"
}
]
}
Descripción de un trabajo
Para obtener el estado de un trabajo, ejecuteDescribeJobcomando. El siguiente comando muestra cómo
describir un trabajo:
{
"documentSource": "https://s3.amazonaws.com/job-test-bucket/job-document.json",
"job": {
"status": "IN_PROGRESS",
"jobArn": "arn:aws:iot:us-east-1:123456789012:job/010",
"targets": [
"arn:aws:iot:us-east-1:123456789012:thing/myThing"
],
"jobProcessDetails": {
"numberOfCanceledThings": 0,
"numberOfFailedThings": 0,
"numberOfInProgressThings": 0,
"numberOfQueuedThings": 0,
"numberOfRejectedThings": 0,
"numberOfRemovedThings": 0,
"numberOfSucceededThings": 0,
"numberOfTimedOutThings": 0,
747
AWS IoT Core Guía para desarrolladores
Cree y administre trabajos mediante la CLI
"processingTargets": [
arn:aws:iot:us-east-1:123456789012:thing/thingOne,
arn:aws:iot:us-east-1:123456789012:thinggroup/thinggroupOne,
arn:aws:iot:us-east-1:123456789012:thing/thingTwo,
arn:aws:iot:us-east-1:123456789012:thinggroup/thinggroupTwo
]
},
"presignedUrlConfig": {
"expiresInSec": 60,
"roleArn": "arn:aws:iam::123456789012:role/S3DownloadRole"
},
"jobId": "010",
"lastUpdatedAt": 1486593195.006,
"createdAt": 1486593195.006,
"targetSelection": "SNAPSHOT",
"jobExecutionsRolloutConfig": {
"exponentialRate": {
"baseRatePerMinute": integer,
"incrementFactor": integer,
"rateIncreaseCriteria": {
"numberOfNotifiedThings": integer, // Set one or the other
"numberOfSucceededThings": integer // of these two values.
},
"maximumPerMinute": integer
}
},
"abortConfig": {
"criteriaList": [
{
"action": "string",
"failureType": "string",
"minNumberOfExecutedThings": integer,
"thresholdPercentage": integer
}
]
},
"timeoutConfig": {
"inProgressTimeoutInMinutes": number
}
}
}
{
"executionSummaries": [
{
"thingArn": "arn:aws:iot:us-east-1:123456789012:thing/thingOne",
"jobExecutionSummary": {
"status": "QUEUED",
"lastUpdatedAt": 1486593196.378,
"queuedAt": 1486593196.378,
"executionNumber": 1234567890
}
748
AWS IoT Core Guía para desarrolladores
Cree y administre trabajos mediante la CLI
},
{
"thingArn": "arn:aws:iot:us-east-1:123456789012:thing/thingTwo",
"jobExecutionSummary": {
"status": "IN_PROGRESS",
"lastUpdatedAt": 1486593345.659,
"queuedAt": 1486593196.378,
"startedAt": 1486593345.659,
"executionNumber": 4567890123
}
}
]
}
El comando devuelve una lista de ejecuciones de trabajo que se ejecutan o se han ejecutado en el objeto
especificado:
{
"executionSummaries": [
{
"jobExecutionSummary": {
"status": "QUEUED",
"lastUpdatedAt": 1486687082.071,
"queuedAt": 1486687082.071,
"executionNumber": 9876543210
},
"jobId": "013"
},
{
"jobExecutionSummary": {
"status": "IN_PROGRESS",
"startAt": 1486685870.729,
"lastUpdatedAt": 1486685870.729,
"queuedAt": 1486685870.729,
"executionNumber": 1357924680
},
"jobId": "012"
},
{
"jobExecutionSummary": {
"status": "SUCCEEDED",
"startAt": 1486678853.415,
"lastUpdatedAt": 1486678853.415,
"queuedAt": 1486678853.415,
"executionNumber": 4357680912
},
"jobId": "011"
},
{
"jobExecutionSummary": {
"status": "CANCELED",
"startAt": 1486593196.378,
"lastUpdatedAt": 1486593196.378,
"queuedAt": 1486593196.378,
"executionNumber": 2143174250
749
AWS IoT Core Guía para desarrolladores
Cree y administre trabajos mediante la CLI
},
"jobId": "010"
}
]
}
{
"execution": {
"jobId": "017",
"executionNumber": 4516820379,
"thingArn": "arn:aws:iot:us-east-1:123456789012:thing/thingOne",
"versionNumber": 123,
"createdAt": 1489084805.285,
"lastUpdatedAt": 1489086279.937,
"startedAt": 1489086279.937,
"status": "IN_PROGRESS",
"approximateSecondsBeforeTimedOut": 100,
"statusDetails": {
"status": "IN_PROGRESS",
"detailsMap": {
"percentComplete": "10"
}
}
}
}
De forma predeterminada, el estado de ejecución del trabajo debe serQUEUEDo en estado terminal
(SUCCEEDED,FAILED,REJECTED,TIMED_OUT,REMOVED, oCANCELED). En caso contrario, se produce un
error. Para eliminar la ejecución de un trabajo con estado IN_PROGRESS, puede establecer el parámetro
force en true.
Warning
750
AWS IoT Core Guía para desarrolladores
Plantillas de trabajo
Plantillas de trabajo
Utilice plantillas de trabajos para preconfigurar los trabajos que puede implementar en varios conjuntos
de dispositivos de destino. Para implementar acciones remotas que se realizan con frecuencia en sus
dispositivos, como reiniciar o instalar una aplicación, puede usar plantillas para definir configuraciones
estándar. Para realizar operaciones como la implementación de parches de seguridad y correcciones de
errores, puede crear plantillas a partir de trabajos existentes.
Al crear una plantilla de trabajo, especifique las siguientes configuraciones y recursos adicionales.
• Propiedades de Job
• Documentos y objetivos del Job
• Criterios de implementación, programación y cancelación
• Criterios de tiempo de espera y reintento
Temas
• Utilice plantillas AWS gestionadas para implementar operaciones remotas comunes (p. 751)
• Crear plantillas de trabajo personalizadas (p. 765)
Puede elegir entre un conjunto de configuraciones predefinidas y crear trabajos con estas plantillas
sin escribir ningún código adicional. Con las plantillas gestionadas, puede ver el documento de trabajo
implementado en sus flotas. Puede crear un trabajo con estas plantillas y crear una plantilla de trabajo
personalizada que pueda reutilizar para sus operaciones remotas.
751
AWS IoT Core Guía para desarrolladores
Usa plantillas AWS gestionadas
• La URL del archivo que desea descargar a su dispositivo. Puede ser un recurso de Internet o una URL
pública o prefirmada de Amazon Simple Storage Service (Amazon S3).
• Una ruta de archivo local en el dispositivo para almacenar el archivo descargado.
Para obtener más información acerca de los documentos de trabajo y sus parámetros, consultePlantilla
gestionada de acciones remotas y documentos de trabajo (p. 753).
Note
El número total de patrones de sustitución en un documento de trabajo debe ser igual o menos de
diez.
Requisitos previos
Para que sus dispositivos ejecuten las acciones remotas especificadas en el documento de trabajo de
plantilla gestionada, debe:
Utilice el software y los controladores de tareas de su propio dispositivo, o el AWS IoT Device Client.
Dependiendo de su caso de negocio, también puede ejecutar ambos para que desempeñen diferentes
funciones.
• Utilice su propio dispositivo, software y gestores de tareas
Puede escribir su propio código para los dispositivos utilizando SDK para dispositivos con AWS IoT
y su biblioteca de controladores que admiten las operaciones remotas. Para implementar y ejecutar
trabajos, compruebe que las bibliotecas de agentes de dispositivos se hayan instalado correctamente
y se estén ejecutando en los dispositivos.
También puede optar por utilizar sus propios controladores que admiten las operaciones remotas.
Para obtener más información, consulte Ejemplos de gestores de tareas en el GitHub repositorio de
AWS IoT Device Client.
• Utilice el cliente AWS IoT del dispositivo
Como alternativa, puede instalar y ejecutar el AWS IoT Device Client en sus dispositivos, ya
que permite utilizar todas las plantillas gestionadas directamente desde la consola de forma
predeterminada.
El Device Client es un software de código abierto escrito en C++ que puede compilar e instalar en
sus dispositivos IoT integrados basados en Linux. El Device Client tiene un cliente base y funciones
discretas del lado del cliente. El cliente base establece la conectividad AWS IoT a través del protocolo
MQTT y puede conectarse con las diferentes funciones del lado del cliente.
Para realizar operaciones remotas en sus dispositivos, utilice la función Trabajos del lado del cliente
del dispositivo. Esta función contiene un analizador para recibir el documento de trabajo y los
controladores de trabajo que implementan las acciones remotas especificadas en el documento
de trabajo. Para obtener más información sobre el Device Client y sus funciones, consulte AWS
IoTDevice Client.
Cuando se ejecuta en dispositivos, el Device Client recibe el documento de trabajo y tiene una
implementación específica de la plataforma que utiliza para ejecutar los comandos del documento.
Para obtener más información acerca de la configuración del cliente de dispositivo y el uso de la
función Job b b la función Job de la que va a configurar el cliente AWS IoTde dispositivo.
• Utilice un entorno compatible
Para cada plantilla gestionada, encontrará información sobre el entorno que puede utilizar para ejecutar
las acciones remotas. Le recomendamos que use la plantilla con un entorno Linux compatible, tal y
752
AWS IoT Core Guía para desarrolladores
Usa plantillas AWS gestionadas
como se especifica en la plantilla. Utilice el AWS IoT Device Client para ejecutar las acciones remotas
de la plantilla gestionada, ya que admite microprocesadores y entornos Linux comunes, como Debian y
Ubuntu.
AWSlas plantillas gestionadas aceptan parámetros de entrada para los que se especifica un valor al
crear un trabajo mediante la plantilla. Todas las plantillas gestionadas tienen dos parámetros de entrada
opcionales en común: runAsUser ypathToHandler. A excepción de la AWS-Reboot plantilla, las
plantillas requieren parámetros de entrada adicionales para los que debe especificar un valor al crear un
trabajo mediante la plantilla. Estos parámetros de entrada obligatorios varían en función de la plantilla que
elija. Por ejemplo, si elige la AWS-Download-File plantilla, debe especificar una lista de paquetes para
instalar y una URL desde la que descargar los archivos.
Especifique un valor para los parámetros de entrada cuando utilice la AWS IoT consola o el AWS
Command Line Interface (AWS CLI) para crear un trabajo que utilice una plantilla gestionada. Cuando
utilice la CLI, proporcione estos valores mediante el document-parameters objeto. Para obtener más
información, consulte documentParameters.
Note
Úselo document-parameters solo al crear trabajos a partir de plantillas AWS gestionadas. Este
parámetro no se puede usar con plantillas de trabajo personalizadas ni para crear trabajos a partir
de ellas.
A continuación se muestra una descripción de los parámetros de entrada opcionales comunes. Verás una
descripción de otros parámetros de entrada que requiere cada plantilla gestionada en la siguiente sección.
runAsUser
Este parámetro especifica si se debe ejecutar el controlador de tareas como otro usuario. Si no se
especifica durante la creación del trabajo, el controlador de tareas se ejecuta con el mismo usuario
que el Device Client. Al ejecutar el controlador de tareas como otro usuario, especifique un valor de
cadena que no supere los 256 caracteres.
pathToHandler
A continuación se muestran las diferentes acciones remotas, sus documentos de trabajo y los parámetros
que aceptan. Todas estas plantillas son compatibles con el entorno Linux para ejecutar la operación
remota en el dispositivo.
AWS—Descargar — Archivo
Nombre de la plantilla
AWS–Download–File
753
AWS IoT Core Guía para desarrolladores
Usa plantillas AWS gestionadas
Descripción de la plantilla
Parámetros de entrada
Esta plantilla tiene los siguientes parámetros obligatorios. También puede especificar los parámetros
opcionales runAsUser ypathToHandler.
downloadUrl
La URL desde la que descargar el archivo. Puede ser un recurso de Internet, un objeto de Amazon
S3 al que se puede acceder públicamente o un objeto de Amazon S3 al que solo puede acceder el
dispositivo mediante una URL prefirmada. Para obtener más información acerca del uso de las URL
prefirmadas y la concesión de permisos, consulte. URL prefirmadas (p. 739)
filePath
Una ruta de archivo local que muestra la ubicación en el dispositivo donde se almacena el archivo
descargado.
El dispositivo descarga el archivo desde la ubicación especificada, comprueba que la descarga se haya
completado y lo almacena localmente.
Documento de Job
{
"version": "1.0",
"steps": [
{
"action": {
"name": "Download-File",
"type": "runHandler",
"input": {
"handler": "download-file.sh",
"args": [
"${aws:iot:parameter:downloadUrl}",
"${aws:iot:parameter:filePath}"
],
"path": "${aws:iot:parameter:pathToHandler}"
},
"runAsUser": "${aws:iot:parameter:runAsUser}"
}
}
]
}
AWS—Instalar — Aplicación
Nombre de la plantilla
AWS–Install–Application
Descripción de la plantilla
754
AWS IoT Core Guía para desarrolladores
Usa plantillas AWS gestionadas
Una plantilla gestionada proporcionada por AWS para instalar una o más aplicaciones.
Parámetros de entrada
Esta plantilla tiene el siguiente parámetro obligatorio,packages. También puede especificar los
parámetros opcionales runAsUser ypathToHandler.
packages
Una lista separada por espacios de una o más aplicaciones que instalar.
Documento de Job
A continuación se muestra el documento de trabajo y su versión más reciente. La plantilla muestra la ruta
al controlador de tareas y al script de shellinstall-packages.sh, que el controlador de tareas debe
ejecutar para descargar el archivo. También muestra el parámetro requeridopackages.
{
"version": "1.0",
"steps": [
{
"action": {
"name": "Install-Application",
"type": "runHandler",
"input": {
"handler": "install-packages.sh",
"args": [
"${aws:iot:parameter:packages}"
],
"path": "${aws:iot:parameter:pathToHandler}"
},
"runAsUser": "${aws:iot:parameter:runAsUser}"
}
}
]
}
AWS—Reiniciar
Nombre de la plantilla
AWS–Reboot
Descripción de la plantilla
Parámetros de entrada
Esta plantilla no tiene parámetros obligatorios. Puede especificar los parámetros opcionales runAsUser
ypathToHandler.
755
AWS IoT Core Guía para desarrolladores
Usa plantillas AWS gestionadas
Documento de Job
A continuación se muestra el documento de trabajo y su versión más reciente. La plantilla muestra la ruta
al controlador de tareas y al script de shellreboot.sh, que el controlador de tareas debe ejecutar para
reiniciar el dispositivo.
{
"version": "1.0",
"steps": [
{
"action": {
"name": "Reboot",
"type": "runHandler",
"input": {
"handler": "reboot.sh",
"path": "${aws:iot:parameter:pathToHandler}"
},
"runAsUser": "${aws:iot:parameter:runAsUser}"
}
}
]
}
AWS—Eliminar— Aplicación
Nombre de la plantilla
AWS–Remove–Application
Descripción de la plantilla
Una plantilla gestionada proporcionada por AWS para desinstalar una o más aplicaciones.
Parámetros de entrada
Esta plantilla tiene el siguiente parámetro obligatorio,packages. También puede especificar los
parámetros opcionales runAsUser ypathToHandler.
packages
Una lista separada por espacios de una o más aplicaciones que desinstalar.
Documento de Job
A continuación se muestra el documento de trabajo y su versión más reciente. La plantilla muestra la ruta
al controlador de tareas y al script de shellremove-packages.sh, que el controlador de tareas debe
ejecutar para descargar el archivo. También muestra el parámetro requeridopackages.
{
"version": "1.0",
"steps": [
{
"action": {
"name": "Remove-Application",
"type": "runHandler",
"input": {
756
AWS IoT Core Guía para desarrolladores
Usa plantillas AWS gestionadas
"handler": "remove-packages.sh",
"args": [
"${aws:iot:parameter:packages}"
],
"path": "${aws:iot:parameter:pathToHandler}"
},
"runAsUser": "${aws:iot:parameter:runAsUser}"
}
}
]
}
AWS—Reiniciar— Aplicación
Nombre de la plantilla
AWS–Restart–Application
Descripción de la plantilla
Una plantilla gestionada proporcionada por AWS para detener y reiniciar uno o más servicios.
Parámetros de entrada
Esta plantilla tiene el siguiente parámetro obligatorio,services. También puede especificar los
parámetros opcionales runAsUser ypathToHandler.
Servicios
Una lista separada por espacios de una o más aplicaciones que reiniciar.
Documento de Job
A continuación se muestra el documento de trabajo y su versión más reciente. La plantilla muestra la ruta
al controlador de tareas y al script de shellrestart-services.sh, que el controlador de tareas debe
ejecutar para reiniciar los servicios del sistema. También muestra el parámetro requeridoservices.
{
"version": "1.0",
"steps": [
{
"action": {
"name": "Restart-Application",
"type": "runHandler",
"input": {
"handler": "restart-services.sh",
"args": [
"${aws:iot:parameter:services}"
],
"path": "${aws:iot:parameter:pathToHandler}"
},
"runAsUser": "${aws:iot:parameter:runAsUser}"
}
}
]
}
757
AWS IoT Core Guía para desarrolladores
Usa plantillas AWS gestionadas
AWS—Inicio— Aplicación
Nombre de la plantilla
AWS-Start-Application
Descripción de la plantilla
Una plantilla gestionada proporcionada por AWS para iniciar uno o más servicios.
Parámetros de entrada
Esta plantilla tiene el siguiente parámetro obligatorio,services. También puede especificar los
parámetros opcionales runAsUser ypathToHandler.
services
Una lista separada por espacios de una o más aplicaciones que iniciar.
Documento de Job
{
"version": "1.0",
"steps": [
{
"action": {
"name": "Start-Application",
"type": "runHandler",
"input": {
"handler": "start-services.sh",
"args": [
"${aws:iot:parameter:services}"
],
"path": "${aws:iot:parameter:pathToHandler}"
},
"runAsUser": "${aws:iot:parameter:runAsUser}"
}
}
]
}
AWS—Detener— Aplicación
Nombre de la plantilla
AWS–Stop–Application
Descripción de la plantilla
Una plantilla gestionada proporcionada por AWS para detener uno o más servicios.
Parámetros de entrada
758
AWS IoT Core Guía para desarrolladores
Usa plantillas AWS gestionadas
Esta plantilla tiene el siguiente parámetro obligatorio,services. También puede especificar los
parámetros opcionales runAsUser ypathToHandler.
services
Una lista separada por espacios de una o más aplicaciones que detener.
Documento de Job
A continuación se muestra el documento de trabajo y su versión más reciente. La plantilla muestra la ruta
al controlador de tareas y al script de shell que el controlador de tareas debe ejecutar para detener los
servicios del sistema. stop-services.sh También muestra el parámetro requeridoservices.
{
"version": "1.0",
"steps": [
{
"action": {
"name": "Stop-Application",
"type": "runHandler",
"input": {
"handler": "stop-services.sh",
"args": [
"${aws:iot:parameter:services}"
],
"path": "${aws:iot:parameter:pathToHandler}"
},
"runAsUser": "${aws:iot:parameter:runAsUser}"
}
}
]
}
AWSComando —Ejecutar
Nombre de la plantilla
AWS–Run–Command
Descripción de la plantilla
Una plantilla gestionada proporcionada por AWS para ejecutar un comando de shell.
Parámetros de entrada
Esta plantilla tiene el siguiente parámetro obligatorio,command. También puede especificar el parámetro
opcionalrunAsUser.
command
Cadena de comandos separada por comas. Cualquier coma incluida en el comando en sí debe estar en
modo escape.
759
AWS IoT Core Guía para desarrolladores
Usa plantillas AWS gestionadas
Documento de Job
A continuación se muestra el documento de trabajo y su versión más reciente. La plantilla muestra la ruta
al comando job y al comando que proporcionó para ejecutar el dispositivo.
{
"version": "1.0",
"steps": [
{
"action": {
"name": "Run-Command",
"type": "runCommand",
"input": {
"command": "${aws:iot:parameter:command}"
},
"runAsUser": "${aws:iot:parameter:runAsUser}"
}
}
]
}
Temas
• Cree un trabajo a partir de plantillas AWS gestionadas mediante el AWS Management
Console (p. 760)
• Cree un trabajo a partir de plantillas AWS gestionadas mediante el AWS CLI (p. 762)
1. Para ver las plantillas gestionadas disponibles, vaya al centro de plantillas de Job de la AWS IoT
consola y seleccione la pestaña Plantillas gestionadas.
2. Para ver los detalles, elige una plantilla gestionada.
{
"version": "1.0",
"steps": [
{
"action": {
760
AWS IoT Core Guía para desarrolladores
Usa plantillas AWS gestionadas
"name": "Reboot",
"type": "runHandler",
"input": {
"handler": "reboot.sh",
"path": "${aws:iot:parameter:pathToHandler}"
},
"runAsUser": "${aws:iot:parameter:runAsUser}"
}
}
]
}
Para obtener más información sobre el documento de trabajo y sus parámetros para diversas acciones
remotas, consultePlantilla gestionada de acciones remotas y documentos de trabajo (p. 753).
• La versión más reciente del documento de trabajo.
También puede iniciar el flujo de trabajo de creación de trabajos y, a continuación, elegir la plantilla AWS
gestionada que desea utilizar al crear el trabajo. Para obtener más información acerca de este flujo de
trabajo, consulteCree y administre trabajos mediante elAWS Management Console (p. 741).
Vaya al centro de plantillas de Job de la AWS IoT consola, seleccione la pestaña Plantillas
gestionadas y, a continuación, elija su plantilla.
2. Crea un trabajo con tu plantilla gestionada
La consola pasa al paso Propiedades personalizadas del trabajo del flujo de trabajo Crear trabajo,
donde se ha agregado la configuración de la plantilla.
2. Introduzca un nombre de trabajo alfanumérico único y una descripción y etiquetas opcionales y, a
continuación, elija Siguiente.
3. Elija las cosas o grupos de cosas como objetivos de trabajo que desee ejecutar en este trabajo.
4. En la sección Documento de Job, se muestra la plantilla con sus ajustes de configuración y
parámetros de entrada. Introduzca valores para los parámetros de entrada de la plantilla elegida.
Por ejemplo, si eliges la plantilla AWS-Download-File:
• Para DownloadURL, introduzca la URL del archivo que desea descargar, por
ejemplo:https://example.com/index.html.
• Para filePath, introduzca la ruta en el dispositivo para almacenar el archivo descargado, por
ejemplo:. path/to/file
Si lo desea, también puede introducir valores para los parámetros runAsUser ypathToHandler.
Para obtener más información acerca de los parámetros de entrada de cada plantilla,
consultePlantilla gestionada de acciones remotas y documentos de trabajo (p. 753).
5. En la página Configuración del Job, elija el tipo de trabajo como trabajo continuo o instantáneo. Un
trabajo de instantánea se completa cuando termina de ejecutarse en los dispositivos y grupos de
destino. Un trabajo continuo se aplica a los grupos de cosas y se ejecuta en cualquier dispositivo
que añadas a un grupo objetivo específico.
6. Siga añadiendo cualquier configuración adicional para su trabajo y, a continuación, revise y cree su
trabajo. Para obtener información sobre las configuraciones adicionales, consulte:
• Configuraciones de implementación, programación y cancelación de tareas (p. 771)
761
AWS IoT Core Guía para desarrolladores
Usa plantillas AWS gestionadas
A continuación, puede guardar el trabajo personalizado como plantilla para crear su propia plantilla de
trabajo personalizada. Para guardar como plantilla:
1. Vaya al centro de tareas de la AWS IoT consola y elija el Job que contenga la plantilla gestionada.
2. Elija Guardar como plantilla de trabajo y, a continuación, cree su plantilla de trabajo personalizada. Para
obtener más información acerca de la creación de una plantilla de trabajo personalizada, consulteCrear
una plantilla de trabajo a partir de una tarea disponible (p. 766).
De forma predeterminada, al ejecutar este comando se muestran todas las plantillas AWS gestionadas
disponibles y sus detalles.
{
"managedJobTemplates": [
{
"templateArn": "arn:aws:iot:region::jobtemplate/AWS-Reboot:1.0",
"templateName": "AWS-Reboot",
"description": "A managed job template for rebooting the device.",
"environments": [
"LINUX"
],
"templateVersion": "1.0"
},
{
"templateArn": "arn:aws:iot:region::jobtemplate/AWS-Remove-Application:1.0",
"templateName": "AWS-Remove-Application",
"description": "A managed job template for uninstalling one or more
applications.",
"environments": [
"LINUX"
],
"templateVersion": "1.0"
},
762
AWS IoT Core Guía para desarrolladores
Usa plantillas AWS gestionadas
{
"templateArn": "arn:aws:iot:region::jobtemplate/AWS-Stop-Application:1.0",
"templateName": "AWS-Stop-Application",
"description": "A managed job template for stopping one or more system
services.",
"environments": [
"LINUX"
],
"templateVersion": "1.0"
},
...
{
"templateArn": "arn:aws:iot:us-east-1::jobtemplate/AWS-Restart-
Application:1.0",
"templateName": "AWS-Restart-Application",
"description": "A managed job template for restarting one or more system
services.",
"environments": [
"LINUX"
],
"templateVersion": "1.0"
}
]
}
El documentParameters objeto que se devuelve al utilizar esta API solo se debe utilizar al
crear trabajos a partir de plantillas AWS gestionadas. El objeto no se debe utilizar para plantillas
de trabajo personalizadas. Para obtener un ejemplo que muestra cómo utilizar este parámetro,
consulteCrear un trabajo mediante plantillas gestionadas (p. 764).
{
"templateName": "AWS-Download-File",
"templateArn": "arn:aws:iot:region::jobtemplate/AWS-Download-File:1.0",
"description": "A managed job template for downloading a file.",
"templateVersion": "1.0",
"environments": [
"LINUX"
],
763
AWS IoT Core Guía para desarrolladores
Usa plantillas AWS gestionadas
"documentParameters": [
{
"key": "downloadUrl",
"description": "URL of file to download.",
"regex": "(.*?)",
"example": "http://www.example.com/index.html",
"optional": false
},
{
"key": "filePath",
"description": "Path on the device where downloaded file is written.",
"regex": "(.*?)",
"example": "/path/to/file",
"optional": false
},
{
"key": "runAsUser",
"description": "Execute handler as another user. If not specified, then handler
is executed as the same user as device client.",
"regex": "(.){0,256}",
"example": "user1",
"optional": true
},
{
"key": "pathToHandler",
"description": "Path to handler on the device. If not specified, then device
client will use the current working directory.",
"regex": "(.){0,4096}",
"example": "/path/to/handler/script",
"optional": true
}
],
"document": "{\"version\":\"1.0\",\"steps\":[{\"action\":{\"name
\":\"Download-File\",\"type\":\"runHandler\",\"input\":{\"handler\":
\"download-file.sh\",\"args\":[\"${aws:iot:parameter:downloadUrl}\",
\"${aws:iot:parameter:filePath}\"],\"path\":\"${aws:iot:parameter:pathToHandler}\"},
\"runAsUser\":\"${aws:iot:parameter:runAsUser}\"}}]}"
}
En el ejemplo se muestra cómo crear un trabajo que utilice la AWS-Download-File plantilla. También
muestra cómo especificar los parámetros de entrada de la plantilla mediante el document-parameters
parámetro.
Note
Utilice el document-parameters objeto solo con plantillas AWS gestionadas. Este objeto no
debe usarse con plantillas de trabajo personalizadas.
764
AWS IoT Core Guía para desarrolladores
Crear plantillas de trabajo personalizadas
--document-parameters downloadUrl=https://example.com/index.html,filePath=path/to/file
donde:
{
"jobArn": "arn:aws:iot:region:account-id:job/new-managed-template-job",
"jobId": "new-managed-template-job",
"description": "A managed job template for downloading a file."
}
Temas
• Cree plantillas de trabajo personalizadas mediante el AWS Management Console (p. 765)
• Cree plantillas de trabajo personalizadas mediante el AWS CLI (p. 768)
765
AWS IoT Core Guía para desarrolladores
Crear plantillas de trabajo personalizadas
existente que se creó mediante una plantilla AWS gestionada. Para obtener más información, consulte
Cree plantillas de trabajo personalizadas a partir de plantillas gestionadas (p. 762).
Note
En la página Crear plantilla de trabajo, introduzca un identificador alfanumérico para el nombre del
trabajo y una descripción alfanumérica para proporcionar detalles adicionales sobre la plantilla.
Note
1. Elige el trabajo
1. Vaya al centro de tareas de la AWS IoT consola y elija el Job que desee utilizar como base para la
plantilla de trabajo.
2. Elija Guardar como plantilla de trabajo.
Note
En la página Crear plantilla de trabajo, introduzca un identificador alfanumérico para el nombre del
trabajo y una descripción alfanumérica para proporcionar detalles adicionales sobre la plantilla.
Note
En este tema se muestra cómo crear un trabajo desde la página de detalles de una plantilla de trabajo
personalizada. También puede crear un trabajo a partir de una plantilla AWS gestionada. Para obtener más
información, consulte Crear un trabajo mediante plantillas gestionadas (p. 761).
La consola pasa al paso Propiedades personalizadas del trabajo del flujo de trabajo Crear trabajo,
donde se ha agregado la configuración de la plantilla.
2. Introduzca un nombre de trabajo alfanumérico único y una descripción y etiquetas opcionales y, a
continuación, elija Siguiente.
3. Elija las cosas o grupos de cosas como objetivos de trabajo que desee ejecutar en este trabajo.
En la sección Documento de Job, se muestra la plantilla con sus ajustes de configuración. Si desea
utilizar un documento de trabajo diferente, elija Examinar y seleccione un depósito y un documento
diferentes. Elija Siguiente.
4. En la página Configuración del Job, elija el tipo de trabajo como trabajo continuo o instantáneo. Un
trabajo de instantánea se completa cuando termina de ejecutarse en los dispositivos y grupos de
destino. Un trabajo continuo se aplica a los grupos de cosas y se ejecuta en cualquier dispositivo
que añadas a un grupo objetivo específico.
5. Siga añadiendo cualquier configuración adicional para su trabajo y, a continuación, revise y cree su
trabajo. Para obtener información sobre las configuraciones adicionales, consulte:
• Configuraciones de implementación, programación y cancelación de tareas (p. 771)
• Configuraciones de tiempo de espera y reintento de ejecución del trabajo (p. 777)
767
AWS IoT Core Guía para desarrolladores
Crear plantillas de trabajo personalizadas
Note
Cuando un trabajo creado a partir de una plantilla de trabajo actualiza los parámetros existentes
proporcionados por la plantilla de trabajo, esos parámetros actualizados anularán los parámetros
existentes proporcionados por la plantilla de trabajo para ese trabajo.
También puede crear trabajos a partir de plantillas de trabajos con las aplicaciones web de Fleet Hub. Para
obtener información sobre la creación de trabajos en Fleet Hub, consulte Trabajar con plantillas de trabajos
en Fleet Hub para la administración de AWS IoT dispositivos.
El timeout-config parámetro opcional especifica la cantidad de tiempo que tiene cada dispositivo
para terminar de ejecutar el trabajo. El temporizador comienza cuando el estado de ejecución del trabajo
se establece en IN_PROGRESS. Si el estado de ejecución del trabajo no se establece en otro estado de
terminal antes de que venza el tiempo, se establece enTIMED_OUT.
El cronómetro en curso no se puede actualizar y se aplica a todos los lanzamientos de trabajos del trabajo.
Siempre que el lanzamiento de un trabajo permanezca en el IN_PROGRESS estado durante más tiempo
que este intervalo, se produce un error en el lanzamiento del trabajo y pasa al TIMED_OUT estado de
terminal. AWS IoTtambién publica una notificación MQTT.
768
AWS IoT Core Guía para desarrolladores
Crear plantillas de trabajo personalizadas
Note
{
"abortConfig": {
"criteriaList": [
{
"action": "string",
"failureType": "string",
"minNumberOfExecutedThings": number,
"thresholdPercentage": number
}
]
},
"createdAt": number,
"description": "string",
"document": "string",
"documentSource": "string",
"jobExecutionsRolloutConfig": {
"exponentialRate": {
"baseRatePerMinute": number,
"incrementFactor": number,
"rateIncreaseCriteria": {
"numberOfNotifiedThings": number,
"numberOfSucceededThings": number
}
},
"maximumPerMinute": number
},
"jobTemplateArn": "string",
"jobTemplateId": "string",
"presignedUrlConfig": {
769
AWS IoT Core Guía para desarrolladores
Crear plantillas de trabajo personalizadas
"expiresInSec": number,
"roleArn": "string"
},
"timeoutConfig": {
"inProgressTimeoutInMinutes": number
}
}
{
"jobTemplates": [
{
"createdAt": number,
"description": "string",
"jobTemplateArn": "string",
"jobTemplateId": "string"
}
],
"nextToken": "string"
}
Para recuperar páginas adicionales de resultados, utilice el valor del nextToken campo.
770
AWS IoT Core Guía para desarrolladores
Trabajoconfiguraciones
Trabajoconfiguraciones
Puede tener las siguientes configuraciones adicionales para cada trabajo que implemente en los objetivos
especificados.
Al utilizar estas configuraciones, puede supervisar el estado de la ejecución del trabajo y evitar que se
envíe una mala actualización a toda la flota.
Temas
• Cómo funcionan las configuraciones de trabajo (p. 771)
• Especificar configuraciones adicionales (p. 781)
Temas
• Configuraciones de implementación, programación y cancelación de tareas (p. 771)
• Configuraciones de tiempo de espera y reintento de ejecución del trabajo (p. 777)
Puede especificar la rapidez con la que se notifica a los destinos la ejecución de un trabajo pendiente.
También puede crear un despliegue por etapas para gestionar las actualizaciones, los reinicios y otras
operaciones. Para especificar cómo se notifican sus objetivos, utilice las tasas de despliegue de trabajos.
771
AWS IoT Core Guía para desarrolladores
Cómo funcionan las configuraciones de trabajo
Puede crear una configuración de despliegue mediante una velocidad de despliegue constante o una
velocidad de despliegue exponencial. Para especificar el número máximo de objetivos de trabajo a
informar por minuto, utilice una velocidad de despliegue constante.
El siguiente ejemplo muestra cómo funcionan las tasas de despliegue. Por ejemplo, una implementación
de tareas con una velocidad base de 50 por minuto, un factor de incremento de 2 y un número de
dispositivos notificados y correctos, cada uno de ellos de 1000, funcionaría de la siguiente manera: el
trabajo se iniciará a una velocidad de 50 ejecuciones de tareas por minuto y continuará a ese ritmo hasta
que se hayan recibido 1000 notificaciones de ejecución de tareas o se hayan producido 1000 ejecuciones
exitosas.
En la siguiente tabla se muestra cómo se produciría el despliegue durante los primeros cuatro incrementos.
Note
Tasas de despliegue de tareas para trabajos continuos que utilizan grupos de cosas dinámicos
Cuando utiliza un trabajo continuo para implementar operaciones remotas en su flota,AWS IoTJobs
implementa las ejecuciones de tareas para los dispositivos de tu grupo objetivo. En el caso de los
dispositivos nuevos que se agreguen al grupo de elementos dinámicos, estas ejecuciones de tareas
seguirán implementándose en esos dispositivos incluso después de que se haya creado el trabajo.
La configuración de despliegue puede controlar las tasas de despliegue solo para los dispositivos que
se agreguen al grupo hasta que se cree el trabajo. Una vez creado un trabajo, para cualquier dispositivo
nuevo, las ejecuciones del trabajo se crean casi en tiempo real tan pronto como los dispositivos se unen al
grupo objetivo.
772
AWS IoT Core Guía para desarrolladores
Cómo funcionan las configuraciones de trabajo
La hora de inicio de un trabajo programado es la fecha y la hora futuras en que el trabajo comenzará
a distribuir el documento de trabajo en todos los dispositivos del grupo de destino. La hora de inicio de
un trabajo programado se aplica a los trabajos continuos y a los trabajos instantáneos. Cuando se crea
inicialmente un trabajo programado, mantiene un estado deSCHEDULED. Al llegar a lastartTimeque
seleccionaste, se actualiza aIN_PROGRESSe inicia la presentación del documento de trabajo.
ElstartTimedebe ser inferior o igual a un año desde la fecha y la hora iniciales en que creó el trabajo
programado.
Para obtener más información sobre la sintaxis destartTimecuando se utiliza un comando de API o
elAWS CLI, consulteMarca de tiempo.
En el caso de un trabajo con la configuración de programación opcional que se lleve a cabo durante un
período de mantenimiento periódico en una ubicación que respete el horario de verano (DST), la hora
cambiará en una hora al cambiar de horario de verano a hora estándar y de hora estándar a DST.
Note
La zona horaria que se muestra en elAWS Management Consolees la zona horaria actual del
sistema. Sin embargo, estas zonas horarias se convertirán a UTC en el sistema.
Hora de finalización
La hora de finalización de un trabajo programado es la fecha y la hora futuras en las que el trabajo
detendrá la implementación del documento de trabajo en los dispositivos restantes del grupo de
destino. La hora de finalización de un trabajo programado se aplica a los trabajos continuos y a los
trabajos instantáneos. Después de que un trabajo programado llegue al seleccionadoendTime,
y todas las ejecuciones de trabajos han alcanzado un estado terminal, actualiza su estado
desdeIN_PROGRESSaCOMPLETED. ElendTimedebe ser inferior o igual a dos años a partir de la fecha
y hora iniciales en que creó el trabajo programado. La duración mínima entrestartTimeyendTimeson
30 minutos. Los reintentos de ejecución del trabajo se producirán hasta que el trabajo llegue alendTime,
luego elendBehaviordictará cómo proceder.
Para obtener más información sobre la sintaxis deendTimecuando se utiliza un comando de API o elAWS
CLI, consulteMarca de tiempo.
En el caso de un trabajo con la configuración de programación opcional que se lleve a cabo durante un
período de mantenimiento periódico en una ubicación que respete el horario de verano (DST), la hora
cambiará en una hora al cambiar de horario de verano a hora estándar y de hora estándar a DST.
Note
La zona horaria que se muestra en elAWS Management Consolees la zona horaria actual del
sistema. Sin embargo, estas zonas horarias se convertirán a UTC en el sistema.
Comportamiento final
El comportamiento final de un trabajo programado determina lo que ocurre con el trabajo y con todas las
ejecuciones de trabajos pendientes cuando el trabajo llega a lo seleccionado.endTime.
A continuación se enumeran los comportamientos finales que puede seleccionar al crear el trabajo o la
plantilla de trabajo:
773
AWS IoT Core Guía para desarrolladores
Cómo funcionan las configuraciones de trabajo
• STOP_ROLLOUT
• STOP_ROLLOUTdetiene la implementación del documento de trabajo en todos los dispositivos
restantes del grupo de destino del trabajo. Además, todosQUEUEDyIN_PROGRESSlas ejecuciones de
tareas continuarán hasta que alcancen un estado terminal. Este es el comportamiento de finalización
predeterminado, a menos que seleccioneCANCELoFORCE_CANCEL.
• CANCEL
• CANCELdetiene la implementación del documento de trabajo en todos los dispositivos restantes del
grupo de destino del trabajo. Además, todosQUEUEDlas ejecuciones de tareas se cancelarán mientras
estén todasIN_PROGRESSlas ejecuciones de tareas continuarán hasta que alcancen un estado
terminal.
• FORCE_CANCEL
• FORCE_CANCELdetiene la implementación del documento de trabajo en todos los dispositivos
restantes del grupo de destino del trabajo. Además, todosQUEUEDyIN_PROGRESSse cancelarán las
ejecuciones de trabajos.
Note
Debe seleccionar unendtimepara seleccionar unendbehavior.
Duración máxima
La duración máxima de un trabajo programado debe ser inferior o igual a dos años, independientemente
de lastartTimeyendTime.
El siguiente diagrama ilustra los estados del trabajo para varios escenarios de trabajos programados con
una ventana de mantenimiento opcional:
774
AWS IoT Core Guía para desarrolladores
Cómo funcionan las configuraciones de trabajo
Para obtener más información sobre los estados del puesto, consulteTrabajos y estados de ejecución de
trabajos (p. 735).
Note
Si un trabajo llega alendTimedurante un período de mantenimiento, se actualizará
desdeIN_PROGRESSaCOMPLETED. Además, cualquier ejecución de tareas restante se realizará
siguiendo lasendBehaviorpara el trabajo.
Expresiones de Cron
Para los trabajos programados que despliegan el documento de trabajo durante un período de
mantenimiento con una frecuencia personalizada, la frecuencia personalizada se introduce mediante una
expresión cron. Una expresión cron tiene seis campos obligatorios, separados por espacios en blanco.
Sintaxis
cron(fields)
Caracteres comodín
• El carácter comodín , (coma) incluye valores adicionales. En el campo Month, JAN, FEB, MAR incluiría
enero, febrero y marzo.
775
AWS IoT Core Guía para desarrolladores
Cómo funcionan las configuraciones de trabajo
• El carácter comodín - (guion) especifica los intervalos. En el campo Day, 1-15 incluiría los días del 1 al
15 del mes especificado.
• El * (asterisco) incluye todos los valores del campo. En el campo Hours, * incluiría cada hora. No puedes
usar*tanto en la Day-of-monthy Day-of-weekcampos. Si lo utiliza en uno, debe utilizar ? en el otro.
• El comodín / (barra inclinada) especifica incrementos. En el campo Minutes, puede escribir 1/10 para
especificar cada décimo minuto, empezando desde el primer minuto de la hora (por ejemplo, los minutos
11, 21 y 31, etc.).
• El comodín ? (signo de interrogación) especifica uno u otro. En la Day-of-monthcampo, puedes
introducir7y si no te importaba qué día de la semana fuera el 7, podías ingresar?en la Day-of-
weekcampo.
• ElLcomodín en la Day-of-montho Day-of-weeklos campos especifican el último día del mes o de la
semana.
• ElWcomodín en la Day-of-monthel campo especifica un día de la semana. En la Day-of-
monthcampo,3Wespecifica el día de la semana más próximo al tercer día del mes.
• El#comodín en la Day-of-weekel campo especifica una instancia determinada del día de la semana
especificado dentro de un mes. Por ejemplo, 3#2 sería el segundo martes del mes: el número 3 hace
referencia al martes, ya que es el tercer día de la semana en el calendario anglosajón, mientras que 2
hace referencia al segundo día de ese tipo dentro de un mes.
Note
Si usa el carácter '#', solo puede definir una expresión en elday-of-weekcampo. Por
ejemplo,"3#1,6#3"no es válido porque se interpreta como dos expresiones.
Restricciones
Ejemplos
Consulte los siguientes ejemplos de cadenas cron cuando utilice una expresión cron parastartTimede
una ventana de mantenimiento recurrente.
0 10 * * ? * Ejecutar a
las 10:00 h
(UTC) todos
los días
15 12 * * ? * Ejecutar a
las 12.15 h
(UTC) todos
los días
0 18 ? * MON-FRI * Ejecutar a
las 18.00
h (UTC)
de lunes a
viernes
0 8 1 * ? * Ejecutar a
las 08:00
776
AWS IoT Core Guía para desarrolladores
Cómo funcionan las configuraciones de trabajo
• La tarea suspenderá todas las implementaciones del documento de trabajo en los dispositivos restantes
del grupo objetivo. Se reanudará en elstartTimede la próxima ventana de mantenimiento.
• Todas las ejecuciones de trabajos con un estado deQUEUEDpermanecerá enQUEUEDhasta
elstartTimede la próxima ventana de mantenimiento. En la siguiente ventana, pueden cambiar
aIN_PROGRESScuando el dispositivo esté listo para empezar a realizar las acciones especificadas en el
documento de trabajo.
• Todas las ejecuciones de trabajos con un estado deIN_PROGRESScontinuará realizando las acciones
especificadas en el documento de trabajo hasta que alcancen el estado terminal. Todos los reintentos
especificados enJobExecutionsRetryConfigtendrá lugar en elstartTimede la próxima ventana de
mantenimiento.
• Cuando un porcentaje mínimo de dispositivos no recibe las notificaciones de ejecución del trabajo, por
ejemplo, cuando el dispositivo no es compatible con una actualización inalámbrica (OTA). En este caso,
el dispositivo puede informar de unaREJECTEDestado.
• Cuando un porcentaje mínimo de dispositivos informa de un error en la ejecución de sus tareas, por
ejemplo, cuando el dispositivo se desconecta al intentar descargar el documento del trabajo desde
una URL de Amazon S3. En tales casos, el dispositivo debe estar programado para informar sobre
laFAILUREestado aAWS IoT.
• Cuando unTIMED_OUTse informa del estado porque se agota el tiempo de espera de la ejecución del
trabajo para un porcentaje umbral de dispositivos una vez iniciadas las ejecuciones del trabajo.
• Cuando hay varios reintentos fallidos. Al añadir una configuración de reintento, cada reintento puede
generar cargos adicionales para suCuenta de AWS. En estos casos, la cancelación de la tarea
puede anular las ejecuciones de tareas en cola y evitar que se vuelvan a intentar realizar dichas
ejecuciones. Para obtener más información sobre la configuración de reintento y su uso con la
configuración de cancelación, consulteConfiguraciones de tiempo de espera y reintento de ejecución del
trabajo (p. 777).
Puede configurar una condición de cancelación de un trabajo mediante elAWS IoTconsola oAWS IoTAPI
de trabajos.
777
AWS IoT Core Guía para desarrolladores
Cómo funcionan las configuraciones de trabajo
duración establecida. Utilice la configuración de reintento de ejecución del trabajo para volver a intentar la
ejecución cuando se produzca un error o se agote el tiempo de espera.
Utilice la configuración de tiempo de espera de ejecución de un trabajo para notificarle cada vez
que la ejecución de un trabajo se atasque en elIN_PROGRESSestado durante un período de tiempo
inesperadamente largo. Cuando el trabajo esIN_PROGRESS, puede supervisar el progreso de la ejecución
del trabajo.
temporizadores en curso
Al crear un trabajo o una plantilla de trabajo, puede especificar un valor para el temporizador en curso
que esté comprendido entre 1 minuto y 7 días. Puede actualizar el valor de este temporizador hasta el
inicio de la ejecución del trabajo. Una vez iniciado el temporizador, no se puede actualizar y el valor del
temporizador se aplica a todas las ejecuciones del trabajo. Cuando la ejecución de un trabajo permanece
en estado IN_PROGRESS durante un periodo superior a este intervalo, la ejecución del trabajo producirá un
error y cambiará al estado final TIMED_OUT. AWS IoT también publica una notificación MQTT.
temporizador de pasos
También puede configurar un temporizador de pasos que se aplique únicamente a la ejecución del trabajo
que desee actualizar. Este temporizador no afecta al temporizador en curso. Cada vez que actualice la
ejecución de un trabajo, puede establecer un nuevo valor para el temporizador de pasos. También puedes
crear un nuevo temporizador de pasos al iniciar la siguiente ejecución de un trabajo pendiente para una
cosa. Si la ejecución del trabajo permanece en estado IN_PROGRESS durante un periodo superior a este
intervalo del temporizador de pasos, generará un error y cambiará al estado terminal TIMED_OUT.
Note
A continuación se muestran las formas en que los tiempos de espera en curso y los tiempos de espera
escalonados interactúan entre sí en un período de tiempo de espera de 20 minutos.
778
AWS IoT Core Guía para desarrolladores
Cómo funcionan las configuraciones de trabajo
1. 12:00
Se crea un nuevo trabajo y se inicia un temporizador en curso de veinte minutos al crear un trabajo. El
temporizador en curso comienza a ejecutarse y la ejecución del trabajo cambia aIN_PROGRESSestado.
2. 12:05 P.M.
Se crea un nuevo temporizador de pasos con un valor de 7 minutos. La ejecución del trabajo ahora
finalizará a las 12:12 p. m.
3. 12:10 P.M.
Se crea un nuevo temporizador de pasos con un valor de 5 minutos. Cuando se crea un nuevo
temporizador de pasos, se descarta el temporizador de pasos anterior y ahora se agota el tiempo de
ejecución del trabajo a las 12:15 p. m.
4. 12:13 P.M.
Se crea un nuevo temporizador de pasos con un valor de 9 minutos. El temporizador del paso anterior
se descarta y la ejecución del trabajo ahora caducará a las 12:20 p. m., ya que el temporizador en
curso se agota a las 12:20 p. m. El temporizador de pasos no puede superar el límite absoluto del
temporizador en curso.
Puede utilizar la configuración de reintento para volver a intentar la ejecución del trabajo cuando se cumpla
un determinado conjunto de criterios. Se puede intentar volver a intentarlo cuando se agote el tiempo de
espera de un trabajo o cuando el dispositivo falle. Para volver a intentar la ejecución debido a un error de
tiempo de espera, debe habilitar la configuración de tiempo de espera.
779
AWS IoT Core Guía para desarrolladores
Cómo funcionan las configuraciones de trabajo
Note
Cada reintento implica cargos adicionales para suCuenta de AWS. Para evitar incurrir en cargos
adicionales por errores en los reintentos repetidos, recomendamos añadir una configuración de
cancelación. Para obtener más información acerca de los precios, consulte Precios de AWS IoT Device
Management.
Es posible que se produzcan varios errores al reintentar cuando un porcentaje elevado de dispositivos se
agote el tiempo de espera o notifique un error. En este caso, puede utilizar la configuración de cancelación
para cancelar el trabajo y evitar que se ejecuten trabajos en cola o se vuelvan a intentar.
Note
Antes de volver a intentar una ejecución de trabajo fallida, también le recomendamos que compruebe si se
puede volver a intentar el error de ejecución del trabajo, tal como se describe en la siguiente sección.
Para intentar reintentos por error, escriba deFAILED, sus dispositivos deben estar programados para
informar sobre laFAILUREestado de una ejecución de trabajo fallida enAWS IoT. Defina la configuración
de reintento con los criterios para volver a intentarloFAILEDejecuciones de tareas y especifique el número
de reintentos que se van a realizar. CuándoAWS IoTJobs detecta elFAILUREestado, entonces intentará
volver a intentar automáticamente la ejecución del trabajo para el dispositivo. Los reintentos continúan
hasta que la ejecución del trabajo se realice correctamente o cuando se alcance el número máximo de
reintentos.
Puede realizar un seguimiento de cada reintento y del trabajo que se está ejecutando en estos dispositivos.
Al realizar un seguimiento del estado de ejecución, una vez que se haya intentado el número especificado
de reintentos, puede utilizar el dispositivo para informar de los errores e iniciar otro intento.
780
AWS IoT Core Guía para desarrolladores
Especificar configuraciones adicionales
El error de ejecución del trabajo se puede volver a intentar o no. Cada reintento puede generar cargos
para suCuenta de AWS. Para evitar incurrir en cargos adicionales por varios reintentos, considere primero
comprobar si se puede volver a intentar el error de ejecución del trabajo. Un ejemplo de error que se puede
volver a intentar incluye un error de conexión que el dispositivo detecta al intentar descargar el documento
de trabajo desde una URL de Amazon S3. Si se puede volver a intentar el error de ejecución del trabajo,
programe el dispositivo para que informe de unFAILUREestado en caso de que falle la ejecución del
trabajo. A continuación, defina la configuración de reintento para reintentarFAILEDejecuciones.
Si no se puede volver a intentar la ejecución, para evitar volver a intentarlo y, potencialmente, incurrir
en cargos adicionales en tu cuenta, te recomendamos que programes el dispositivo para que informe
de unREJECTEDestado aAWS IoT. Los ejemplos de errores que no se pueden volver a intentar incluyen
cuando el dispositivo no puede recibir una actualización de trabajo o cuando experimenta un error de
memoria al ejecutar un trabajo. En estos casos,AWS IoTLos trabajos no volverán a intentar la ejecución del
trabajo porque solo reintentarán la ejecución del trabajo cuando detecten unFAILEDoTIMED_OUTestado.
Una vez que haya determinado que se puede volver a intentar un error en la ejecución de un trabajo, si el
reintento sigue fallando, considere la posibilidad de comprobar los registros del dispositivo.
Note
Para trabajos continuos que tienen el estado de trabajo comoIN_PROGRESS, el número de reintentos se
restablece a cero cuando hay actualizaciones en la pertenencia a un grupo de una cosa. Por ejemplo,
considere que especificó cinco reintentos y que ya se han realizado tres. Si ahora se elimina una cosa
del grupo de cosas y luego se vuelve a unir al grupo, como ocurre con los grupos de cosas dinámicos, el
número de reintentos se restablece a cero. Ahora puedes realizar cinco reintentos para tu grupo de cosas
en lugar de los dos que quedaban. Además, cuando se elimina una cosa del grupo de cosas, se cancelan
los reintentos adicionales.
• Al crear una plantilla de trabajo personalizada. Los parámetros de configuración adicionales que
especifique se guardarán al crear un trabajo a partir de la plantilla.
• Al crear un trabajo personalizado mediante un archivo de trabajo. El archivo de trabajo puede ser un
archivo JSON que se carga en un bucket de S3.
781
AWS IoT Core Guía para desarrolladores
Especificar configuraciones adicionales
• Al crear un trabajo personalizado mediante una plantilla de trabajo personalizada. Si la plantilla ya tiene
estos parámetros especificados, puede reutilizarlos o anularlos especificando nuevos parámetros de
configuración.
• Al crear un trabajo personalizado mediante unAWSplantilla gestionada.
Temas
• Especifique las configuraciones de trabajo mediante elAWS Management Console (p. 782)
• Especifique las configuraciones de trabajo mediante elAWS IoTAPI de trabajos (p. 784)
Añada las configuraciones del trabajo al crear un trabajo o una plantilla de trabajo.
La siguiente sección muestra los parámetros que puede especificar para cada configuración.
Configuración de despliegue
Puede especificar si desea utilizar una velocidad de despliegue constante o exponencial.
Para establecer una velocidad constante para las ejecuciones de trabajos, elijaTasa constantey, a
continuación, especifique elMáximo por minutopara el límite superior de la tarifa. Este valor es opcional y
va de 1 a 1000. Si no lo configuras, usará 1000 como valor predeterminado.
• Establece una tasa de despliegue exponencial
Para establecer una tasa exponencial, elijaTasa exponencialy, a continuación, especifique estos
parámetros:
782
AWS IoT Core Guía para desarrolladores
Especificar configuraciones adicionales
El factor exponencial por el que la tasa de despliegue aumenta después delNúmero de dispositivos
notificadosoNúmero de dispositivos que se han realizado correctamentese cumple el umbral
paraCriterios de aumento de tarifas.
• Criterios de aumento de tarifas
Abortar configuración
EscojaAgregar nueva configuracióny especifique los siguientes parámetros para cada configuración:
• Tipo de fallo
Especifica el número de ejecuciones de trabajos finalizadas que deben realizarse antes de que se
cumplan los criterios de anulación del trabajo.
• Porcentaje umbral
Configuración de programación
Cada trabajo puede comenzar inmediatamente después de la creación inicial, programarse para que
comience en una fecha y hora posteriores o realizarse durante un período de mantenimiento periódico.
EscojaAgregar nueva configuracióny especifique los siguientes parámetros para cada configuración:
• Inicio de trabajo
Una ventana de mantenimiento recurrente define la fecha y la hora específicas en las que un trabajo
puede implementar el documento de trabajo en los dispositivos de destino del trabajo. El período de
mantenimiento puede repetirse diariamente, semanalmente, mensualmente o con una periodicidad
personalizada de día y hora.
• Fin del trabajo
Seleccione un comportamiento de finalización para todas las ejecuciones de trabajos pendientes cuando
el trabajo haya terminado.
783
AWS IoT Core Guía para desarrolladores
Especificar configuraciones adicionales
Note
Cuando un trabajo con la configuración de programación opcional y la hora de finalización
seleccionada llega a la hora de finalización, el trabajo detiene la implementación en todos
los dispositivos restantes del grupo de destino. También aprovecha el comportamiento final
seleccionado para continuar con las demás ejecuciones de trabajos y sus reintentos según la
configuración de reintentos.
Reintentar la configuración
Note
Una vez creado un trabajo, no se puede actualizar el número de reintentos. Solo puede eliminar la
configuración de reintento para todos los tipos de errores. Al crear un trabajo, tenga en cuenta el
número adecuado de reintentos que debe utilizar en la configuración. Para evitar incurrir en costes
excesivos debido a posibles errores en los reintentos, añada una configuración de cancelación.
EscojaAgregar nueva configuracióny especifique los siguientes parámetros para cada configuración:
• Tipo de fallo
Especifica los tipos de errores que deben desencadenar un reintento de ejecución del trabajo. Estos
incluyenFalló,Tiempo de espera, yTodos.
• Number of retries (Número de reintentos)
Especifica el número de reintentos para el seleccionadoTipo de fallo. Para ambos tipos de error
combinados, se pueden intentar hasta 10 reintentos.
Para obtener más información sobre las diferentes configuraciones y su funcionamiento, consulteCómo
funcionan las configuraciones de trabajo (p. 771).
Configuración de despliegue
Puede especificar una velocidad de despliegue constante o exponencial para la configuración de
despliegue.
"jobExecutionsRolloutConfig": {
784
AWS IoT Core Guía para desarrolladores
Especificar configuraciones adicionales
"maximumPerMinute": 1000
}
{
...
"jobExecutionsRolloutConfig": {
"exponentialRate": {
"baseRatePerMinute": 50,
"incrementFactor": 2,
"rateIncreaseCriteria": {
"numberOfNotifiedThings": 1000,
"numberOfSucceededThings": 1000
},
"maximumPerMinute": 1000
}
}
...
}
Donde el parámetro:
baseRatePerMinuto
Abortar configuración
Para añadir esta configuración mediante la API, especifiqueAbortConfigparámetro al ejecutar
elCreateJob, o elCreateJobTemplateFuncionamiento de la API. El siguiente ejemplo muestra una
configuración de anulación para una implementación de tareas que estaba experimentando varias
ejecuciones fallidas, tal como se especifica enCreateJobFuncionamiento de la API.
Note
"abortConfig": {
"criteriaList": [
{
"action": "CANCEL",
785
AWS IoT Core Guía para desarrolladores
Especificar configuraciones adicionales
"failureType": "FAILED",
"minNumberOfExecutedThings": 100,
"thresholdPercentage": 20
},
{
"action": "CANCEL",
"failureType": "TIMED_OUT",
"minNumberOfExecutedThings": 200,
"thresholdPercentage": 50
}
]
}
Donde el parámetro:
action
Especifica la acción que se debe realizar cuando se cumplan los criterios de anulación. Este
parámetro es necesario, y CANCEL es el único valor válido.
Tipo de fallo
Especifica los tipos de errores que deben iniciar la cancelación de un trabajo. Los valores válidos son
FAILED, REJECTED, TIMED_OUT y ALL.
minNumberOfExecutedThings
Especifica el número de ejecuciones de trabajos finalizadas que deben realizarse antes de que se
cumplan los criterios de anulación del trabajo. En este ejemplo, AWS IoT no comprueba si se debe
anular un trabajo hasta que al menos 100 dispositivos hayan completado ejecuciones de trabajos.
Porcentaje de umbral
Especifica el número total de elementos para los que se ejecutan los trabajos que pueden iniciar
la anulación de un trabajo. En este ejemplo,AWS IoTcomprueba de forma secuencial e inicia la
cancelación del trabajo si se alcanza el porcentaje umbral. Si al menos el 20% de las ejecuciones
completas fallaron después de completar 100 ejecuciones, se cancela la implementación de la tarea.
Si no se cumple este criterio,AWS IoTluego comprueba si se ha agotado el tiempo de espera de al
menos el 50% de las ejecuciones completadas después de completar 200 ejecuciones. Si este es el
caso, se cancela la implementación del trabajo.
Configuración de programación
Para añadir esta configuración mediante la API, especifique la opciónSchedulingConfigcuando
ejecutas elCreateJob, o elCreateJobTemplateFuncionamiento de la API.
"SchedulingConfig": {
"endBehavior": string
"endTime": string
"maintenanceWindows": string
"startTime": string
}
Donde el parámetro:
startTime
786
AWS IoT Core Guía para desarrolladores
Especificar configuraciones adicionales
Ventanas de mantenimiento
Especifica si se seleccionó una ventana de mantenimiento opcional para la tarea programada a fin
de implementar el documento de trabajo en todos los dispositivos del grupo de destino. El formato de
cadena demaintenanceWindowes YYYY/MM/DD para la fecha y hh:mm para la hora.
Comportamiento final
Note
1. Para configurar el temporizador en curso al crear un trabajo o una plantilla de trabajo, defina un valor
parainProgressTimeoutInMinutespropiedad de lo opcionalTimeoutConfigobjeto.
"timeoutConfig": {
"inProgressTimeoutInMinutes": number
}
{
...
"statusDetails": {
"string" : "string"
},
"stepTimeoutInMinutes": number
}
Reintentar la configuración
Note
Al crear un trabajo, tenga en cuenta el número adecuado de reintentos que debe utilizar en
la configuración. Para evitar incurrir en costes excesivos debido a posibles errores en los
reintentos, añada una configuración de cancelación. Una vez creado un trabajo, no se puede
actualizar el número de reintentos. Solo puede establecer el número de reintentos en 0 mediante
elUpdateJobFuncionamiento de la API.
787
AWS IoT Core Guía para desarrolladores
Dispositivos y trabajos
{
...
"jobExecutionsRetryConfig": {
"criteriaList": [
{
"failureType": "string",
"numberOfRetries": number
}
]
}
...
}
¿Dónde?Lista de criterioses una matriz que especifica la lista de criterios que determina el número de
reintentos permitidos para cada tipo de error de un trabajo.
Dispositivos y trabajos
Los dispositivos pueden comunicarse con AWS IoT Jobs mediante MQTT, HTTP Signature Version 4 o
HTTP TLS. Para determinar el punto final que se utilizará cuando el dispositivo se comunique con AWS IoT
Jobs, ejecute el DescribeEndpoint comando. Por ejemplo, si ejecuta este comando:
{
"endpointAddress": "a1b2c3d4e5f6g7-ats.iot.us-west-2.amazonaws.com"
}
Con este método de comunicación, el dispositivo utiliza el certificado específico del dispositivo y la clave
privada para autenticarse con Jobs. AWS IoT
Sus dispositivos pueden suscribirse a los siguientes temas. thing-namees el nombre del objeto asociado
con el dispositivo.
• $aws/things/thing-name/jobs/notify
Suscríbase a este tema para recibir una notificación cuando se añada o elimine un lanzamiento de
trabajo de la lista de ofertas de trabajo pendientes.
• $aws/things/thing-name/jobs/notify-next
Suscríbase a este tema para recibir una notificación cuando haya cambiado la próxima ejecución de un
trabajo pendiente.
• $aws/things/thing-name/request-name/accepted
788
AWS IoT Core Guía para desarrolladores
Dispositivos y trabajos
El servicio Jobs de AWS IoT publica los mensajes de éxito y error en un tema de MQTT. El tema se
forma añadiendo accepted o rejected al tema utilizado para realizar la solicitud. Aquí, request-
name está el nombre de una solicitud como Get y el tema puede ser:$aws/things/myThing/jobs/
get. AWS IoT A continuación, Jobs publica mensajes de éxito sobre el $aws/things/myThing/
jobs/get/accepted tema.
• $aws/things/thing-name/request-name/rejected
Aquí request-name está el nombre de una solicitud comoGet. Si la solicitud ha fallado, AWS IoT Jobs
publica mensajes de error sobre el $aws/things/myThing/jobs/get/rejected tema.
Uso de la Sigla
Los dispositivos pueden comunicarse con AWS IoT Jobs mediante la versión 4 de la firma HTTP en el
puerto 443. Este es el método que utilizan los AWS SDK y la CLI. Para obtener más información sobre
esas herramientas, consulte Referencia de AWS CLI comandos: iot-jobs-data o AWSSDK y herramientas y
consulte la IotJobsDataPlane sección correspondiente al idioma de su preferencia.
Con este método de comunicación, el dispositivo utiliza las credenciales de IAM para autenticarse con
AWS IoT Jobs.
• DescribeJobExecution
Con este método, el dispositivo utiliza la autenticación basada en certificados X.509 (por ejemplo,
utilizando su propio certificado y su propia clave privada).
789
AWS IoT Core Guía para desarrolladores
Programación de dispositivos para trabajar con trabajos
• DescribeJobExecution
• GetPendingJobExecutions
• StartNextPendingJobExecution
• UpdateJobExecution
• $aws/things/MyThing/jobs/notify (o $aws/things/MyThing/jobs/notify-next)
• $aws/things/MyThing/jobs/get/accepted
• $aws/things/MyThing/jobs/get/rejected
• $aws/things/MyThing/jobs/jobId/get/accepted
• $aws/things/MyThing/jobs/jobId/get/rejected
Si utilizas la firma con código paraAWS IoT, el código de tu dispositivo debe verificar la firma del archivo
de código. La firma se encuentra en el documento de trabajo, en la propiedad codesign. Para obtener
más información sobre cómo verificar una firma en un archivo de código, consulte el ejemplo de agente de
dispositivo.
Temas
• Flujo de trabajo del dispositivo (p. 790)
• Flujo de trabajo (p. 791)
• Notificaciones de trabajos (p. 794)
1. Cuando un dispositivo está online, debe suscribirse al tema notify-next del dispositivo.
2. Llame a la API de MQTT de DescribeJobExecution (p. 819) con jobId $next para obtener
el siguiente trabajo, su documento de trabajo y otros detalles, incluido el estado guardado en
statusDetails. Si el documento de trabajo tiene una forma en archivo de código, debe verificar la
firma antes de seguir procesando la solicitud del trabajo.
3. Llame a la API de MQTT de UpdateJobExecution (p. 820) para actualizar el estado del trabajo.
También puede combinar este paso y el anterior en una llamada. El dispositivo puede llamar a
StartNextPendingJobExecution (p. 818).
4. Si lo prefiere, puede añadir un temporizador de pasos estableciendo un valor
para stepTimeoutInMinutes si llama a UpdateJobExecution (p. 820) o
StartNextPendingJobExecution (p. 818).
5. Realice las acciones especificadas por el documento de trabajo con la API de MQTT de
UpdateJobExecution (p. 820) para informar del progreso del trabajo.
790
AWS IoT Core Guía para desarrolladores
Flujo de trabajo
El dispositivo debería poder recuperar un estado válido si la ejecución del trabajo se cancela o se
elimina mientras el dispositivo ejecuta el trabajo.
7. Llame a la API de MQTT de UpdateJobExecution (p. 820) cuando termine con el trabajo para
actualizar el estado del trabajo e informar del éxito o error.
8. El siguiente trabajo disponible para su ejecución (si lo hubiera) cambiará, puesto que el estado
de la ejecución del trabajo ha cambiado a estado final. Se notifica al dispositivo que la siguiente
ejecución de trabajo pendiente ha cambiado. En este momento, el dispositivo debe continuar como
se describe en el paso 2.
1. Cuando un dispositivo está online, debe suscribirse al tema notify del objeto.
2. Llame a la API de MQTT de GetPendingJobExecutions (p. 818) para obtener una lista de
ejecuciones de trabajo pendientes.
3. Si la lista contiene una o más ejecuciones de trabajos, seleccione una.
4. Llame a la API de MQTT DescribeJobExecution (p. 819) para obtener el documento de trabajo y
otros detalles, incluido cualquier estado guardado en statusDetails.
5. Llame a la API de MQTT de UpdateJobExecution (p. 820) para actualizar el estado del trabajo. Si
el campo includeJobDocument está establecido en true en este comando, el dispositivo puede
omitir el paso anterior y recuperar el documento de trabajo en este momento.
6. Si lo prefiere, puede añadir un temporizador de pasos estableciendo un valor para
stepTimeoutInMinutes si llama a UpdateJobExecution (p. 820).
7. Realice las acciones especificadas por el documento de trabajo con la API de MQTT de
UpdateJobExecution (p. 820) para informar del progreso del trabajo.
8. Siga monitorizando la ejecución del trabajo llamando a la API de MQTT
DescribeJobExecution (p. 819) con este jobId. Si la ejecución del trabajo se cancela o se elimina
mientras el dispositivo ejecuta el trabajo, el dispositivo debería poder recuperar un estado válido.
9. Llame a la API de MQTT de UpdateJobExecution (p. 820) cuando termine con el trabajo para
actualizar el estado del trabajo e informar del éxito o error.
Si el dispositivo continúa online, se le notificarán todas las ejecuciones de trabajo pendientes cuando
una nueva ejecución de trabajo pendiente esté disponible. Cuando se produzca esto, el dispositivo podrá
seguir como se describe en el paso 2.
Si el dispositivo no puede realizar el trabajo, debe llamar a la API de UpdateJobExecution (p. 820) MQTT
para actualizar el estado del trabajo. REJECTED
Flujo de trabajo
A continuación se muestran los diferentes pasos del flujo de trabajo de los trabajos, desde iniciar un nuevo
trabajo hasta informar del estado de finalización de la ejecución de un trabajo.
791
AWS IoT Core Guía para desarrolladores
Flujo de trabajo
{
"timestamp":1476214217017,
"jobs":{
"QUEUED":[{
"jobId":"0001",
"queuedAt":1476214216981,
"lastUpdatedAt":1476214216981,
"versionNumber" : 1
}]
}
}
Información de trabajo
Para obtener más información sobre la ejecución de un trabajo, el dispositivo llama a la API de MQTT
DescribeJobExecution (p. 819) con el campo includeJobDocument establecido en true (el valore
predeterminado).
Si la solicitud es correcta, el servicio Jobs de AWS IoT publica un mensaje en el tema $aws/things/
MyThing/jobs/0023/get/accepted:
{
"clientToken" : "client-001",
"timestamp" : 1489097434407,
"execution" : {
"approximateSecondsBeforeTimedOut": number,
"jobId" : "023",
"status" : "QUEUED",
"queuedAt" : 1489097374841,
"lastUpdatedAt" : 1489097374841,
"versionNumber" : 1,
"jobDocument" : {
< contents of job document >
}
}
}
Si se produce un error en la solicitud, el servicio Jobs de AWS IoT publica un mensaje en el tema $aws/
things/MyThing/jobs/0023/get/rejected.
792
AWS IoT Core Guía para desarrolladores
Flujo de trabajo
El dispositivo ahora tiene el documento de trabajo que puede usar para realizar las operaciones remotas
para el trabajo. Si el documento de trabajo contiene una URL prefirmada de Amazon S3, el dispositivo
puede usar esa URL para descargar los archivos necesarios para el trabajo.
Por ejemplo, un dispositivo puede actualizar el estado de ejecución de trabajo a IN_PROGRESS mediante
la publicación del siguiente mensaje en el tema $aws/things/MyThing/jobs/0023/update:
{
"status":"IN_PROGRESS",
"statusDetails": {
"progress":"50%"
},
"expectedVersion":"1",
"clientToken":"client001"
}
{
"clientToken":"client001",
"timestamp":1476289222841
}
Por ejemplo:
{
"status":"SUCCEEDED",
793
AWS IoT Core Guía para desarrolladores
Notificaciones de trabajos
"statusDetails": {
"progress":"100%"
},
"expectedVersion":"2",
"clientToken":"client-001"
}
{
"status":"FAILED",
"statusDetails": {
"errorCode":"101",
"errorMsg":"Unable to install update"
},
"expectedVersion":"2",
"clientToken":"client-001"
}
Note
El atributo statusDetails puede contener cualquier número de pares nombre-valor.
Cuando el servicio AWS IoT Jobs recibe esta actualización, publica un mensaje sobre el $aws/things/
MyThing/jobs/notify tema para indicar que la ejecución del trabajo se ha completado:
{
"timestamp":1476290692776,
"jobs":{}
}
Trabajos adicionales
Si hay otras ejecuciones de trabajo pendientes para el dispositivo, se incluyen en el mensaje publicado en
$aws/things/MyThing/jobs/notify.
Por ejemplo:
{
"timestamp":1476290692776,
"jobs":{
"QUEUED":[{
"jobId":"0002",
"queuedAt":1476290646230,
"lastUpdatedAt":1476290646230
}],
"IN_PROGRESS":[{
"jobId":"0003",
"queuedAt":1476290646230,
"lastUpdatedAt":1476290646230
}]
}
}
Notificaciones de trabajos
El servicio Jobs de AWS IoT publica mensajes de MQTT para temas reservados cuando los trabajos están
pendientes o cuando cambia la primera ejecución del trabajo en la lista. Los dispositivos pueden realizar
un seguimiento de los trabajos pendientes suscribiéndose a estos temas.
794
AWS IoT Core Guía para desarrolladores
Notificaciones de trabajos
ListNotification
Una ListNotification se publica siempre que se cumple uno de los siguientes criterios.
• Se pone en cola una nueva ejecución de trabajo o se cambia a un estado no terminal (IN_PROGRESS o
QUEUED).
• Una ejecución de trabajo antigua cambia a un estado terminal (FAILED, SUCCEEDED, CANCELED,
TIMED_OUT, REJECTED o REMOVED).
NextNotification
• A NextNotification contiene información resumida sobre la ejecución del trabajo que sigue en la
cola.
Se publica una NextNotification siempre que cambia la ejecución del primer trabajo de la lista.
• Se agrega una nueva ejecución de trabajo a la lista comoQUEUED, y es la primera de la lista.
• El estado de una ejecución de trabajo existente que no fue la primera de la lista cambia de QUEUED
a IN_PROGRESS y pasa a ser la primera de la lista. (Esto sucede cuando no hay otras ejecuciones
de trabajos de IN_PROGRESS en la lista o cuando la ejecución del trabajo cuyo estado cambia
de QUEUED a IN_PROGRESS estaba en la cola antes que cualquier otra ejecución de trabajo de
IN_PROGRESS de la lista.)
• El estado de la ejecución del trabajo existente que se encuentra en el primer lugar de la lista cambia a
un estado terminal y se quita de la lista.
Para obtener más información acerca de cómo publicar en temas de MQTT y suscribirse a ellos, consulte
the section called “Protocolos de comunicación de dispositivos” (p. 87).
Note
Las notificaciones no están disponibles cuando se usa HTTP Signature Version 4 o HTTP TLS
para comunicarse con trabajos.
795
AWS IoT Core Guía para desarrolladores
Notificaciones de trabajos
Job pendiente
El servicio Jobs de AWS IoT publica un mensaje en un tema de MQTT cuando se añade un trabajo a la
lista de ejecuciones de trabajos pendientes para un objeto o se quita un trabajo de dicha lista, o cuando
cambia la primera ejecución del trabajo en la lista:
• $aws/things/thingName/jobs/notify
• $aws/things/thingName/jobs/notify-next
$aws/things/thingName/jobs/notify:
{
"timestamp" : 10011,
"jobs" : {
"IN_PROGRESS" : [ {
"jobId" : "other-job",
"queuedAt" : 10003,
"lastUpdatedAt" : 10009,
"executionNumber" : 1,
"versionNumber" : 1
} ],
"QUEUED" : [ {
"jobId" : "this-job",
"queuedAt" : 10011,
"lastUpdatedAt" : 10011,
"executionNumber" : 1,
"versionNumber" : 0
} ]
}
}
Si la ejecución del trabajo llamada this-job se originó a partir de un trabajo con la configuración de
programación opcional seleccionada y la implementación del documento de trabajo programada para
realizarse durante un período de mantenimiento, solo aparecerá durante un período de mantenimiento
recurrente. Fuera de un período de mantenimiento, el trabajo llamado se this-job excluirá de la lista de
ejecuciones de trabajos pendientes, tal como se muestra en el siguiente ejemplo.
{
"timestamp" : 10011,
"jobs" : {
"IN_PROGRESS" : [ {
"jobId" : "other-job",
"queuedAt" : 10003,
"lastUpdatedAt" : 10009,
"executionNumber" : 1,
"versionNumber" : 1
} ],
"QUEUED" : []
}
}
$aws/things/thingName/jobs/notify-next:
{
"timestamp" : 10011,
"execution" : {
"jobId" : "other-job",
"status" : "IN_PROGRESS",
796
AWS IoT Core Guía para desarrolladores
Notificaciones de trabajos
"queuedAt" : 10009,
"lastUpdatedAt" : 10009,
"versionNumber" : 1,
"executionNumber" : 1,
"jobDocument" : {"c":"d"}
}
}
Si la ejecución del trabajo llamada other-job se originó a partir de un trabajo con la configuración de
programación opcional seleccionada y la implementación del documento de trabajo programada para
realizarse durante un período de mantenimiento, solo aparecerá durante un período de mantenimiento
recurrente. Fuera de un período de mantenimiento, el trabajo llamado other-job no aparecerá como la
siguiente ejecución del trabajo, como se muestra en el siguiente ejemplo.
{
"timestamp" : 10011,
"execution" : {
"jobId" : "this-job",
"queuedAt" : 10011,
"lastUpdatedAt" : 10011,
"executionNumber" : 1,
"versionNumber" : 0,
"jobDocument" : {"a":"b"}
}
} // "this-job" is pending next to "other-job"
Los valores del estado de ejecución de trabajo posibles son QUEUED, IN_PROGRESS, FAILED,
SUCCEEDED, CANCELED, TIMED_OUT, REJECTED y REMOVED.
La siguiente serie de ejemplos muestra las notificaciones publicadas para cada tema a medida que se
crean las ejecuciones de trabajos y se cambian de un estado a otro.
En primer lugar se crea un trabajo llamado job1. La notificación se publica en el tema jobs/notify:
{
"timestamp": 1517016948,
"jobs": {
"QUEUED": [
{
"jobId": "job1",
"queuedAt": 1517016947,
"lastUpdatedAt": 1517016947,
"executionNumber": 1,
"versionNumber": 1
}
]
}
}
{
"timestamp": 1517016948,
"execution": {
"jobId": "job1",
"status": "QUEUED",
"queuedAt": 1517016947,
"lastUpdatedAt": 1517016947,
797
AWS IoT Core Guía para desarrolladores
Notificaciones de trabajos
"versionNumber": 1,
"executionNumber": 1,
"jobDocument": {
"operation": "test"
}
}
}
Cuando se crea otro trabajo (job2), esta notificación se publica en el tema jobs/notify:
{
"timestamp": 1517017192,
"jobs": {
"QUEUED": [
{
"jobId": "job1",
"queuedAt": 1517016947,
"lastUpdatedAt": 1517016947,
"executionNumber": 1,
"versionNumber": 1
},
{
"jobId": "job2",
"queuedAt": 1517017191,
"lastUpdatedAt": 1517017191,
"executionNumber": 1,
"versionNumber": 1
}
]
}
}
Cuando se añade un tercer trabajo (job3), esta notificación se publica en el tema jobs/notify:
{
"timestamp": 1517017906,
"jobs": {
"IN_PROGRESS": [
{
"jobId": "job1",
"queuedAt": 1517016947,
"lastUpdatedAt": 1517017472,
"startedAt": 1517017472,
"executionNumber": 1,
"versionNumber": 2
}
],
"QUEUED": [
{
"jobId": "job2",
"queuedAt": 1517017191,
"lastUpdatedAt": 1517017191,
"executionNumber": 1,
"versionNumber": 1
},
{
"jobId": "job3",
"queuedAt": 1517017905,
"lastUpdatedAt": 1517017905,
798
AWS IoT Core Guía para desarrolladores
Notificaciones de trabajos
"executionNumber": 1,
"versionNumber": 1
}
]
}
}
No se publica una notificación en el tema jobs/notify-next porque el siguiente trabajo en la cola sigue
siendo job1.
Cuando job1 finaliza, su estado cambia a SUCCEEDED y se publica esta notificación en el tema jobs/
notify:
{
"timestamp": 1517186269,
"jobs": {
"QUEUED": [
{
"jobId": "job2",
"queuedAt": 1517017191,
"lastUpdatedAt": 1517017191,
"executionNumber": 1,
"versionNumber": 1
},
{
"jobId": "job3",
"queuedAt": 1517017905,
"lastUpdatedAt": 1517017905,
"executionNumber": 1,
"versionNumber": 1
}
]
}
}
En este punto, job1 se ha eliminado de la cola y el siguiente trabajo que ejecutar es job2. La notificación
se publica en el tema jobs/notify-next:
{
"timestamp": 1517186269,
"execution": {
"jobId": "job2",
"status": "QUEUED",
"queuedAt": 1517017191,
"lastUpdatedAt": 1517017191,
"versionNumber": 1,
"executionNumber": 1,
"jobDocument": {
"operation": "test"
}
}
}
Si job3 tiene que empezar a ejecutarse antes que job2 (lo cual no se recomienda), el estado de job3
puede cambiarse a IN_PROGRESS. Si esto sucede, job2 deja de ser el siguiente en la cola y se publica
esta notificación en el tema jobs/notify-next:
{
"timestamp": 1517186779,
"execution": {
"jobId": "job3",
799
AWS IoT Core Guía para desarrolladores
AWS IoTtrabajos y operaciones de API
"status": "IN_PROGRESS",
"queuedAt": 1517017905,
"startedAt": 1517186779,
"lastUpdatedAt": 1517186779,
"versionNumber": 2,
"executionNumber": 1,
"jobDocument": {
"operation": "test"
}
}
}
Si el dispositivo rechaza job2 y actualiza su estado a REJECTED, se publica esta notificación en el tema
jobs/notify:
{
"timestamp": 1517189392,
"jobs": {
"IN_PROGRESS": [
{
"jobId": "job3",
"queuedAt": 1517017905,
"lastUpdatedAt": 1517186779,
"startedAt": 1517186779,
"executionNumber": 1,
"versionNumber": 2
}
]
}
}
Si job3 (que aún está en curso) se elimina de forma forzada, esta notificación se publica en el tema
jobs/notify:
{
"timestamp": 1517189551,
"jobs": {}
}
{
"timestamp": 1517189551
}
• Tareas administrativas, como la gestión y el control de los trabajos. Este es elplano de control.
• Dispositivos que realizan esos trabajos. Este es elplano de datos, que le permite enviar y recibir datos.
La administración y el control de trabajos utilizan una API de protocolo HTTPS. Los dispositivos pueden
usar una API de protocolo HTTPS o MQTT. La API del plano de control está diseñada para un bajo
800
AWS IoT Core Guía para desarrolladores
AWS IoTtrabajos y operaciones de API
volumen de llamadas, típico de la creación y el seguimiento de trabajos. Normalmente, abre una conexión
para una solicitud única y, a continuación, cierra la conexión después de que se reciba la respuesta. Las
API HTTPS y MQTT del plano de datos permiten sondeos prolongados. Estas operaciones de API están
diseñadas para grandes cantidades de tráfico que pueden ampliarse a millones de dispositivos.
CadaAWS IoTLa API HTTPS de Jobs tiene un comando correspondiente que le permite llamar a la API
desdeAWS Command Line Interface(AWS CLI). Los comandos están en minúsculas, con guiones entre
las palabras que conforman el nombre de la API. Por ejemplo, puede invocar la API CreateJob en la CLI
escribiendo lo siguiente:
Si se produce un error durante una operación, recibirá una respuesta de error que contiene información
sobre el error.
ErrorResponse
Contiene información acerca de un error que se produjo durante una operación del servicio Jobs de AWS
IoT.
{
"code": "ErrorCode",
"message": "string",
"clientToken": "string",
"timestamp": timestamp,
"executionState": JobExecutionState
}
code
El contenido de la solicitud no era válido. Por ejemplo, se devuelve este código cuando una
solicitud UpdateJobExecution contiene detalles de estado no válido. El mensaje contiene
detalles acerca del error.
InvalidStateTransition
Una actualización intentó cambiar la ejecución del trabajo a un estado que no es válido debido al
estado actual de la ejecución del trabajo. Por ejemplo, un intento de cambiar una solicitud en el
estado SUCCTED por el estado IN_PROGRESS. En este caso, el cuerpo del mensaje de error
también contiene el campo executionState.
ResourceNotFound
801
AWS IoT Core Guía para desarrolladores
API de gestión y control de trabajos y tipos de datos
VersionMismatch
La solicitud se ha limitado.
TerminalStateReached
Se produce cuando un comando para describir un trabajo se realiza en un trabajo que está en un
estado terminal.
message
Una cadena arbitraria utilizada para correlacionar una solicitud con su respuesta.
timestamp
Un objeto JobExecutionState. Este campo se incluye solo cuando el campo code tiene el valor
InvalidStateTransition o VersionMismatch. Esto hace que no sea necesario en esos casos
realizar una solicitud DescribeJobExecution independiente para obtener los datos de estado de
ejecución de trabajo actuales.
Para determinar elURL de punto finalparámetro para sus comandos de CLI, ejecute este comando.
{
"endpointAddress": "account-specific-prefix.jobs.iot.aws-region.amazonaws.com"
}
802
AWS IoT Core Guía para desarrolladores
API de gestión y control de trabajos y tipos de datos
Note
Trabajo
El objeto Job contiene detalles acerca de un trabajo. En el siguiente ejemplo se muestra la sintaxis:
{
"jobArn": "string",
"jobId": "string",
"status": "IN_PROGRESS|CANCELED|SUCCEEDED",
"forceCanceled": boolean,
"targetSelection": "CONTINUOUS|SNAPSHOT",
"comment": "string",
"targets": ["string"],
"description": "string",
"createdAt": timestamp,
"lastUpdatedAt": timestamp,
"completedAt": timestamp,
"jobProcessDetails": {
"processingTargets": ["string"],
"numberOfCanceledThings": long,
"numberOfSucceededThings": long,
"numberOfFailedThings": long,
"numberOfRejectedThings": long,
"numberOfQueuedThings": long,
"numberOfInProgressThings": long,
"numberOfRemovedThings": long,
"numberOfTimedOutThings": long
},
"presignedUrlConfig": {
"expiresInSec": number,
"roleArn": "string"
},
"jobExecutionsRolloutConfig": {
"exponentialRate": {
"baseRatePerMinute": integer,
"incrementFactor": integer,
"rateIncreaseCriteria": {
"numberOfNotifiedThings": integer, // Set one or the other
"numberOfSucceededThings": integer // of these two values.
},
"maximumPerMinute": integer
}
},
"abortConfig": {
"criteriaList": [
{
"action": "string",
"failureType": "string",
"minNumberOfExecutedThings": integer,
"thresholdPercentage": integer
}
]
},
"SchedulingConfig": {
"startTime": string
"endTime": string
803
AWS IoT Core Guía para desarrolladores
API de gestión y control de trabajos y tipos de datos
"timeZone": string
"endTimeBehavior": string
},
"timeoutConfig": {
"inProgressTimeoutInMinutes": long
}
}
JobSummary
{
"jobArn": "string",
"jobId": "string",
"status": "IN_PROGRESS|CANCELED|SUCCEEDED|SCHEDULED",
"targetSelection": "CONTINUOUS|SNAPSHOT",
"thingGroupId": "string",
"createdAt": timestamp,
"lastUpdatedAt": timestamp,
"completedAt": timestamp
}
JobExecution
{
"approximateSecondsBeforeTimedOut": 50,
"executionNumber": 1234567890,
"forceCanceled": true|false,
"jobId": "string",
"lastUpdatedAt": timestamp,
"queuedAt": timestamp,
"startedAt": timestamp,
"status": "QUEUED|IN_PROGRESS|FAILED|SUCCEEDED|CANCELED|TIMED_OUT|REJECTED|REMOVED",
"forceCanceled": boolean,
"statusDetails": {
"detailsMap": {
"string": "string" ...
},
"status": "string"
},
"thingArn": "string",
"versionNumber": 123
}
804
AWS IoT Core Guía para desarrolladores
API de gestión y control de trabajos y tipos de datos
JobExecutionSummary
{
"executionNumber": 1234567890,
"queuedAt": timestamp,
"lastUpdatedAt": timestamp,
"startedAt": timestamp,
"status": "QUEUED|IN_PROGRESS|FAILED|SUCCEEDED|CANCELED|TIMED_OUT|REJECTED|REMOVED"
}
JobExecutionSummaryForJob
{
"executionSummaries": [
{
"thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyThing",
"jobExecutionSummary": {
"status": "IN_PROGRESS",
"lastUpdatedAt": 1549395301.389,
"queuedAt": 1541526002.609,
"executionNumber": 1
}
},
...
]
}
JobExecutionSummaryForThing
{
"executionSummaries": [
{
"jobExecutionSummary": {
"status": "IN_PROGRESS",
"lastUpdatedAt": 1549395301.389,
"queuedAt": 1541526002.609,
"executionNumber": 1
},
"jobId": "MyThingJob"
},
...
]
}
805
AWS IoT Core Guía para desarrolladores
API de gestión y control de trabajos y tipos de datos
AssociateTargetsWithJob
HTTPS request
POST /jobs/jobId/targets
{
"targets": [ "string" ],
"comment": "string"
}
cli-input-json formato:
{
"targets": [
"string"
],
"jobId": "string",
"comment": "string"
}
CancelJob
Cancela un trabajo.
HTTPS request
PUT /jobs/jobId/cancel
{
"force": boolean,
"comment": "string",
"reasonCode": "string"
}
806
AWS IoT Core Guía para desarrolladores
API de gestión y control de trabajos y tipos de datos
cli-input-json formato:
{
"jobId": "string",
"force": boolean,
"comment": "string"
}
CancelJobExecution
Cancela la ejecución de un trabajo en un dispositivo.
HTTPS request
PUT /things/thingName/jobs/jobId/cancel
{
"force": boolean,
"expectedVersion": "string",
"statusDetails": {
"string": "string"
...
}
}
cli-input-json formato:
{
"jobId": "string",
"thingName": "string",
"force": boolean,
"expectedVersion": long,
"statusDetails": {
"string": "string"
807
AWS IoT Core Guía para desarrolladores
API de gestión y control de trabajos y tipos de datos
}
}
CreateJob
Crea un trabajo. Puede proporcionar el documento de trabajo como un enlace a un archivo en un bucket
de Amazon S3 (documentSourceparámetro), o en el cuerpo de la solicitud (documentparámetro).
Un trabajo puede tener una opciónTimeoutConfig, que establece el valor del temporizador en curso. El
temporizador en curso no se puede actualizar y se aplica a todas las ejecuciones del trabajo.
• El argumento targets debe ser una lista de ARN de grupo de objetos u objetos válidos. Todas las
cosas y grupos de cosas deben estar en tuCuenta de AWS.
• EldocumentSourceel argumento debe ser una URL válida de Amazon S3 para un
documento de trabajo. Las URL de Amazon S3 tienen el siguiente formato:https://
s3.amazonaws.com/bucketName/objectName.
• El documento almacenado en la URL especificada por el argumento documentSource debe ser un
documento JSON con codificación UTF-8.
• El tamaño de un documento de trabajo está limitado a 32 KB debido al límite de tamaño de un mensaje
MQTT (128 KB) y al cifrado.
• EljobIddebe ser único en tuCuenta de AWS.
HTTPS request
PUT /jobs/jobId
{
"targets": [ "string" ],
"document": "string",
"documentSource": "string",
"description": "string",
"jobTemplateArn": "string",
"presignedUrlConfigData": {
"roleArn": "string",
"expiresInSec": "integer"
},
"targetSelection": "CONTINUOUS|SNAPSHOT",
"jobExecutionsRolloutConfig": {
"exponentialRate": {
"baseRatePerMinute": integer,
"incrementFactor": integer,
"rateIncreaseCriteria": {
"numberOfNotifiedThings": integer, // Set one or the other
"numberOfSucceededThings": integer // of these two values.
},
"maximumPerMinute": integer
}
},
"abortConfig": {
808
AWS IoT Core Guía para desarrolladores
API de gestión y control de trabajos y tipos de datos
"criteriaList": [
{
"action": "string",
"failureType": "string",
"minNumberOfExecutedThings": integer,
"thresholdPercentage": integer
}
]
},
"SchedulingConfig": {
"startTime": string
"endTime": string
"timeZone": string
"endTimeBehavior": string
}
"timeoutConfig": {
"inProgressTimeoutInMinutes": long
}
}
cli-input-json formato:
{
"jobId": "string",
"targets": [ "string" ],
"documentSource": "string",
"document": "string",
"description": "string",
"jobTemplateArn": "string",
"presignedUrlConfig": {
"roleArn": "string",
"expiresInSec": long
},
"targetSelection": "string",
"jobExecutionsRolloutConfig": {
"exponentialRate": {
"baseRatePerMinute": integer,
"incrementFactor": integer,
"rateIncreaseCriteria": {
"numberOfNotifiedThings": integer, // Set one or the other
"numberOfSucceededThings": integer // of these two values.
809
AWS IoT Core Guía para desarrolladores
API de gestión y control de trabajos y tipos de datos
},
"maximumPerMinute": integer
}
},
"abortConfig": {
"criteriaList": [
{
"action": "string",
"failureType": "string",
"minNumberOfExecutedThings": integer,
"thresholdPercentage": integer
}
]
},
"timeoutConfig": {
"inProgressTimeoutInMinutes": long
},
"documentParameters": {
"string": "string"
}
}
DeleteJob
La eliminación de un trabajo puede tardar tiempo, en función del número de ejecuciones de trabajo
creadas para el trabajo y otros factores diversos. Aunque el trabajo se está eliminando, el estado del
trabajo se muestra como "DELETION_IN_PROGRESS". Si se intenta eliminar o cancelar un trabajo cuyo
estado ya es DELETION_IN_PROGRESS, se producirá un error.
HTTPS request
DELETE /jobs/jobId?force=force
cli-input-json formato:
{
"jobId": "string",
"force": boolean
}
DeleteJobExecution
810
AWS IoT Core Guía para desarrolladores
API de gestión y control de trabajos y tipos de datos
HTTPS request
DELETE /things/thingName/jobs/jobId/executionNumber/executionNumber?force=force
cli-input-json formato:
{
"jobId": "string",
"thingName": "string",
"executionNumber": long,
"force": boolean
}
DescribeJob
HTTPS request
GET /jobs/jobId
cli-input-json formato:
{
"jobId": "string"
}
DescribeJobExecution
Obtiene los detalles de una ejecución de trabajo. El estado de la ejecución del trabajo debe ser
SUCCEEDED o FAILED.
811
AWS IoT Core Guía para desarrolladores
API de gestión y control de trabajos y tipos de datos
HTTPS request
GET /things/thingName/jobs/jobId?executionNumber=executionNumber
cli-input-json formato:
{
"jobId": "string",
"thingName": "string",
"executionNumber": long
}
GetJobDocument
Las URL de los marcadores de posición no se sustituyen por URL de Amazon S3 prefirmadas en
el documento devuelto. Las URL prefirmadas se generan solo cuando el servicio Jobs de AWS
IoT recibe una solicitud a través de MQTT.
HTTPS request
GET /jobs/jobId/job-document
cli-input-json formato:
{
"jobId": "string"
}
812
AWS IoT Core Guía para desarrolladores
API de gestión y control de trabajos y tipos de datos
ListJobExecutionsForJob
Obtiene una lista de ejecuciones de trabajo para un trabajo.
HTTPS request
GET /jobs/jobId/things?status=status&maxResults=maxResults&nextToken=nextToken
cli-input-json formato:
{
"jobId": "string",
"status": "string",
"maxResults": "integer",
"nextToken": "string"
}
ListJobExecutionsForThing
Obtiene una lista de ejecuciones de trabajo para un objeto.
HTTPS request
GET /things/thingName/jobs?status=status&maxResults=maxResults&nextToken=nextToken
cli-input-json formato:
{
"thingName": "string",
"status": "string",
"maxResults": "integer",
"nextToken": "string"
}
813
AWS IoT Core Guía para desarrolladores
API de gestión y control de trabajos y tipos de datos
ListJobs
Obtiene una lista de trabajos en suCuenta de AWS.
HTTPS request
GET /jobs?
status=status&targetSelection=targetSelection&thingGroupName=thingGroupName&thingGroupId=thingGroup
cli-input-json formato:
{
"status": "string",
"targetSelection": "string",
"maxResults": "integer",
"nextToken": "string",
"thingGroupName": "string",
"thingGroupId": "string"
}
UpdateJob
Actualiza los campos admitidos del trabajo especificado. Valores actualizados
paratimeoutConfigsurtirán efecto solo para los lanzamientos recientes en curso. Actualmente, los
lanzamientos en curso se siguen iniciando con la configuración de tiempo de espera anterior.
HTTPS request
PATCH /jobs/jobId
{
"description": "string",
"presignedUrlConfig": {
"expiresInSec": number,
"roleArn": "string"
},
"jobExecutionsRolloutConfig": {
"exponentialRate": {
"baseRatePerMinute": number,
"incrementFactor": number,
"rateIncreaseCriteria": {
"numberOfNotifiedThings": number,
"numberOfSucceededThings": number
814
AWS IoT Core Guía para desarrolladores
API de gestión y control de trabajos y tipos de datos
},
"maximumPerMinute": number
},
"abortConfig": {
"criteriaList": [
{
"action": "string",
"failureType": "string",
"minNumberOfExecutedThings": number,
"thresholdPercentage": number
}
]
},
"timeoutConfig": {
"inProgressTimeoutInMinutes": number
}
}
cli-input-json formato:
{
"description": "string",
"presignedUrlConfig": {
"expiresInSec": number,
"roleArn": "string"
},
"jobExecutionsRolloutConfig": {
"exponentialRate": {
"baseRatePerMinute": number,
"incrementFactor": number,
"rateIncreaseCriteria": {
"numberOfNotifiedThings": number,
"numberOfSucceededThings": number
}
},
"maximumPerMinute": number
},
"abortConfig": {
"criteriaList": [
{
"action": "string",
"failureType": "string",
"minNumberOfExecutedThings": number,
"thresholdPercentage": number
}
]
},
"timeoutConfig": {
"inProgressTimeoutInMinutes": number
}
815
AWS IoT Core Guía para desarrolladores
Operaciones y tipos de datos de las API
MQTT y HTTPS del dispositivo Jobs
JobExecution
El objeto JobExecution representa la ejecución de un trabajo en un dispositivo. En el siguiente ejemplo
se muestra la sintaxis:
Note
Al utilizar las operaciones de la API del plano de datos MQTT y HTTP, elJobExecutionel tipo
de datos contiene unJobDocumentcampo. Sus dispositivos pueden usar esta información para
recuperar el documento de trabajo de la ejecución de un trabajo.
{
"jobId" : "string",
"thingName" : "string",
"jobDocument" : "string",
"status": "QUEUED|IN_PROGRESS|FAILED|SUCCEEDED|CANCELED|TIMED_OUT|REJECTED|REMOVED",
"statusDetails": {
"string": "string"
},
"queuedAt" : "timestamp",
"startedAt" : "timestamp",
"lastUpdatedAt" : "timestamp",
"versionNumber" : "number",
"executionNumber": long
}
JobExecutionState
ElJobExecutionStatecontiene información sobre el estado de la ejecución de un trabajo. En el siguiente
ejemplo se muestra la sintaxis:
{
"status": "QUEUED|IN_PROGRESS|FAILED|SUCCEEDED|CANCELED|TIMED_OUT|REJECTED|REMOVED",
"statusDetails": {
"string": "string"
...
}
"versionNumber": "number"
}
816
AWS IoT Core Guía para desarrolladores
Operaciones y tipos de datos de las API
MQTT y HTTPS del dispositivo Jobs
JobExecutionSummary
Contiene una subred de información acerca de una ejecución de trabajo. En el siguiente ejemplo se
muestra la sintaxis:
{
"jobId": "string",
"queuedAt": timestamp,
"startedAt": timestamp,
"lastUpdatedAt": timestamp,
"versionNumber": "number",
"executionNumber": long
}
Obtenga más información sobre las operaciones de las API de MQTT y HTTPS en las siguientes
secciones:
• Operaciones de la API MQTT del dispositivo Jobs (p. 817)
• API HTTP del dispositivo Jobs (p. 822)
El cliente del dispositivo debe estar suscrito a los temas de los mensajes de respuesta de estos comandos.
Si usa elAWS IoTDevice Client: tu dispositivo se suscribirá automáticamente a los temas de respuesta.
Esto significa que el agente de mensajes publicará los temas de los mensajes de respuesta para el cliente
que publicó el mensaje de comando, independientemente de que su cliente se haya suscrito a los temas
del mensaje de respuesta o no. Estos mensajes de respuesta no pasan por el intermediario de mensajes y
otros clientes o reglas no pueden suscribirse a ellos.
Mensajes queAWS IoTenvía en respuesta a los mensajes de comando de la API MQTT Jobs que
se cargan a tu cuenta, independientemente de que te hayas suscrito a ellos de forma explícita o
no.
clientToken
Un token de cliente opcional que se utiliza para correlacionar las solicitudes y las respuestas.
Introduzca aquí un valor arbitrario y se reflejará en la respuesta.
timestamp
817
AWS IoT Core Guía para desarrolladores
Operaciones y tipos de datos de las API
MQTT y HTTPS del dispositivo Jobs
GetPendingJobExecutions
Obtiene la lista de todos los trabajos que no están en estado terminal para una cosa específica.
Carga de solicitud:
{ "clientToken": "string" }
Carga de respuesta:
{
"inProgressJobs" : [ JobExecutionSummary ... ],
"queuedJobs" : [ JobExecutionSummary ... ],
"timestamp" : 1489096425069,
"clientToken" : "client-001"
}
StartNextPendingJobExecution
Obtiene e inicia la siguiente ejecución de un trabajo pendiente para una cosa
(estado)IN_PROGRESSoQUEUED).
Carga de solicitud:
{
"statusDetails": {
"string": "job-execution-state"
...
},
"stepTimeoutInMinutes": long,
"clientToken": "string"
}
818
AWS IoT Core Guía para desarrolladores
Operaciones y tipos de datos de las API
MQTT y HTTPS del dispositivo Jobs
statusDetails
Especifica la cantidad de tiempo que tiene este dispositivo para finalizar la ejecución de este trabajo.
Si el estado de ejecución del trabajo no está configurado en un estado terminal antes de que caduque
este temporizador o antes de que se restablezca el temporizador, (llamandoUpdateJobExecution,
estableciendo el estado enIN_PROGRESSy especificando un nuevo valor de tiempo de espera en el
campostepTimeoutInMinutes) el estado de ejecución del trabajo se establece enTIMED_OUT.
Configurar este tiempo de espera no tiene ningún efecto en el tiempo de espera de la ejecución de
ese trabajo que se pueda haber especificado cuando se creó el trabajo (CreateJob con el campo
timeoutConfig).
Carga de respuesta:
{
"execution" : JobExecutionData,
"timestamp" : timestamp,
"clientToken" : "string"
}
{
"execution" : {
"jobId" : "022",
"thingName" : "MyThing",
"jobDocument" : "< contents of job document >",
"status" : "IN_PROGRESS",
"queuedAt" : 1489096123309,
"lastUpdatedAt" : 1489096123309,
"versionNumber" : 1,
"executionNumber" : 1234567890
},
"clientToken" : "client-1",
"timestamp" : 1489088524284,
}
DescribeJobExecution
Obtiene información detallada acerca de una ejecución de trabajo.
Puede configurar eljobIda$nextpara devolver la siguiente ejecución de trabajo pendiente de una cosa
(con un estado deIN_PROGRESSoQUEUED).
Carga de solicitud:
{
"jobId" : "022",
"thingName" : "MyThing",
"executionNumber": long,
819
AWS IoT Core Guía para desarrolladores
Operaciones y tipos de datos de las API
MQTT y HTTPS del dispositivo Jobs
"includeJobDocument": boolean,
"clientToken": "string"
}
thingName
O usa$nextpara devolver la siguiente ejecución de trabajo pendiente de una cosa (con un estado
deIN_PROGRESSoQUEUED). En este caso, cualquier ejecución de trabajo con estadoIN_PROGRESSse
devuelven primero. Las ejecuciones de trabajo se devuelven en el orden en el que se crearon.
executionNumber
Carga de respuesta:
{
"execution" : JobExecutionData,
"timestamp": "timestamp",
"clientToken": "string"
}
UpdateJobExecution
Actualiza el estado de una ejecución de trabajo. Si lo prefiere, puede crear un temporizador de pasos
estableciendo un valor para la propiedad stepTimeoutInMinutes. Si no actualiza el valor de esta
propiedad ejecutando UpdateJobExecution otra vez, la ejecución del trabajo agotará el tiempo de
espera cuando venza el temporizador de pasos.
Carga de solicitud:
{
"status": "job-execution-state",
"statusDetails": {
"string": "string"
...
},
"expectedVersion": "number",
"executionNumber": long,
"includeJobExecutionState": boolean,
"includeJobDocument": boolean,
820
AWS IoT Core Guía para desarrolladores
Operaciones y tipos de datos de las API
MQTT y HTTPS del dispositivo Jobs
"stepTimeoutInMinutes": long,
"clientToken": "string"
}
status
La versión actual esperada de la ejecución de trabajos. Cada vez que actualiza la ejecución
de trabajos, aumenta su versión. Si la versión de la ejecución del trabajo almacenada enAWS
IoTEl servicio Jobs no coincide, la actualización se rechaza con unVersionMismatcherror.
UnErrorResponse (p. 801)que contiene los datos del estado de ejecución del trabajo actual también
se devuelve. (Esto hace que no sea necesario realizar una solicitud DescribeJobExecution aparte
para obtener los datos de estado de ejecución del trabajo).
executionNumber
Especifica la cantidad de tiempo que tiene este dispositivo para finalizar la ejecución de este trabajo.
Si el estado de ejecución del trabajo no está establecido en un estado terminal antes de que caduque
este temporizador o antes de que se restablezca el temporizador, el estado de ejecución del trabajo
se establece enTIMED_OUT. Establecer o restablecer este tiempo de espera no afecta al tiempo de
espera de ejecución del trabajo que podría haberse especificado cuando se creó el trabajo.
Carga de respuesta:
{
"executionState": JobExecutionState,
"jobDocument": "string",
"timestamp": timestamp,
"clientToken": "string"
}
executionState
821
AWS IoT Core Guía para desarrolladores
Operaciones y tipos de datos de las API
MQTT y HTTPS del dispositivo Jobs
jobDocument
JobExecutionsChanged
Se envía cuando se añade una ejecución de trabajo a la lista de ejecuciones de trabajo pendientes para un
objeto, o cuando se quita de dicha lista.
Utilice el tema :
$aws/things/thingName/jobs/notify
Carga de mensaje:
{
"jobs" : {
"JobExecutionState": [ JobExecutionSummary ... ]
},
"timestamp": timestamp
}
NextJobExecutionChanged
Se envía cada vez que hay un cambio en la ejecución de un trabajo que es la siguiente
en la lista de ejecuciones de trabajos pendientes de una cosa, tal como se define
paraDescribeJobExecutionconjobId $next. Este mensaje no se envía cuando
cambian los detalles de ejecución del siguiente trabajo, solo cuando el siguiente trabajo que
devolveríaDescribeJobExecutionconjobId $nextha cambiado. Considere las ejecuciones de
tareas J1 y J2 con un estado deQUEUED. J1 es el siguiente elemento de la lista de ejecuciones de trabajo
pendientes. Si el estado de J2 se cambia aIN_PROGRESSmientras el estado de J1 permanezca sin
cambios, se envía esta notificación y contiene detalles de J2.
Utilice el tema :
$aws/things/thingName/jobs/notify-next
Carga de mensaje:
{
"execution" : JobExecution,
"timestamp": timestamp,
}
822
AWS IoT Core Guía para desarrolladores
Operaciones y tipos de datos de las API
MQTT y HTTPS del dispositivo Jobs
Los siguientes comandos están disponibles para los dispositivos que ejecutan las tareas. Para obtener
información sobre el uso de las operaciones de la API con el protocolo MQTT, consulteOperaciones de la
API MQTT del dispositivo Jobs (p. 817).
GetPendingJobExecutions
Obtiene la lista de todos los trabajos que no están en estado terminal para una cosa específica.
HTTPS request
GET /things/thingName/jobs
Response: (Respuesta:)
{
"inProgressJobs" : [ JobExecutionSummary ... ],
"queuedJobs" : [ JobExecutionSummary ... ]
}
cli-input-json formato:
{
"thingName": "string"
}
StartNextPendingJobExecution
Obtiene e inicia la siguiente ejecución de trabajo pendiente para una cosa (con un estado
deIN_PROGRESSoQUEUED).
HTTPS request
823
AWS IoT Core Guía para desarrolladores
Operaciones y tipos de datos de las API
MQTT y HTTPS del dispositivo Jobs
PUT /things/thingName/jobs/$next
{
"statusDetails": {
"string": "string"
...
},
"stepTimeoutInMinutes": long
}
Sinopsis:
cli-input-json formato:
{
"thingName": "string",
"statusDetails": {
"string": "string"
},
"stepTimeoutInMinutes": long
}
DescribeJobExecution
Puede configurar eljobIda$nextpara devolver la siguiente ejecución de un trabajo pendiente para una
cosa. El estado de la ejecución del trabajo debe ser QUEUED o IN_PROGRESS.
HTTPS request
Solicitud:
GET /things/thingName/jobs/jobId?
executionNumber=executionNumber&includeJobDocument=includeJobDocument
Response: (Respuesta:)
{
"execution" : JobExecution,
}
Sinopsis:
824
AWS IoT Core Guía para desarrolladores
Operaciones y tipos de datos de las API
MQTT y HTTPS del dispositivo Jobs
cli-input-json formato:
{
"jobId": "string",
"thingName": "string",
"includeJobDocument": boolean,
"executionNumber": long
}
UpdateJobExecution
Actualiza el estado de una ejecución de trabajo. Si lo desea, puede crear un temporizador de pasos
configurando un valor parastepTimeoutInMinutespropiedad. Si no actualiza el valor de esta propiedad
ejecutando UpdateJobExecution otra vez, la ejecución del trabajo agotará el tiempo de espera cuando
venza el temporizador de pasos.
HTTPS request
Solicitud:
POST /things/thingName/jobs/jobId
{
"status": "job-execution-state",
"statusDetails": {
"string": "string"
...
},
"expectedVersion": "number",
"includeJobExecutionState": boolean,
"includeJobDocument": boolean,
"stepTimeoutInMinutes": long,
"executionNumber": long
}
Sinopsis:
825
AWS IoT Core Guía para desarrolladores
Proteger usuarios y dispositivos para trabajos
[--generate-cli-skeleton]
cli-input-json formato:
{
"jobId": "string",
"thingName": "string",
"status": "string",
"statusDetails": {
"string": "string"
},
"stepTimeoutInMinutes": number,
"expectedVersion": long,
"includeJobExecutionState": boolean,
"includeJobDocument": boolean,
"executionNumber": long
}
Para autorizar las operaciones AWS IoT de Jobs que se pueden realizar tanto en el plano de control
como en el plano de datos, debe utilizar las políticas de IAM. Las identidades deben haberse autenticado
826
AWS IoT Core Guía para desarrolladores
Autorizar a los usuarios y los servicios en la nube de Jobs
con AWS IoT para realizar estas operaciones, que debe ser Identidades de Amazon Cognito (p. 336)
oUsuarios, grupos y roles de IAM (p. 336). Para obtener más información acerca de la autenticación,
consulte Autenticación (p. 310).
Los dispositivos ahora deben estar autorizados en el plano de datos mediante AWS IoT Core políticas
para conectarse de forma segura a la puerta de enlace del dispositivo. La pasarela de dispositivos permite
que los dispositivos se comuniquen de forma segura con los trabajosAWS IoT, reciban las ejecuciones y
actualicen el estado de ejecución de los trabajos. La comunicación del dispositivo se protege mediante
el uso de protocolos seguros MQTT (p. 90) o HTTPS (p. 109) de comunicación. Estos protocolos utilizan
Certificados de cliente X.509 (p. 314) los proporcionados por AWS IoT para autenticar las conexiones del
dispositivo.
A continuación se muestra cómo autoriza a sus usuarios, servicios en la nube y dispositivos a usar AWS
IoT Jobs. Para obtener información sobre las operaciones de la API del plano de control y del plano de
datos, consulteAWS IoTtrabajos y operaciones de API (p. 800).
Temas
• Autorizar a los usuarios y los servicios en la nube a usar Jobs AWS IoT (p. 827)
• Autorizar sus dispositivos a utilizar AWS IoT Jobs de forma segura en el plano de datos (p. 835)
AWS IoT Corelas políticas no se deben utilizar en el plano de control. Solo las políticas de IAM se
utilizan para autorizar a los usuarios o a los servicios en la nube. Para obtener más información
sobre el uso del tipo de política requerido, consulteTipo de política requerida para AWS IoT
trabajos (p. 826).
Las políticas de IAM son documentos JSON que contienen declaraciones de políticas. Las declaraciones
de política utilizan los elementos Efecto, Acción y Recurso para especificar los recursos, las acciones
permitidas o denegadas y las condiciones en las que se permiten o deniegan las acciones. Para obtener
más información, consulte la referencia a los elementos de política JSON de IAM en la Guía del usuario de
IAM.
Warning
Acciones de política
La siguiente tabla muestra una lista de las acciones de la política de IAM y los permisos para usar las
acciones de la API. Para obtener información sobre los tipos de recursos, consulte Tipos de recursos
827
AWS IoT Core Guía para desarrolladores
Autorizar a los usuarios y los servicios en la nube de Jobs
definidos por AWS IoT. Para obtener más información sobre AWS IoT las acciones, consulte Acciones
definidas por AWS IoT.
iot:AssociateTargetsWithJob • tarea
AssociateTargetsWithJob Representa el permiso para asociar
• thing un grupo a un trabajo continuo. El
iot:AssociateTargetsWithJob permiso
• grupo
se comprueba cada vez que se realiza una
de
solicitud para asociar objetivos.
cosas
iot:CancelJobExecution • tarea
CancelJobExecution Representa el permiso para cancelar
• thing la ejecución de un trabajo. El iot:
CancelJobExecution permiso se
comprueba cada vez que se solicita cancelar
la ejecución de un trabajo.
CreateJobTemplate• tarea
iot:CreateJobTemplate Representa el permiso para crear una plantilla
• plantilla de trabajo. El iot: CreateJobTemplate
de permiso se comprueba cada vez que se
trabajo realiza una solicitud para crear una plantilla de
trabajo.
• package
DeleteJobTemplateplantilla
iot:DeleteJobTemplate Representa el permiso para eliminar
de trabajo una plantilla de trabajo. El iot:
CreateJobTemplate permiso se comprueba
cada vez que se solicita eliminar una plantilla
de trabajo.
DeleteJobTemplate• tarea
iot:DeleteJobExecution Representa el permiso para eliminar
• thing la ejecución de un trabajo. El iot:
DeleteJobExecution permiso se
comprueba cada vez que se solicita eliminar la
ejecución de un trabajo.
828
AWS IoT Core Guía para desarrolladores
Autorizar a los usuarios y los servicios en la nube de Jobs
iot:DescribeJobExecution • tarea
DescribeJobExecution Representa el permiso para describir
• thing la ejecución de un trabajo. El iot:
DescribeJobExecution permiso se
comprueba cada vez que se realiza una
solicitud para describir la ejecución de un
trabajo.
iot:DescribeJobTemplate plantilla
DescribeJobTemplate Representa el permiso para describir
de trabajo una plantilla de trabajo. El iot:
DescribeJobTemplate permiso se
comprueba cada vez que se realiza una
solicitud para describir una plantilla de trabajo.
iot:DescribeManagedJobTemplate plantilla
DescribeManagedJobTemplate Representa el permiso para describir una
de trabajo plantilla de trabajo gestionada. El iot:
DescribeManagedJobTemplate permiso
se comprueba cada vez que se realiza una
solicitud para describir una plantilla de trabajo
gestionada.
iot:ListJobExecutionsForJob tarea
ListJobExecutionsForJob Representa el permiso para enumerar
las ejecuciones de un trabajo. El
iot:ListJobExecutionsForJob permiso
se comprueba cada vez que se realiza una
solicitud para enumerar las ejecuciones de un
trabajo.
iot:ListJobExecutionsForThing thing
ListJobExecutionsForThing Representa el permiso para enumerar
las ejecuciones de un trabajo. El
iot:ListJobExecutionsForThing
permiso se comprueba cada vez que se
solicita una lista de las ejecuciones de tareas
de una cosa.
ListJobTemplates ninguno
iot:ListJobTemplates Representa el permiso para
enumerar las plantillas de trabajo. El
iot:ListJobTemplates permiso se
comprueba cada vez que se realiza una
solicitud para incluir las plantillas de trabajo.
829
AWS IoT Core Guía para desarrolladores
Autorizar a los usuarios y los servicios en la nube de Jobs
iot:ListManagedJobTemplates ninguno
ListManagedJobTemplates Representa el permiso para enumerar
las plantillas de tareas gestionadas. El
iot:ListManagedJobTemplates permiso
se comprueba cada vez que se solicita una
lista de las plantillas de tareas gestionadas.
El siguiente ejemplo muestra una política de IAM que permite al usuario realizar las siguientes acciones
para su objeto y grupo de cosas de IoT.
En el ejemplo, sustituya:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iot:CreateJobTemplate",
"iot:CreateJob",
],
"Effect": "Allow",
"Resource": "arn:aws:iot:region:account-id:thinggroup/thing-group-name"
},
{
"Action": [
"iot:DescribeJob",
"iot:CancelJob",
"iot:DeleteJob",
830
AWS IoT Core Guía para desarrolladores
Autorizar a los usuarios y los servicios en la nube de Jobs
],
"Effect": "Allow",
"Resource": "arn:aws:iot:region:account-id:job/*"
},
{
"Action": [
"iot:DescribeJobExecution",
"iot:CancelJobExecution",
"iot:DeleteJobExecution",
],
"Effect": "Allow",
"Resource": [
"arn:aws:iot:region:account-id:thing/thing-name"
"arn:aws:iot:region:account-id:job/*"
]
}
]
}
Puede impedir que los directores realicen llamadas a la API al punto final del plano de control desde
direcciones IP específicas. Para especificar las direcciones IP que se pueden permitir, en el elemento
Condición de su política de IAM, utilice la clave de condición aws:SourceIpglobal.
El uso de esta clave de condición también puede denegar el acceso a otras Servicio de AWS personas
para que no realicen estas llamadas a la API en tu nombre, por ejemploAWS CloudFormation. Para
permitir el acceso a estos servicios, utilice la clave de condición aws:ViaAWSServiceglobal con la
SourceIp clave aws:. Esto garantiza que la restricción de acceso a la dirección IP de origen se aplique solo
a las solicitudes realizadas directamente por un director. Para obtener más información, consulte AWS:
Denega el acceso en AWS función de la IP de origen.
El siguiente ejemplo muestra cómo permitir solo una dirección IP específica que pueda realizar llamadas
a la API al extremo del plano de control. La aws:ViaAWSService clave está configurada entrue, lo que
permite a otros servicios realizar llamadas a la API en tu nombre.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:CreateJobTemplate",
"iot:CreateJob"
],
"Resource": ["*"],
"Condition": {
"IpAddress": {
"aws:SourceIp": "123.45.167.89"
}
},
"Bool": {"aws:ViaAWSService": "true"}
}
],
}
831
AWS IoT Core Guía para desarrolladores
Autorizar a los usuarios y los servicios en la nube de Jobs
Las operaciones de API que deben autorizarse normalmente se realizan escribiendo los comandos de
la CLI. A continuación se muestra un ejemplo de un usuario que realiza una DescribeJobExecution
operación.
En el ejemplo, sustituya:
{
"Version": "2012-10-17",
"Statement":
{
"Action": ["iotjobsdata:DescribeJobExecution"],
"Effect": "Allow",
"Resource": "arn:aws:iot:region:account-id:thing/thing-name",
}
}
Puede impedir que los directores realicen llamadas a la API al punto final del plano de datos desde
direcciones IP específicas. Para especificar las direcciones IP que se pueden permitir, en el elemento
Condición de su política de IAM, utilice la clave de condición aws:SourceIpglobal.
El uso de esta clave de condición también puede denegar el acceso a otras Servicio de AWS personas
para que no realicen estas llamadas a la API en tu nombre, por ejemploAWS CloudFormation. Para
permitir el acceso a estos servicios, utilice la clave de condición aws:ViaAWSServiceglobal con la clave
de aws:SourceIp condición. Esto garantiza que la restricción de acceso a la dirección IP solo se aplique
a las solicitudes realizadas directamente por el director. Para obtener más información, consulte AWS:
Denega el acceso en AWS función de la IP de origen.
El siguiente ejemplo muestra cómo permitir solo una dirección IP específica que pueda realizar llamadas a
la API al extremo del plano de datos.
832
AWS IoT Core Guía para desarrolladores
Autorizar a los usuarios y los servicios en la nube de Jobs
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["iotjobsdata:*"],
"Resource": ["*"],
"Condition": {
"IpAddress": {
"aws:SourceIp": "123.45.167.89"
}
},
"Bool": {"aws:ViaAWSService": "false"}
}
],
}
El siguiente ejemplo muestra cómo restringir direcciones IP o rangos de direcciones específicos para que
no realicen llamadas a la API al extremo del plano de datos.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": ["iotjobsdata:*"],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"123.45.167.89",
"192.0.2.0/24",
"203.0.113.0/24"
]
}
},
"Resource": ["*"],
}
],
}
Ejemplo de política de IAM tanto para el plano de control como para el plano de datos
Si realiza una operación de API tanto en el plano de control como en el plano de datos, la acción de
política del plano de control debe usar el iot: prefijo y la acción de política del plano de datos debe usar
el iotjobsdata: prefijo.
Por ejemplo, la DescribeJobExecution API se puede utilizar tanto en el plano de control como en el
plano de datos. En el plano de control, la DescribeJobExecutionAPI se usa para describir la ejecución de
un trabajo. En el plano de datos, la DescribeJobExecutionAPI se usa para obtener detalles de la ejecución
de un trabajo.
La siguiente política de IAM autoriza al usuario a utilizar la DescribeJobExecution API tanto en el plano
de control como en el plano de datos.
En el ejemplo, sustituya:
833
AWS IoT Core Guía para desarrolladores
Autorizar a los usuarios y los servicios en la nube de Jobs
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["iotjobsdata:DescribeJobExecution"],
"Effect": "Allow",
"Resource": "arn:aws:iot:region:account-id:thing/thing-name"
},
{
"Action": [
"iot:DescribeJobExecution",
"iot:CancelJobExecution",
"iot:DeleteJobExecution",
],
"Effect": "Allow",
"Resource": [
"arn:aws:iot:region:account-id:thing/thing-name"
"arn:aws:iot:region:account-id:job/*"
]
}
]
}
Cuando desee etiquetar sus trabajos o plantillas de trabajos que haya creado mediante el AWS
Management Console o elAWS CLI, su política de IAM debe conceder permiso para etiquetarlos. Para
conceder permisos, la política de IAM debe utilizar la iot:TagResource acción.
Para obtener información general sobre cómo etiquetar los recursos, consulteEtiquetado de los recursos
de AWS IoT (p. 304).
Para ver un ejemplo que muestre cómo conceder permisos de etiquetado, piense en un usuario que
ejecuta el siguiente comando para crear un trabajo y etiquetarlo en un entorno específico.
En el ejemplo, sustituya:
834
AWS IoT Core Guía para desarrolladores
Autorizar a los dispositivos a utilizar tareas
{
"Version": "2012-10-17",
"Statement":
{
"Action": [ "iot:CreateJob", "iot:CreateJobTemplate", "iot:TagResource" ],
"Effect": "Allow",
"Resource": [
"arn:aws:iot:aws-region:account-id:job/*",
"arn:aws:iot:aws-region:account-id:jobtemplate/*"
]
}
}
Las políticas se pueden usar con los protocolos MQTT y HTTPS y deben utilizar la autenticación mutua
TCP o TLS para autenticar los dispositivos. A continuación se muestra cómo utilizar estas políticas en los
diferentes protocolos de comunicación.
Warning
Para obtener información sobre los temas AWS IoT de Jobs, consulteTemas de trabajos (p. 121).
El siguiente ejemplo muestra cómo puede usar, publicar iot:Publish y iot:Subscribe suscribirse a
trabajos y ejecuciones de trabajos.
En el ejemplo, sustituya:
835
AWS IoT Core Guía para desarrolladores
Autorizar a los dispositivos a utilizar tareas
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish",
"iot:Subscribe"
],
"Resource": [
"arn:aws:iot:region:account-id:topic/$aws/events/job/*",
"arn:aws:iot:region:account-id:topic/$aws/events/jobExecution/*",
"arn:aws:iot:region:account-id:topic/$aws/things/thing-name/jobs/*"
]
}
],
"Version": "2012-10-17"
}
Las acciones de la política del plano de datos deben usar el iotjobsdata: prefijo. En el plano
de control, las acciones deben utilizar el iot: prefijo. Para ver un ejemplo de política de IAM
cuando se utilizan acciones de política del plano de control y del plano de datos, consulteEjemplo
de política de IAM tanto para el plano de control como para el plano de datos (p. 833).
Acciones de política
La siguiente tabla muestra una lista de las acciones AWS IoT Core políticas y los permisos para autorizar
a los dispositivos a utilizar las acciones de la API. Para obtener una lista de las operaciones de API que
puede realizar en el plano de datos, consulteAPI HTTP del dispositivo Jobs (p. 822).
Note
DescribeJobExecution• tarea
iotjobsdata:DescribeJobExecution Representa el permiso para recuperar
• thing la ejecución de un trabajo. El
iotjobsdata:DescribeJobExecution
836
AWS IoT Core Guía para desarrolladores
Autorizar a los dispositivos a utilizar tareas
iotjobsdata:GetPendingJobExecutions thing
GetPendingJobExecutions Representa el permiso para recuperar
la lista de trabajos que no están en un
estado final para un objeto. El permiso
iotjobsdata:GetPendingJobExecutions
se comprueba cada vez que se presenta
una solicitud para recuperar la lista.
UpdateJobExecution thing
iotjobsdata:UpdateJobExecution Representa el permiso para actualizar
una ejecución de trabajo. El permiso
iot:UpdateJobExecution se
comprueba cada vez que se presenta una
solicitud para actualizar el estado de una
ejecución de trabajo.
A continuación se muestra un ejemplo de una AWS IoT Core política que otorga permiso para realizar las
acciones en las operaciones de la API del plano de datos para cualquier recurso. Puede limitar su política a
un recurso específico, como un recurso de IoT. En tu ejemplo, reemplaza:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iotjobsdata:GetPendingJobExecutions",
"iotjobsdata:StartNextPendingJobExecution",
"iotjobsdata:DescribeJobExecution",
"iotjobsdata:UpdateJobExecution"
],
"Effect": "Allow",
"Resource": "arn:aws:iot:region:account-id:thing/thing-name"
}
]
837
AWS IoT Core Guía para desarrolladores
Límites de los trabajos
Un ejemplo de cuándo debe utilizar estas políticas puede ser cuando sus dispositivos de IoT utilizan una
AWS IoT Core política para acceder a una de estas operaciones de API, como el siguiente ejemplo de la
DescribeJobExecution API:
GET /things/thingName/jobs/jobId?
executionNumber=executionNumber&includeJobDocument=includeJobDocument&namespaceId=namespaceId
HTTP/1.1
Al crear un trabajo mediante la AWS IoT consola o la CreateJob API, el estado del trabajo cambia
aIN_PROGRESS. Todos los trabajos en curso son trabajos activos y se cuentan para el límite de trabajos
activos. Esto incluye los trabajos que están implementando nuevas ejecuciones de tareas o los trabajos
que están esperando a que los dispositivos finalicen sus ejecuciones. Este límite se aplica tanto a los
trabajos continuos como a los de instantáneas.
Los trabajos en curso que implementan nuevas ejecuciones de tareas o que cancelan las ejecuciones
de trabajos creados anteriormente son trabajos simultáneos y se cuentan para el límite de concurrencia
de tareas. AWS IoT Los trabajos pueden ejecutarse y cancelarse rápidamente a una velocidad de 1000
dispositivos por minuto. Cada tarea es concurrent y cuenta para el límite de concurrencia de tareas solo
durante un breve período de tiempo. Una vez implementadas o canceladas las ejecuciones del trabajo,
el trabajo deja de ser simultáneo y no se cuenta para el límite de concurrencia del trabajo. Puede utilizar
la concurrencia de tareas para crear una gran cantidad de tareas mientras espera a que los dispositivos
finalicen la ejecución del trabajo.
Note
Para determinar si un trabajo es simultáneo, puede usar la IsConcurrent propiedad de un trabajo desde
la AWS IoT consola o mediante la ListJob API DescribeJob o. Este límite se aplica tanto a los trabajos
continuos como a los de instantáneas.
Para ver los trabajos activos y los límites de concurrencia de tareas y otras cuotas de AWS IoT trabajos
para usted Cuenta de AWS y solicitar un aumento del límite, consulte los puntos finales y cuotas de
administración de AWS IoT dispositivos en el. Referencia general de AWS
838
AWS IoT Core Guía para desarrolladores
Límites de trabajos activos y simultáneos
El siguiente diagrama muestra cómo se aplica la concurrencia de tareas a las tareas en curso y a las
tareas que se están cancelando.
Note
Los trabajos nuevos con la opción opcional SchedulingConfig mantendrán un estado inicial
SCHEDULED y se actualizarán IN_PROGRESS al llegar al seleccionadostartTime. Cuando la
nueva tarea con la opción opcional SchedulingConfig alcance la seleccionada startTime y
se actualice aIN_PROGRESS, se contará para el límite de tareas activas y el límite de concurrencia
de tareas. Los trabajos con un estado de SCHEDULED se contarán para el límite de trabajos
activos, pero no se contarán para el límite de concurrencia de trabajos.
La siguiente tabla muestra los límites que se aplican a los trabajos activos y simultáneos y las fases
simultáneas y no simultáneas de los estados de los trabajos.
839
AWS IoT Core Guía para desarrolladores
Límites de trabajos activos y simultáneos
Note
840
AWS IoT Core Guía para desarrolladores
¿Qué es la tunelización segura?
Por ejemplo, un sensor instalado en una fábrica que está a varios kilómetros de distancia está teniendo
problemas para medir la temperatura de la fábrica. Puede utilizar la tunelización segura para abrir e iniciar
rápidamente una sesión en ese sensor. Después de identificar el problema (por ejemplo, un archivo de
configuración incorrecto), puede restablecer el archivo y reiniciar el sensor a través de la misma sesión.
En comparación con una solución de problemas más tradicional (por ejemplo, enviar a un técnico a la
fábrica para que revise el sensor), la tunelización segura reduce la respuesta a incidentes y el tiempo de
recuperación, así como los costos de explotación.
Temas
• Conceptos de tunelización segura (p. 841)
• Cómo funciona la tunelización segura (p. 842)
• Ciclo de vida del túnel seguro (p. 843)
Un par de tokens generados por la tunelización segura cuando se crea un nuevo túnel. Los
dispositivos de origen y destino utilizan el CAT para conectarse al servicio de tunelización segura. El
CAT solo se puede utilizar una vez para conectarse al túnel. Para volver a conectarse al túnel, rote los
tokens de acceso del cliente mediante la operación de la RotateTunnelAccessTokenAPI o el comando
rotate-tunnel-access-tokenCLI.
Token de cliente
Un valor único generado por el cliente queAWS IoT Secure Tuneeling puede utilizar para todos los
reintentos posteriores de conexión al mismo túnel. Este campo es opcional. Si no se proporciona el
token de cliente, el token de acceso del cliente (CAT) solo se puede usar una vez para el mismo túnel.
Se rechazarán los intentos de conexión posteriores que utilicen el mismo CAT. Para obtener más
841
AWS IoT Core Guía para desarrolladores
Cómo funciona la tunelización segura
información sobre el uso de los tokens de cliente, consulte la implementación de referencia del proxy
local en GitHub.
Aplicación de destino
La aplicación que se ejecuta en el dispositivo de destino. Por ejemplo, la aplicación de destino puede
ser un daemon SSH para establecer una sesión SSH mediante tunelización segura.
Dispositivo de destino
Una aplicación de IoT que se conecta al gateway de dispositivos de AWS IoT y está a la escucha de
nuevas notificaciones de túnel a través de MQTT. Para obtener más información, consulte Fragmento
de agente de IoT (p. 875).
Proxy local
Un proxy de software que se ejecuta en los dispositivos de origen y destino y transmite un flujo de
datos entre la creación de túneles seguros y la aplicación del dispositivo. El proxy local se puede
ejecutar en modo de origen o modo de destino. Para obtener más información, consulte Proxy
local (p. 861).
Dispositivo fuente
El dispositivo que un operador utiliza para iniciar una sesión en el dispositivo de destino, normalmente
un equipo portátil o de sobremesa.
Túnel
Una ruta lógica a través de AWS IoT que permite la comunicación bidireccional entre un dispositivo de
origen y un dispositivo de destino.
1. Abrir un túnel
Para abrir un túnel para iniciar una sesión con su dispositivo de destino remoto, puede utilizar elAWS
Management Console comando AWS CLIopen-tunnel o la OpenTunnelAPI.
2. Descargue el par de tokens de acceso al cliente
Tras abrir un túnel, puede descargar el token de acceso de cliente (CAT) de origen y destino y
guardarlo en el dispositivo de origen. Debe recuperar el CAT y guardarlo ahora antes de iniciar el
proxy local.
3. Iniciar el proxy local en modo de destino
El agente de IoT que se haya instalado y se esté ejecutando en su dispositivo de destino se suscribirá
al tema de MQTT reservado$aws/things/thing-name/tunnels/notify y recibirá el CAT. Aquí,
el nombre de la cosa es el nombre de laAWS IoT cosa que creas para tu destino. Para obtener
más información, consulte Temas de tunelización segura (p. 125).
A continuación, el agente de IoT utiliza el CAT para iniciar el proxy local en el modo de destino y
configurar una conexión en el lado de destino del túnel. Para obtener más información, consulte
Fragmento de agente de IoT (p. 875).
4. Iniciar el proxy local en modo fuente
842
AWS IoT Core Guía para desarrolladores
Ciclo de vida del túnel seguro
Una vez abierto el túnel,AWS IoT Device Management proporciona el CAT de la fuente que puede
descargar en el dispositivo de origen. Puede utilizar el CAT para iniciar el proxy local en modo fuente,
que luego conecta el lado de origen del túnel. Para obtener más información sobre el proxy local,
consulteProxy local (p. 861).
5. Abrir una sesión SSH
Como ambos lados del túnel están conectados, puede iniciar una sesión SSH utilizando el proxy local
en el lado de origen.
Para obtener más información sobre cómo utilizar elAWS Management Console para abrir un túnel e iniciar
una sesión SSH, consulteAbra un túnel e inicie la sesión SSH en el dispositivo remoto (p. 844).
El siguiente vídeo describe cómo funciona la tunelización segura y explica el proceso de configuración de
una sesión SSH en un dispositivo Raspberry Pi.
1. Cuando se abre un túnel, este tiene el estado OPEN. El estado de conexión de origen y destino del túnel
se establece en DISCONNECTED.
2. Cuando un dispositivo (origen o destino) se conecta al túnel, el estado de conexión correspondiente
cambia aCONNECTED.
3. Cuando un dispositivo se desconecta del túnel mientras permanece el estado del túnelOPEN, el estado
de conexión correspondiente vuelve a cambiar aDISCONNECTED. Un dispositivo puede conectarse y
desconectarse de un túnel varias veces mientras el túnel tenga el estado OPEN.
Note
Los tokens de acceso de cliente (CAT) solo se pueden usar una vez para conectarse a un
túnel. Para volver a conectarse al túnel, rote los tokens de acceso del cliente mediante la
operación de la RotateTunnelAccessTokenAPI o el comando rotate-tunnel-access-tokenCLI.
Para ver ejemplos, consulte Resolver problemas de conectividad mediante túnelesAWS IoT
seguros mediante la rotación de los tokens de acceso de los clientes (p. 882).
4. Cuando llamaCloseTunnel o el túnel permaneceOPEN durante más tiempo que
elMaxLifetimeTimeout valor, el estado del túnel pasa a serCLOSED. Puede configurar
MaxLifetimeTimeout al llamar a OpenTunnel. MaxLifetimeTimeout está establecido de forma
predeterminada en 12 horas si no se especifica un valor.
Note
843
AWS IoT Core Guía para desarrolladores
Tutoriales de esta sección de esta sección de
Para hacer una demostración de túnelesAWS IoT AWS IoTseguros, utilice nuestra demostración de
túneles seguros en GitHub.
Los siguientes tutoriales le ayudarán a aprender cómo empezar y utilizar la tunelización segura. Aprenderá
a:
1. Cree un túnel seguro mediante los métodos de configuración rápida y manual para acceder al
dispositivo remoto.
2. Configure el proxy local cuando utilice el método de configuración manual y conéctese al túnel para
acceder al dispositivo de destino.
3. Acceda mediante SSH al dispositivo remoto desde un navegador sin tener que configurar el proxy local.
4. Convierta un túnel creado mediante el método de configuración manualAWS CLI o mediante el método
de configuración rápida.
• Abra un túnel y utilice SSH basado en un navegador para acceder al dispositivo remoto (p. 846)
Este tutorial muestra cómo abrir un túnel desde la página del centro de túneles mediante el método
de configuración rápida. También aprenderás a usar SSH basado en un navegador para acceder al
dispositivo remoto mediante una interfaz de línea de comandos contextual dentro de laAWS IoT consola.
• Abra un túnel mediante la configuración manual y conéctese al dispositivo remoto (p. 851)
Este tutorial muestra cómo abrir un túnel desde la página del hub de túneles mediante el método de
configuración manual. También aprenderás a configurar e iniciar el proxy local desde un terminal del
dispositivo fuente y a conectarte al túnel.
• Abra un túnel para un dispositivo remoto y utilice SSH basado en un navegador (p. 857)
Este tutorial muestra cómo abrir un túnel desde la página de detalles de un elemento que has creado.
Aprenderá a crear un nuevo túnel y a utilizar uno ya existente. El túnel existente corresponde al
túnel abierto más reciente que se creó para el dispositivo. También puede utilizar el SSH basado en
navegador para acceder al dispositivo remoto.
844
AWS IoT Core Guía para desarrolladores
Abra un túnel e inicie la sesión SSH en el dispositivo remoto
Para ambos métodos de configuración, debe permitir el tráfico saliente en el puerto 443.
• Para obtener información sobre los requisitos previos del tutorial sobre el método de configuración
rápida, consulteRequisitos previos para el método de configuración rápida (p. 846).
• Para obtener información sobre los requisitos previos del tutorial sobre el método de configuración
manual, consulteRequisitos previos para el método de configuración manual (p. 852). Si utiliza este
método de configuración, debe configurar el proxy local en su dispositivo de origen. Para descargar el
código fuente del proxy local, consulte Implementación de referencia del proxy local en GitHub.
Creación Cree un nuevo túnel con configuraciones Cree un túnel especificando manualmente las
de túnel de editables predeterminadas. Para acceder configuraciones del túnel. Puede utilizar este
de a tu dispositivo remoto, solo puedes usar método para conectarse al dispositivo remoto
SSH como servicio de destino. mediante servicios distintos de SSH.
845
AWS IoT Core Guía para desarrolladores
Abra un túnel e inicie la sesión SSH en el dispositivo remoto
Note
Puede omitir la configuración de destino si desea entregar el token de acceso de cliente de
destino al dispositivo remoto a través de otro método. Para obtener más información, consulte
Configuración de un dispositivo remoto y uso de un agente de IoT (p. 875).
En laAWS IoT consola, puede crear un túnel utilizando cualquiera de los siguientes métodos. Para
obtener información sobre los tutoriales que le ayudarán a aprender a crear un túnel con estos métodos,
consulteTutoriales de esta sección de esta sección de (p. 844).
• Núcleo de túneles
Al crear el túnel, podrá especificar si desea utilizar los métodos de configuración rápida o manual
para crear el túnel y proporcionar los detalles de configuración opcionales del túnel. Los detalles de
configuración también incluyen el nombre del dispositivo de destino y el servicio que desea utilizar
para conectarse al dispositivo. Después de crear un túnel, puedes usar SSH en el navegador o abrir un
terminal fuera de laAWS IoT consola para acceder a tu dispositivo remoto.
• Detalles del objeto de la cosa de
Al crear el túnel, también podrá especificar si desea utilizar el túnel abierto más reciente o crear un túnel
nuevo para el dispositivo, además de elegir los métodos de configuración y proporcionar los detalles
opcionales de configuración del túnel. No puede editar los detalles de la configuración de un túnel ya
existente. Puede utilizar el método de configuración rápida para rotar los tokens de acceso y SSH al
dispositivo remoto dentro del navegador. Para abrir un túnel con este método, debe haber creado un
elemento de IoT (por ejemploRemoteDeviceA) en elAWS IoT registro. Para obtener más información,
consulte Registro de un dispositivo en elAWS IoT registro.
Mediante el método de configuración rápida, puede crear un nuevo túnel con configuraciones
predeterminadas que se pueden editar. Se configura un proxy local basado en la web para usted y el token
de acceso se entrega automáticamente a su dispositivo de destino remoto mediante MQTT. Después de
crear un túnel, puede empezar a interactuar con el dispositivo remoto mediante una interfaz de línea de
comandos dentro de la consola.
Con el método de configuración rápida, debe utilizar SSH como servicio de destino para acceder
al dispositivo remoto. Para obtener más información sobre los distintos métodos de configuración,
consulteMétodos de de túnel de túnel de (p. 845).
846
AWS IoT Core Guía para desarrolladores
Abra un túnel e inicie la sesión SSH en el dispositivo remoto
configurado con una suscripción por temas de MQTT. Para obtener más información, consulte conectar
un dispositivo a la puerta de enlace delAWS IoT dispositivo.
• Debe tener un daemon SSH ejecutándose en el dispositivo remoto.
Abrir un túnel
Puede abrir un túnel seguro medianteAWS Management Console la referenciaAWS IoT de API o laAWS
CLI. Si lo desea, puede configurar un nombre de destino, pero no es obligatorio para este tutorial. Si
configura el destino, la tunelización segura entregará automáticamente el token de acceso al dispositivo
remoto mediante MQTT. Para obtener más información, consulte Métodos de creación de túneles enAWS
IoT la consola (p. 845).
2. Para este tutorial, elija Configuración rápida como método de creación de túneles y, a continuación,
elija Siguiente.
Note
Si creas un túnel seguro desde la página de detalles de un elemento que has creado,
puedes elegir entre crear un túnel nuevo o utilizar uno existente. Para obtener más
información, consulte Abra un túnel para un dispositivo remoto y utilice SSH basado en un
navegador (p. 857).
847
AWS IoT Core Guía para desarrolladores
Abra un túnel e inicie la sesión SSH en el dispositivo remoto
3. Revise y confirme los detalles de la configuración del túnel de túnel de túnel de Para crear un túnel,
selecciona Confirmar y crear. Si desea editar estos detalles, seleccione Anterior para volver a la
página anterior y, a continuación, confirme y cree el túnel.
Note
Cuando se utiliza la configuración rápida, el nombre del servicio no se puede editar. Debe
utilizar SSH como servicio.
4. Para crear el túnel, selecciona Listo.
Puede crear un túnel utilizando el método de configuración rápida solo desde laAWS IoT
consola. Cuando utilice laAWS IoT API de referencia de la API o laAWS CLI, utilizará el método
de configuración manual. Puede abrir el túnel existente que creó y, a continuación, cambiar
el método de configuración del túnel para utilizar la configuración rápida. Para obtener más
información, consulte Abra un túnel existente y utilice SSH basado en un navegador (p. 859).
A continuación, mostramos un ejemplo de cómo ejecutar esta operación de la API. Si lo desea, si desea
especificar el nombre de la cosa y el servicio de destino, utilice elDestinationConfig parámetro. Para
ver un ejemplo que muestra cómo utilizar este parámetro, consulteAbrir un nuevo túnel para el dispositivo
remoto (p. 858).
848
AWS IoT Core Guía para desarrolladores
Abra un túnel e inicie la sesión SSH en el dispositivo remoto
Al ejecutar este comando, se crea un nuevo túnel y se proporcionan los tokens de acceso de origen y
destino.
{
"tunnelId": "01234567-89ab-0123-4c56-789a01234bcd",
"tunnelArn": "arn:aws:iot:us-
east-1:123456789012:tunnel/01234567-89ab-0123-4c56-789a01234bcd",
"sourceAccessToken": "<SOURCE_ACCESS_TOKEN>",
"destinationAccessToken": "<DESTINATION_ACCESS_TOKEN>"
}
1. Ve al centro de túneles de laAWS IoT consola y elige el túnel que creaste para ver sus detalles.
2. Expanda la sección Secure Shell (SSH) y, a continuación, seleccione Connect.
3. Elige si quieres autenticarte en la conexión SSH proporcionando tu nombre de usuario y contraseña
o, para una autenticación más segura, puedes usar la clave privada del dispositivo. Si realiza la
autenticación con la clave privada, puede utilizar los tipos de clave RSA, DSA, ECDSA (nistp-*) y
ED25519, en formatos PEM (PKCS #1, PKCS #8) y OpenSSH.
849
AWS IoT Core Guía para desarrolladores
Abra un túnel e inicie la sesión SSH en el dispositivo remoto
Una vez que te hayas autenticado en la conexión SSH, podrás empezar rápidamente a introducir
comandos e interactuar con el dispositivo mediante la CLI del navegador, ya que el proxy local ya está
configurado para ti.
Si la CLI del navegador permanece abierta después de la duración del túnel, es posible que se agote el
tiempo de espera y la interfaz de línea de comandos se desconecte. Puede duplicar el túnel e iniciar otra
sesión para interactuar con el dispositivo remoto dentro de la propia consola.
Es posible que aparezca el error porque el dispositivo de destino se ha desconectado. Puede elegir
Generar nuevos tokens de acceso para generar nuevos tokens de acceso y enviar los tokens a su
dispositivo remoto mediante MQTT. Los nuevos tokens se pueden usar para volver a conectarse al túnel.
Al volver a conectarse al túnel, se borra el historial y se actualiza la sesión de línea de comandos.
• Aparece un error de desconexión del túnel al autenticarse con una clave privada
Es posible que veas el error porque es posible que el dispositivo de destino no haya aceptado tu clave
privada. Para solucionar este error, compruebe el archivo de clave privada que ha subido para la
autenticación. Si sigue apareciendo un error, consulta los registros del dispositivo. También puedes
intentar volver a conectarte al túnel enviando nuevos identificadores de acceso a tu dispositivo remoto.
• El túnel se cerró al utilizar la sesión
Si el túnel se cerró porque permaneció abierto durante más tiempo del especificado, es posible que la
sesión de línea de comandos se desconecte. No se puede volver a abrir un túnel una vez cerrado. Para
volver a conectarse, debe abrir otro túnel hacia el dispositivo.
850
AWS IoT Core Guía para desarrolladores
Abra un túnel e inicie la sesión SSH en el dispositivo remoto
Puede duplicar un túnel para crear uno nuevo con las mismas configuraciones que el túnel cerrado.
Puede duplicar un túnel cerrado desde laAWS IoT consola. Para duplicar el túnel, elija el túnel que
estaba cerrado para ver sus detalles y, a continuación, elija Duplicar túnel. Especifique la duración del
túnel que desea utilizar y, a continuación, cree el nuevo túnel.
Limpieza
• Tde túnel de de
Le recomendamos que cierre el túnel cuando haya terminado de usarlo. Un túnel también se puede
cerrar si permanece abierto durante más tiempo que la duración especificada. No se puede volver a abrir
un túnel una vez cerrado. Aún puede duplicar un túnel seleccionando el túnel cerrado y, a continuación,
eligiendo Duplicar túnel. Especifique la duración del túnel que desea utilizar y, a continuación, cree el
nuevo túnel.
• Para cerrar un túnel individual o varios túneles desde laAWS IoT consola, vaya al centro de túneles,
elija los túneles que desee cerrar y, a continuación, elija Cerrar túnel.
• Para cerrar un túnel individual o varios túneles mediante laAWS IoT API de referencia de la API, utilice
la CloseTunnelAPI.
• Eliminar de túnel de de
Cuando utilice el método de configuración manual, debe especificar manualmente las configuraciones del
túnel al crear el túnel. Después de crear el túnel, puedes usar SSH en el navegador o abrir un terminal
fuera de laAWS IoT consola. Este tutorial muestra cómo usar el terminal externo a la consola para acceder
al dispositivo remoto. También aprenderás a configurar el proxy local y, a continuación, a conectarte al
proxy local para interactuar con el dispositivo remoto. Para conectarse al proxy local, debe descargar el
token de acceso a la fuente al crear el túnel.
851
AWS IoT Core Guía para desarrolladores
Abra un túnel e inicie la sesión SSH en el dispositivo remoto
Con este método de configuración, puede utilizar servicios distintos de SSH, como FTP, para conectarse
al dispositivo remoto. Para obtener más información sobre los distintos métodos de configuración,
consulteMétodos de de túnel de túnel de (p. 845).
Abrir un túnel
Puede abrir un túnel seguro medianteAWS Management Console la referenciaAWS IoT de API o laAWS
CLI. Si lo desea, puede configurar un nombre de destino, pero no es obligatorio para este tutorial. Si
configura el destino, la tunelización segura entregará automáticamente el token de acceso al dispositivo
remoto mediante MQTT. Para obtener más información, consulte Métodos de creación de túneles enAWS
IoT la consola (p. 845).
2. Para este tutorial, elija Configuración manual como método de creación de túneles y, a continuación,
elija Siguiente. Para obtener información sobre el uso del método de configuración rápida para crear
un túnel, consulteAbra un túnel y utilice SSH basado en un navegador para acceder al dispositivo
remoto (p. 846).
Note
Si creas un túnel seguro desde la página de detalles de un objeto, puedes elegir entre crear
un túnel nuevo o utilizar uno existente. Para obtener más información, consulte Abra un túnel
para un dispositivo remoto y utilice SSH basado en un navegador (p. 857).
852
AWS IoT Core Guía para desarrolladores
Abra un túnel e inicie la sesión SSH en el dispositivo remoto
3. (Opcional) Introduzca los ajustes de configuración del túnel. También puede omitir este paso y
continuar con el siguiente paso para crear un túnel.
Introduzca la descripción del túnel, la duración del tiempo de espera del túnel y las etiquetas de los
recursos como pares clave-valor para ayudarlo a identificar el recurso. Para este tutorial, puede omitir
la configuración de destino.
Note
No se te cobrará en función del tiempo que mantengas abierto un túnel. Solo incurrirás en
cargos al crear un túnel nuevo. Para obtener información sobre precios, consulte Secure
Tunneling en la sección AWS IoT Device Managementde precios.
4. Descargue los tokens de acceso del cliente y, a continuación, seleccione Listo. Los tokens no estarán
disponibles para su descarga después de seleccionar Listo.
Estas fichas solo se pueden utilizar una vez para conectarse al túnel solo. Si pierdes los tokens o el
túnel se desconecta, puedes generar y enviar nuevos tokens a tu dispositivo remoto para volver a
conectarlos al túnel.
853
AWS IoT Core Guía para desarrolladores
Abra un túnel e inicie la sesión SSH en el dispositivo remoto
Para abrir un túnel nuevo, puede utilizar la operación OpenTunnelde API. También puede especificar
configuraciones adicionales mediante la API, como la duración del túnel y la configuración de destino.
Al ejecutar este comando, se crea un nuevo túnel y se proporcionan los tokens de acceso de origen y
destino.
{
"tunnelId": "01234567-89ab-0123-4c56-789a01234bcd",
"tunnelArn": "arn:aws:iot:us-
east-1:123456789012:tunnel/01234567-89ab-0123-4c56-789a01234bcd",
"sourceAccessToken": "<SOURCE_ACCESS_TOKEN>",
"destinationAccessToken": "<DESTINATION_ACCESS_TOKEN>"
}
854
AWS IoT Core Guía para desarrolladores
Abra un túnel e inicie la sesión SSH en el dispositivo remoto
2. En la página de detalles del túnel, elija Generar nuevos tokens de acceso y, a continuación, elija
Siguiente.
3. Descarga los nuevos tokens de acceso para tu túnel y selecciona Listo. Estas fichas solo se pueden
usar una vez. Si pierdes estos identificadores o el túnel se desconecta, puedes volver a enviar los
nuevos identificadores de acceso.
La ejecución de este comando genera el nuevo token de acceso, como se muestra en el siguiente ejemplo.
A continuación, el token se entrega al dispositivo mediante MQTT para conectarse al túnel, si el agente del
dispositivo está configurado correctamente.
{
"destinationAccessToken": "destination-access-token",
"tunnelArn": "arn:aws:iot:region:account-id:tunnel/tunnel-id"
}
Para ver ejemplos que muestran cómo y cuándo rotar los identificadores de acceso, consulteResolver
problemas de conectividad mediante túnelesAWS IoT seguros mediante la rotación de los tokens de
acceso de los clientes (p. 882).
855
AWS IoT Core Guía para desarrolladores
Abra un túnel e inicie la sesión SSH en el dispositivo remoto
Tras configurar el proxy local, copie el token de acceso del cliente de origen y utilícelo para iniciar el proxy
local en modo fuente. A continuación se muestra un comando de ejemplo para iniciar el proxy local. En el
siguiente comando, el proxy local está configurado para atender nuevas conexiones en el puerto 5555. En
este comando:
• -respecifica laRegión de AWS, que debe ser la misma región en la que se creó el túnel.
• -sespecifica el puerto al que debe conectarse el proxy.
Al ejecutar este comando, se iniciará el proxy local en modo fuente. Si recibe el error siguiente después de
ejecutar el comando, configure la ruta de CA. Para obtener más información, consulte Proxy local de túnel
seguro activado GitHub.
Could not perform SSL handshake with proxy server: certificate verify failed
A continuación se muestra un ejemplo de resultado de la ejecución del proxy local ensource modo.
...
...
...
Connection: upgrade
channel-id: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
upgrade: websocket
...
...
856
AWS IoT Core Guía para desarrolladores
Abra un túnel para un dispositivo remoto
y utilice SSH basado en un navegador
Es posible que se pida una contraseña para la sesión SSH. Cuando haya terminado con la sesión SSH,
escriba exit para cerrar la sesión.
Limpieza
• Tde túnel de de
Le recomendamos que cierre el túnel cuando haya terminado de usarlo. Un túnel también se puede
cerrar si permanece abierto durante más tiempo que la duración especificada. No se puede volver a
abrir un túnel una vez cerrado. Aún puede duplicar un túnel abriendo el túnel cerrado y, a continuación,
seleccionando Duplicar túnel. Especifique la duración del túnel que desea utilizar y, a continuación, cree
el nuevo túnel.
• Para cerrar un túnel individual o varios túneles desde laAWS IoT consola, vaya al centro de túneles,
elija los túneles que desee cerrar y, a continuación, elija Cerrar túnel.
• Para cerrar un túnel individual o varios túneles mediante laAWS IoT API de referencia de la API, utilice
la operación CloseTunnelAPI.
• Eliminar de túnel de de
857
AWS IoT Core Guía para desarrolladores
Abra un túnel para un dispositivo remoto
y utilice SSH basado en un navegador
Al crear un túnel desde la página de detalles de la cosa de laAWS IoT consola, también puede especificar
si desea crear un túnel nuevo o abrir un túnel existente para ese elemento, como se ilustra en este tutorial.
Si elige un túnel existente, puede acceder al túnel abierto más reciente que creó para este dispositivo. A
continuación, puede utilizar la interfaz de línea de comandos de la terminal para conectarse mediante SSH
al dispositivo.
Requisitos previos
• Los firewalls detrás de los que se encuentra el dispositivo remoto deben permitir el tráfico saliente en el
puerto 443. El túnel que cree utilizará este puerto para conectarse al dispositivo remoto.
• Ha creado un elemento de IoT (por ejemploRemoteDevice1) en elAWS IoT registro. Esto corresponde
a la representación de su dispositivo remoto en la nube. Para obtener más información, consulte
Registro de un dispositivo en elAWS IoT registro.
• Tiene un agente de dispositivo de IoT (consulteFragmento de agente de IoT (p. 875)) que se
ejecuta en el dispositivo remoto que se conecta a la puerta de enlace delAWS IoT dispositivo y está
configurado con una suscripción por temas de MQTT. Para obtener más información, consulte conectar
un dispositivo a la puerta de enlace delAWS IoT dispositivo.
• Debe tener un daemon SSH ejecutándose en el dispositivo remoto.
Al configurar un destino al crear un túnel, el servicio de tunelización segura entrega el token de acceso
del cliente de destino al dispositivo remoto a través de MQTT y el tema MQTT reservado ($aws/things/
RemoteDeviceA/tunnels/notify). Para obtener más información, consulte Métodos de creación de
túneles enAWS IoT la consola (p. 845).
1. Elige la cosa para ver sus detalles y, a continuación, selecciona Crear túnel seguro.RemoteDevice1
2. Elija si desea crear un túnel nuevo o abrir uno existente. Para crear un túnel nuevo, selecciona
Crear nuevo túnel. A continuación, puede elegir si desea utilizar la configuración manual o el método
de configuración rápida para crear el túnel. Para obtener más información, consulte Abra un túnel
mediante la configuración manual y conéctese al dispositivo remoto (p. 851) y Abra un túnel y utilice
SSH basado en un navegador para acceder al dispositivo remoto (p. 846).
858
AWS IoT Core Guía para desarrolladores
Abra un túnel para un dispositivo remoto
y utilice SSH basado en un navegador
Para abrir un túnel nuevo, puede utilizar la operación OpenTunnelde API. El código siguiente muestra un
ejemplo de ejecución de este comando.
Contenido de input.json
{
"description": "Tunnel to remote device1",
"destinationConfig": {
"services": [ "SSH" ],
"thingName": "RemoteDevice1"
}
}
Al ejecutar este comando, se crea un nuevo túnel y se proporcionan los tokens de acceso de origen y
destino.
{
"tunnelId": "01234567-89ab-0123-4c56-789a01234bcd",
"tunnelArn": "arn:aws:iot:us-
east-1:123456789012:tunnel/01234567-89ab-0123-4c56-789a01234bcd",
"sourceAccessToken": "<SOURCE_ACCESS_TOKEN>",
"destinationAccessToken": "<DESTINATION_ACCESS_TOKEN>"
}
Para utilizar la función SSH basada en el navegador, no tendrás que descargar el token de acceso a la
fuente ni configurar el proxy local. Se configurará automáticamente un proxy local basado en la web para
que pueda empezar a interactuar con su dispositivo remoto.
1. Ve a la página de detalles del elemento que has creado yRemoteDevice1 selecciona Crear un túnel
seguro.
2. Elija Usar el túnel existente para abrir el túnel abierto más reciente que creó para el dispositivo
remoto. Las configuraciones del túnel no se pueden editar, por lo que no puede utilizar el método
de configuración manual para el túnel. Para utilizar el método de configuración rápida, seleccione
Configuración rápida.
3. Proceda a revisar y confirmar los detalles de configuración del túnel y a crear el túnel. No se pueden
editar las configuraciones de túnel de de de túnel de de de de de
859
AWS IoT Core Guía para desarrolladores
Abra un túnel para un dispositivo remoto
y utilice SSH basado en un navegador
Una vez creado el túnel, puede utilizar el SSH basado en el navegador para interactuar con el dispositivo
remoto directamente desde la consola mediante la interfaz de línea de comandos contextual. Para
usar esta interfaz de línea de comandos, elija el túnel para el elemento que creó y, en la página de
detalles, expanda la sección Interfaz de línea de comandos. Como el proxy local ya está configurado para
usted, puede empezar a introducir comandos para empezar rápidamente a acceder e interactuar con su
dispositivo remotoRemoteDevice1.
Para obtener más información sobre el método de configuración rápida y el uso del SSH basado en un
navegador, consulteAbra un túnel y utilice SSH basado en un navegador para acceder al dispositivo
remoto (p. 846).
Limpieza
• Tde túnel de de
Le recomendamos que cierre el túnel cuando haya terminado de usarlo. Un túnel también se puede
cerrar si permanece abierto durante más tiempo que la duración especificada. No se puede volver a
abrir un túnel una vez cerrado. Aún puede duplicar un túnel abriendo el túnel cerrado y, a continuación,
seleccionando Duplicar túnel. Especifique la duración del túnel que desea utilizar y, a continuación, cree
el nuevo túnel.
• Para cerrar un túnel individual o varios túneles desde laAWS IoT consola, vaya al centro de túneles,
elija los túneles que desee cerrar y, a continuación, elija Cerrar túnel.
• Para cerrar un túnel individual o varios túneles mediante laAWS IoT API de referencia de la API, utilice
la operación CloseTunnelAPI.
• Eliminar de túnel de de
860
AWS IoT Core Guía para desarrolladores
Proxy local
Proxy local
El proxy local transmite los datos enviados por la aplicación que se ejecuta en el dispositivo de origen
mediante túneles seguros a través de una conexión WebSocket segura. Puede descargar la fuente del
proxy local desde GitHub.
El proxy local puede ejecutarse en dos modos: source o destination. En el modo de origen, el proxy
local se ejecuta en el mismo dispositivo o red que la aplicación cliente que inicia la conexión TCP. En el
modo de destino, el proxy local se ejecuta en el dispositivo remoto, junto con la aplicación de destino. Un
solo túnel puede admitir hasta tres flujos de datos a la vez mediante la multiplexación de túneles. Para
cada flujo de datos, la tunelización segura utiliza varias conexiones TCP, lo que reduce la posibilidad de
que se agote el tiempo de espera. Para obtener más información, consulte Flujos de datos múltiples y uso
de conexiones TCP simultáneas en un túnel seguro (p. 870).
En primer lugar, el proxy local debe establecer una conexión para proteger los túneles. Al iniciar el
proxy local, utilice los siguientes argumentos:
Dos proxies locales que utilicen el mismo valor de token de acceso de cliente no se pueden
conectar al mismo tiempo.
2. Realizar acciones de origen o destino
Una vez establecida la WebSocket conexión, el proxy local realiza acciones en modo de origen o de
destino, según su configuración.
De forma predeterminada, el proxy local intenta volver a conectarse a un túnel seguro si se produce
algún error de entrada/salida (E/S) o si la WebSocket conexión se cierra inesperadamente. Esto
hace que la conexión TCP se cierre. Si se produce algún error de socket TCP, el proxy local envía
un mensaje a través del túnel para notificar al otro extremo que cierre su conexión TCP. De forma
predeterminada, el proxy local siempre usa la comunicación SSL.
3. Detener el proxy local
Después de utilizar el túnel, es seguro detener el proceso de proxy local. Le recomendamos que cierre
explícitamente el túnel llamando a CloseTunnel. Es posible que los clientes del túnel activos no se
cierren inmediatamente después de llamar a CloseTunnel.
861
AWS IoT Core Guía para desarrolladores
Cómo utilizar el proxy local
Para obtener más información sobre cómo utilizar elAWS Management Console para abrir un túnel e iniciar
una sesión SSH, consulteAbra un túnel e inicie la sesión SSH en el dispositivo remoto (p. 844).
• Evite el uso del argumento -t del proxy local para pasar un token de acceso. Se recomienda utilizar la
variable de entorno AWSIOT_TUNNEL_ACCESS_TOKEN para establecer el token de acceso del proxy
local.
• Ejecute el ejecutable del proxy local con privilegios mínimos en el sistema operativo o en el entorno.
• Evite ejecutar el proxy local como administrador en Windows.
• Evite ejecutar el proxy local como raíz en Linux y macOS.
• Considere la posibilidad de ejecutar el proxy local en servidores, contenedores, entornos aislados, chroot
jail o un entorno virtualizado separados.
• Cree el proxy local con indicadores de seguridad relevantes, en función de su cadena de herramientas.
• En dispositivos con varias interfaces de red, utilice el argumento -b para enlazar el socket TCP a la
interfaz de red utilizada para comunicarse con la aplicación de destino.
Debe haber abierto un túnel y haber obtenido los tokens de acceso del cliente para el origen y el destino.
También debe haber creado el proxy local tal y como se ha descrito anteriormente. Para crear el proxy
local, abra el código fuente del proxy local en el GitHub repositorio y siga las instrucciones para crear e
instalar el proxy local.
Note
Los siguientes comandos utilizados en los ejemplos utilizan elverbosity indicador para ilustrar
una descripción general de los diferentes pasos descritos anteriormente después de ejecutar el
proxy local. Recomendamos utilizar este indicador únicamente para realizar pruebas.
En los siguientes comandos se muestra cómo ejecutar el proxy local en el modo de fuente.
Linux/macOS
En Linux o macOS, ejecute los siguientes comandos en la terminal para configurar e iniciar el proxy
local en la fuente.
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
./localproxy -s 5555 -v 5 -r us-west-2
Donde:
• -ses el puerto de escucha de origen, que inicia el proxy local en modo fuente.
• -ves la verbosidad de la salida, que puede ser un valor entre cero y seis.
862
AWS IoT Core Guía para desarrolladores
Cómo utilizar el proxy local
Para obtener más información sobre los parámetros, consulte Configuración de opciones mediante
argumentos de línea de comandos.
Windows
En Windows, el proxy local se configura de forma similar a como se hace en Linux o macOS, pero la
forma en que se definen las variables de entorno es diferente a la de otras plataformas. Ejecute los
siguientes comandos en lacmd ventana para configurar e iniciar el proxy local en su fuente.
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
.\localproxy -s 5555 -v 5 -r us-west-2
Donde:
• -ses el puerto de escucha de origen, que inicia el proxy local en modo fuente.
• -ves la verbosidad de la salida, que puede ser un valor entre cero y seis.
• -res la región del punto final en la que se abre el túnel.
Para obtener más información sobre los parámetros, consulte Configuración de opciones mediante
argumentos de línea de comandos.
A continuación se muestra un ejemplo de resultado de la ejecución del proxy local ensource modo.
...
...
...
Connection: upgrade
channel-id: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
upgrade: websocket
...
...
863
AWS IoT Core Guía para desarrolladores
Cómo utilizar el proxy local
En los siguientes comandos se muestra cómo ejecutar el proxy local en el modo de destino.
Linux/macOS
En Linux o macOS, ejecute los siguientes comandos en la terminal para configurar e iniciar el proxy
local en su destino.
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
./localproxy -d 22 -v 5 -r us-west-2
Donde:
Para obtener más información sobre los parámetros, consulte Configuración de opciones mediante
argumentos de línea de comandos.
Windows
En Windows, el proxy local se configura de forma similar a como se hace en Linux o macOS, pero la
forma en que se definen las variables de entorno es diferente a la de otras plataformas. Ejecute los
siguientes comandos en lacmd ventana para configurar e iniciar el proxy local en su destino.
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
.\localproxy -d 22 -v 5 -r us-west-2
Donde:
Para obtener más información sobre los parámetros, consulte Configuración de opciones mediante
argumentos de línea de comandos.
A continuación se muestra un ejemplo de resultado de la ejecución del proxy local endestination modo.
...
...
...
Connection: upgrade
channel-id: 01234567890abc23-00001234-0005678a-b1234c5de677a001-2bc3d456
upgrade: websocket
864
AWS IoT Core Guía para desarrolladores
Configurar el proxy local para los
dispositivos que utilizan un proxy web
...
...
El proxy local debe conectarse directamente a Internet para utilizar la tunelizaciónAWS IoT segura. Para
una conexión TCP de larga duración con túnel seguro, el proxy local actualiza la solicitud HTTPS para
establecer una WebSockets conexión con uno de los extremos de conexión del dispositivo de túnel seguro.
Si sus dispositivos están en una red que utiliza un proxy web, el proxy web puede interceptar las
conexiones antes de reenviarlas a Internet. Para establecer una conexión duradera con los extremos de
conexión del dispositivo de túnel seguro, configure su proxy local para que utilice el proxy web tal como se
describe en la especificación de websocket.
Note
AWS IoTCliente de dispositivo (p. 1492)No es compatible con dispositivos que utilicen un proxy
web. Para trabajar con el proxy web, necesitarás usar un proxy local y configurarlo para que
funcione con un proxy web como se describe a continuación.
Los pasos siguientes muestran cómo funciona el proxy local con un proxy web.
1. El proxy local envía unaCONNECT solicitud HTTP al proxy web que contiene la dirección remota del
servicio de túnel seguro, junto con la información de autenticación del proxy web.
2. A continuación, el proxy web creará una conexión duradera con los extremos remotos de túnel seguro.
3. La conexión TCP está establecida y el proxy local ahora funcionará en los modos de origen y destino
para la transmisión de datos.
865
AWS IoT Core Guía para desarrolladores
Configurar el proxy local para los
dispositivos que utilizan un proxy web
La forma de configurar el proxy web depende del proxy web que esté utilizando y de la versión del proxy
web. Para asegurarse de configurar el proxy web correctamente, consulte la documentación del proxy web.
Para configurar su proxy web, primero identifique la URL de su proxy web y confirme si su proxy web
admite la creación de túneles HTTP. La URL del proxy web se utilizará más adelante cuando configure e
inicie el proxy local.
protocol://web_proxy_host_domain:web_proxy_port
AWS IoTla tunelización segura solo admite la autenticación básica para el proxy web. Para utilizar la
autenticación básica, debe especificarusername ypassword como parte de la URL del proxy web. La
URL del proxy web tendrá el siguiente formato.
protocol://username:password@web_proxy_host_domain:web_proxy_port
Para confirmar si su proxy web admite la tunelización TCP, utilice uncurl comando y asegúrese de
obtener una3xx respuesta2xx o una.
export HTTPS_PROXY=https://server.com:1235
curl -I https://aws.amazon.com --proxy-insecure
export HTTPS_PROXY=http://server.com:1234
curl -I https://aws.amazon.com
Después de configurar el proxy local, puede usarlo tal y como se explica en este documento README.
866
AWS IoT Core Guía para desarrolladores
Configurar el proxy local para los
dispositivos que utilizan un proxy web
Note
Los siguientes comandos muestran cómo configurar el proxy local que se ejecuta en su destino para usar
el proxy web e iniciar el proxy local.
• AWSIOT_TUNNEL_ACCESS_TOKEN: Esta variable contiene el token de acceso del cliente (CAT) del
destino.
• HTTPS_PROXY: Esta variable contiene la URL del proxy web o la dirección IP para configurar el proxy
local.
Los comandos que se muestran en los siguientes ejemplos dependen del sistema operativo que utilice y
de si el proxy web escucha en un puerto HTTP o HTTPS.
Linux/macOS
En Linux o macOS, ejecute los siguientes comandos en la terminal para configurar e iniciar el proxy
local en su destino para utilizar un proxy web que escuche un puerto HTTP.
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:proxy.example.com:1234
./localproxy -r us-east-1 -d 22
Si tiene que autenticarse con el proxy, debe especificar unusername ypassword como parte de
laHTTPS_PROXY variable.
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http://username:password@proxy.example.com:1234
./localproxy -r us-east-1 -d 22
Windows
En Windows, el proxy local se configura de forma similar a como se hace en Linux o macOS, pero
la forma en que se definen las variables de entorno es diferente a la de otras plataformas. Ejecute
los siguientes comandos en lacmd ventana para configurar e iniciar el proxy local en su destino para
utilizar un proxy web que escuche un puerto HTTP.
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://proxy.example.com:1234
.\localproxy -r us-east-1 -d 22
Si tiene que autenticarse con el proxy, debe especificar unusername ypassword como parte de
laHTTPS_PROXY variable.
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://username:password@10.15.20.25:1234
.\localproxy -r us-east-1 -d 22
867
AWS IoT Core Guía para desarrolladores
Configurar el proxy local para los
dispositivos que utilizan un proxy web
Si utilizas un certificado autofirmado para el proxy web o si ejecutas el proxy local en un sistema
operativo que no admite OpenSSL de forma nativa ni tiene configuraciones predeterminadas,
tendrás que configurar tus certificados de proxy web tal y como se describe en la sección
Configuración de certificados del GitHub repositorio.
Los siguientes comandos tendrán un aspecto similar al que configuró su proxy web para un proxy HTTP,
con la excepción de que también especificará la ruta a los archivos de certificado que instaló, tal como se
describió anteriormente.
Linux/macOS
En Linux o macOS, ejecute los siguientes comandos en la terminal para configurar el proxy local que
se ejecuta en su destino de modo que utilice un proxy web que escuche un puerto HTTPS.
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:proxy.example.com:1234
./localproxy -r us-east-1 -d 22 -c /path/to/certs
Si tiene que autenticarse con el proxy, debe especificar unusername ypassword como parte de
laHTTPS_PROXY variable.
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http://username:password@proxy.example.com:1234
./localproxy -r us-east-1 -d 22 -c /path/to/certs
Windows
En Windows, ejecute los siguientes comandos en lacmd ventana para configurar e iniciar el proxy local
que se ejecuta en su destino para utilizar un proxy web que escuche un puerto HTTP.
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://proxy.example.com:1234
.\localproxy -r us-east-1 -d 22 -c \path\to\certs
Si tiene que autenticarse con el proxy, debe especificar unusername ypassword como parte de
laHTTPS_PROXY variable.
set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
set HTTPS_PROXY=http://username:password@10.15.20.25:1234
.\localproxy -r us-east-1 -d 22 -c \path\to\certs
868
AWS IoT Core Guía para desarrolladores
Configurar el proxy local para los
dispositivos que utilizan un proxy web
A continuación, se muestra información general de los pasos que debe seguir para iniciar el proxy local. El
proxy local:
• Identifica la URL del proxy web para que pueda utilizarla para conectarse al servidor proxy.
• Establece una conexión TCP con el proxy web.
• Envía unaCONNECT solicitud HTTP al proxy web y espera laHTTP/1.1 200 respuesta, que indica que
se ha establecido la conexión.
• Actualiza el protocolo HTTPS WebSockets para establecer una conexión duradera.
• Comienza a transmitir datos a través de la conexión a los extremos del dispositivo de tunelización
segura.
Note
Los siguientes comandos utilizados en los ejemplos utilizan elverbosity indicador para ilustrar
una descripción general de los diferentes pasos descritos anteriormente después de ejecutar el
proxy local. Recomendamos utilizar este indicador únicamente para realizar pruebas.
En los siguientes comandos se muestra cómo ejecutar el proxy local en el modo de fuente.
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:username:password@10.15.10.25:1234
./localproxy -s 5555 -v 5 -r us-west-2
A continuación se muestra un ejemplo de resultado de la ejecución del proxy local ensource modo.
...
...
...
869
AWS IoT Core Guía para desarrolladores
Conexiones TCP simultáneas y multiplexadas
En los siguientes comandos se muestra cómo ejecutar el proxy local en el modo de destino.
export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token}
export HTTPS_PROXY=http:username:password@10.15.10.25:1234
./localproxy -d 22 -v 5 -r us-west-2
A continuación se muestra un ejemplo de resultado de la ejecución del proxy local endestination modo.
...
...
...
Para cada flujo de datos, la tunelizaciónAWS IoT segura admite conexiones TCP simultáneas. El uso
de conexiones simultáneas reduce la posibilidad de que se agote el tiempo de espera en caso de varias
solicitudes del cliente. Por ejemplo, puede reducir el tiempo de carga al acceder de forma remota a un
servidor web local en el dispositivo de destino.
En las siguientes secciones se explica más sobre la multiplexación y el uso de conexiones TCP
simultáneas, así como sus diferentes casos de uso.
Temas
870
AWS IoT Core Guía para desarrolladores
Multiplexación de múltiples flujos de datos
Si lo desea, puede configurar el dispositivo de origen y destino con archivos de configuración. Utilice
archivos de configuración si es probable que sus mapeos de puertos cambien con frecuencia. Puede
omitir este paso si prefiere especificar la asignación de puertos de forma explícita mediante la CLI o si
no necesita iniciar el proxy local en los puertos de escucha designados. Para obtener más información
sobre cómo utilizar los archivos de configuración, consulte Configuración de opciones mediante --
config en GitHub.
1. En el dispositivo de origen, en la carpeta donde se ejecutará el proxy local, cree una carpeta de
configuración llamadaConfig. Dentro de esta carpeta, cree un archivo llamadoSSHSource.ini
con el siguiente contenido:
871
AWS IoT Core Guía para desarrolladores
Multiplexación de múltiples flujos de datos
HTTP1 = 5555
SSH1 = 3333
HTTP1 = 80
SSH1 = 22
2. Abrir un túnel
La ejecución de este comando genera los tokens de acceso de origen y destino que utilizarás para
ejecutar el proxy local.
{
"tunnelId": "b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
"tunnelArn": "arn:aws:iot:us-west-2:431600097591:tunnel/b2de92a3-b8ff-46c0-b0f2-
afa28b00cecd",
"sourceAccessToken": source_client_access_token,
"destinationAccessToken": destination_client_access_token
}
Antes de poder ejecutar el proxy local, configure elAWS IoT Device Client o descargue el código
fuente del proxy local GitHuby compílelo para la plataforma que elija. A continuación, puede iniciar
el proxy local de destino y de origen para conectarse al túnel seguro. Para obtener más información
sobre cómo configurar y utilizar el proxy local, consulteCómo utilizar el proxy local (p. 861).
Note
Ejecute los siguientes comandos para ejecutar el proxy local en los modos de origen y destino
mediante archivos de configuración.
872
AWS IoT Core Guía para desarrolladores
Uso de conexiones TCP simultáneas
Ejecute los siguientes comandos para ejecutar el proxy local en los modos de origen y destino
especificando las asignaciones de puertos de forma explícita mediante la CLI.
Los datos de la aplicación de la conexión SSH y HTTP ahora se pueden transferir simultáneamente a
través del túnel multiplexado. Como se ve en el mapa siguiente, el identificador de servicio actúa como un
formato legible para traducir el mapeo de puertos entre el dispositivo de origen y el de destino. Con esta
configuración, el túnel seguro reenvía cualquier tráfico HTTP entrante del puerto 5555 del dispositivo de
origen al puerto 80 del dispositivo de destino, y cualquier tráfico SSH entrante del puerto 3333 al puerto 22
del dispositivo de destino.
Las conexiones TCP simultáneas tienen un límite de ancho de banda de 800 kilobytes por
segundo para cada unaCuenta de AWS. AWS IoTLa tunelización segura puede configurar este
límite según la cantidad de solicitudes entrantes.
873
AWS IoT Core Guía para desarrolladores
Uso de conexiones TCP simultáneas
Si desea acceder a varias aplicaciones que se ejecutan en el dispositivo remoto mediante el túnel,
puede utilizar la multiplexación de túneles. Para obtener más información, consulte Multiplexación
de múltiples flujos de datos en un túnel seguro (p. 871).
1. Abrir un túnel
La ejecución de este comando genera los tokens de acceso de origen y destino que utilizarás para
ejecutar el proxy local.
{
"tunnelId": "b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
"tunnelArn": "arn:aws:iot:us-west-2:431600097591:tunnel/b2de92a3-b8ff-46c0-b0f2-
afa28b00cecd",
"sourceAccessToken": source_client_access_token,
"destinationAccessToken": destination_client_access_token
874
AWS IoT Core Guía para desarrolladores
Configuración de un dispositivo
remoto y uso de un agente de IoT
Antes de poder ejecutar el proxy local, descarga el código fuente del proxy local GitHuby compílalo
para la plataforma que elijas. A continuación, puede iniciar el proxy local de destino y de origen para
conectarse al túnel seguro y empezar a utilizar la aplicación de servidor web remoto.
Note
Para que la tunelizaciónAWS IoT segura utilice conexiones TCP simultáneas, debe actualizar
a la versión más reciente del proxy local. Esta función no está disponible si configura el proxy
local mediante elAWS IoT Device Client.
Para obtener más información sobre cómo configurar y utilizar el proxy local, consulteCómo utilizar el
proxy local (p. 861).
Ahora puede utilizar el túnel para acceder a la aplicación del servidor web. AWS IoTLa tunelización segura
configurará y gestionará automáticamente las conexiones TCP simultáneas cuando haya varias solicitudes
del cliente.
$aws/things/thing-name/tunnels/notify
{
"clientAccessToken": "destination-client-access-token",
875
AWS IoT Core Guía para desarrolladores
Fragmento de agente de IoT
"clientMode": "destination",
"region": "aws-region",
"services": ["destination-service"]
}
Después de recibir un mensaje MQTT, el agente IoT debe iniciar un proxy local en el dispositivo remoto
con los parámetros apropiados.
El siguiente código de Java muestra cómo utilizar el SDK ProcessBuilderdeAWS IoT dispositivos y la
biblioteca de Java para crear un agente de IoT sencillo que funcione con túneles seguros.
try {
mqttClient.connect();
final TunnelNotificationListener listener = new
TunnelNotificationListener(tunnelNotificationTopic);
mqttClient.subscribe(listener, true);
}
finally {
mqttClient.disconnect();
}
@Override
public void onMessage(AWSIotMessage message) {
try {
// Deserialize the MQTT message
final JSONObject json = new JSONObject(message.getStringPayload());
876
AWS IoT Core Guía para desarrolladores
Control del acceso a los túneles
raíz:OpenTunnel
La acción de política iot:OpenTunnel concede un permiso a la entidad principal para llamar a
OpenTunnel.
arn:aws:iot:aws-region:aws-account-id:tunnel/*
• Especifique el ARN de una cosa para administrar elOpenTunnel permiso para cosas de IoT específicas:
arn:aws:iot:aws-region:aws-account-id:thing/thing-name
Por ejemplo, la siguiente instrucción de política le permite abrir un túnel con el objeto de IoT llamado
TestDevice.
{
"Effect": "Allow",
"Action": "iot:OpenTunnel",
"Resource": [
"arn:aws:iot:aws-region:aws-account-id:tunnel/*",
"arn:aws:iot:aws-region:aws-account-id:thing/TestDevice"
]
877
AWS IoT Core Guía para desarrolladores
Políticas de acceso a túneles
• iot:ThingGroupArn
• iot:TunnelDestinationService
• aws:RequestTag/clave-etiqueta
• aws:SecureTransport
• aws:TagKeys
La siguiente declaración de política permite abrir un túnel a la cosa si la cosa pertenece a un grupo de
cosas con un nombre que comience por SSHTestGroup y el servicio de destino configurado en el túnel
sea SSH.
{
"Effect": "Allow",
"Action": "iot:OpenTunnel",
"Resource": [
"arn:aws:iot:aws-region:aws-account-id:tunnel/*"
],
"Condition": {
"ForAnyValue:StringLike": {
"iot:ThingGroupArn": [
"arn:aws:iot:aws-region:aws-account-id:thinggroup/TestGroup*"
]
},
"ForAllValues:StringEquals": {
"iot:TunnelDestinationService": [
"SSH"
]
}
}
}
También puede utilizar etiquetas de recursos para controlar los permisos para abrir túneles. Por ejemplo,
la siguiente instrucción de política permite abrir un túnel si la clave de etiqueta Owner está presente con un
valor de Admin y no se especifica ninguna otra etiqueta. Para obtener información general sobre el uso de
etiquetas, consulteEtiquetado de los recursos de AWS IoT (p. 304).
{
"Effect": "Allow",
"Action": "iot:OpenTunnel",
"Resource": [
"arn:aws:iot:aws-region:aws-account-id:tunnel/*"
],
"Condition": {
"StringEquals": {
"aws:RequestTag/Owner": "Admin"
},
"ForAllValues:StringEquals": {
"aws:TagKeys": "Owner"
}
}
}
raíz:RotateTunnelAccessToken
La acción de política iot:RotateTunnelAccessToken concede un permiso a la entidad principal para
llamar a RotateTunnelAccessToken.
878
AWS IoT Core Guía para desarrolladores
Políticas de acceso a túneles
arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id
arn:aws:iot:aws-region:aws-account-id:tunnel/*
• Especifique el ARN de una cosa para administrar elRotateTunnelAccessToken permiso para cosas
de IoT específicas:
arn:aws:iot:aws-region:aws-account-id:thing/thing-name
Por ejemplo, la siguiente declaración de política permite rotar el token de acceso de origen de un túnel o el
token de acceso de destino de un cliente para el elemento de IoT denominadoTestDevice.
{
"Effect": "Allow",
"Action": "iot:RotateTunnelAccessToken",
"Resource": [
"arn:aws:iot:aws-region:aws-account-id:tunnel/*",
"arn:aws:iot:aws-region:aws-account-id:thing/TestDevice"
]
}
• iot:ThingGroupArn
• iot:TunnelDestinationService
• iot:ClientMode
• aws:SecureTransport
La siguiente declaración de política permite rotar el token de acceso al destino a la cosa si la cosa
pertenece a un grupo de cosas con un nombre que comience porTestGroup, el servicio de destino
configurado en el túnel es SSH y el cliente está enDESTINATION modo.
{
"Effect": "Allow",
"Action": "iot:RotateTunnelAccessToken",
"Resource": [
"arn:aws:iot:aws-region:aws-account-id:tunnel/*"
],
"Condition": {
"ForAnyValue:StringLike": {
"iot:ThingGroupArn": [
"arn:aws:iot:aws-region:aws-account-id:thinggroup/TestGroup*"
]
},
"ForAllValues:StringEquals": {
"iot:TunnelDestinationService": [
"SSH"
],
"iot:ClientMode": "DESTINATION"
}
}
}
879
AWS IoT Core Guía para desarrolladores
Políticas de acceso a túneles
raíz:DescribeTunnel
La acción de política iot:DescribeTunnel concede un permiso a la entidad principal para llamar a
DescribeTunnel.
arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id
arn:aws:iot:aws-region:aws-account-id:tunnel/*
• aws:ResourceTag/tag-key
• aws:SecureTransport
{
"Effect": "Allow",
"Action": "iot:DescribeTunnel",
"Resource": [
"arn:aws:iot:aws-region:aws-account-id:tunnel/*"
],
"Condition": {
"StringEquals": {
"aws:ResourceTag/Owner": "Admin"
}
}
}
raíz:ListTunnels
La acción de política iot:ListTunnels concede un permiso a la entidad principal para llamar a
ListTunnels.
arn:aws:iot:aws-region:aws-account-id:tunnel/*
• Especifique el ARN de una cosa para administrar losListTunnels permisos de las cosas de IoT
seleccionadas:
arn:aws:iot:aws-region:aws-account-id:thing/thing-name
La siguiente instrucción de política le permite mostrar los túneles del objeto denominado TestDevice.
{
"Effect": "Allow",
"Action": "iot:ListTunnels",
880
AWS IoT Core Guía para desarrolladores
Políticas de acceso a túneles
"Resource": [
"arn:aws:iot:aws-region:aws-account-id:tunnel/*",
"arn:aws:iot:aws-region:aws-account-id:thing/TestDevice"
]
}
raíz:ListTagsForResource
La acción de política iot:ListTagsForResource concede un permiso a la entidad principal para llamar
a ListTagsForResource.
arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id
arn:aws:iot:aws-region:aws-account-id:tunnel/*
raíz:CloseTunnel
La acción de política iot:CloseTunnel concede un permiso a la entidad principal para llamar a
CloseTunnel.
arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id
arn:aws:iot:aws-region:aws-account-id:tunnel/*
• iot:Delete
• aws:ResourceTag/tag-key
• aws:SecureTransport
{
"Effect": "Allow",
"Action": "iot:CloseTunnel",
"Resource": [
"arn:aws:iot:aws-region:aws-account-id:tunnel/*"
],
"Condition": {
"Bool": {
"iot:Delete": "false"
},
"StringEquals": {
"aws:ResourceTag/Owner": "QATeam"
}
}
881
AWS IoT Core Guía para desarrolladores
Resolver problemas de conectividad de túneles seguros
raíz:TagResource
La acción de política iot:TagResource concede un permiso a la entidad principal para llamar a
TagResource.
arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id
arn:aws:iot:aws-region:aws-account-id:tunnel/*
raíz:UntagResource
La acción de política iot:UntagResource concede un permiso a la entidad principal para llamar a
UntagResource.
arn:aws:iot:aws-region: aws-account-id:tunnel/tunnel-id
arn:aws:iot:aws-region:aws-account-id:tunnel/*
882
AWS IoT Core Guía para desarrolladores
Error de token de acceso al cliente no válido
Temas
• Error de token de acceso al cliente no válido (p. 883)
• Error de incompatibilidad del token del cliente (p. 883)
• Problemas de conectividad de dispositivos remotos (p. 884)
Invalid access token: The access token was previously used and cannot be used again
El error se produce porque el proxy local solo puede usar el token de acceso del cliente (CAT) una vez y, a
continuación, deja de ser válido. Para resolver este error, gire el token de acceso del cliente en elSOURCE
modo de generar un nuevo CAT para la fuente. Para obtener un ejemplo que muestra cómo rotar el CAT
de origen, consulteEjemplo de CAT de origen rotativo (p. 883).
Si usa identificadores de cliente, puede reutilizar el CAT para volver a conectarse al túnel. Para reutilizar
el CAT, debe proporcionar el token del cliente junto con el CAT la primera vez que se conecte a un
túnel seguro. El túnel seguro almacena el token del cliente, por lo que, para los intentos de conexión
posteriores que utilicen el mismo token, también se debe proporcionar el token de cliente. Para obtener
más información sobre el uso de los tokens de cliente, consulte la implementación de referencia del proxy
local en GitHub.
Al utilizar los tokens de cliente, si utilizas un cliente en el modo fuente, es posible que aparezca el siguiente
error:
Invalid client token: The provided client token does not match the client token
that was previously set.
El error se produce porque el token de cliente proporcionado no coincide con el token de cliente que se
proporcionó con el CAT al acceder al túnel. Para resolver este error, gire el CAT en elSOURCE modo de
generar un nuevo CAT para la fuente. A continuación se muestra un ejemplo:
883
AWS IoT Core Guía para desarrolladores
Problemas de conectividad de dispositivos remotos
La ejecución de este comando genera un nuevo token de acceso a la fuente y devuelve el ARN del túnel.
{
"sourceAccessToken": "<source-access-token>",
"tunnelArn": "arn:aws:iot:<region>:<account-id>:tunnel/<tunnel-id>"
}
Ahora puede usar el nuevo token de origen para conectar el proxy local en modo fuente.
export AWSIOT_TUNNEL_ACCESS_TOKEN=<source-access-token>
./localproxy -r <region> -s <port>
...
Un dispositivo puede desconectarse por varios motivos. Para resolver el problema de conectividad, puede
girar el CAT en el destino si el dispositivo se ha desconectado por los siguientes motivos posibles:
$aws/things/<thing-name>/tunnels/notify
La ejecución de este comando genera los detalles del túnel y el CAT de su origen y destino.
{
"sourceAccessToken": "<source-access-token>",
"destinationAccessToken": "<destination-access-token>",
"tunnelId": "<tunnel-id>",
"tunnelArn": "arn:aws:iot:<region>:<account-id>:tunnel/tunnel-id"
}
884
AWS IoT Core Guía para desarrolladores
Problemas de conectividad de dispositivos remotos
{
"tunnel": {
...
"destinationConnectionState": {
"status": "DISCONNECTED"
},
...
}
}
Para resolver este error, ejecute laRotateTunnelAccessToken API con el cliente enDESTINATION
modo y las configuraciones del destino. Al ejecutar este comando, se revoca el token de acceso anterior,
se genera un nuevo token y se reenvía este token al tema de MQTT:
$aws/things/<thing-name>/tunnels/notify
La ejecución de este comando genera el nuevo token de acceso como se muestra a continuación. A
continuación, el token se entrega al dispositivo para que se conecte al túnel, si el agente del dispositivo
está configurado correctamente.
{
"destinationAccessToken": "destination-access-token",
"tunnelArn": "arn:aws:iot:region:account-id:tunnel/tunnel-id"
}
885
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de dispositivos
AWSproporciona varias formas diferentes de aprovisionar un dispositivo e instalar certificados de cliente
únicos en él. En esta sección se describe cada forma y cómo seleccionar la mejor para su solución de IoT.
Estas opciones se describen en detalle en el documento técnico titulado Fabricación y aprovisionamiento
de dispositivos con certificados X.509 en. AWS IoT Core
Si puede instalar de forma segura certificados de cliente únicos en sus dispositivos de IoT antes de
que se entreguen para que los utilice el usuario final, debe utilizar el just-in-timeaprovisionamiento
(JITP) (p. 895) o el just-in-timeregistro (JITR (p. 328)).
Con JITP y JITR, la autoridad certificadora (CA) utilizada para firmar el certificado del dispositivo
se registra AWS IoT y reconoce AWS IoT cuando el dispositivo se conecta por primera vez. El
dispositivo se aprovisiona AWS IoT en su primera conexión mediante los detalles de su plantilla de
aprovisionamiento.
Para obtener más información sobre una sola cosa, el JITP, el JITR y el aprovisionamiento masivo
de dispositivos que tienen certificados únicos, consulte. the section called “Aprovisionamiento de
dispositivos que tienen certificados de dispositivo” (p. 894)
• Los usuarios finales o los instaladores pueden usar una aplicación para instalar certificados en sus
dispositivos de IoT
Si no puede instalar de forma segura los certificados de cliente únicos en su dispositivo de IoT antes
de entregarlos al usuario final, pero el usuario final o un instalador pueden usar una aplicación para
registrar los dispositivos e instalar los certificados de dispositivo únicos, debe utilizar el proceso de
aprovisionamiento mediante un usuario de confianza (p. 890).
El uso de un usuario de confianza, como un usuario final o un instalador con una cuenta conocida,
puede simplificar el proceso de fabricación del dispositivo. En lugar de un certificado de cliente único, los
dispositivos tienen un certificado temporal que permite que el dispositivo se conecte AWS IoT durante
solo 5 minutos. Durante ese período de 5 minutos, el usuario de confianza obtiene un certificado de
cliente único con una vida útil más larga y lo instala en el dispositivo. La duración limitada del certificado
de reclamación minimiza el riesgo de que el certificado se vea comprometido.
Para obtener más información, consulte the section called “Aprovisionamiento por usuario de
confianza” (p. 890).
• Los usuarios finales NO PUEDEN usar una aplicación para instalar certificados en sus dispositivos de
IoT
886
AWS IoT Core Guía para desarrolladores
Dispositivos de aprovisionamiento en AWS IoT
Para obtener más información, consulte the section called “Aprovisionamiento por
reclamación” (p. 888).
• Un objeto de IoT.
Los objetos de IoT son entradas del registro de dispositivos de AWS IoT. Cada objeto tiene un nombre
único y un conjunto de atributos, y está asociado con un dispositivo físico. Los objetos se pueden definir
usando un tipo de objeto o agruparse en grupos de objetos. Para obtener más información, consulte
Administración de dispositivos con AWS IoT (p. 281).
Para que Fleet Hub indexe los datos del estado de conectividad de tu Thing, aprovisiona tu
Thing y configúralo para que el nombre de la cosa coincida con el ID de cliente utilizado en la
solicitud de conexión.
• Un certificado X.509
Los dispositivos utilizan certificados X.509 para realizar la autenticación mutua con AWS IoT. Puede
registrar un certificado existente o hacer que AWS IoT genere y registre un nuevo certificado por usted.
Un certificado se asocia a un dispositivo asociándolo al objeto que representa el dispositivo. También
debe copiar el certificado y la clave privada asociada en el dispositivo. Los dispositivos presentan el
certificado al conectarse a AWS IoT. Para obtener más información, consulte Autenticación (p. 310).
• Una política de IoT
Las políticas de IoT definen las operaciones en las que puede realizar un dispositivoAWS IoT. Las
políticas de IoT se asocian a certificados de dispositivo. Cuando un dispositivo presenta el certificado a
AWS IoT, se conceden los permisos especificados en la política. Para obtener más información, consulte
Autorización (p. 349). Cada dispositivo necesita un certificado para comunicarse con AWS IoT.
Puede utilizar el aprovisionamiento automatizado tanto si sus dispositivos tienen certificados únicos (y su
clave privada asociada) como si no.
887
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de dispositivos que no tienen certificados
de dispositivo mediante el aprovisionamiento de flotas
• Estas funciones de plano de control crean y administran las plantillas de aprovisionamiento de flotas y
configuran políticas de usuario de confianza.
• CreateProvisioningTemplate
• CreateProvisioningTemplateVersion
• DeleteProvisioningTemplate
• DeleteProvisioningTemplateVersion
• DescribeProvisioningTemplate
• DescribeProvisioningTemplateVersion
• ListProvisioningTemplates
• ListProvisioningTemplateVersions
• UpdateProvisioningTemplate
• Los usuarios de confianza pueden utilizar esta función de plano de control para generar una notificación
de incorporación temporal. Esta reclamación temporal se transmite al dispositivo durante la configuración
de Wi-Fi o un método similar.
• CreateProvisioningClaim
• La API MQTT utilizada durante el proceso de aprovisionamiento por los dispositivos con un certificado de
notificación de aprovisionamiento incrustado en un dispositivo o pasado a él por un usuario de confianza.
• the section called “CreateCertificateFromCsr” (p. 915)
• the section called “CreateKeysAndCertificate” (p. 917)
• the section called “RegisterThing” (p. 918)
888
AWS IoT Core Guía para desarrolladores
Aprovisionamiento por reclamación
También puede crear una plantilla de aprovisionamiento de flotas desde la consola de AWS IoT.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["iot:Connect"],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": ["iot:Publish","iot:Receive"],
"Resource": [
"arn:aws:iot:aws-region:aws-account-id:topic/$aws/certificates/create/
*",
"arn:aws:iot:aws-region:aws-account-id:topic/$aws/provisioning-
templates/templateName/provision/*"
]
},
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": [
"arn:aws:iot:aws-region:aws-account-id:topicfilter/$aws/certificates/
create/*",
"arn:aws:iot:aws-region:aws-account-id:topicfilter/$aws/provisioning-
templates/templateName/provision/*"
]
}
]
}
4. Cuando aprovisiona dispositivos, puede conceder al servicio de AWS IoT permiso para crear o
actualizar recursos de IoT, como objetos y certificados de la cuenta. Para ello, asocie la política
administrada AWSIoTThingsRegistration a un rol de IAM (denominado rol de aprovisionamiento)
que confíe en la entidad principal del servicio de AWS IoT.
5. Fabricar el dispositivo con el certificado de reclamación de aprovisionamiento incrustado de forma
segura en él.
El dispositivo ya está listo para ser entregado a donde se instalará para su uso.
Important
889
AWS IoT Core Guía para desarrolladores
Aprovisionamiento por usuario de confianza
1. El dispositivo utiliza el AWS IoTSDK para dispositivos, SDK para dispositivos móviles yAWS
IoTCliente de dispositivo (p. 1489) para conectarse y autenticarse con AWS IoT utilizando el
certificado de reclamación de aprovisionamiento que está instalado en el dispositivo.
Note
O bien
b. Llame CreateCertificateFromCsr (p. 915)para generar un certificado a partir de una
solicitud de firma de certificados que mantenga su clave privada segura.
3. Desde el dispositivo, llame a RegisterThing (p. 918) para registrar el dispositivo con AWS IoT y
crear recursos en la nube.
El servicio Fleet Provisioning utiliza una plantilla de aprovisionamiento para definir y crear recursos
en la nube, como elementos de IoT. La plantilla puede especificar los atributos y grupos a los que
pertenece la cosa. Los grupos de cosas deben existir antes de que se les pueda añadir algo nuevo.
4. Después de guardar el certificado permanente en el dispositivo, este debe desconectarse de la
sesión que inició con el certificado de reclamación de aprovisionamiento y volver a conectarse con el
certificado permanente.
Debe administrar el acceso y el permiso del usuario de confianza para realizar este
procedimiento. Una forma de hacerlo consiste en proporcionar y mantener una cuenta para el
usuario de confianza que lo autentique y le dé acceso a las AWS IoT funciones y operaciones de
API necesarias para realizar este procedimiento.
890
AWS IoT Core Guía para desarrolladores
Aprovisionamiento por usuario de confianza
{
"Effect": "Allow",
"Action": [
"iot:CreateProvisioningClaim"
],
"Resource": [
"arn:aws:iot:aws-region:aws-account-id:provisioningtemplate/templateName"
]
}
3. Cuando aprovisiona dispositivos, puede conceder al servicio de AWS IoT permiso para crear o
actualizar recursos de IoT, como objetos y certificados de la cuenta. Para ello, adjunte la política
AWSIoTThingsRegistration gestionada a una función de IAM (denominada función de
aprovisionamiento) que confíe en el principal del servicio. AWS IoT
4. Proporcione los medios para identificar a sus usuarios de confianza, por ejemplo, proporcionándoles
una cuenta que pueda autenticarlos y autorizar sus interacciones con las operaciones de AWS API
necesarias para registrar sus dispositivos.
O bien
b. Llame CreateCertificateFromCsr (p. 915)para generar un certificado a partir de una
solicitud de firma de certificados que mantenga su clave privada segura.
Note
891
AWS IoT Core Guía para desarrolladores
Uso de enlaces de preaprovisionamiento con la CLI de AWS
6. El dispositivo llama a RegisterThing (p. 918) para registrar el dispositivo con AWS IoT y crear
recursos en la nube.
El servicio Fleet Provisioning utiliza una plantilla de aprovisionamiento para definir y crear recursos
en la nube, como elementos de IoT. La plantilla puede especificar los atributos y grupos a los que
pertenece la cosa. Los grupos de cosas deben existir antes de que se les pueda añadir algo nuevo.
7. Después de guardar el certificado permanente en el dispositivo, el dispositivo debe desconectarse
de la sesión que inició con el certificado de reclamación de aprovisionamiento temporal y volver a
conectarse con el certificado permanente.
1. Cree una función Lambda que tenga una entrada y una salida definidas. Las funciones de Lambda
son altamente personalizables. allowProvisioningy parameterOverrides son necesarios para
crear enlaces de preaprovisionamiento. Para obtener más información sobre la creación de funciones
de Lambda, consulte Uso AWS Lambda con la interfaz de línea de AWS comandos.
{
"allowProvisioning": True,
"parameterOverrides": {
"incomingKey0": "incomingValue0",
"incomingKey1": "incomingValue1"
}
}
2. AWS IoTutiliza políticas basadas en recursos para llamar a Lambda, por lo que debe dar AWS IoT
permiso para llamar a su función Lambda.
Important
El siguiente es un ejemplo en el que se utiliza el permiso de adición para dar permiso de IoT a su
Lambda.
892
AWS IoT Core Guía para desarrolladores
Uso de enlaces de preaprovisionamiento con la CLI de AWS
{
"templateArn": "arn:aws:iot:us-east-1:1234564789012:provisioningtemplate/
myTemplate",
"defaultVersionId": 1,
"templateName": myTemplate
}
También puede cargar un parámetro desde un archivo en lugar de escribirlo todo como un valor de
parámetro de línea de comandos para ahorrar tiempo. Para obtener más información, consulte Carga
de AWS CLI parámetros desde un archivo. A continuación se muestra el parámetro template en
formato JSON expandido:
{
"Parameters" : {
"DeviceLocation": {
"Type": "String"
}
},
"Mappings": {
"LocationTable": {
"Seattle": {
"LocationUrl": "https://example.aws"
}
}
},
"Resources" : {
"thing" : {
"Type" : "AWS::IoT::Thing",
"Properties" : {
"AttributePayload" : {
"version" : "v1",
"serialNumber" : "serialNumber"
},
"ThingName" : {"Fn::Join":["",["ThingPrefix_",
{"Ref":"SerialNumber"}]]},
"ThingTypeName" : {"Fn::Join":["",["ThingTypePrefix_",
{"Ref":"SerialNumber"}]]},
"ThingGroups" : ["widgets", "WA"],
"BillingGroup": "BillingGroup"
},
"OverrideSettings" : {
"AttributePayload" : "MERGE",
"ThingTypeName" : "REPLACE",
"ThingGroups" : "DO_NOTHING"
}
},
"certificate" : {
"Type" : "AWS::IoT::Certificate",
"Properties" : {
"CertificateId": {"Ref": "AWS::IoT::Certificate::Id"},
893
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de dispositivos
que tienen certificados de dispositivo
"Status" : "Active"
}
},
"policy" : {
"Type" : "AWS::IoT::Policy",
"Properties" : {
"PolicyDocument" : {
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action":["iot:Publish"],
"Resource": ["arn:aws:iot:us-east-1:504350838278:topic/foo/
bar"]
}]
}
}
}
},
"DeviceConfiguration": {
"FallbackUrl": "https://www.example.com/test-site",
"LocationUrl": {
"Fn::FindInMap": ["LocationTable",{"Ref": "DeviceLocation"},
"LocationUrl"]}
}
}
{
"targetArn" : "arn:aws:lambda:us-
east-1:765219403047:function:pre_provisioning_test",
"payloadVersion" : "2020-04-01"
}
• Aprovisionamiento de un solo objeto con una plantilla de aprovisionamiento. Esta es una buena opción si
solo necesita aprovisionar los dispositivos de uno en uno.
• ust-in-timeAprovisionamiento J (JITP) con una plantilla que aprovisiona un dispositivo cuando se
conecta por primera vez. AWS IoT Esta es una buena opción si necesita registrar un gran número
de dispositivos, pero no dispone de información sobre ellos que se pueda incluir en una lista de
aprovisionamiento por lotes.
• Registro masivo Esta opción le permite especificar una lista de valores de aprovisionamiento de un solo
objeto que se almacenan en un archivo en un bucket de S3. Este enfoque funciona bien si tiene un gran
número de dispositivos conocidos cuyas características puede incluir en una lista.
Temas
• Aprovisionamiento de un solo objeto (p. 895)
• ust-in-timeAprovisionamiento de J (p. 895)
• Registro masivo (p. 899)
894
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de un solo objeto
--template-body
La plantilla de aprovisionamiento.
--parameters
Una lista de pares de nombre-valor para los parámetros utilizados en la plantilla de aprovisionamiento,
en formato JSON (por ejemplo, {"ThingName" : "MyProvisionedThing", "CSR" : "csr-
text"}).
RegisterThingo register-thing devuelve los ARN de los recursos y el texto del certificado que creó:
{
"certificatePem": "certificate-text",
"resourceArns": {
"PolicyLogicalName": "arn:aws:iot:us-
west-2:123456789012:policy/2A6577675B7CD1823E271C7AAD8184F44630FFD7",
"certificate": "arn:aws:iot:us-west-2:123456789012:cert/
cd82bb924d4c6ccbb14986dcb4f40f30d892cc6b3ce7ad5008ed6542eea2b049",
"thing": "arn:aws:iot:us-west-2:123456789012:thing/MyProvisionedThing"
}
}
ust-in-timeAprovisionamiento de J
Puede utilizar el just-in-time aprovisionamiento (JITP) para aprovisionar sus dispositivos cuando intenten
conectarse por primera vez. AWS IoT Para aprovisionar el dispositivo, debe habilitar el registro automático
y asociar una plantilla de aprovisionamiento al certificado de CA utilizado para firmar el certificado de
dispositivo. Los éxitos y errores de aprovisionamiento se registran como Métricas de aprovisionamiento de
dispositivos (p. 479) en AmazonCloudWatch.
Temas
• Descripción general de JITP (p. 895)
• Registrar CA mediante una plantilla de aprovisionamiento (p. 898)
• Registrar CA mediante el nombre de la plantilla de aprovisionamiento (p. 899)
AWS IoT define los siguientes parámetros que puede declarar y a los que puede hacer referencia en las
plantillas de aprovisionamiento:
895
AWS IoT Core Guía para desarrolladores
ust-in-timeAprovisionamiento de J
• AWS::IoT::Certificate::Country
• AWS::IoT::Certificate::Organization
• AWS::IoT::Certificate::OrganizationalUnit
• AWS::IoT::Certificate::DistinguishedNameQualifier
• AWS::IoT::Certificate::StateName
• AWS::IoT::Certificate::CommonName
• AWS::IoT::Certificate::SerialNumber
• AWS::IoT::Certificate::Id
Los valores de estos parámetros de plantilla de aprovisionamiento se limitan a lo que JITP puede
extraer del campo de asunto del certificado del dispositivo que se va a aprovisionar. El certificado
debe contener valores para todos los parámetros en el cuerpo de la plantilla. El parámetro
AWS::IoT::Certificate::Id se refiere a un ID generado internamente, no un ID que se encuentra en
el certificado. Puede obtener el valor de este ID utilizando la función principal() dentro de una regla de
AWS IoT.
Note
{
"Parameters":{
"AWS::IoT::Certificate::CommonName":{
"Type":"String"
},
"AWS::IoT::Certificate::SerialNumber":{
"Type":"String"
},
"AWS::IoT::Certificate::Country":{
"Type":"String"
},
"AWS::IoT::Certificate::Id":{
"Type":"String"
}
},
"Resources":{
"thing":{
"Type":"AWS::IoT::Thing",
"Properties":{
"ThingName":{
"Ref":"AWS::IoT::Certificate::CommonName"
},
"AttributePayload":{
"version":"v1",
"serialNumber":{
"Ref":"AWS::IoT::Certificate::SerialNumber"
}
},
"ThingTypeName":"lightBulb-versionA",
"ThingGroups":[
"v1-lightbulbs",
896
AWS IoT Core Guía para desarrolladores
ust-in-timeAprovisionamiento de J
{
"Ref":"AWS::IoT::Certificate::Country"
}
]
},
"OverrideSettings":{
"AttributePayload":"MERGE",
"ThingTypeName":"REPLACE",
"ThingGroups":"DO_NOTHING"
}
},
"certificate":{
"Type":"AWS::IoT::Certificate",
"Properties":{
"CertificateId":{
"Ref":"AWS::IoT::Certificate::Id"
},
"Status":"ACTIVE"
}
},
"policy":{
"Type":"AWS::IoT::Policy",
"Properties":{
"PolicyDocument":"{ \"Version\": \"2012-10-17\", \"Statement\": [{ \"Effect
\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-
east-1:123456789012:topic/foo/bar\"] }] }"
}
}
}
}
Tenga en cuenta que el aprovisionamiento del dispositivo falla si el certificado no tiene todas
las propiedades mencionadas en la Parameters sección de. templateBody Por ejemplo, si
AWS::IoT::Certificate::Country está incluido en la plantilla, pero el certificado no tiene ninguna
Country propiedad, se produce un error en el aprovisionamiento del dispositivo.
También puede usar CloudTrail para solucionar los problemas con su plantilla JITP. Para obtener
información sobre las métricas que se registran en AmazonCloudWatch, consulteMétricas de
aprovisionamiento de dispositivos (p. 479). Para obtener más información sobre las plantillas de
aprovisionamiento, consulte Plantillas de aprovisionamiento. (p. 900)
Note
897
AWS IoT Core Guía para desarrolladores
ust-in-timeAprovisionamiento de J
en contacto con el servicio de atención al AWScliente para aumentar tus cuotas límite si es
necesario.
1. Guarde la plantilla de aprovisionamiento y la información del ARN del rol, como en el siguiente
ejemplo, como un archivo JSON:
{
"templateBody" : "{\r\n \"Parameters\" : {\r\n
\"AWS::IoT::Certificate::CommonName\": {\r\n \"Type\": \"String\"\r\n
},\r\n \"AWS::IoT::Certificate::SerialNumber\": {\r\n \"Type
\": \"String\"\r\n },\r\n \"AWS::IoT::Certificate::Country\": {\r\n
\"Type\": \"String\"\r\n },\r\n \"AWS::IoT::Certificate::Id
\": {\r\n \"Type\": \"String\"\r\n }\r\n },\r\n \"Resources
\": {\r\n \"thing\": {\r\n \"Type\": \"AWS::IoT::Thing\",\r\n
\"Properties\": {\r\n \"ThingName\": {\r\n
\"Ref\": \"AWS::IoT::Certificate::CommonName\"\r\n },\r\n
\"AttributePayload\": {\r\n \"version\": \"v1\",
\r\n \"serialNumber\": {\r\n \"Ref\":
\"AWS::IoT::Certificate::SerialNumber\"\r\n }\r\n
},\r\n \"ThingTypeName\": \"lightBulb-versionA\",\r\n
\"ThingGroups\": [\r\n \"v1-lightbulbs\",\r\n
{\r\n \"Ref\": \"AWS::IoT::Certificate::Country
\"\r\n }\r\n ]\r\n },\r\n
\"OverrideSettings\": {\r\n \"AttributePayload\": \"MERGE\",\r\n
\"ThingTypeName\": \"REPLACE\",\r\n \"ThingGroups\":
\"DO_NOTHING\"\r\n }\r\n },\r\n \"certificate\": {\r\n
\"Type\": \"AWS::IoT::Certificate\",\r\n \"Properties\": {\r\n
\"CertificateId\": {\r\n \"Ref\": \"AWS::IoT::Certificate::Id
\"\r\n },\r\n \"Status\": \"ACTIVE\"\r\n },
\r\n \"OverrideSettings\": {\r\n \"Status\": \"DO_NOTHING
\"\r\n }\r\n },\r\n \"policy\": {\r\n \"Type
\": \"AWS::IoT::Policy\",\r\n \"Properties\": {\r\n
\"PolicyDocument\": \"{ \\\"Version\\\": \\\"2012-10-17\\\", \\\"Statement\\\": [{ \\
\"Effect\\\": \\\"Allow\\\", \\\"Action\\\":[\\\"iot:Publish\\\"], \\\"Resource\\\": [\
\\"arn:aws:iot:us-east-1:123456789012:topic\/foo\/bar\\\"] }] }\"\r\n }\r\n
}\r\n }\r\n}",
"roleArn" : "arn:aws:iam::123456789012:role/JITPRole"
}
En este ejemplo, el valor del templateBody campo debe ser un objeto JSON especificado
como cadena de escape y solo puede usar los valores de la lista anterior (p. 895). Puede
utilizar distintas herramientas para crear la salida JSON necesaria, como json.dumps (Python)
o JSON.stringify (Node). El valor del campo roleARN debe ser el ARN de un rol que tenga
AWSIoTThingsRegistration asociado. Además, la plantilla puede utilizar un PolicyName
existente en lugar del PolicyDocument insertado en el ejemplo.
2. Registre un certificado de CA con la operación de la API RegisterCACertificate o el comando CLI.
register-ca-certificate Especificará el directorio de la plantilla de aprovisionamiento y la
información de ARN del rol que guardó en el paso anterior:
898
AWS IoT Core Guía para desarrolladores
Registro masivo
Note
Registro masivo
Puede utilizar el start-thing-registration-taskcomando para registrar cosas de forma masiva.
Este comando utiliza una plantilla de aprovisionamiento, un nombre de bucket de S3, un nombre de clave
y un ARN de rol que permite el acceso al archivo del bucket de S3. El archivo en el bucket de S3 contiene
los valores utilizados para reemplazar los parámetros de la plantilla. El archivo debe ser un archivo JSON
899
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de plantillas
delimitado por nueva línea. Cada línea contiene todos los valores de los parámetros para el registro de un
único dispositivo. Por ejemplo:
Las siguientes operaciones de API relacionadas con el registro masivo pueden resultar útiles:
Note
• Solo puede ejecutarse una tarea de operación de registro masivo a la vez (por cuenta).
• Las operaciones de registro masivo se denominan operaciones de API del plano de AWS IoT
control. Estas llamadas pueden superar las cuotas AWS IoT límite de tu cuenta y provocar
errores de limitación. Póngase en contacto con el servicio de AWSatención al cliente para AWS
IoT aumentar sus cuotas límite, si es necesario.
Aprovisionamiento de plantillas
Una plantilla de aprovisionamiento es un documento JSON que utiliza parámetros para describir los
recursos que el dispositivo debe usar para interactuar con AWS IoT. Una plantilla de aprovisionamiento
contiene dos secciones: Parameters y. Resources Hay dos tipos de plantillas de aprovisionamiento en
AWS IoT. Una se usa para el just-in-time aprovisionamiento (JITP) y el registro masivo, y la segunda se
usa para el aprovisionamiento de flotas.
Temas
• Sección de parámetros (p. 900)
• Sección de recursos (p. 901)
• Ejemplo de plantilla para registro masivo (p. 905)
• Ejemplo de plantilla para just-in-time aprovisionamiento (JITP) (p. 905)
• Aprovisionamiento de flotas (p. 907)
Sección de parámetros
La sección Parameters declara los parámetros utilizados en la sección Resources. Cada parámetro
declara un nombre, un tipo y un valor predeterminado opcional. El valor predeterminado se usa cuando el
diccionario trasladado con la plantilla no contiene un valor para el parámetro. La sección Parameters de
un documento de plantilla tiene el siguiente aspecto:
{
"Parameters" : {
"ThingName" : {
"Type" : "String"
},
900
AWS IoT Core Guía para desarrolladores
Sección de recursos
"SerialNumber" : {
"Type" : "String"
},
"Location" : {
"Type" : "String",
"Default" : "WA"
},
"CSR" : {
"Type" : "String"
}
}
}
Sección de recursos
La Resources sección del cuerpo de la plantilla declara los recursos necesarios para que el dispositivo
se comuniqueAWS IoT: una cosa, un certificado y una o más políticas de IoT. Cada recurso especifica un
nombre lógico, un tipo y un conjunto de propiedades.
El tipo especifica el tipo de recurso que se va a declarar. Los tipos válidos son:
• AWS::IoT::Thing
• AWS::IoT::Certificate
• AWS::IoT::Policy
Las propiedades que especifique dependen del tipo de recurso que está declarando.
Recursos de objetos
Los recursos de objetos se declaran mediante las siguientes propiedades:
• ThingName: Cadena.
• AttributePayload: opcional. Una lista de pares de nombre-valor.
• ThingTypeName: opcional. Cadena para un tipo de objeto asociado para el objeto.
• ThingGroups: opcional. Una lista de grupos a los que pertenece el objeto.
• BillingGroup: opcional. Cadena para el nombre de un grupo de facturación asociado.
• PackageVersions: opcional. Cadena para nombres de paquetes y versiones asociados.
Recursos de certificados
Puede especificar certificados de una de las siguientes maneras:
901
AWS IoT Core Guía para desarrolladores
Sección de recursos
Note
Cuando declare un certificado en una plantilla, use solo uno de estos métodos. Por ejemplo, si
utiliza un CSR, no puede especificar también un ID de certificado o un certificado de dispositivo.
Para obtener más información, consulte Certificados de cliente X.509 (p. 314).
Para obtener más información, consulte Información general del certificado X.509 (p. 311).
• CertificateSigningRequest: Cadena.
• CertificateId: Cadena.
• CertificatePem: Cadena.
• CACertificatePem: Cadena.
• Status: opcional. Cadena, que puede ser ACTIVE o INACTIVE. El valor predeterminado es ACTIVE.
Ejemplos:
{
"certificate" : {
"Type" : "AWS::IoT::Certificate",
"Properties" : {
"CertificateSigningRequest": {"Ref" : "CSR"},
"Status" : "ACTIVE"
}
}
}
{
"certificate" : {
"Type" : "AWS::IoT::Certificate",
"Properties" : {
"CertificateId": {"Ref" : "CertificateId"}
}
}
}
• Certificado especificado con un archivo .pem de certificado existente y un archivo .pem de certificado de
CA:
{
"certificate" : {
"Type" : "AWS::IoT::Certificate",
"Properties" : {
"CACertificatePem": {"Ref" : "CACertificatePem"},
"CertificatePem": {"Ref" : "CertificatePem"}
}
}
}
Recursos de políticas
Los recursos de políticas se declaran mediante una de las siguientes propiedades:
902
AWS IoT Core Guía para desarrolladores
Sección de recursos
• PolicyName: opcional. Cadena. Hash es el valor predeterminado del documento de políticas. Solo
PolicyName pueden hacer referencia a AWS IoT políticas, pero no a políticas de IAM. Si utiliza una
política de AWS IoT existente, escriba el nombre de la política para la propiedad PolicyName. No
incluya la propiedad PolicyDocument.
• PolicyDocument: opcional. Un objeto JSON especificado como una cadena de escape. Si
PolicyDocument no se proporciona, la política debe haberse creado ya.
Note
Si una sección Policy está presente, PolicyName o PolicyDocument, pero no ambas, debe
especificarse.
Configuración de invalidación
Si una plantilla especifica un recurso que ya existe, la sección OverrideSettings le permite especificar
la acción que se debe realizar:
DO_NOTHING
Cuando declara un recurso de objeto, puede especificar OverrideSettings para las siguientes
propiedades:
• ATTRIBUTE_PAYLOAD
• THING_TYPE_NAME
• THING_GROUPS
Ejemplo de recursos
El siguiente fragmento de plantilla declara un objeto, un certificado y una política:
{
"Resources" : {
"thing" : {
"Type" : "AWS::IoT::Thing",
903
AWS IoT Core Guía para desarrolladores
Sección de recursos
"Properties" : {
"ThingName" : {"Ref" : "ThingName"},
"AttributePayload" : { "version" : "v1", "serialNumber" : {"Ref" :
"SerialNumber"}},
"ThingTypeName" : "lightBulb-versionA",
"ThingGroups" : ["v1-lightbulbs", {"Ref" : "Location"}]
},
"OverrideSettings" : {
"AttributePayload" : "MERGE",
"ThingTypeName" : "REPLACE",
"ThingGroups" : "DO_NOTHING"
}
},
"certificate" : {
"Type" : "AWS::IoT::Certificate",
"Properties" : {
"CertificateSigningRequest": {"Ref" : "CSR"},
"Status" : "ACTIVE"
}
},
"policy" : {
"Type" : "AWS::IoT::Policy",
"Properties" : {
"PolicyDocument" : "{ \"Version\": \"2012-10-17\", \"Statement\":
[{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-
east-1:123456789012:topic/foo/bar\"] }] }"
}
}
}
}
Las propiedades de objeto incluyen el nombre de objeto, un conjunto de atributos, un nombre de tipo de
objeto opcional y una lista opcional de grupos de objetos a los que pertenece el objeto.
Las propiedades incluyen el CSR para el certificado y el establecimiento del estado en ACTIVE. El texto
CSR se transfiere como parámetro en el diccionario transferido con la plantilla.
904
AWS IoT Core Guía para desarrolladores
Ejemplo de plantilla para registro masivo
(El valor del campo PolicyDocument debe ser un objeto JSON especificado como una cadena de
escape).
{
"Parameters" : {
"ThingName" : {
"Type" : "String"
},
"SerialNumber" : {
"Type" : "String"
},
"Location" : {
"Type" : "String",
"Default" : "WA"
},
"CSR" : {
"Type" : "String"
}
},
"Resources" : {
"thing" : {
"Type" : "AWS::IoT::Thing",
"Properties" : {
"ThingName" : {"Ref" : "ThingName"},
"AttributePayload" : { "version" : "v1", "serialNumber" : {"Ref" :
"SerialNumber"}},
"ThingTypeName" : "lightBulb-versionA",
"ThingGroups" : ["v1-lightbulbs", {"Ref" : "Location"}]
}
},
"certificate" : {
"Type" : "AWS::IoT::Certificate",
"Properties" : {
"CertificateSigningRequest": {"Ref" : "CSR"},
"Status" : "ACTIVE"
}
},
"policy" : {
"Type" : "AWS::IoT::Policy",
"Properties" : {
"PolicyDocument" : "{ \"Version\": \"2012-10-17\", \"Statement\":
[{ \"Effect\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-
east-1:123456789012:topic/foo/bar\"] }] }"
}
}
}
}
905
AWS IoT Core Guía para desarrolladores
Ejemplo de plantilla para just-
in-time aprovisionamiento (JITP)
"Parameters":{
"AWS::IoT::Certificate::CommonName":{
"Type":"String"
},
"AWS::IoT::Certificate::SerialNumber":{
"Type":"String"
},
"AWS::IoT::Certificate::Country":{
"Type":"String"
},
"AWS::IoT::Certificate::Id":{
"Type":"String"
}
},
"Resources":{
"thing":{
"Type":"AWS::IoT::Thing",
"Properties":{
"ThingName":{
"Ref":"AWS::IoT::Certificate::CommonName"
},
"AttributePayload":{
"version":"v1",
"serialNumber":{
"Ref":"AWS::IoT::Certificate::SerialNumber"
}
},
"ThingTypeName":"lightBulb-versionA",
"ThingGroups":[
"v1-lightbulbs",
{
"Ref":"AWS::IoT::Certificate::Country"
}
]
},
"OverrideSettings":{
"AttributePayload":"MERGE",
"ThingTypeName":"REPLACE",
"ThingGroups":"DO_NOTHING"
}
},
"certificate":{
"Type":"AWS::IoT::Certificate",
"Properties":{
"CertificateId":{
"Ref":"AWS::IoT::Certificate::Id"
},
"Status":"ACTIVE"
}
},
"policy":{
"Type":"AWS::IoT::Policy",
"Properties":{
"PolicyDocument":"{ \"Version\": \"2012-10-17\", \"Statement\": [{ \"Effect
\": \"Allow\", \"Action\":[\"iot:Publish\"], \"Resource\": [\"arn:aws:iot:us-
east-1:123456789012:topic/foo/bar\"] }] }"
}
}
}
}
Important
Debe utilizarla CertificateId en una plantilla que se utilice para el aprovisionamiento de JIT.
906
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de flotas
Para obtener más información sobre el tipo de plantilla de aprovisionamiento, consulte la referencia
CreateProvisioningTemplatede la AWS API.
Para obtener más información sobre cómo utilizar esta plantilla para el just-in-time aprovisionamiento,
consulte: J. ust-in-time
Aprovisionamiento de flotas
Las plantillas de aprovisionamiento de flotas las utiliza AWS IoT para definir la configuración de la nube
y del dispositivo. Estas plantillas utilizan los mismos parámetros y recursos que las plantillas de registro
masivo y JITP. Para obtener más información, consulte Aprovisionamiento de plantillas (p. 900).
Las plantillas de aprovisionamiento de flotas pueden contener una sección Mapping y una sección
DeviceConfiguration. Puede utilizar funciones intrínsecas dentro de una plantilla de aprovisionamiento
de flota para generar una configuración específica para el dispositivo. Las plantillas de aprovisionamiento
de flotas son recursos con nombre y se identifican mediante el ARN (por ejemplo, arn:aws:iot:us-
west-2:1234568788:provisioningtemplate/templateName).
Mapeos
La sección Mappings opcional hace coincidir una clave con el conjunto correspondiente de valores
identificados. Por ejemplo, si desea establecer valores en función de una AWS región, puede crear un
mapeo que utilice el Región de AWS nombre como clave y contenga los valores que desea especificar
para cada región específica. Puede utilizar la función intrínseca Fn::FindInMap para recuperar valores
en una asignación.
{
"DeviceConfiguration": {
"Foo":"Bar"
}
}
Si envías mensajes a tus dispositivos mediante el formato de carga útil de notación de JavaScript
objetos (JSON), AWS IoT Core formatea estos datos como JSON. Si utilizas el formato de carga útil de
representación binaria concisa de objetos (CBOR), AWS IoT Core formatea estos datos como CBOR. La
DeviceConfiguration sección no admite objetos JSON anidados.
Funciones intrínsecas
Las funciones intrínsecas se utilizan en cualquier sección de la plantilla de aprovisionamiento, excepto en
la sección Mappings.
Fn::Join
907
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de flotas
Fn::Select
Fn::Select no comprueba si hay valores null o si el índice queda fuera de los límites de
la matriz. Ambas condiciones dan lugar a un error de aprovisionamiento, por lo que debe
asegurarse de elegir un valor de índice válido y de que la lista contiene valores distintos de
null.
Fn::FindInMap
Devuelve el valor correspondiente a claves en una asignación de dos niveles declarada en la sección
Mappings.
Fn::Split
Divide una cadena en una lista de valores de cadena para que pueda seleccionar un elemento de la
lista de cadenas. Especifica un delimitador que determina dónde se divide la cadena (por ejemplo, una
coma). Después de dividir una cadena, utilice Fn::Select para seleccionar un elemento.
Por ejemplo, si una cadena delimitada por comas de IDs de subred se importa a la plantilla de
pila, puede dividir la cadena en cada coma. En la lista de ID de subred, utilice Fn::Select para
especificar el ID de subred de un recurso.
Fn::Sub
Sustituye variables en una cadena de entrada por los valores que especifique. Puede utilizar esta
función para crear comandos o salidas que incluyan valores que no están disponibles hasta que crea o
actualiza una pila.
908
AWS IoT Core Guía para desarrolladores
Enlaces de preaprovisionamiento
Note
Enlaces de preaprovisionamiento
AWSrecomienda utilizar funciones de enlace previo al aprovisionamiento al crear plantillas de
aprovisionamiento para permitir un mayor control de los dispositivos incorporados en su cuenta y cuántos.
Los ganchos de preaprovisionamiento son funciones de Lambda que validan los parámetros transferidos
desde el dispositivo antes de permitir el aprovisionamiento del dispositivo. Esta función Lambda debe
existir en tu cuenta antes de aprovisionar un dispositivo, ya que se activa cada vez que un dispositivo envía
una solicitud. the section called “RegisterThing” (p. 918)
Important
Para aprovisionar los dispositivos, la función Lambda debe aceptar el objeto de entrada y devolver
el objeto de salida descrito en esta sección. El aprovisionamiento continúa solo si la función Lambda
devuelve un objeto con. "allowProvisioning": True
909
AWS IoT Core Guía para desarrolladores
Preaprovisionamiento de entrada de enlace
{
"claimCertificateId" : "string",
"certificateId" : "string",
"certificatePem" : "string",
"templateArn" : "arn:aws:iot:us-east-1:1234567890:provisioningtemplate/MyTemplate",
"clientId" : "221a6d10-9c7f-42f1-9153-e52e6fc869c1",
"parameters" : {
"string" : "string",
...
}
}
El parameters objeto pasado a la función Lambda contiene las propiedades del parameters argumento
pasado en la carga útil de la the section called “RegisterThing” (p. 918) solicitud.
{
"allowProvisioning": true,
"parameterOverrides" : {
"Key": "newCustomValue",
...
}
}
import json
910
AWS IoT Core Guía para desarrolladores
Ejemplo de gancho de preaprovisionamiento Lambda
return {
'allowProvisioning': True,
'parameterOverrides': {
'DeviceLocation': 'Seattle'
}
}
Java
Clase de controlador:
package example;
import java.util.Map;
import java.util.HashMap;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
return response;
}
Clase de solicitud:
package example;
import java.util.Map;
import lombok.Builder;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PreProvisioningHookRequest {
private String claimCertificateId;
private String certificateId;
private String certificatePem;
private String templateArn;
private String clientId;
private Map<String, String> parameters;
}
Clase de respuesta:
911
AWS IoT Core Guía para desarrolladores
Creación de políticas y roles de IAM para
un usuario que instala un dispositivo
package example;
import java.util.Map;
import lombok.Builder;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PreProvisioningHookResponse {
private boolean allowProvisioning;
private Map<String, String> parameterOverrides;
}
JavaScript
Estos procedimientos se deben utilizar únicamente cuando lo indique la AWS IoT consola.
Para ir a esta página desde la consola, abre Crear una nueva plantilla de aprovisionamiento.
Mientras realiza este procedimiento, cambiará entre la consola de IAM y la AWS IoT consola. Te
recomendamos que abras ambas consolas al mismo tiempo mientras realizas este procedimiento.
912
AWS IoT Core Guía para desarrolladores
Crear un rol de IAM para el usuario
que instalará un dispositivo
Para crear una política de IAM para el usuario que instalará un dispositivo
Después de crear la nueva política, the section called “Crear un rol de IAM para el usuario que instalará un
dispositivo” (p. 913) continúe creando la entrada de rol del usuario a la que adjuntará esta política.
Para crear una política de IAM para el usuario que instalará un dispositivo
a. En Nombre de rol, introduzca un nombre de rol que le ayude a recordar el propósito del rol.
b. En Descripción, puede elegir introducir una descripción opcional del rol. Esto no es obligatorio
para continuar.
913
AWS IoT Core Guía para desarrolladores
Actualizar una política existente
para autorizar una plantilla nueva
Después de crear el nuevo rol, regrese a la AWS IoT consola para continuar con la creación de la plantilla.
Este fragmento debe colocarse antes del ] carácter de cierre de la matriz. Statement Puede
que tengas que añadir una coma antes o después de este fragmento para corregir cualquier
error de sintaxis.
{
"Effect": "Allow",
"Action": [
"iot:CreateProvisioningClaim"
],
"Resource": [
"--PUT YOUR NEW TEMPLATE ARN HERE--"
]
}
8. Vaya a la página de la AWS IoT consola en la que ha seleccionado Modificar los permisos del rol de
usuario.
9. Busque el ARN del recurso de la plantilla y seleccione Copiar.
10. Vuelva a la consola de IAM.
11. Pegue el nombre de recurso de Amazon (ARN) copiado en la parte superior de la lista de ARN de
plantilla de la Statement matriz para que sea la primera entrada.
Si este es el único ARN de la matriz, elimina la coma al final del valor que acabas de pegar.
914
AWS IoT Core Guía para desarrolladores
API de MQTT de aprovisionamiento de dispositivos
12. Revise la declaración de política actualizada y corrija los errores indicados por el editor.
13. Para guardar el documento de política actualizado, seleccione Revisar política.
14. Revise la política y, a continuación, seleccione Guardar cambios.
15. Vuelva a la consola de AWS IoT.
Esta API admite búferes de respuestas en formato de representación binaria concisa de objetos (CBOR) y
en notación de JavaScript objetos (JSON), según el formato de carga útil del tema. Sin embargo, para
una mayor claridad, los ejemplos de respuesta y solicitud de esta sección se muestran en formato JSON.
Important
Antes de publicar un tema de mensaje de solicitud, suscríbase a los temas de respuesta para
recibir la respuesta. Los mensajes utilizados por esta API utilizan el protocolo de publicación/
suscripción de MQTT para proporcionar una interacción de solicitud y respuesta.
Si no se suscribe a los temas de respuesta antes de publicar una solicitud, es posible que no
reciba los resultados de dicha solicitud.
CreateCertificateFromCsr
Crea un certificado a partir de una solicitud de firma de certificados (CSR). AWS IoTproporciona
certificados de cliente firmados por la autoridad de certificación (CA) raíz de Amazon. El nuevo certificado
tiene un estado PENDING_ACTIVATION. Cuando llama a RegisterThing para aprovisionar un objeto
con este certificado, el estado del certificado cambia a la plantilla ACTIVE o INACTIVE tal como se
describe en ella.
Para obtener más información sobre la creación de un certificado de cliente mediante su certificado de
autoridad de certificación y una solicitud de firma de certificados, consulteCreación de un certificado de
cliente mediante el certificado de entidad de certificación (p. 324).
Note
915
AWS IoT Core Guía para desarrolladores
CreateCertificateFromCsr
Solicitud de CreateCertificateFromCsr
Publicar un mensaje con el tema $aws/certificates/create-from-csr/payload-format.
payload-format
CreateCertificateFromCsrsolicitar carga
{
"certificateSigningRequest": "string"
}
certificateSigningRequest
CreateCertificateFromCsrrespuesta
Suscripción a $aws/certificates/create-from-csr/payload-format/accepted
payload-format
{
"certificateOwnershipToken": "string",
"certificateId": "string",
"certificatePem": "string"
}
certificateOwnershipToken
Error de CreateCertificateFromCsr
Para recibir respuestas de error, suscríbase a $aws/certificates/create-from-csr/payload-
format/rejected.
916
AWS IoT Core Guía para desarrolladores
CreateKeysAndCertificate
payload-format
{
"statusCode": int,
"errorCode": "string",
"errorMessage": "string"
}
statusCode
Código de error
errorMessage
Mensaje de error.
CreateKeysAndCertificate
Crea nuevas claves y un certificado. AWS IoTproporciona certificados de cliente firmados por la autoridad
de certificación (CA) raíz de Amazon. El nuevo certificado tiene un estado PENDING_ACTIVATION.
Cuando llama a RegisterThing para aprovisionar un objeto con este certificado, el estado del certificado
cambia a la plantilla ACTIVE o INACTIVE tal como se describe en ella.
Note
Solicitud de CreateKeysAndCertificate
Publicar un mensaje en $aws/certificates/create/payload-format con una carga de mensajes
vacía.
payload-format
CreateKeysAndCertificaterespuesta
Suscripción a $aws/certificates/create/payload-format/accepted
payload-format
917
AWS IoT Core Guía para desarrolladores
RegisterThing
CreateKeysAndCertificaterespuesta
{
"certificateId": "string",
"certificatePem": "string",
"privateKey": "string",
"certificateOwnershipToken": "string"
}
certificateId
El ID del certificado.
certificatePem
La clave privada.
certificateOwnershipToken
Error de CreateKeysAndCertificate
Para recibir respuestas de error, suscríbase a $aws/certificates/create/payload-format/
rejected.
payload-format
{
"statusCode": int,
"errorCode": "string",
"errorMessage": "string"
}
statusCode
Código de error
errorMessage
Mensaje de error.
RegisterThing
Aprovisiona un objeto mediante una plantilla predefinida.
918
AWS IoT Core Guía para desarrolladores
RegisterThing
Solicitud de RegisterThing
Publica un mensaje en $aws/provisioning-templates/templateName/provision/payload-
format.
payload-format
RegisterThingsolicitar carga
{
"certificateOwnershipToken": "string",
"parameters": {
"string": "string",
...
}
}
certificateOwnershipToken
El token para comprobar la propiedad del certificado. El token lo genera AWS IoT cuando se crea un
certificado a través de MQTT.
parameters
Opcional. Pares clave-valor del dispositivo que utilizan los enlaces de preaprovisionamiento (p. 909)
para evaluar la solicitud de registro.
RegisterThingrespuesta
Suscripción a $aws/provisioning-templates/templateName/provision/payload-format/
accepted
payload-format
{
"deviceConfiguration": {
"string": "string",
...
},
"thingName": "string"
}
deviceConfiguration
919
AWS IoT Core Guía para desarrolladores
RegisterThing
thingName
RegisterThingrespuesta de error
Para recibir respuestas de error, suscríbase a $aws/provisioning-templates/templateName/
provision/payload-format/rejected.
payload-format
{
"statusCode": int,
"errorCode": "string",
"errorMessage": "string"
}
statusCode
Código de error
errorMessage
Mensaje de error.
920
AWS IoT Core Guía para desarrolladores
Administrar actualizaciones de indexación.
Indexación de flota
Puedes usar la indexación de flotas para indexar, buscar y agregar los datos de tus dispositivos
de las siguientes fuentes:AWS IoTregistro (p. 281),AWS IoTDevice Shadow. (p. 683),AWS
IoTconectividad (p. 1267),AWS IoTCatálogo de paquetes de software de administración de
dispositivos (p. 1215), yAWS IoT Device Defender (p. 966)infracciones. Puede consultar un grupo
de dispositivos y agregar estadísticas a los registros de dispositivos que se basen en diferentes
combinaciones de atributos del dispositivo, incluidos el estado, la conectividad y las infracciones de los
dispositivos. Con la indexación de la flota, puede organizar, investigar y solucionar los problemas de su
flota de dispositivos.
921
AWS IoT Core Guía para desarrolladores
Administrar indexación de flotas.
Indexación de cosas
El índice creado para todas tus cosas se llamaAWS_Things. La indexación de cosas es compatible con las
siguientes fuentes de datos:AWS IoTregistro (p. 281)datos,AWS IoTDevice Shadow. (p. 683)datos,AWS
IoTconectividad (p. 1267)datos, yAWS IoT Device Defender (p. 966)datos sobre infracciones. Al agregar
estas fuentes de datos a la configuración de indexación de su flota, puede buscar cosas, consultar
datos agregados y crear grupos de cosas dinámicos y métricas de flota en función de sus consultas de
búsqueda.
Registro-AWS IoTproporciona un registro que le ayuda a administrar las cosas. Puede añadir los datos de
registro a la configuración de indexación de su flota para buscar dispositivos en función de sus nombres,
descripciones y otros atributos del registro. Para obtener más información sobre el registro, consulteCómo
gestionar las cosas con el registro (p. 281).
Sombra-LaAWS IoTServicio Device Shadow (p. 683)proporciona sombras que le ayudan a almacenar los
datos de estado del dispositivo. La indexación de cosas admite tanto las sombras clásicas sin nombre
como las sombras con nombre. Para indexar sombras con nombre, active la configuración de sombras
guardadas y especifique los nombres de las sombras en la configuración de indexación de objetos. De
forma predeterminada, puede añadir hasta 10 nombres de sombra porCuenta de AWS. Para ver cómo
aumentar el límite del número de nombres ocultos, consulteAWS IoT Device ManagementCuotasen
elAWSReferencia general.
• Si utiliza elAWS IoTconsola, encienda.Indexación de cosas, eligeAñada sombras con nombre, y añade
los nombres de tus sombras medianteSelección de sombras con nombre.
• Si utiliza elAWS Command Line Interface(AWS CLI), conjuntonamedShadowIndexingModeserON, y
especifique los nombres de las sombras enIndexingFilter. Para ver ejemplos de comandos CLI,
consulteGestione la indexación de cosas (p. 925).
Important
Para obtener más información sobre sombras.AWS IoTServicio Device Shadow (p. 683).
922
AWS IoT Core Guía para desarrolladores
Indexación de grupos de cosas
Infracciones de Device Defender-AWS IoT Device Defenderlos datos sobre infracciones ayudan a
identificar los comportamientos anómalos de los dispositivos en comparación con los comportamientos
normales que se definen en un perfil de seguridad. Un perfil de seguridad contiene un conjunto de
comportamientos esperados de los dispositivos. Cada comportamiento utiliza una métrica que especifica el
comportamiento normal de los dispositivos. Para obtener más información sobre las infracciones de Device
Defender, consultaAWS IoT Device DefenderDetectar (p. 1073).
Para obtener más información, consulteAdministrar la indexación de grupos de cosas (p. 935).
Campos gestionados.
Los campos gestionados contienen datos asociados a cosas, grupos de cosas, dispositivos ocultos,
conectividad de los dispositivos e infracciones de Device Defender.AWS IoTdefine el tipo de datos
en los campos gestionados. Los valores de cada campo administrado se especifican al crear unAWS
IoTcosa. Por ejemplo, los nombres de las cosas, los grupos de cosas y las descripciones de las cosas
son todos campos gestionados. La indexación de flotas indexa los campos gestionados en función
del modo de indexación que especifique. Los campos gestionados no pueden modificarse ni aparecer
encustomFields. Para obtener más información, consulteCampos personalizados (p. 924).
"managedFields" : [
{name:thingId, type:String},
{name:thingName, type:String},
{name:registry.version, type:Number},
{name:registry.thingTypeName, type:String},
{name:registry.thingGroupNames, type:String},
]
"managedFields" : [
{name:shadow.version, type:Number},
{name:shadow.hasDelta, type:Boolean}
]
"managedFields" : [
{name:shadow.name.shadowName.version, type:Number},
{name:shadow.name.shadowName.hasDelta, type:Boolean}
]
"managedFields" : [
{name:connectivity.timestamp, type:Number},
{name:connectivity.version, type:Number},
{name:connectivity.connected, type:Boolean},
{name:connectivity.disconnectReason, type:String}
923
AWS IoT Core Guía para desarrolladores
Campos personalizados
"managedFields" : [
{name:deviceDefender.violationCount, type:Number},
{name:deviceDefender.securityprofile.behaviorname.metricName, type:String},
{name:deviceDefender.securityprofile.behaviorname.lastViolationTime, type:Number},
{name:deviceDefender.securityprofile.behaviorname.lastViolationValue, type:String},
{name:deviceDefender.securityprofile.behaviorname.inViolation, type:Boolean}
]
"managedFields" : [
{name:description, type:String},
{name:parentGroupNames, type:String},
{name:thingGroupId, type:String},
{name:thingGroupName, type:String},
{name:version, type:Number},
]
Campos personalizados
Puede agregar los atributos de las cosas, los datos de Device Shadow y los datos de infracciones de
Device Defender creando campos personalizados para indexarlos. ElcustomFieldsel atributo es
una lista de pares de nombres de campo y tipos de datos. Puede realizar consultas de agregación en
función del tipo de datos. El modo de indexación que elija afecta a los campos se puede especificar
encustomFields. Por ejemplo, si especifica el.REGISTRYen el modo de indexación, no puede especificar
un campo personalizado desde una sombra. Puede utilizar elupdate-indexing-configurationComando
CLI para crear o actualizar los campos personalizados (consulte un comando de ejemplo enActualiza los
ejemplos de configuración de indexación. (p. 927)).
Los nombres de campo personalizados para los atributos de las cosas y los grupos de cosas
comienzan porattributes., seguido del nombre del atributo. Si la indexación oculta sin
nombre está activada, las cosas pueden tener nombres de campo personalizados que comiencen
porshadow.desiredoshadow.reported, seguido del nombre del valor de datos ocultos sin nombre. Si
la indexación oculta con nombre está activada, las cosas pueden tener nombres de campo personalizados
que comiencen porshadow.name.*.desired.oshadow.name.*.reported., seguido del valor de
datos de sombra mencionado. Si la indexación de infracciones de Device Defender está activada, las
924
AWS IoT Core Guía para desarrolladores
Gestiona la indexación de cosas
cosas pueden tener nombres de campo personalizados que comiencen pordeviceDefender., seguido
del valor de los datos sobre infracciones de Device Defender.
El nombre del atributo o del valor de datos que sigue al prefijo puede contener solo caracteres
alfanuméricos, - (guión) y _ (subrayado). No puede tener ningún espacio.
Si hay algún tipo de incoherencia entre un campo personalizado de la configuración y el valor que se
está indexando, la indexación de flotas ignora el valor incoherente en las consultas de agregación.
CloudWatch Los registros son útiles para solucionar problemas de consultas de agregación. Para obtener
más información, consulte Solución de problemas de consultas de agregación en el servicio de indexación
de flotas (p. 1500).
Los tipos de campos personalizados tienen los siguientes valores admitidos:Number,String, yBoolean.
{
"thingIndexingMode": "OFF"|"REGISTRY"|"REGISTRY_AND_SHADOW",
"thingConnectivityIndexingMode": "OFF"|"STATUS",
"deviceDefenderIndexingMode": "OFF"|"VIOLATIONS",
"namedShadowIndexingMode": "OFF"|"ON",
"managedFields": [
{
"name": "string",
"type": "Number"|"String"|"Boolean"
},
...
],
"customFields": [
{
"name": "string",
"type": "Number"|"String"|"Boolean"
},
...
],
"filter": {
"namedShadowNames": [ "string" ]
}
}
925
AWS IoT Core Guía para desarrolladores
Gestiona la indexación de cosas
Important
Para activar la indexación de cosas, elthingIndexingModeno se puede configurar el atributo
para que esté DESACTIVADO.
No especificado.
thingConnectivityIndexingMode Eso es lo que los datos de
conectividad no están indexados.
ElnamedShadowIndexingModeel atributo especifica si los datos ocultos con nombre están indexados.
926
AWS IoT Core Guía para desarrolladores
Gestiona la indexación de cosas
Note
Los campos gestionados contienen datos asociados a cosas, grupos de cosas, dispositivos ocultos,
conectividad de los dispositivos e infracciones de Device Defender.AWS IoTdefine el tipo de datos
en los campos gestionados. Los valores de cada campo administrado se especifican al crear unAWS
IoTcosa. Por ejemplo, los nombres de las cosas, los grupos de cosas y las descripciones de las cosas
son todos campos gestionados. La indexación de flotas indexa los campos gestionados en función
del modo de indexación que especifique. Los campos gestionados no pueden modificarse ni aparecer
encustomFields.
Campos personalizados
Puede agregar atributos, datos de Device Shadow y datos de infracciones de Device Defender creando
campos personalizados para indexarlos. ElcustomFieldsel atributo es una lista de pares de nombres
de campo y tipos de datos. Puede realizar consultas de agregación en función del tipo de datos. El modo
de indexación que elija afecta a los campos se puede especificar encustomFields. Por ejemplo, si
especifica el.REGISTRYen el modo de indexación, no puede especificar un campo personalizado desde
una sombra. Puede utilizar elupdate-indexing-configurationComando CLI para crear o actualizar los
campos personalizados (consulte un comando de ejemplo enActualiza los ejemplos de configuración de
indexación. (p. 927)). Para obtener más información, consulteCampos personalizados (p. 924).
Sintaxis corta:
Sintaxis de JSON:
927
AWS IoT Core Guía para desarrolladores
Gestiona la indexación de cosas
Para comprobar el estado del índice del objeto, ejecute eldescribe-indexComando CLI.
{
"indexName": "AWS_Things",
"indexStatus": "ACTIVE",
"schema": "MULTI_INDEXING_MODE"
}
Note
La indexación de la flota puede tardar un momento en actualizar el índice de la flota.
Recomendamos esperar hasta elindexStatusmuestre ACTIVO antes de usarlo. Puede
tener valores diferentes en el campo de esquema en función de las fuentes de datos que haya
configurado. Para obtener más información, consulteDescribir un indexación de flotas. (p. 930).
{
"thingIndexingConfiguration": {
"thingIndexingMode": "REGISTRY_AND_SHADOW",
"thingConnectivityIndexingMode": "STATUS",
"deviceDefenderIndexingMode": "VIOLATIONS",
"namedShadowIndexingMode": "ON",
"managedFields": [
{
"name": "connectivity.disconnectReason",
"type": "String"
},
{
"name": "registry.version",
"type": "Number"
},
{
"name": "thingName",
"type": "String"
},
{
"name": "deviceDefender.violationCount",
"type": "Number"
},
{
"name": "shadow.hasDelta",
"type": "Boolean"
},
928
AWS IoT Core Guía para desarrolladores
Gestiona la indexación de cosas
{
"name": "shadow.name.*.version",
"type": "Number"
},
{
"name": "shadow.version",
"type": "Number"
},
{
"name": "connectivity.version",
"type": "Number"
},
{
"name": "connectivity.timestamp",
"type": "Number"
},
{
"name": "shadow.name.*.hasDelta",
"type": "Boolean"
},
{
"name": "registry.thingTypeName",
"type": "String"
},
{
"name": "thingId",
"type": "String"
},
{
"name": "connectivity.connected",
"type": "Boolean"
},
{
"name": "registry.thingGroupNames",
"type": "String"
}
],
"customFields": [
{
"name": "shadow.name.thing1shadow.desired.DefaultDesired",
"type": "String"
},
{
"name":
"deviceDefender.securityProfile1.NUMBER_VALUE_BEHAVIOR.lastViolationValue.number",
"type": "Number"
},
{
"name": "shadow.desired.power",
"type": "Boolean"
},
{
"name": "attributes.version",
"type": "Number"
}
],
"filter": {
"namedShadowNames": [
"thing1shadow"
]
}
},
"thingGroupIndexingConfiguration": {
"thingGroupIndexingMode": "OFF"
}
929
AWS IoT Core Guía para desarrolladores
Gestiona la indexación de cosas
'thingIndexingMode=REGISTRY_AND_SHADOW,customFields=[{name=attributes.version,type=Number},
{name=attributes.color,type=String},{name=shadow.desired.power,type=Boolean},
{name=shadow.desired.intensity,type=Number}]'
Una vez reconstruido el índice, puede utilizar una consulta de agregación en los campos recién agregados,
buscar datos de registro, datos paralelos y datos de estado de conectividad de objetos.
Al cambiar el modo de indexación, asegúrese de que todos los campos personalizados sean válidos
mediante el nuevo modo de indexación. Por ejemplo, si empiezas usandoREGISTRY_AND_SHADOWmodo
con un campo personalizado llamadoshadow.desired.temperature, debe
eliminar.shadow.desired.temperaturecampo personalizado antes de cambiar el modo de indexación
aREGISTRY. Si la configuración de indexación contiene campos personalizados que no están indexados
por el modo de indexación, se produce un error en la actualización.
{
"indexName": "AWS_Things",
"indexStatus": "BUILDING",
"schema": "REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS"
}
Si se cambia la configuración del índice, el índice se vuelve a compilar. Durante este proceso,
indexStatus es REBUILDING. Puedes realizar consultas sobre los datos del índice de cosas
mientras se está reconstruyendo. Por ejemplo, si cambia la configuración del índice de REGISTRY a
REGISTRY_AND_SHADOW, cuando el índice se vuelve a generar, puede consultar los datos del registro,
incluidas las últimas actualizaciones. Sin embargo, no puede consultar los datos de sombra hasta que se
complete la recompilación. El tiempo que tarda en compilar o recompilar el índice depende de la cantidad
de datos.
Puede ver diferentes valores en el campo de esquema en función de las fuentes de datos que haya
configurado. La siguiente tabla muestra los diferentes valores del esquema y las descripciones
correspondientes:
930
AWS IoT Core Guía para desarrolladores
Gestiona la indexación de cosas
Esquema Descripción
REGISTRY_Y_SHADOW_Y_CONNECTIVITY_STATUS
Los datos de registro, los datos paralelos sin
nombre (clásicos) y los datos de conectividad
están indexados.
{
"things":[{
"thingName":"mything1",
"thingGroupNames":[
"mygroup1"
],
"thingId":"a4b9f759-b0f2-4857-8a4b-967745ed9f4e",
"attributes":{
"attribute1":"abc"
},
"connectivity": {
"connected":false,
"timestamp":1556649874716,
"disconnectReason": "CONNECTION_LOST"
}
},
{
"thingName":"mything2",
"thingTypeName":"MyThingType",
"thingGroupNames":[
"mygroup1",
"mygroup2"
],
"thingId":"01014ef9-e97e-44c6-985a-d0b06924f2af",
"attributes":{
"model":"1.2",
"country":"usa"
},
"shadow":{
"desired":{
931
AWS IoT Core Guía para desarrolladores
Gestiona la indexación de cosas
"location":"new york",
"myvalues":[3, 4, 5]
},
"reported":{
"location":"new york",
"myvalues":[1, 2, 3],
"stats":{
"battery":78
}
},
"metadata":{
"desired":{
"location":{
"timestamp":123456789
},
"myvalues":{
"timestamp":123456789
}
},
"reported":{
"location":{
"timestamp":34535454
},
"myvalues":{
"timestamp":34535454
},
"stats":{
"battery":{
"timestamp":34535454
}
}
}
},
"version":10,
"timestamp":34535454
},
"connectivity": {
"connected":true,
"timestamp":1556649855046
}
}],
"nextToken":"AQFCuvk7zZ3D9pOYMbFCeHbdZ+h=G"
}
"connectivity": {
"connected":false,
"timestamp":1556649874716,
"disconnectReason": "CONNECTION_LOST"
}
"connectivity": {
"connected":true,
"timestamp":1556649855046
932
AWS IoT Core Guía para desarrolladores
Gestiona la indexación de cosas
Restricciones y limitaciones
Estas son las restricciones y limitaciones de AWS_Things.
Un campo sombreado se indexa solo si el valor del campo es de un tipo simple, como un objeto JSON
que no contiene una matriz o una matriz que consta exclusivamente de tipos simples. Un tipo sencillo
es una cadena, un número o uno de los literales true o false. Por ejemplo, dado el siguiente
estado de sombra, el valor del campo"palette"no está indexado porque es una matriz que contiene
elementos de tipos complejos. El valor del campo "colors" sí se indexará porque cada valor de la
matriz es una cadena.
{
"state": {
"reported": {
"switched": "ON",
"colors": [ "RED", "GREEN", "BLUE" ],
"palette": [
{
"name": "RED",
"intensity": 124
},
{
"name": "GREEN",
"intensity": 68
},
{
"name": "BLUE",
"intensity": 201
}
]
}
}
}
Los nombres de los campos de sombra anidados se almacenan como una cadena delimitada por
punto (.). Por ejemplo, dado un documento de sombra:
{
"state": {
"desired": {
"one": {
"two": {
"three": "v2"
}
}
}
}
933
AWS IoT Core Guía para desarrolladores
Gestiona la indexación de cosas
{
"state": {
"desired": {
"one.two.three": "v2"
}
}
}
Un campo en una sección de metadatos de sombra se indexa, pero solo si se indexa el campo
correspondiente en la sección "state" de la sombra. (En el ejemplo anterior, el."palette"el campo
de la sección de metadatos de la sombra tampoco está indexado.)
Dispositivos no registrados
Si usas.UpdateThingShadowpara crear una sombra con el nombre de una cosa que no esté registrado
en tuAWS IoTcuenta, los campos de esta sombra no están indexados. Esto se aplica tanto a la
sombra sin nombre clásica como a la sombra con nombre.
Valores numéricos.
Si el servicio reconoce como valor numérico algún dato de sombra o de registro, se indexa como tal.
Puede formar consultas que impliquen rangos y operadores de comparación en valores numéricos
(por ejemplo "attribute.foo<5" o "shadow.reported.foo:[75 TO 80]"). Para que se
reconozca como numérico, el valor de los datos debe ser un número JSON válido y de tipo literal. El
valor puede ser un número entero en el rango -2^53... 2^53-1, un punto flotante de doble precisión con
notación exponencial opcional o parte de una matriz que contenga solo estos valores.
Valores nulos
Autorización
Puede especificar el índice de cosas como un nombre de recurso de Amazon (ARN) en unAWS IoTacción
política, de la siguiente manera.
Acción Recurso
934
AWS IoT Core Guía para desarrolladores
Gestione la indexación de grupos de cosas
Acción Recurso
Note
Si tiene los permisos para consultar el índice de la flota, podrá obtener acceso a los datos de los
objetos en toda la flota.
También puede actualizar las configuraciones para la indexación de cosas y grupos de cosas con un solo
comando, de la siguiente manera:
OFF
Para recuperar las configuraciones actuales de indexación de cosas y grupos de cosas, ejecute elget-
indexing-configurationComando CLI.
{
"thingGroupIndexingConfiguration": {
"thingGroupIndexingMode": "ON"
}
}
935
AWS IoT Core Guía para desarrolladores
Consulta de datos agregados
{
"indexStatus": "ACTIVE",
"indexName": "AWS_ThingGroups",
"schema": "THING_GROUPS"
}
AWS IoTcrea el índice la primera vez que lo indexa. No se puede consultar el índice si indexStatus es
BUILDING.
Autorización
Puede especificar el índice de grupos de objetos como un ARN del recurso en una acción de política de
AWS IoT, como en el siguiente ejemplo.
Acción Recurso
GetStatistics
ElGetStatisticsLa API y elget-statisticsEl comando CLI devuelve el recuento, el promedio, la suma, el
mínimo, el máximo, la suma de los cuadrados, la varianza y la desviación estándar del campo agregado
especificado.
936
AWS IoT Core Guía para desarrolladores
GetStatistics
index-name
La consulta utilizada para buscar el índice. Puede especificar."*"para obtener el recuento de todos
los elementos indexados en suCuenta de AWS.
aggregationField
(Opcional) El campo que se va a agregar. Este campo debe ser un campo administrado o
personalizado definido al llamar a update-indexing-configuration. Si no especificas un campo de
agregación,registry.versionse utiliza como campo de agregación.
query-version
Este comando devuelve el número de dispositivos que contienen un atributo llamado stringAttribute:
{
"statistics": {
"count": 3
}
}
937
AWS IoT Core Guía para desarrolladores
GetStatistics
count
El número de elementos que coinciden con los criterios de la cadena de consulta y contienen un valor
de campo de agregación válido.
average
La suma de los cuadrados de los valores numéricos que coinciden con la consulta.
variance
La varianza de los valores numéricos que coinciden con la consulta. La varianza de un conjunto de
valores es la media de los cuadrados de las diferencias de cada valor con respecto al valor medio del
conjunto.
stdDeviation
La desviación estándar de los valores numéricos que coinciden con la consulta. La desviación
estándar de un conjunto de valores es una medida de la distribución de los valores.
El siguiente ejemplo muestra cómo llamar a get-statistics con un campo numérico personalizado.
{
"statistics": {
"count": 3,
"average": 33.333333333333336,
"sum": 100.0,
"minimum": -125.0,
"maximum": 150.0,
"sumOfSquares": 43750.0,
"variance": 13472.22222222222,
"stdDeviation": 116.06990230986766
}
}
En el caso de los campos de agregación numérica, si los valores de los campos superan el valor doble
máximo, los valores estadísticos están vacíos.
938
AWS IoT Core Guía para desarrolladores
GetCardinality
GetCardinality
ElGetCardinalityLa API y elget-cardinalityEl comando CLI devuelve el recuento aproximado de valores
únicos que coinciden con la consulta. Por ejemplo, es posible que desee encontrar el número de
dispositivos con niveles de batería inferiores al 50 por ciento:
Este comando devuelve el número de objetos con niveles de batería de más del 50 por ciento:
{
"cardinality": 100
}
get-cardinality siempre devuelve cardinality, aunque no haya campos coincidentes. Por ejemplo:
{
"cardinality": 0
}
index-name
La consulta utilizada para buscar el índice. Puede especificar."*"para obtener el recuento de todos
los elementos indexados en suCuenta de AWS.
aggregationField
GetPercentiles
ElGetPercentilesLa API y elget-percentilesEl comando CLI agrupa los valores agregados que coinciden
con la consulta en agrupaciones de percentiles. Los grupos de percentiles predeterminados son:
1,5,25,50,75,95,99, aunque puede especificar los suyos propios cuando llame a GetPercentiles.
Esta función devuelve un valor para cada grupo de percentiles especificado (o para los grupos de
percentiles predeterminados). El grupo de percentiles "1" contiene el valor agregado del campo que
se obtiene aproximadamente en el uno por ciento de los valores que coinciden con la consulta. El
grupo de percentiles "5" contiene el valor agregado del campo que se obtiene en aproximadamente el
cinco por ciento de los valores que coinciden con la consulta, y así sucesivamente. El resultado es una
aproximación: cuantos más valores coincidan con la consulta, más precisos serán los valores de percentil.
939
AWS IoT Core Guía para desarrolladores
GetPercentiles
"attributes.customField_NUM" --percents 10 20 30 40 50 60 70 80 90 99
{
"percentiles": [
{
"value": 3.0,
"percent": 80.0
},
{
"value": 2.5999999999999996,
"percent": 70.0
},
{
"value": 3.0,
"percent": 90.0
},
{
"value": 2.0,
"percent": 50.0
},
{
"value": 2.0,
"percent": 60.0
},
{
"value": 1.0,
"percent": 10.0
},
{
"value": 2.0,
"percent": 40.0
},
{
"value": 1.0,
"percent": 20.0
},
{
"value": 1.4,
"percent": 30.0
},
{
"value": 3.0,
"percent": 99.0
}
]
}
El siguiente comando muestra la salida devuelta get-percentiles cuando no hay documentos coincidentes.
{
"percentiles": []
}
index-name
940
AWS IoT Core Guía para desarrolladores
GetBucketsAggregation
query-string
La consulta utilizada para buscar el índice. Puede especificar."*"para obtener el recuento de todos
los elementos indexados en suCuenta de AWS.
aggregationField
(Opcional) Puede usar este parámetro para especificar agrupaciones de percentiles personalizadas.
GetBucketsAggregation
ElGetBucketsAggregationLa API y elget-buckets-aggregationEl comando CLI devuelve una lista de
depósitos y el número total de elementos que se ajustan a los criterios de la cadena de consulta.
{
"totalCount": 20,
"buckets": [
{
"keyValue": "100",
"count": 12
},
{
"keyValue": "90",
"count": 5
},
{
"keyValue": "75",
"count": 3
}
]
}
index-name
La consulta utilizada para buscar el índice. Puede especificar."*"para obtener el recuento de todos
los elementos indexados en suCuenta de AWS.
aggregation-field
941
AWS IoT Core Guía para desarrolladores
Autorización
buckets-aggregation-type
Autorización
Puede especificar el índice de grupos de objetos como un ARN del recurso en una acción de política de
AWS IoT, como en el siguiente ejemplo.
Acción Recurso
Sintaxis de la consulta
En la indexación de flotas, se utiliza una sintaxis de consulta para especificar las consultas.
Características admitidas
La sintaxis de consulta puede contener las funciones siguientes:
• Términos y frases
• Búsqueda de campos
• Búsqueda de prefijos
• Búsqueda de intervalos
• Operadores booleanos.AND,OR,NOT, y–. El guión se usa para excluir algo de los resultados de búsqueda
(por ejemplo,thingName:(tv* AND -plasma)).
• Agrupación
• Agrupación de campos
• Escapar caracteres especiales (como con\)
Características de no admitidas
La sintaxis de la consulta no es compatible con las funciones siguientes:
• Uso de caracteres comodín al principio de la búsqueda (como "*xyz"), pero si se utiliza "*" en la
búsqueda se devolverán todos los objetos
• Expresiones regulares
• Impulso
• Clasificación
• Búsquedas confusas
• Búsqueda de proximidad
• Ordenar
• Agregación
• Caracteres especiales.`,@,#,%,\,/,',;, y,.
942
AWS IoT Core Guía para desarrolladores
Notas
Notas
Algunas cosas que tener en cuenta acerca del idioma de consulta:
943
AWS IoT Core Guía para desarrolladores
Ejemplo de consultas de objetos
sombría.nombre. . has delta: Consulta cosas que tienen una sombra con el
<shadowName>Verdadero nombre de pila y también un elemento delta.
944
AWS IoT Core Guía para desarrolladores
Ejemplo de consultas de grupo de objetos
945
AWS IoT Core Guía para desarrolladores
Ejemplo de consultas de grupo de objetos
946
AWS IoT Core Guía para desarrolladores
Métricas de flota
Métricas de flota
Las métricas de flota son una función de la indexación de flotas (p. 921), un servicio gestionado que te
permite indexar, buscar y agregar los datos de tus dispositivos. AWS IoT Puedes usar las métricas de la
flota para monitorear el estado agregado de los dispositivos de tu flota a CloudWatchlo largo del tiempo, lo
que incluye revisar la tasa de desconexión de los dispositivos de tu flota o los cambios promedio en el nivel
de la batería durante un período específico.
Con las métricas de flota, puede crear consultas de agregación (p. 936) cuyos resultados se emiten
continuamente CloudWatchcomo métricas para analizar tendencias y crear alarmas. Para sus tareas de
monitoreo, puede especificar las consultas de agregación de diferentes tipos de agregación (estadísticas,
cardinalidad y percentil). Puede guardar todas sus consultas de agregación para crear métricas de flota
para reutilizarlas en el futuro.
Explicación introductoria
En este tutorial, creará una métrica de flota (p. 947) para monitorear las temperaturas de los sensores y
detectar posibles anomalías. Al crear la métrica de flota, defina una consulta de agregación (p. 936) que
detecte la cantidad de sensores con temperaturas superiores a 80 grados Fahrenheit. Usted especifica que
la consulta se ejecute cada 60 segundos y se emitirán los resultados de la consultaCloudWatch, donde
podrá ver la cantidad de sensores que tienen posibles riesgos de altas temperaturas y configurar alarmas.
Para completar este tutorial, utilizarás AWS CLI.
Requisitos previos
• Instale la versión más reciente de AWS CLI
• Familiarícese con la consulta de datos agregados
• Familiarízate con el uso de las métricas de Amazon CloudWatch
Configurar
Para usar las métricas de flota, habilite la indexación de flotas. Para habilitar la indexación de flotas para
tus cosas o grupos de cosas con fuentes de datos específicas y configuraciones asociadas, sigue las
instrucciones de Administrar la indexación de cosas y Administrar la indexación (p. 925) de grupos de
cosas (p. 935).
Para configurar
1. Ejecute el siguiente comando para habilitar la indexación de flotas y especificar las fuentes de datos
desde las que realizar la búsqueda.
947
AWS IoT Core Guía para desarrolladores
Explicación introductoria
{name=attributes.rackId,type=String},
{name=attributes.stateNormal,type=Boolean}],thingConnectivityIndexingMode=STATUS" \
El comando CLI del ejemplo anterior permite la indexación de flotas para permitir la búsqueda de
datos de registro, datos ocultos y el estado de conectividad de las cosas mediante el AWS_Things
índice.
El cambio de configuración puede tardar unos minutos en completarse. Comprueba que la indexación
de tu flota esté habilitada antes de crear las métricas de flota.
Para comprobar si la indexación de su flota está habilitada, ejecute el siguiente comando de CLI:
Para obtener más información, consulta Habilitar la indexación de cosas (p. 925).
2. Ejecute el siguiente script de bash para crear diez cosas y describirlas.
Temperatures=(70 71 72 73 74 75 47 97 98 99)
Racks=(Rack1 Rack1 Rack2 Rack2 Rack3 Rack4 Rack5 Rack6 Rack6 Rack6)
IsNormal=(true true true true true true false false false false)
Este script crea diez elementos para representar diez sensores. Cada cosa tiene atributos de
temperaturerackId, y stateNormal tal como se describe en la siguiente tabla:
La salida de este script contiene diez archivos JSON. Uno de los archivos JSON tiene el siguiente
aspecto:
{
"version": 1,
"thingName": "TempSensor0",
"defaultClientId": "TempSensor0",
"attributes": {
"rackId": "Rack1",
"stateNormal": "true",
"temperature": "70"
},
948
AWS IoT Core Guía para desarrolladores
Explicación introductoria
"thingArn": "arn:aws:iot:region:account:thing/TempSensor0",
"thingId": "example-thing-id"
}
1. Ejecute el siguiente comando para crear una métrica de flota denominada High_Temp_FM. Usted
crea la métrica de la flota para monitorear la cantidad de sensores con temperaturas superiores a 80
grados Fahrenheit. CloudWatch
--nombre métrico
Tipo de datos: cadena. El --metric-name parámetro especifica el nombre de una métrica de flota.
En este ejemplo, crearás una métrica de flota denominada High_Temp_FM.
--cadena de consulta
--período
Tipo de datos: número entero. El --period parámetro especifica el tiempo necesario para recuperar
los datos agregados en segundos. En este ejemplo, especificas que la métrica de flota que estás
creando recupera los datos agregados cada 60 segundos.
--campo de agregación
--tipo de agregación
{
"metricArn": "arn:aws:iot:region:111122223333:fleetmetric/high_temp_FM",
"metricName": "high_temp_FM"
}
949
AWS IoT Core Guía para desarrolladores
Explicación introductoria
Note
Para obtener más información sobre cómo crear una métrica de flota, consulta Administración de
métricas de flota (p. 952).
{
"queryVersion": "2017-09-30",
"lastModifiedDate": 1625249775.834,
"queryString": "*",
"period": 60,
"metricArn": "arn:aws:iot:region:111122223333:fleetmetric/high_temp_FM",
"aggregationField": "registry.version",
"version": 1,
"aggregationType": {
"values": [
"count"
],
"name": "Statistics"
},
"indexName": "AWS_Things",
"creationDate": 1625249775.834,
"metricName": "high_temp_FM"
}
950
AWS IoT Core Guía para desarrolladores
Explicación introductoria
6. Elija la segunda pestaña, denominada Métricas gráficas, a la derecha de la pestaña Todas las
métricas para ver la métrica de flota que eligió en el paso anterior.
Deberías poder ver un gráfico que muestre la cantidad de sensores con temperaturas superiores a 80
grados Fahrenheit, como el siguiente:
Note
El CloudWatch valor predeterminado del atributo Periodo es de 5 minutos. Es el intervalo
de tiempo entre los puntos de datos que se muestran enCloudWatch. Puede cambiar la
configuración del período según sus necesidades.
7. (Opcional) Puede configurar una alarma métrica.
1. En el CloudWatch menú del panel izquierdo, elija Alarmas para expandir el submenú y, a
continuación, elija Todas las alarmas.
2. En la página Alarmas, selecciona Crear alarma en la esquina superior derecha. Siga las
instrucciones de creación de alarma de la consola para crear una alarma según sea necesario.
Para obtener más información, consulte Uso de CloudWatch alarmas de Amazon.
Para obtener más información, consulta Cómo usar CloudWatch las métricas de Amazon.
Si no puedes ver los puntos de datos enCloudWatch, consulta Solución de problemas con las métricas de
la flota (p. 1501).
Eliminar recursos
Para eliminar las métricas de la flota
951
AWS IoT Core Guía para desarrolladores
Gestión de las métricas de la flota
Para eliminar las diez cosas que ha creado, ejecute el siguiente script:
CloudWatchno admite la eliminación de métricas. Las métricas caducan en función de sus programas de
retención. Para obtener más información, utiliza CloudWatch las métricas de Amazon.
Para activar la indexación de cosas, active la indexación de cosas y, a continuación, seleccione las
fuentes de datos desde las que desea indexar.
Los campos personalizados son una lista de pares de nombres y tipos de campo.
Para añadir un par de campos personalizados, selecciona Añadir campo nuevo. Introduzca un
nombre de campo personalizado, por ejemploattributes.temperature, y, a continuación,
seleccione un tipo de campo en el menú Tipo de campo. Tenga en cuenta que el nombre de un
campo personalizado comienza con attributes. y se guardará como un atributo para ejecutar
consultas de agregaciones de cosas.
952
AWS IoT Core Guía para desarrolladores
Gestión de las métricas de la flota
Una vez creada correctamente, la métrica de flota aparece en la página de métricas de flota.
953
AWS IoT Core Guía para desarrolladores
Gestión de las métricas de la flota
la flota. Para habilitar la indexación de flotas para tus cosas o grupos de cosas, sigue las instrucciones de
Administrar la indexación de cosas o Administrar la indexación (p. 925) de grupos de cosas (p. 935).
El resultado de este comando contiene el nombre y el nombre de recurso de Amazon (ARN) de la métrica
de su flota. El resultado es similar al siguiente:
{
"metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/YourFleetMetricName",
"metricName": "YourFleetMetricName"
}
El resultado de este comando contiene todas las métricas de su flota. El resultado es similar al siguiente:
{
"fleetMetrics": [
{
"metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/
YourFleetMetric1",
"metricName": "YourFleetMetric1"
},
{
"metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/
YourFleetMetric2",
"metricName": "YourFleetMetric2"
}
]
}
El resultado del comando contiene la información detallada sobre la métrica de flota especificada. El
resultado es similar al siguiente:
{
"queryVersion": "2017-09-30",
"lastModifiedDate": 1625790642.355,
"queryString": "*",
"period": 60,
"metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/YourFleetMetricName",
954
AWS IoT Core Guía para desarrolladores
Gestión de las métricas de la flota
"aggregationField": "registry.version",
"version": 1,
"aggregationType": {
"values": [
"sum"
],
"name": "Statistics"
},
"indexName": "AWS_Things",
"creationDate": 1625790642.355,
"metricName": "YourFleetMetricName"
}
{
"queryVersion": "2017-09-30",
"lastModifiedDate": 1625792300.881,
"queryString": "*",
"period": 120,
"metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/YourFleetMetricName",
"aggregationField": "registry.version",
"version": 2,
"aggregationType": {
"values": [
"sum",
"count"
],
"name": "Statistics"
},
"indexName": "AWS_Things",
"creationDate": 1625792300.881,
"metricName": "YourFleetMetricName"
}
Este comando no produce ningún resultado si la eliminación se realiza correctamente o si especificas una
métrica de flota que no existe.
Para obtener más información, consulte Solución de problemas de métricas de flota (p. 1501).
955
AWS IoT Core Guía para desarrolladores
¿Qué es una transmisión?
Para obtener más información sobre las formas de transferir datos hacia y desde dispositivos de IoT
medianteAWS IoT, consulteConexión de dispositivos aAWS IoT (p. 83).
Temas
• ¿Qué es una transmisión? (p. 956)
• Administrar una transmisión en elAWSNube (p. 957)
• UsandoAWS IoTEntrega de archivos en dispositivos basada en MQTT (p. 958)
• Un ejemplo de caso de uso en Freertos OTA (p. 965)
AWS IoTLa entrega de archivos basada en MQTT proporciona las siguientes funciones para que los
dispositivos puedan transferir datos desdeAWSNube:
956
AWS IoT Core Guía para desarrolladores
Administrar una transmisión en elAWSNube
• La capacidad de enviar datos en bloques pequeños (GetStreamAPI) para que los dispositivos con
restricciones de hardware puedan recibir los bloques.
• Support para un tamaño de bloque dinámico por solicitud, para admitir dispositivos que tienen diferentes
capacidades de memoria.
• Optimización para solicitudes de transmisión simultáneas cuando varios dispositivos solicitan bloques de
datos del mismo archivo de transmisión.
• Amazon S3 como almacenamiento de datos para archivos de streaming.
• Support para la publicación de registros de transferencia de datos desdeAWS IoTEnvío de archivos
basado en MQTT a CloudWatch.
Para conocer las cuotas de entrega de archivos basadas en MQTT, consulteAWS IoT CoreService
Quotasen elReferencia general de AWS.
Note
En este momento, las transmisiones no están visibles en elAWS Management Console. Debe
utilizar laAWS CLIoAWSSDK para gestionar una transmisión enAWS IoT. Además,SDK de C
integradoes el único SDK que admite transferencias de archivos basadas en MQTT.
Antes de utilizarAWS IoTPara la entrega de archivos desde sus dispositivos mediante MQTT, debe
seguir los pasos de las siguientes secciones para asegurarse de que sus dispositivos están debidamente
autorizados y se pueden conectar alAWS IoTPuerta de enlace de dispositivos.
{
"Version": "2012-10-17",
"Statement": [
{ "Effect": "Allow",
"Action": [ "iot:Connect" ],
"Resource": [
"arn:partition:iot:region:accountID:client/
${iot:Connection.Thing.ThingName}"
]
},
{
"Effect": "Allow",
"Action": [ "iot:Receive", "iot:Publish" ],
"Resource": [
957
AWS IoT Core Guía para desarrolladores
Conecta tus dispositivos aAWS IoT
"arn:partition:iot:region:accountID:topic/$aws/things/
${iot:Connection.Thing.ThingName}/streams/*"
]
},
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": [
"arn:partition:iot:region:accountID:topicfilter/$aws/things/
${iot:Connection.Thing.ThingName}/streams/*"
]
}
]
}
El punto final delAWS IoTel plano de datos es específico delCuenta de AWSy región. Debe usar el
punto final para elCuenta de AWSy la región en la que están registrados sus dispositivosAWS IoT.
Para obtener más información, consulte Conexión a AWS IoT Core (p. 74).
• Utilice el protocolo MQTT para suscribirse alTemas de entrega de archivos basados en MQTT (p. 127).
• Envíe las solicitudes y espere a recibir las respuestas mediante mensajes MQTT.
958
AWS IoT Core Guía para desarrolladores
Utilice DescribeStream para obtener datos de transmisión
Note
DescribeStream solicitud
Un típicoDescribeStreamLa siguiente solicitud en JSON tiene el siguiente ejemplo.
{
"c": "ec944cfb-1e3c-49ac-97de-9dc4aaad0039"
}
El token del cliente no puede tener más de 64 bytes. Un token de cliente de más de 64 bytes provoca
una respuesta de error y unInvalidRequestmensaje de error.
DescribeStream respuesta
UNDescribeStreamLa respuesta en JSON tiene un aspecto similar al siguiente ejemplo.
{
"c": "ec944cfb-1e3c-49ac-97de-9dc4aaad0039",
"s": 1,
"d": "This is the description of stream ABC.",
"r": [
{
"f": 0,
"z": 131072
},
{
959
AWS IoT Core Guía para desarrolladores
Obtenga bloques de datos de un archivo de flujo
"f": 1,
"z": 51200
}
]
}
GetStream solicitud
Siga estos pasos para crear unGetStreamsolicitud.
Note
• Si sustituyes «json» por «cbor» en los temas y filtros de temas que se muestran, tu dispositivo
recibirá los mensajes en el formato CBOR, que es más compacto que JSON.
• AWS IoTLa entrega de archivos basada en MQTT limita el tamaño de un bloque a 128 KB. Si
solicitas un bloque de más de 128 KB, la solicitud fallará.
• Puede realizar una solicitud para varios bloques cuyo tamaño total sea superior a 128 KB (por
ejemplo, si solicita 5 bloques de 32 KB cada uno para un total de 160 KB de datos). En este
caso, la solicitud no falla, pero el dispositivo debe realizar varias solicitudes para recibir todos
los datos solicitados. El servicio enviará bloques adicionales a medida que tu dispositivo realice
960
AWS IoT Core Guía para desarrolladores
Obtenga bloques de datos de un archivo de flujo
solicitudes adicionales. Te recomendamos que continúes con una nueva solicitud solo después
de que la respuesta anterior se haya recibido y procesado correctamente.
• Independientemente del tamaño total de los datos solicitados, debes programar el dispositivo
para que inicie los reintentos cuando los bloqueos no se reciban o no se reciban correctamente.
{
"c": "1bb8aaa1-5c18-4d21-80c2-0b44fee10380",
"s": 1,
"f": 0,
"l": 4096,
"o": 2,
"n": 100,
"b": "..."
}
El token de cliente no puede ser superior a 64 bytes. Un token de cliente que supere los 64 bytes
provoca una respuesta de error y unInvalidRequestmensaje de error.
• [opcional]»s"es el campo de versión de la transmisión (un entero).
El ID del archivo de transmisión es obligatorio para crear o actualizar una transmisión mediante elAWS
CLIo SDK. Si un dispositivo solicita un archivo de transmisión con un ID que no existe, el servicio envía
una respuesta de error y unResourceNotFoundmensaje de error.
• »l"es el tamaño del bloque de datos en bytes (un entero comprendido entre 256 y 131 072).
ConsulteCree un mapa de bits para un GetStream solicitud (p. 962)para obtener instrucciones sobre
cómo utilizar los campos de mapa de bits para especificar qué parte del archivo de flujo se devolverá en
elGetStreamrespuesta. Si un dispositivo especifica un tamaño de bloque que está fuera del rango, el
servicio envía una respuesta de error y unBlockSizeOutOfBoundsmensaje de error.
• [opcional]»o"es el desplazamiento del bloque en el archivo de flujo (un número entero comprendido
entre 0 y 98.304).
ConsulteCree un mapa de bits para un GetStream solicitud (p. 962)para obtener instrucciones sobre
cómo utilizar los campos de mapa de bits para especificar qué parte del archivo de flujo se devolverá en
elGetStreamrespuesta. El valor máximo de 98 304 se basa en un límite de tamaño de archivo de flujo
de 24 MB y 256 bytes para el tamaño mínimo de bloque. El valor por defecto es 0 si no se especifica.
• [opcional]»n"es el número de bloques solicitados (un número entero comprendido entre 0 y 98.304).
El campo «n» especifica (1) el número de bloques solicitados o (2) cuando se utiliza el campo de
mapa de bits («b»), lo que limita el número de bloques que devolverá la solicitud de mapa de bits. Este
segundo uso es opcional. Si no está definido, el valor predeterminado es 131072/DataBlockSize.
• [opcional]»b"es un mapa de bits que representa los bloques que se solicitan.
Con un mapa de bits, el dispositivo puede solicitar bloques no consecutivos, lo que facilita la gestión de
los reintentos tras un error. ConsulteCree un mapa de bits para un GetStream solicitud (p. 962)para
961
AWS IoT Core Guía para desarrolladores
Obtenga bloques de datos de un archivo de flujo
obtener instrucciones sobre cómo utilizar los campos de mapa de bits para especificar qué parte del
archivo de flujo se devolverá en elGetStreamrespuesta. Para este campo, convierta el mapa de bits
en una cadena que represente el valor del mapa de bits en notación hexadecimal. El mapa de bits debe
tener menos de 12 288 bytes.
Important
GetStream respuesta
UNGetStreamla respuesta en JSON se parece a este ejemplo para cada bloque de datos que se solicita.
{
"c": "1bb8aaa1-5c18-4d21-80c2-0b44fee10380",
"f": 0,
"l": 4096,
"i": 2,
"p": "..."
}
• »c» es el campo del token del cliente. Se devuelve si se proporcionó en elGetStreamsolicitud. Usa el
token del cliente para asociar la respuesta a su solicitud.
• »f"es el ID del archivo de flujo al que pertenece la carga útil del bloque de datos actual.
• »l«es el tamaño de la carga útil del bloque de datos en bytes.
• »i"es el ID del bloque de datos contenido en la carga útil. Los bloques de datos se numeran a partir de
0.
• »p"contiene la carga útil del bloque de datos. Este campo es una cadena que representa el valor del
bloque de datos enBase 64codificación.
Desfase de bloques
Como el primer bloque es el número 20, especifique el desplazamiento (campo)o) como 20 para
ahorrar espacio en el mapa de bits.
Número de bloques
Para garantizar que el dispositivo no reciba más bloques de los que puede gestionar con recursos
de memoria limitados, puede especificar el número máximo de bloques que se deben devolver en
962
AWS IoT Core Guía para desarrolladores
Obtenga bloques de datos de un archivo de flujo
cada mensaje enviado mediante la entrega de archivos basada en MQTT. Tenga en cuenta que este
valor no se tiene en cuenta si el propio mapa de bits especifica menos de este número de bloques o
si el tamaño total de los mensajes de respuesta enviados mediante la entrega de archivos basada en
MQTT supera el límite de servicio de 128 KB porGetStreamsolicitud.
Mapa de bits de bloques
El mapa de bits en sí es una matriz de bytes sin signo expresados en notación hexadecimal e
incluidos enGetStreamsolicitar como una representación de cadena del número. Pero para construir
esta cadena, empecemos por pensar en el mapa de bits como una secuencia larga de bits (un número
binario). Si un bit de esta secuencia se establece en 1, el bloque correspondiente del archivo de
transmisión se devolverá al dispositivo. En nuestro ejemplo, queremos recibir los bloques 20, 21, 24
y 43, por lo que debemos establecer los bits 20, 21, 24 y 43 en nuestro mapa de bits. Podemos usar
el desplazamiento del bloque para ahorrar espacio, así que después de restar el desplazamiento de
cada número de bloque, queremos establecer los bits 0, 1, 4 y 23, como en el siguiente ejemplo.
1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Puede convertir la notación binaria estándar en hexadecimal. Tome cuatro dígitos binarios
a la vez y conviértalos a su equivalente hexadecimal. Por ejemplo, «0001" pasa a ser «1",
«0011" pasa a ser «3" y así sucesivamente.
Juntando todo esto, obtenemos el JSON de nuestroGetStreamLa solicitud tiene el siguiente aspecto.
{
"c" : "1",
"s" : 1,
"l" : 256,
963
AWS IoT Core Guía para desarrolladores
Manejo de errores deAWS IoTEntrega
de archivos basada en MQTT
"f" : 1,
"o" : 20,
"n" : 32,
"b" : "130080"
}
{
"o": "BlockSizeOutOfBounds",
"m": "The block size is out of bounds",
"c": "1bb8aaa1-5c18-4d21-80c2-0b44fee10380"
}
• »o» es el código de error que indica el motivo del error. Consulte los códigos de error más adelante en
esta sección para obtener más información.
• »m» es el mensaje de error que contiene los detalles del error.
• »c» es el campo del token del cliente. Se puede devolver si se proporcionó en
elDescribeStreamsolicitud. Puede usar el token del cliente para asociar la respuesta a su solicitud.
El campo del token del cliente no siempre se incluye en una respuesta de error. Cuando el token de
cliente proporcionado en la solicitud no es válido o tiene un formato incorrecto, no se devuelve en la
respuesta al error.
Note
Por motivos de compatibilidad con versiones anteriores, es posible que los campos de la
respuesta al error no estén abreviados. Por ejemplo, el código de error puede designarse con
los campos «código» u «o» y el campo del token del cliente puede designarse con los campos
«ClientToken» o «c». Le recomendamos que utilice el formulario de abreviatura que se muestra
arriba.
InvalidTopic
964
AWS IoT Core Guía para desarrolladores
Un ejemplo de caso de uso en Freertos OTA
InvalidCbor
Por lo general, la solicitud se identifica como incorrecta. Para obtener más información, consulte el
mensaje de error.
Sin autorización
El tamaño del bloque está fuera de los límites. Consulte la»Entrega de archivos basada en
MQTT«sección enAWS IoT CoreService Quotas.
OffsetOutOfBounds
El número de bloques de solicitudes está fuera de los límites. Consulte la»Entrega de archivos basada
en MQTT«sección enAWS IoT CoreService Quotas.
BlockBitmapLimitExceeded
El tamaño del mapa de bits de la solicitud está fuera de los límites. Consulte la»Entrega de archivos
basada en MQTT«sección enAWS IoT CoreService Quotas.
ResourceNotFound
No se encontraron la secuencia, los archivos, las versiones de archivos o los bloques solicitados.
Consulte el mensaje de error para obtener más información.
VersionMismatch
La ETag de S3 de la transmisión no coincide con la ETag de la última versión del objeto de S3.
InternalError
Para obtener una implementación de referencia de un cliente de entrega de archivos basado en MQTT,
consulteCódigos de agente OTA Freertosen la documentación de Freertos.
965
AWS IoT Core Guía para desarrolladores
AWS Training and Certification
Las flotas de IoT pueden constar de un gran número de dispositivos que tienen diversas funcionalidades,
son de larga duración y están distribuidos geográficamente. Estas características hacen que la
configuración de la flota sea compleja y propensa a errores. Y dado que los dispositivos a menudo están
limitados en potencia informática, memoria y capacidades de almacenamiento, esto limita el uso del cifrado
y otras formas de seguridad en los propios dispositivos. Además, los dispositivos a menudo usan software
con vulnerabilidades conocidas. Estos factores hacen que las flotas de IoT sean un objetivo atractivo para
los piratas informáticos y dificultan la protección continuada de la flota de dispositivos.
AWS IoT Device Defenderaborda estos desafíos proporcionando herramientas para identificar los
problemas de seguridad y las desviaciones de las mejores prácticas.AWS IoT Device Defenderpuede
auditar las flotas de dispositivos para garantizar que cumplen con las mejores prácticas de seguridad y
detectar un comportamiento anormal en los dispositivos.
Temas
• Configuración (p. 966)
• Guía de auditoría (p. 967)
• Guía ML Detect (p. 971)
• Personaliza cuándo y cómo lo vesAWS IoT Device Defenderresultados de auditoría (p. 994)
Configuración
Antes de usar AWS IoT Device Defender por primera vez, realice las siguientes tareas:
Temas
• Registro en una Cuenta de AWS (p. 19)
• Crear un usuario administrativo (p. 20)
1. Abra https://portal.aws.amazon.com/billing/signup.
966
AWS IoT Core Guía para desarrolladores
Guía de auditoría
Parte del procedimiento de inscripción consiste en recibir una llamada telefónica e indicar un código de
verificación en el teclado del teléfono.
Al registrase en una Cuenta de AWS, se crea un Usuario raíz de la cuenta de AWS. El usuario raíz
tiene acceso a todos los recursos y Servicios de AWS de esa cuenta. Como práctica recomendada de
seguridad, asigne acceso administrativo a un usuario administrativo y utilice únicamente el usuario raíz
para realizar la ejecución tareas que requieren acceso de usuario raíz.
AWS le enviará un email de confirmación luego de completar el proceso de registro. Puede ver la actividad
de la cuenta y administrar la cuenta en cualquier momento entrando en https://aws.amazon.com/ y
seleccionando My Account (Mi cuenta).
1. Inicie sesión en AWS Management Console como propietario de cuenta eligiendo Usuario raíz e
ingrese el email de su Cuenta de AWS. En la siguiente página, escriba su contraseña.
Para obtener ayuda para iniciar sesión con el usuario raíz, consulte Signing in as the root user (Iniciar
sesión como usuario raíz) en la Guía del usuario de AWS Sign-In.
2. Active la autenticación multifactor (MFA) para el usuario raíz.
Para obtener instrucciones, consulte Habilitar un dispositivo MFA virtual para el usuario raíz Cuenta de
AWS (consola) en la Guía del usuario de IAM.
• Para las tareas administrativas diarias, conceda acceso administrativo a un usuario administrativo en
AWS IAM Identity Center.
Para obtener instrucciones, consulte Introducción en la Guía del usuario de AWS IAM Identity Center.
• Para iniciar sesión con el usuario del Centro de identidades de IAM, utilice la URL de inicio de sesión
que se envió a la dirección de correo electrónico cuando creó el usuario del Centro de identidades de
IAM.
Para obtener ayuda para iniciar sesión con un usuario del Centro de identidades de IAM, consulte
Iniciar sesión en el portal de acceso de AWS en la Guía del usuario de AWS Sign-In.
Estas tareas crean un usuarioCuenta de AWS y un usuario con privilegios de administrador para la cuenta.
Guía de auditoría
Este tutorial proporciona instrucciones sobre cómo configurar una auditoría periódica, configurar alarmas,
revisar los resultados de la auditoría y mitigar los problemas de la auditoría.
Temas
967
AWS IoT Core Guía para desarrolladores
Guía de auditoría
Requisitos previos
Necesitará lo siguiente para completar este tutorial:
El precio de las auditorías es por número de dispositivos al mes (flota de dispositivos conectados aAWS
IoT). Por lo tanto, añadir o eliminar comprobaciones de auditoría no afectaría a su factura mensual al
utilizar esta función.
968
AWS IoT Core Guía para desarrolladores
Guía de auditoría
969
AWS IoT Core Guía para desarrolladores
Guía de auditoría
970
AWS IoT Core Guía para desarrolladores
Guía ML Detect
Guía ML Detect
En esta guía de introducción, creará un perfil de seguridad de ML Detect que utilice el aprendizaje
automático (ML) para crear modelos del comportamiento esperado basados en los datos métricos
históricos de sus dispositivos. Mientras ML Detect crea el modelo de ML, puede monitorizar su progreso.
Una vez creado el modelo de aprendizaje automático, puede ver e investigar las alarmas de forma
continua y mitigar los problemas identificados.
Para obtener más información sobre ML Detect y sus comandos de API y CLI, consulteDetección de
ML (p. 1083).
Requisitos previos
• Una Cuenta de AWS. Si no dispone de ella, consulte Configuración.
971
AWS IoT Core Guía para desarrolladores
Guía ML Detect
Habilitar ML Detect
Los siguientes procedimientos detallan cómo configurar ML Detect en la consola.
1. En primer lugar, asegúrese de que sus dispositivos creen los puntos de datos mínimos necesarios,
tal como se definen en los requisitos mínimos de ML Detect (p. 1085) para la formación continua y
la actualización del modelo. Para que la recopilación de datos avance, asegúrese de que su perfil de
seguridad esté adjunto a un objetivo, que puede ser una cosa o un grupo de cosas.
2. En la AWS IoTconsola, en el panel de navegación, expanda Defend. Elija Detectar, Perfiles de
seguridad, Crear perfil de seguridad y, a continuación, Crear perfil de detección de anomalías de ML.
3. En la página Establecer configuraciones básicas, realice lo siguiente.
972
AWS IoT Core Guía para desarrolladores
Guía ML Detect
Si aún no tienes un rol de SNS, sigue estos pasos para crear un rol con los permisos adecuados y las
relaciones de confianza que se requieren.
• En Añadir etiquetas (opcional), puedes añadir cualquier etiqueta que quieras asociar a tu rol.
Cuando haya terminado, elija Next: Review (Siguiente: revisar).
• En Revisar, asigne un nombre a su función y asegúrese de que
AWSIoTDeviceDefenderPublishFindingsToSNSMitigationActionaparezca en Permisos y
AWSservicio: iot.amazonaws.com aparece en Relaciones de confianza. Cuando haya acabado, elija
Create rol.
973
AWS IoT Core Guía para desarrolladores
Guía ML Detect
974
AWS IoT Core Guía para desarrolladores
Guía ML Detect
975
AWS IoT Core Guía para desarrolladores
Guía ML Detect
8. Una vez que haya creado su perfil de seguridad, se le redirigirá a la página Perfiles de seguridad,
donde aparecerá el perfil de seguridad recién creado.
Note
Cuando el estado del modelo esté activo, empezará a tomar decisiones de detección en función de tu
uso y actualizará el perfil todos los días.
976
AWS IoT Core Guía para desarrolladores
Guía ML Detect
Note
2. Si accedes a la pestaña Historial, también podrás ver detalles sobre los dispositivos que ya no están
en alarmas.
977
AWS IoT Core Guía para desarrolladores
Guía ML Detect
Para obtener más información, en Administrar, selecciona Cosas, elige aquello sobre lo que quieres
ver más detalles y, a continuación, ve a las métricas de Defender. Puedes acceder al gráfico de
métricas de Defender y realizar tu investigación sobre cualquier cosa que esté en alerta desde la
pestaña Activa. En este caso, el gráfico muestra un aumento en el tamaño del mensaje, que inició la
alarma. Puede ver que la alarma se borra posteriormente.
978
AWS IoT Core Guía para desarrolladores
Guía ML Detect
3. En Establecer configuraciones básicas, puede ajustar los grupos de elementos objetivo del perfil de
seguridad o cambiar las métricas que desea monitorear.
979
AWS IoT Core Guía para desarrolladores
Guía ML Detect
4. Para actualizar cualquiera de las siguientes opciones, vaya a Editar el comportamiento de las
métricas.
• Los puntos de datos del modelo ML son necesarios para iniciar la alarma
• Los puntos de datos de su modelo ML son necesarios para borrar la alarma
• Su nivel de confianza en ML Detect
• Sus notificaciones de ML Detect (por ejemplo, No suprimidas, Suprimidas)
980
AWS IoT Core Guía para desarrolladores
Guía ML Detect
{
"Version": "2012-10-17",
981
AWS IoT Core Guía para desarrolladores
Guía ML Detect
"Statement": [
{
"Effect": "Deny",
"Action": "iot:*",
"Resource": "*",
}
]
}
982
AWS IoT Core Guía para desarrolladores
Guía ML Detect
Cuando haya terminado, elija Save (Guardar). Ahora dispone de una acción de mitigación que mueve
los dispositivos en alerta a un grupo de elementos en cuarentena y una acción de mitigación para
aislar el dispositivo mientras investiga.
5. Navega hasta Defender, Detect, Alarms. Puedes ver qué dispositivos están en estado de alarma en
Activo.
983
AWS IoT Core Guía para desarrolladores
Guía ML Detect
Seleccione el dispositivo que desee mover al grupo de cuarentena y elija Iniciar acciones de
mitigación.
6. En Iniciar acciones de mitigación, seleccione la acción de mitigación que creó anteriormente. Por
ejemplo, elegiremos y, a continuaciónQuarantine_action, elegiremos Iniciar. Se abrirá la página
Tareas de acción.
984
AWS IoT Core Guía para desarrolladores
Guía ML Detect
Tutoriales
• Habilitar ML Detect (p. 985)
• Supervise el estado de su modelo de aprendizaje automático (p. 986)
• Revise sus alarmas de ML Detect (p. 988)
• Ajusta tus alarmas de aprendizaje automático (p. 989)
• Marque el estado de verificación de su alarma (p. 991)
• Mitigue los problemas identificados en los dispositivos (p. 991)
Habilitar ML Detect
En el siguiente procedimiento se muestra cómo habilitar ML Detect enAWS CLI.
1. Asegúrese de que sus dispositivos creen los puntos de datos mínimos necesarios, tal como se definen
en los requisitos mínimos de ML Detect (p. 1085) para la formación continua y la actualización del
modelo. Para que la recopilación de datos avance, asegúrate de que tus cosas estén en un grupo de
cosas adjunto a un perfil de seguridad.
2. Cree un perfil de seguridad de ML Detect mediante elcreate-security-profile comando.
El siguiente ejemplo crea un perfil de seguridad denominado security-profile-for-smart-
lights que comprueba el número de mensajes enviados, el número de errores de autorización, el
número de intentos de conexión y el número de desconexiones. El ejemplomlDetectionConfig se
utiliza para establecer que la métrica utilizará el modelo ML Detect.
985
AWS IoT Core Guía para desarrolladores
Guía ML Detect
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
},
{
"name": "num-connection-attempts-ml-behavior",
"metric": "aws:num-connection-attempts",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
},
{
"name": "num-disconnects-ml-behavior",
"metric": "aws:num-disconnects",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
}]'
Salida:
{
"securityProfileName": "security-profile-for-smart-lights",
"securityProfileArn": "arn:aws:iot:eu-west-1:123456789012:securityprofile/security-
profile-for-smart-lights"
}
3. A continuación, asocie su perfil de seguridad a uno o varios grupos de cosas. Use elattach-
security-profile comando para adjuntar un grupo de cosas a su perfil de seguridad. El siguiente
ejemplo asocia un grupo de cosas denominado ML_Detect_Beta_Static_Group al perfil de
seguridad de security-profile-for-smart-lights.
Salida:
Ninguno.
4. Una vez que haya creado su perfil de seguridad completo, el modelo de aprendizaje automático
comenzará a entrenarse. La formación inicial y la creación del modelo de aprendizaje automático
tardan 14 días en completarse. Transcurridos 14 días, si hay actividad anómala en el dispositivo, es de
esperar que aparezcan alarmas.
986
AWS IoT Core Guía para desarrolladores
Guía ML Detect
Salida:
{
"summaries": [
{
"securityProfileName": "security-profile-for-smart-lights",
"behaviorName": "Messages_sent_ML_behavior",
"trainingDataCollectionStartDate": "2020-11-30T14:00:00-08:00",
"modelStatus": "ACTIVE",
"datapointsCollectionPercentage": 29.408,
"lastModelRefreshDate": "2020-12-07T14:35:19.237000-08:00"
},
{
"securityProfileName": "security-profile-for-smart-lights",
"behaviorName": "Messages_received_ML_behavior",
"modelStatus": "PENDING_BUILD",
"datapointsCollectionPercentage": 0.0
},
{
"securityProfileName": "security-profile-for-smart-lights",
"behaviorName": "Authorization_failures_ML_behavior",
"trainingDataCollectionStartDate": "2020-11-30T14:00:00-08:00",
"modelStatus": "ACTIVE",
"datapointsCollectionPercentage": 35.464,
"lastModelRefreshDate": "2020-12-07T14:29:44.396000-08:00"
},
{
"securityProfileName": "security-profile-for-smart-lights",
"behaviorName": "Message_size_ML_behavior",
"trainingDataCollectionStartDate": "2020-11-30T14:00:00-08:00",
"modelStatus": "ACTIVE",
"datapointsCollectionPercentage": 29.332,
"lastModelRefreshDate": "2020-12-07T14:30:44.113000-08:00"
},
{
"securityProfileName": "security-profile-for-smart-lights",
"behaviorName": "Connection_attempts_ML_behavior",
"trainingDataCollectionStartDate": "2020-11-30T14:00:00-08:00",
"modelStatus": "ACTIVE",
"datapointsCollectionPercentage": 32.891999999999996,
"lastModelRefreshDate": "2020-12-07T14:29:43.121000-08:00"
},
{
"securityProfileName": "security-profile-for-smart-lights",
"behaviorName": "Disconnects_ML_behavior",
"trainingDataCollectionStartDate": "2020-11-30T14:00:00-08:00",
"modelStatus": "ACTIVE",
"datapointsCollectionPercentage": 35.46,
"lastModelRefreshDate": "2020-12-07T14:29:55.556000-08:00"
}
]
}
987
AWS IoT Core Guía para desarrolladores
Guía ML Detect
Note
Si su modelo no progresa como se esperaba, asegúrese de que sus dispositivos cumplan
conRequisitos mínimos (p. 1085).
Salida:
{
"activeViolations": []
}
Como alternativa, puede ver todas las infracciones descubiertas durante un período de tiempo
determinado mediante ellist-violation-events comando. El siguiente ejemplo muestra los
eventos de infracción ocurridos entre las 5:42:13 GMT del 22 de septiembre de 2020 y las 5:42:13
GMT del 26 de octubre de 2020.
Salida:
{
"violationEvents": [
{
"violationId": "1448be98c09c3d4ab7cb9b6f3ece65d6",
"thingName": "lightbulb-1",
"securityProfileName": "security-profile-for-smart-lights",
"behavior": {
"name": "LowConfidence_MladBehavior_MessagesSent",
"metric": "aws:num-messages-sent",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
},
"violationEventType": "alarm-invalidated",
"violationEventTime": 1600780245.29
},
{
"violationId": "df4537569ef23efb1c029a433ae84b52",
"thingName": "lightbulb-2",
"securityProfileName": "security-profile-for-smart-lights",
"behavior": {
988
AWS IoT Core Guía para desarrolladores
Guía ML Detect
"name": "LowConfidence_MladBehavior_MessagesSent",
"metric": "aws:num-messages-sent",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
},
"violationEventType": "alarm-invalidated",
"violationEventTime": 1600780245.281
}
],
"nextToken":
"Amo6XIUrsOohsojuIG6TuwSR3X9iUvH2OCksBZg6bed2j21VSnD1uP1pflxKX1+a3cvBRSosIB0xFv40kM6RYBknZ/
vxabMe/ZW31Ps/WiZHlr9Wg7R7eEGli59IJ/U0iBQ1McP/ht0E2XA2TTIvYeMmKQQPsRj/
eoV9j7P/wveu7skNGepU/mvpV0O2Ap7hnV5U+Prx/9+iJA/341va
+pQww7jpUeHmJN9Hw4MqW0ysw0Ry3w38hOQWEpz2xwFWAxAARxeIxCxt5c37RK/lRZBlhYqoB
+w2PZ74730h8pICGY4gktJxkwHyyRabpSM/G/f5DFrD9O5v8idkTZzBxW2jrbzSUIdafPtsZHL/
yAMKr3HAKtaABz2nTsOBNre7X2d/jIjjarhon0Dh9l+8I9Y5Ey
+DIFBcqFTvhibKAafQt3gs6CUiqHdWiCenfJyb8whmDE2qxvdxGElGmRb
+k6kuN5jrZxxw95gzfYDgRHv11iEn8h1qZLD0czkIFBpMppHj9cetHPvM
+qffXGAzKi8tL6eQuCdMLXmVE3jbqcJcjk9ItnaYJi5zKDz9FVbrz9qZZPtZJFHp"
}
989
AWS IoT Core Guía para desarrolladores
Guía ML Detect
},
{
"name": "num-connection-attempts-ml-behavior",
"metric": "aws:num-connection-attempts",
"criteria": {
"mlDetectionConfig": {
"confidenceLevel" : "HIGH"
}
},
"suppressAlerts": false
},
{
"name": "num-disconnects-ml-behavior",
"metric": "aws:num-disconnects",
"criteria": {
"mlDetectionConfig": {
"confidenceLevel" : "LOW"
}
},
"suppressAlerts": false
}]'
Salida:
{
"securityProfileName": "security-profile-for-smart-lights",
"securityProfileArn": "arn:aws:iot:eu-west-1:123456789012:securityprofile/security-
profile-for-smart-lights",
"behaviors": [
{
"name": "num-messages-sent-ml-behavior",
"metric": "aws:num-messages-sent",
"criteria": {
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
}
},
{
"name": "num-authorization-failures-ml-behavior",
"metric": "aws:num-authorization-failures",
"criteria": {
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
}
},
{
"name": "num-connection-attempts-ml-behavior",
"metric": "aws:num-connection-attempts",
"criteria": {
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": false
},
{
"name": "num-disconnects-ml-behavior",
"metric": "aws:num-disconnects",
"criteria": {
"mlDetectionConfig": {
"confidenceLevel": "LOW"
990
AWS IoT Core Guía para desarrolladores
Guía ML Detect
}
},
"suppressAlerts": true
}
],
"version": 2,
"creationDate": 1600799559.249,
"lastModifiedDate": 1600800516.856
}
• Marque las alarmas con un estado de verificación y una descripción de ese estado. Por ejemplo, para
establecer el estado de verificación de una alarma en Falso positivo, utilice el siguiente comando:
Salida:
Ninguno.
Salida:
{
"thingGroupName": "ThingGroupForDetectMitigationAction",
"thingGroupArn": "arn:aws:iot:us-
east-1:123456789012:thinggroup/ThingGroupForDetectMitigationAction",
"thingGroupId": "4139cd61-10fa-4c40-b867-0fc6209dca4d"
}
991
AWS IoT Core Guía para desarrolladores
Guía ML Detect
}'
Salida:
{
"actionArn": "arn:aws:iot:us-
east-1:123456789012:mitigationaction/detect_mitigation_action",
"actionId": "5939e3a0-bf4c-44bb-a547-1ab59ffe67c3"
}
Salida:
{
"taskId": "taskIdForMitigationAction"
}
4. (Opcional) Para ver las ejecuciones de las acciones de mitigación incluidas en una tarea, utilice
ellist-detect-mitigation-actions-executions comando.
Salida:
{
"actionsExecutions": [
{
"taskId": "e56ee95e - f4e7 - 459 c - b60a - 2701784290 af",
"violationId": "214_fe0d92d21ee8112a6cf1724049d80",
"actionName": "underTest_MAThingGroup71232127",
"thingName": "cancelDetectMitigationActionsTaskd143821b",
"executionStartDate": "Thu Jan 07 18: 35: 21 UTC 2021",
"executionEndDate": "Thu Jan 07 18: 35: 21 UTC 2021",
"status": "SUCCESSFUL",
}
]
}
Salida:
992
AWS IoT Core Guía para desarrolladores
Guía ML Detect
{
"taskSummary": {
"taskId": "taskIdForMitigationAction",
"taskStatus": "SUCCESSFUL",
"taskStartTime": 1609988361.224,
"taskEndTime": 1609988362.281,
"target": {
"securityProfileName": "security-profile-for-smart-lights",
"behaviorName": "num-messages-sent-ml-behavior"
},
"violationEventOccurrenceRange": {
"startTime": 1609986633.0,
"endTime": 1609987833.0
},
"onlyActiveViolationsIncluded": true,
"suppressedAlertsIncluded": true,
"actionsDefinition": [
{
"name": "detect_mitigation_action",
"id": "5939e3a0-bf4c-44bb-a547-1ab59ffe67c3",
"roleArn": "arn:aws:iam::123456789012:role/MitigatioActionValidRole",
"actionParams": {
"addThingsToThingGroupParams": {
"thingGroupNames": [
"ThingGroupForDetectMitigationAction"
],
"overrideDynamicGroups": false
}
}
}
],
"taskStatistics": {
"actionsExecuted": 0,
"actionsSkipped": 0,
"actionsFailed": 0
}
}
}
6. (Opcional) Para obtener una lista de sus tareas de acción de mitigación, utilice ellist-detect-
mitigation-actions-tasks comando.
Salida:
{
"tasks": [
{
"taskId": "taskIdForMitigationAction",
"taskStatus": "SUCCESSFUL",
"taskStartTime": 1609988361.224,
"taskEndTime": 1609988362.281,
"target": {
"securityProfileName": "security-profile-for-smart-lights",
"behaviorName": "num-messages-sent-ml-behavior"
},
"violationEventOccurrenceRange": {
993
AWS IoT Core Guía para desarrolladores
Personaliza cuándo y cómo lo vesAWS IoT
Device Defenderresultados de auditoría
"startTime": 1609986633.0,
"endTime": 1609987833.0
},
"onlyActiveViolationsIncluded": true,
"suppressedAlertsIncluded": true,
"actionsDefinition": [
{
"name": "detect_mitigation_action",
"id": "5939e3a0-bf4c-44bb-a547-1ab59ffe67c3",
"roleArn": "arn:aws:iam::123456789012:role/
MitigatioActionValidRole",
"actionParams": {
"addThingsToThingGroupParams": {
"thingGroupNames": [
"ThingGroupForDetectMitigationAction"
],
"overrideDynamicGroups": false
}
}
}
],
"taskStatistics": {
"actionsExecuted": 0,
"actionsSkipped": 0,
"actionsFailed": 0
}
}
]
}
Salida:
Ninguno.
Puede suprimir las comprobaciones de auditoría seleccionadas de un recurso o cuenta específicos durante
un período de tiempo predeterminado. Un resultado de comprobación de auditoría que se ha suprimido se
clasifica como una constatación suprimida, independiente de las categorías conformes y no conformes.
Esta nueva categoría no activa una alarma como un resultado incompatible. Esto le permite reducir las
perturbaciones de las notificaciones de incumplimiento durante periodos de mantenimiento conocidos o
hasta que esté programada la finalización de una actualización.
994
AWS IoT Core Guía para desarrolladores
Personaliza cuándo y cómo lo vesAWS IoT
Device Defenderresultados de auditoría
Introducción
En las siguientes secciones se detalla cómo utilizar las supresiones de búsqueda de auditoría para
suprimir unDevice certificate expiringcomprobar en la consola y la CLI. Si quieres seguir alguna
de las demostraciones, primero debes crear dos certificados caducados para que Device Defender los
detecte.
1. En primer lugar, realizaremos una auditoría bajo demanda para demostrar que la comprobación del
certificado de dispositivo caducado no cumple las normas.
995
AWS IoT Core Guía para desarrolladores
Personaliza cuándo y cómo lo vesAWS IoT
Device Defenderresultados de auditoría
A partir de los resultados de la auditoría bajo demanda, podemos ver que el «certificado de dispositivo
caduca» no cumple los requisitos para dos recursos.
2. Ahora, nos gustaría deshabilitar la advertencia de comprobación de no conformidad «Certificado de
dispositivo que caduca» porque nuestros desarrolladores están probando nuevas características que
solucionarán la advertencia.
996
AWS IoT Core Guía para desarrolladores
Personaliza cuándo y cómo lo vesAWS IoT
Device Defenderresultados de auditoría
997
AWS IoT Core Guía para desarrolladores
Personaliza cuándo y cómo lo vesAWS IoT
Device Defenderresultados de auditoría
998
AWS IoT Core Guía para desarrolladores
Personaliza cuándo y cómo lo vesAWS IoT
Device Defenderresultados de auditoría
Una vez rellenados los campos, elijaCrear. Vemos un banner de éxito después de que se haya creado
la supresión del hallazgo de auditoría.
4. Hemos suprimido un hallazgo de auditoría de uno de los certificados y ahora tenemos que suprimir el
hallazgo de auditoría del segundo certificado. Podríamos utilizar el mismo método de supresión que
usamos en el paso 3, pero utilizaremos otro método para fines de demostración.
999
AWS IoT Core Guía para desarrolladores
Personaliza cuándo y cómo lo vesAWS IoT
Device Defenderresultados de auditoría
1000
AWS IoT Core Guía para desarrolladores
Personaliza cuándo y cómo lo vesAWS IoT
Device Defenderresultados de auditoría
Vemos un banner de éxito después de que se haya creado la supresión del hallazgo de auditoría.
Ahora, ambos resultados de auditoría se han suprimido durante 1 semana mientras nuestros
desarrolladores trabajan en una solución para abordar la advertencia.
• create-audit-supression
• describe-audit-supression
• update-audit-supression
• supresión de eliminación de auditorías
• lista-auditorías-supresiones
Salida:
Ninguno.
2. Utilice el siguiente comando para ejecutar una auditoría bajo demanda dirigida a
laDEVICE_CERTIFICATE_EXPIRING_CHECKComprobación de auditoría.
Salida:
{
"taskId": "787ed873b69cb4d6cdbae6ddd06996c5"
}
Salida:
{
"roleArn": "arn:aws:iam::<accountid>:role/service-role/project",
"auditNotificationTargetConfigurations": {
1001
AWS IoT Core Guía para desarrolladores
Personaliza cuándo y cómo lo vesAWS IoT
Device Defenderresultados de auditoría
"SNS": {
"targetArn": "arn:aws:sns:us-east-1:<accountid>:project_sns",
"roleArn": "arn:aws:iam::<accountid>:role/service-role/project",
"enabled": true
}
},
"auditCheckConfigurations": {
"AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK": {
"enabled": false
},
"CA_CERTIFICATE_EXPIRING_CHECK": {
"enabled": false
},
"CA_CERTIFICATE_KEY_QUALITY_CHECK": {
"enabled": false
},
"CONFLICTING_CLIENT_IDS_CHECK": {
"enabled": false
},
"DEVICE_CERTIFICATE_EXPIRING_CHECK": {
"enabled": true
},
"DEVICE_CERTIFICATE_KEY_QUALITY_CHECK": {
"enabled": false
},
"DEVICE_CERTIFICATE_SHARED_CHECK": {
"enabled": false
},
"IOT_POLICY_OVERLY_PERMISSIVE_CHECK": {
"enabled": true
},
"IOT_ROLE_ALIAS_ALLOWS_ACCESS_TO_UNUSED_SERVICES_CHECK": {
"enabled": false
},
"IOT_ROLE_ALIAS_OVERLY_PERMISSIVE_CHECK": {
"enabled": false
},
"LOGGING_DISABLED_CHECK": {
"enabled": false
},
"REVOKED_CA_CERTIFICATE_STILL_ACTIVE_CHECK": {
"enabled": false
},
"REVOKED_DEVICE_CERTIFICATE_STILL_ACTIVE_CHECK": {
"enabled": false
},
"UNAUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK": {
"enabled": false
}
}
}
Salida:
1002
AWS IoT Core Guía para desarrolladores
Personaliza cuándo y cómo lo vesAWS IoT
Device Defenderresultados de auditoría
{
"tasks": [
{
"taskId": "787ed873b69cb4d6cdbae6ddd06996c5",
"taskStatus": "COMPLETED",
"taskType": "SCHEDULED_AUDIT_TASK"
}
]
}
Salida:
{
"taskStatus": "COMPLETED",
"taskType": "SCHEDULED_AUDIT_TASK",
"taskStartTime": 1596168096.157,
"taskStatistics": {
"totalChecks": 1,
"inProgressChecks": 0,
"waitingForDataCollectionChecks": 0,
"compliantChecks": 0,
"nonCompliantChecks": 1,
"failedChecks": 0,
"canceledChecks": 0
},
"scheduledAuditName": "AWSIoTDeviceDefenderDailyAudit",
"auditDetails": {
"DEVICE_CERTIFICATE_EXPIRING_CHECK": {
"checkRunStatus": "COMPLETED_NON_COMPLIANT",
"checkCompliant": false,
"totalResourcesCount": 195,
"nonCompliantResourcesCount": 2
}
}
}
Salida:
{
"findings": [
{
"findingId": "296ccd39f806bf9d8f8de20d0ceb33a1",
"taskId": "787ed873b69cb4d6cdbae6ddd06996c5",
"checkName": "DEVICE_CERTIFICATE_EXPIRING_CHECK",
"taskStartTime": 1596168096.157,
1003
AWS IoT Core Guía para desarrolladores
Personaliza cuándo y cómo lo vesAWS IoT
Device Defenderresultados de auditoría
"findingTime": 1596168096.651,
"severity": "MEDIUM",
"nonCompliantResource": {
"resourceType": "DEVICE_CERTIFICATE",
"resourceIdentifier": {
"deviceCertificateId": "b4490<shortened>"
},
"additionalInfo": {
"EXPIRATION_TIME": "1582862626000"
}
},
"reasonForNonCompliance": "Certificate is past its expiration.",
"reasonForNonComplianceCode": "CERTIFICATE_PAST_EXPIRATION",
"isSuppressed": false
},
{
"findingId": "37ecb79b7afb53deb328ec78e647631c",
"taskId": "787ed873b69cb4d6cdbae6ddd06996c5",
"checkName": "DEVICE_CERTIFICATE_EXPIRING_CHECK",
"taskStartTime": 1596168096.157,
"findingTime": 1596168096.651,
"severity": "MEDIUM",
"nonCompliantResource": {
"resourceType": "DEVICE_CERTIFICATE",
"resourceIdentifier": {
"deviceCertificateId": "c7691<shortened>"
},
"additionalInfo": {
"EXPIRATION_TIME": "1583424717000"
}
},
"reasonForNonCompliance": "Certificate is past its expiration.",
"reasonForNonComplianceCode": "CERTIFICATE_PAST_EXPIRATION",
"isSuppressed": false
}
]
}
Salida:
{
"suppressions": [
{
"checkName": "DEVICE_CERTIFICATE_EXPIRING_CHECK",
"resourceIdentifier": {
"deviceCertificateId": "c7691e<shortened>"
},
1004
AWS IoT Core Guía para desarrolladores
Auditoría
"expirationDate": 1597881600.0,
"suppressIndefinitely": false
}
]
}
10. Lasupresión de eliminación de auditoríasse puede utilizar para eliminar una supresión de búsqueda de
auditoría.
Salida:
{
"suppressions": []
}
Auditoría
Una auditoría de AWS IoT Device Defender examina la configuración y las políticas relacionadas con una
cuenta y dispositivo para garantizar que existen medidas de seguridad. Las auditorías pueden ayudarle
a detectar cualquier desviación con respecto a las prácticas recomendadas de seguridad o a las políticas
de acceso adecuadas (por ejemplo, cuando varios dispositivos usan la misma identidad o cuando existen
políticas excesivamente permisivas que permiten a un dispositivo leer y actualizar datos de muchos otros
dispositivos). Puede ejecutar auditorías según sean necesarias (auditorías bajo demanda) o programarlas
para que se ejecuten periódicamente (auditorías programadas).
Una auditoría de AWS IoT Device Defender realiza una serie de comprobaciones predefinidas
relacionadas con las prácticas recomendadas de seguridad de IoT comunes y las vulnerabilidades de
los dispositivos. Entre las comprobaciones se incluyen las políticas que conceden permiso para leer o
actualizar datos en varios dispositivos, los dispositivos que comparten una identidad (certificado X.509), o
los certificados que van a caducar o que se han revocado pero siguen activos.
1005
AWS IoT Core Guía para desarrolladores
Gravedad del problema
Critical
Las comprobaciones de auditoría no conformes con esta gravedad identifican los problemas
que requieren una atención urgente. Los problemas críticos permiten a menudo a los agentes
malintencionados obtener fácilmente acceso a sus recursos o controlarlos sin demasiada sofisticación
y sin disponer de información privilegiada o credenciales especiales.
Alta
Las comprobaciones de auditoría no conformes con esta gravedad requieren una investigación
urgente y una planificación de la corrección una vez que se hayan abordado los problemas críticos.
Al igual que los problemas críticos, los problemas con gravedad alta suelen proporcionar los usuarios
malintencionados acceso o control de sus recursos. Sin embargo, los problemas con gravedad alta
suelen ser más difíciles de aprovechar. Es posible que requieran herramientas especiales, información
privilegiada o configuraciones específicas.
Media
Las comprobaciones de auditoría que no cumplen con esta gravedad presentan problemas que
requieren atención como parte del mantenimiento continuo de su postura de seguridad. Los problemas
de gravedad media pueden causar un impacto operativo negativo, como interrupciones no planificadas
debido a un mal funcionamiento de los controles de seguridad. Estos problemas también pueden
proporcionar a los usuarios malintencionados acceso o control limitado a sus recursos, o pueden
facilitar algunos pasos de sus acciones maliciosas.
Baja
Las comprobaciones de auditoría no conformes con esta severidad suelen indicar que se pasaron
por alto o se omitieron las mejores prácticas de seguridad. Aunque pueden no causar un impacto
inmediato en la seguridad, estos descuidos pueden ser aprovechados por usuarios con malas
intenciones. Al igual que los problemas de gravedad media, los problemas de gravedad baja requieren
atención como parte del mantenimiento continuo del estado de seguridad.
Pasos siguientes
Para conocer los tipos de comprobaciones de auditoría que se pueden realizar, consulte Comprobaciones
de auditoría (p. 1006). Para obtener información sobre las cuotas de servicio que se aplican a las
auditorías, consulte la sección Cuotas de servicio.
Comprobaciones de auditoría
Note
• Se ha revocado una CA intermedia para comprobar los certificados de dispositivos activos (p. 1007)
• El certificado de CA revocado sigue activo (p. 1008)
• Certificado de dispositivo compartido (p. 1009)
1006
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
Gravedad: crítica
Detalles
Se devuelven los siguientes códigos de motivo cuando esta comprobación encuentra una falta de
conformidad:
• INTERMEDIATE_CA_REVOKED_BY_ISSUER
Una CA intermedia revocada ya no debe usarse para firmar ningún otro certificado de CA o dispositivo en
la cadena de CA. Los dispositivos recién añadidos con certificados firmados con este certificado de CA tras
la revocación de la CA intermedia representarán una amenaza para la seguridad.
Cómo solucionarlo
Revise la actividad de registro del certificado del dispositivo para ver el tiempo transcurrido desde la
revocación del certificado de CA. Siga sus prácticas recomendadas de seguridad para mitigar la situación.
Es posible que desee:
1. Aprovisione nuevos certificados, firmados por una CA diferente, para los dispositivos afectados.
2. Compruebe que los nuevos certificados sean válidos y que los dispositivos puedan usarlos para
conectarse.
1007
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
3. Se utiliza UpdateCertificatepara marcar el certificado antiguo como REVOCADO enAWS IoT. También
puede utilizar acciones de mitigación para:
• Aplicar la acción de mitigación UPDATE_DEVICE_CERTIFICATE en los resultados de la auditoría
para realizar este cambio.
• Aplicar la acción de mitigación ADD_THINGS_TO_THING_GROUP para añadir el dispositivo a un grupo
en el que puede tomar medidas.
• Aplique la acción de PUBLISH_FINDINGS_TO_SNS mitigación si desea implementar una respuesta
personalizada en respuesta al mensaje de Amazon SNS.
• Revise la actividad de registro de certificados de dispositivos para ver el tiempo transcurrido desde
la revocación del certificado de CA intermedio y considere la posibilidad de revocar cualquier
certificado de dispositivo que se haya emitido con él durante este tiempo. Puede utilizarlos
ListRelatedResourcesForAuditFindingpara enumerar los certificados de dispositivo firmados por el
certificado de CA y UpdateCertificatepara revocar un certificado de dispositivo.
• Desvincular el certificado antiguo del dispositivo. (Consulte DetachThingPrincipal).
Gravedad: crítica
Detalles
Un certificado de CA está marcado como revocado en la lista de revocación de certificados mantenida por
la entidad emisora, pero sigue marcado como "ACTIVE" o "PENDING_TRANSFER" en AWS IoT.
Se devuelven los siguientes códigos de motivo cuando esta comprobación encuentra un certificado de CA
no conforme:
• CERTIFICATE_REVOKED_BY_ISSUER
Cómo solucionarlo
1. Utilice UpdateCACertificate para marcar el certificado de CA como INACTIVO en AWS IoT. También
puede utilizar acciones de mitigación para:
• Aplicar la acción de mitigación UPDATE_CA_CERTIFICATE en los resultados de la auditoría para
realizar este cambio.
• Aplique la acción de PUBLISH_FINDINGS_TO_SNS mitigación para implementar una respuesta
personalizada en respuesta al mensaje de Amazon SNS.
1008
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
podido emitir durante este período. Puede utilizar ListCertificatesByCA para enumerar los certificados de
dispositivo firmados por el certificado de CA y UpdateCertificaterevocar un certificado de dispositivo.
Gravedad: crítica
Detalles
Cuando se realiza como parte de una auditoría bajo demanda, esta comprobación analiza los certificados
y los ID de cliente que utilizaron los dispositivos para conectarse durante los 31 días anteriores al inicio
de la auditoría, hasta 2 horas antes de que se ejecutara la comprobación. En el caso de las auditorías
programadas, esta comprobación analiza los datos desde 2 horas antes de la última vez que se ejecutó la
auditoría hasta 2 horas antes de que se iniciara esta instancia de la auditoría. Si ha tomado medidas para
mitigar esta condición durante el periodo de la comprobación, observe cuándo se realizaron las conexiones
simultáneas para determinar si el problema persiste.
Se devuelven los siguientes códigos de motivo cuando esta comprobación encuentra un certificado no
conforme:
• CERTIFICATE_SHARED_BY_MULTIPLE_DEVICES
Además, los resultados devueltos con esta comprobación incluyen el ID del certificado compartido, los
ID de los clientes que usan el certificado para conectarse y los tiempos de conexión/desconexión. Se
muestran primero los resultados más recientes.
Cómo solucionarlo
Compruebe que el certificado del dispositivo no ha sufrido un ataque. Si ha sido atacado, siga las prácticas
recomendadas de seguridad para mitigar la situación.
1009
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
Esta comprobación de auditoría proporciona las siguientes pruebas adicionales de la calidad de la clave
criptográfica:
• CVE-2008-0166 — Compruebe si la clave se generó con OpenSSL 0.9.8c-1 hasta versiones anteriores
a la 0.9.8g-9 en un sistema operativo basado en Debian. Esas versiones de OpenSSL utilizan un
generador de números aleatorios que genera números predecibles, lo que permite a los atacantes
remotos realizar ataques de adivinación de fuerza bruta contra claves criptográficas.
• CVE-2017-15361: compruebe si la clave la generó la biblioteca RSA 1.02.013 de Infineon en el
firmware del Módulo de plataforma confiable (TPM) de Infineon, por ejemplo, las versiones anteriores al
0000000000000422 a la 4.34, antes del 000000000000062b a la 6.43 y antes del 0000000000008521
a 133.33. Esa biblioteca trata de forma inadecuada la generación de claves RSA, lo que permite a
los atacantes frustrar algunos mecanismos de protección criptográfica a través de ataques dirigidos.
Algunos ejemplos de tecnologías afectadas incluyen BitLocker la generación de claves PGP TPM 1.2,
YubiKey 4 (antes de la 4.3.5) y la función de cifrado de datos de usuario en caché de Chrome OS.
AWS IoT Device Defender registra los certificados como no conformes si no superan estas
comprobaciones.
Gravedad: crítica
Detalles
Esta comprobación se aplica a los certificados de dispositivo ACTIVE o PENDING_TRANSFER.
Se devuelven los siguientes códigos de motivo cuando esta comprobación encuentra un certificado no
conforme:
• CERTIFICATE_KEY_VULNERABILITY_CVE-2017-15361
• CERTIFICATE_KEY_VULNERABILITY_CVE-2008-0166
Cómo solucionarlo
Actualice los certificados de su dispositivo para reemplazar aquellos con vulnerabilidades conocidas.
1010
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
Esta comprobación de auditoría proporciona las siguientes pruebas adicionales de la calidad de la clave
criptográfica:
• CVE-2008-0166 — Compruebe si la clave se generó con OpenSSL 0.9.8c-1 hasta versiones anteriores
a la 0.9.8g-9 en un sistema operativo basado en Debian. Esas versiones de OpenSSL utilizan un
generador de números aleatorios que genera números predecibles, lo que permite a los atacantes
remotos realizar ataques de adivinación de fuerza bruta contra claves criptográficas.
• CVE-2017-15361: compruebe si la clave la generó la biblioteca RSA 1.02.013 de Infineon en el
firmware del Módulo de plataforma confiable (TPM) de Infineon, por ejemplo, las versiones anteriores al
0000000000000422 a la 4.34, antes del 000000000000062b a la 6.43 y antes del 0000000000008521
a 133.33. Esa biblioteca trata de forma inadecuada la generación de claves RSA, lo que permite a
los atacantes frustrar algunos mecanismos de protección criptográfica a través de ataques dirigidos.
Algunos ejemplos de tecnologías afectadas incluyen BitLocker la generación de claves PGP TPM 1.2,
YubiKey 4 (antes de la 4.3.5) y la función de cifrado de datos de usuario en caché de Chrome OS.
AWS IoT Device Defender registra los certificados como no conformes si no superan estas
comprobaciones.
Gravedad: crítica
Detalles
Esta comprobación se aplica a los certificados de CA ACTIVE o PENDING_TRANSFER.
Se devuelven los siguientes códigos de motivo cuando esta comprobación encuentra un certificado no
conforme:
1011
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
• CERTIFICATE_KEY_VULNERABILITY_CVE-2017-15361
• CERTIFICATE_KEY_VULNERABILITY_CVE-2008-0166
Cómo solucionarlo
1. Utilice UpdateCACertificate para marcar el certificado de CA como INACTIVO en AWS IoT. También
puede utilizar acciones de mitigación para:
• Aplicar la acción de mitigación UPDATE_CA_CERTIFICATE en los resultados de la auditoría para
realizar este cambio.
• Aplique la acción de PUBLISH_FINDINGS_TO_SNS mitigación si desea implementar una respuesta
personalizada en respuesta al mensaje de Amazon SNS.
O bien porque otorga permiso para realizar las siguientes acciones de AWS IoT en un amplio conjunto de
dispositivos:
• Utilizar MQTT para conectar, publicar o suscribirse a temas reservados (incluidos los datos de ejecución
de sombras o de trabajos)
• Utilizar comandos de la API para leer o modificar los datos de ejecución de sombras o de trabajos
En general, los dispositivos que se conectan mediante una función de grupo de identidades de Amazon
Cognito no autenticada solo deben tener un permiso limitado para publicar y suscribirse a temas de MQTT
específicos o utilizar los comandos de la API para leer y modificar datos específicos de cosas relacionados
con los datos ocultos o de ejecución de trabajos.
Gravedad: crítica
Detalles
Para esta comprobación, AWS IoT Device Defender audita todos los grupos de identidades de Amazon
Cognito que se han utilizado para conectarse al agente de AWS IoT mensajes durante los 31 días
1012
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
El siguiente motivo por el que se devuelven los códigos cuando esta comprobación detecta un rol de grupo
de identidades de Amazon Cognito no autenticado que no cumple con los requisitos:
• ALLOWS_ACCESS_TO_IOT_ADMIN_ACTIONS
• ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS
Cómo solucionarlo
Una política adjunta a una función de grupo de identidades de Amazon Cognito no autenticada debe
conceder solo los permisos necesarios para que un dispositivo haga su trabajo. Recomendamos los
siguientes pasos:
• AddThingToThingGroup
• AttachThingPrincipal
• CreateThing
• DeleteThing
• DetachThingPrincipal
• ListThings
• ListThingsInThingGroup
• RegisterThing
1013
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
• RemoveThingFromThingGroup
• UpdateThing
• UpdateThingGroupsForThing
Cualquier rol que otorgue permiso para realizar estas acciones, incluso en un solo recurso, se considera no
conforme.
• DescribeThing
• ListJobExecutionsForThing
• ListThingGroupsForThing
• ListThingPrincipals
Example
• no conforme:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:DescribeThing",
"iot:ListJobExecutionsForThing",
"iot:ListThingGroupsForThing",
"iot:ListThingPrincipals"
],
"Resource": [
"arn:aws:iot:region:account-id:/thing/MyThing"
]
}
]
}
Esto permite que el dispositivo realice las acciones especificadas incluso aunque se otorgue solo para
un objeto.
1014
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
de ejecución del trabajo. Una política que otorga permiso a un dispositivo para conectarse, publicar o
suscribirse a mensajes de MQTT debe restringir estas acciones a recursos específicos de la siguiente
manera:
Conectar
• no conforme:
arn:aws:iot:region:account-id:client/*
arn:aws:iot:region:account-id:client/${iot:ClientId}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ "iot:Connect" ],
"Resource": [
"arn:aws:iot:region:account-id:client/${iot:Connection.Thing.ThingName}"
],
"Condition": {
"Bool": { "iot:Connection.Thing.IsAttached": "true" }
}
}
]
}
La especificación de recursos contiene una variable que coincide con el nombre del dispositivo que
se utiliza para conectarse. La instrucción de condición restringe aún más el permiso al comprobar
que el certificado utilizado por el cliente de MQTT coincida con el que está asociado al objeto con el
nombre utilizado.
Publicación
• no conforme:
arn:aws:iot:region:account-id:topic/$aws/things/*/shadow/update
Esto permite que el dispositivo actualice la sombra de cualquier dispositivo (* = todos los
dispositivos).
arn:aws:iot:region:account-id:topic/$aws/things/*
Esto permite que el dispositivo lea, actualice o elimine la sombra de cualquier dispositivo.
• conforme:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
1015
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
"Action": [ "iot:Publish" ],
"Resource": [
"arn:aws:iot:region:account-id:topic/$aws/things/
${iot:Connection.Thing.ThingName}/shadow/*"
],
}
]
}
La especificación del recurso contiene un comodín, pero solo coincide con cualquier tema
relacionado con la sombra para el dispositivo cuyo nombre de objeto se utilice para conectarse.
Suscribirse
• no conforme:
arn:aws:iot:region:account-id:topicfilter/$aws/things/*
Esto permite que el dispositivo se suscriba a temas de sombra o de trabajo reservados para todos
los dispositivos.
arn:aws:iot:region:account-id:topicfilter/$aws/things/*
arn:aws:iot:region:account-id:topicfilter/$aws/things/+/shadow/update
Esto permite que el dispositivo vea las actualizaciones de la sombra en cualquier dispositivo (+ =
todos los dispositivos).
• conforme:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ "iot:Subscribe" ],
"Resource": [
"arn:aws:iot:region:account-id:topicfilter/$aws/things/
${iot:Connection.Thing.ThingName}/shadow/*"
"arn:aws:iot:region:account-id:topicfilter/$aws/things/
${iot:Connection.Thing.ThingName}/jobs/*"
],
}
]
}
Las especificaciones de recursos contienen caracteres comodín pero solo coinciden con cualquier
tema relacionado con la sombra y cualquier tema relacionado con el trabajo para el dispositivo cuyo
nombre de objeto se use para conectarse.
Recibir
• conforme:
arn:aws:iot:region:account-id:topicfilter/$aws/things/*
Esto se permite porque el dispositivo solo puede recibir mensajes de temas en los que tiene permiso
para suscribirse.
1016
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
• DeleteThingShadow
• GetThingShadow
• UpdateThingShadow
• DescribeJobExecution
• GetPendingJobExecutions
• StartNextPendingJobExecution
• UpdateJobExecution
Example
• no conforme:
arn:aws:iot:region:account-id:thing/*
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:DeleteThingShadow",
"iot:GetThingShadow",
"iot:UpdateThingShadow",
"iot:DescribeJobExecution",
"iot:GetPendingJobExecutions",
"iot:StartNextPendingJobExecution",
"iot:UpdateJobExecution"
],
"Resource": [
"arn:aws:iot:region:account-id:/thing/MyThing1",
"arn:aws:iot:region:account-id:/thing/MyThing2"
]
}
]
}
Esto permite que el dispositivo realice las acciones especificadas en solo dos objetos.
1017
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
O bien porque otorga permiso para realizar las siguientes acciones de AWS IoT en un amplio conjunto de
dispositivos:
En general, los dispositivos que se conectan mediante una función de grupo de identidades de Amazon
Cognito autenticada solo deben tener un permiso limitado para leer datos administrativos específicos de
cosas, publicar y suscribirse a temas de MQTT específicos o usar los comandos de la API para leer y
modificar datos específicos de cosas relacionados con los datos ocultos o de ejecución de trabajos.
Gravedad: crítica
Detalles
Para esta comprobación, AWS IoT Device Defender audita todos los grupos de identidades de Amazon
Cognito que se han utilizado para conectarse al agente de AWS IoT mensajes durante los 31 días
anteriores a la ejecución de la auditoría. En la auditoría se incluyen todos los grupos de identidades
de Amazon Cognito desde los que se conecta una identidad de Amazon Cognito autenticada o no
autenticada.
El siguiente motivo por el que se devuelven los códigos cuando esta comprobación detecta un rol de grupo
de identidades de Amazon Cognito autenticado que no cumple los requisitos:
• ALLOWS_BROAD_ACCESS_TO_IOT_THING_ADMIN_READ_ACTIONS
• ALLOWS_ACCESS_TO_IOT_NON_THING_ADMIN_ACTIONS
• ALLOWS_ACCESS_TO_IOT_THING_ADMIN_WRITE_ACTIONS
Cómo solucionarlo
Una política adjunta a un rol de grupo de identidades autenticado de Amazon Cognito debe conceder solo
los permisos necesarios para que un dispositivo realice su trabajo. Recomendamos los siguientes pasos:
1018
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
• AddThingToThingGroup
• AttachThingPrincipal
• CreateThing
• DeleteThing
• DetachThingPrincipal
• ListThings
• ListThingsInThingGroup
• RegisterThing
• RemoveThingFromThingGroup
• UpdateThing
• UpdateThingGroupsForThing
Cualquier rol que otorgue permiso para realizar estas acciones, incluso en un solo recurso, se considera no
conforme.
• DescribeThing
• ListJobExecutionsForThing
• ListThingGroupsForThing
• ListThingPrincipals
• no conforme:
arn:aws:iot:region:account-id:thing/*
{
"Version": "2012-10-17",
"Statement": [
1019
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
{
"Effect": "Allow",
"Action": [
"iot:DescribeThing",
"iot:ListJobExecutionsForThing",
"iot:ListThingGroupsForThing",
"iot:ListThingPrincipals"
],
"Resource": [
"arn:aws:iot:region:account-id:/thing/MyThing"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:DescribeThing",
"iot:ListJobExecutionsForThing",
"iot:ListThingGroupsForThing",
"iot:ListThingPrincipals"
],
"Resource": [
"arn:aws:iot:region:account-id:/thing/MyThing*"
]
}
]
}
Esto es conforme porque, aunque el recurso se especifica con un carácter comodín (*), va precedido de
una cadena específica y esta limita el acceso al conjunto de objetos que tienen el prefijo concreto.
• no conforme:
arn:aws:iot:region:account-id:thing/*
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:DescribeThing",
"iot:ListJobExecutionsForThing",
"iot:ListThingGroupsForThing",
"iot:ListThingPrincipals"
],
"Resource": [
"arn:aws:iot:region:account-id:/thing/MyThing"
]
1020
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:DescribeThing",
"iot:ListJobExecutionsForThing",
"iot:ListThingGroupsForThing",
"iot:ListThingPrincipals"
],
"Resource": [
"arn:aws:iot:region:account-id:/thing/MyThing*"
]
}
]
}
Esto es conforme porque, aunque el recurso se especifica con un carácter comodín (*), va precedido de
una cadena específica y esta limita el acceso al conjunto de objetos que tienen el prefijo concreto.
Conectar
• no conforme:
arn:aws:iot:region:account-id:client/*
arn:aws:iot:region:account-id:client/${iot:ClientId}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ "iot:Connect" ],
"Resource": [
"arn:aws:iot:region:account-id:client/${iot:Connection.Thing.ThingName}"
1021
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
],
"Condition": {
"Bool": { "iot:Connection.Thing.IsAttached": "true" }
}
}
]
}
La especificación del recurso contiene una variable que coincide con el nombre del dispositivo
utilizado para conectarse, y la instrucción de condición restringe aún más el permiso verificando que
el certificado utilizado por el cliente MQTT coincida con el que está asociado al objeto con el nombre
utilizado.
Publicación
• no conforme:
arn:aws:iot:region:account-id:topic/$aws/things/*/shadow/update
Esto permite que el dispositivo actualice la sombra de cualquier dispositivo (* = todos los
dispositivos).
arn:aws:iot:region:account-id:topic/$aws/things/*
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ "iot:Publish" ],
"Resource": [
"arn:aws:iot:region:account-id:topic/$aws/things/
${iot:Connection.Thing.ThingName}/shadow/*"
],
}
]
}
La especificación del recurso contiene un comodín, pero solo coincide con cualquier tema
relacionado con la sombra para el dispositivo cuyo nombre de objeto se utilice para conectarse.
Suscribirse
• no conforme:
arn:aws:iot:region:account-id:topicfilter/$aws/things/*
Esto permite que el dispositivo se suscriba a temas de sombra o de trabajo reservados para todos
los dispositivos.
arn:aws:iot:region:account-id:topicfilter/$aws/things/#
arn:aws:iot:region:account-id:topicfilter/$aws/things/+/shadow/update
1022
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
Esto permite que el dispositivo vea las actualizaciones de la sombra en cualquier dispositivo (+ =
todos los dispositivos).
• conforme:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ "iot:Subscribe" ],
"Resource": [
"arn:aws:iot:region:account-id:topicfilter/$aws/things/
${iot:Connection.Thing.ThingName}/shadow/*"
"arn:aws:iot:region:account-id:topicfilter/$aws/things/
${iot:Connection.Thing.ThingName}/jobs/*"
],
}
]
}
Las especificaciones de recursos contienen caracteres comodín pero solo coinciden con cualquier
tema relacionado con la sombra y cualquier tema relacionado con el trabajo para el dispositivo cuyo
nombre de objeto se use para conectarse.
Recibir
• conforme:
arn:aws:iot:region:account-id:topicfilter/$aws/things/*
Esto es conforme porque el dispositivo solo puede recibir mensajes de temas en los que tiene
permiso para suscribirse.
• DeleteThingShadow
• GetThingShadow
• UpdateThingShadow
• DescribeJobExecution
• GetPendingJobExecutions
• StartNextPendingJobExecution
• UpdateJobExecution
Ejemplos
• no conforme:
arn:aws:iot:region:account-id:thing/*
1023
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:DeleteThingShadow",
"iot:GetThingShadow",
"iot:UpdateThingShadow",
"iot:DescribeJobExecution",
"iot:GetPendingJobExecutions",
"iot:StartNextPendingJobExecution",
"iot:UpdateJobExecution"
],
"Resource": [
"arn:aws:iot:region:account-id:/thing/MyThing1",
"arn:aws:iot:region:account-id:/thing/MyThing2"
]
}
]
}
Esto permite al dispositivo realizar las acciones especificadas solo en dos objetos.
En general, una política para un dispositivo debería otorgar acceso a recursos asociados con ese
dispositivo y sin otros dispositivos o con muy pocos. Con algunas excepciones, el uso de un carácter
comodín (por ejemplo, "*") para especificar recursos en dicha política se considera demasiado amplio o sin
restricciones.
Gravedad: crítica
Detalles
Se devuelve el siguiente código de motivo cuando esta comprobación encuentra una política de AWS IoT
no conforme:
• ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS
Cómo solucionarlo
Siga estos pasos para corregir las políticas no conformes asociadas a objetos, grupos de objetos u otras
entidades:
1024
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
Utilice las variables de política de AWS IoT (p. 356) para hacer referencia de forma dinámica a los recursos
de AWS IoT en las políticas.
Permisos de MQTT
Los mensajes MQTT se envían a través del agente de mensajes de AWS IoT y los dispositivos los usan
para realizar muchas acciones, incluido el acceso y la modificación del estado de la sombra y el estado
de ejecución del trabajo. Una política que otorga permiso a un dispositivo para conectarse, publicar o
suscribirse a mensajes de MQTT debe restringir estas acciones a recursos específicos de la siguiente
manera:
Conectar
• no conforme:
arn:aws:iot:region:account-id:client/*
arn:aws:iot:region:account-id:client/${iot:ClientId}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ "iot:Connect" ],
"Resource": [
"arn:aws:iot:region:account-id:client/${iot:Connection.Thing.ThingName}"
],
"Condition": {
"Bool": { "iot:Connection.Thing.IsAttached": "true" }
1025
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
}
}
]
}
La especificación de recursos contiene una variable que coincide con el nombre del dispositivo que
se utiliza para conectarse. La instrucción de condición restringe aún más el permiso al comprobar
que el certificado utilizado por el cliente de MQTT coincida con el que está asociado al objeto con el
nombre utilizado.
Publicación
• no conforme:
arn:aws:iot:region:account-id:topic/$aws/things/*/shadow/update
Esto permite que el dispositivo actualice la sombra de cualquier dispositivo (* = todos los
dispositivos).
arn:aws:iot:region:account-id:topic/$aws/things/*
Esto permite que el dispositivo lea, actualice o elimine la sombra de cualquier dispositivo.
• conforme:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ "iot:Publish" ],
"Resource": [
"arn:aws:iot:region:account-id:topic/$aws/things/
${iot:Connection.Thing.ThingName}/shadow/*"
],
}
]
}
La especificación del recurso contiene un comodín, pero solo coincide con cualquier tema
relacionado con la sombra para el dispositivo cuyo nombre de objeto se utilice para conectarse.
Suscribirse
• no conforme:
arn:aws:iot:region:account-id:topicfilter/$aws/things/*
Esto permite que el dispositivo se suscriba a temas de sombra o de trabajo reservados para todos
los dispositivos.
arn:aws:iot:region:account-id:topicfilter/$aws/things/*
arn:aws:iot:region:account-id:topicfilter/$aws/things/+/shadow/update
Esto permite que el dispositivo vea las actualizaciones de la sombra en cualquier dispositivo (+ =
todos los dispositivos).
1026
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
• conforme:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ "iot:Subscribe" ],
"Resource": [
"arn:aws:iot:region:account-id:topicfilter/$aws/things/
${iot:Connection.Thing.ThingName}/shadow/*"
"arn:aws:iot:region:account-id:topicfilter/$aws/things/
${iot:Connection.Thing.ThingName}/jobs/*"
],
}
]
}
Las especificaciones de recursos contienen caracteres comodín pero solo coinciden con cualquier
tema relacionado con la sombra y cualquier tema relacionado con el trabajo para el dispositivo cuyo
nombre de objeto se use para conectarse.
Recibir
• conforme:
arn:aws:iot:region:account-id:topic/$aws/things/*
Esto es conforme porque el dispositivo solo puede recibir mensajes de temas en los que tiene
permiso para suscribirse.
• DeleteThingShadow
• GetThingShadow
• UpdateThingShadow
• DescribeJobExecution
• GetPendingJobExecutions
• StartNextPendingJobExecution
• UpdateJobExecution
Ejemplos
• no conforme:
arn:aws:iot:region:account-id:thing/*
1027
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:DeleteThingShadow",
"iot:GetThingShadow",
"iot:UpdateThingShadow",
"iot:DescribeJobExecution",
"iot:GetPendingJobExecutions",
"iot:StartNextPendingJobExecution",
"iot:UpdateJobExecution"
],
"Resource": [
"arn:aws:iot:region:account-id:/thing/MyThing1",
"arn:aws:iot:region:account-id:/thing/MyThing2"
]
}
]
}
Esto permite al dispositivo realizar las acciones especificadas solo en dos objetos.
La comprobación que puede estar mal configurada de la AWS IoT política es una advertencia para
asegurarse de que solo se permiten las acciones previstas antes de actualizar la política.
Gravedad: media
Detalles
AWS IoTdevuelve el siguiente código de motivo cuando esta comprobación encuentra una AWS IoT
política que podría estar mal configurada:
• POLICY_CONTAINS_MQTT_WILDCARDS_IN_DENY_STATEMENT
• TOPIC_FILTERS_PRETENDIENDO_DENY_PERMITIDOS USANDO_COMODINES
1028
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
MQTT no tienen un significado comodín en AWS IoT las políticas y los dispositivos a los que se pueden
suscribir. building/control_room/data1
La comprobación que puede estar mal configurada de la AWS IoT política marcará esta política con un
código de POLICY_CONTAINS_MQTT_WILDCARDS_IN_DENY_STATEMENT motivo.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": "arn:aws:iot:region:account-id:topicfilter/building/*"
},
{
"Effect": "Deny",
"Action": "iot:Subscribe",
"Resource": "arn:aws:iot:region:account-id:topicfilter/building/control_room/#"
},
{
"Effect": "Allow",
"Action": "iot:Receive",
"Resource": "arn:aws:iot:region:account-id:topic/building/*"
}
]
}
El siguiente es un ejemplo de una política configurada correctamente. Los dispositivos no tienen permiso
para suscribirse a subtemas de building/control_room/ ni para recibir mensajes de subtemas de.
building/control_room/
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": "arn:aws:region:account-id:topicfilter/building/*"
},
{
"Effect": "Deny",
"Action": "iot:Subscribe",
"Resource": "arn:aws:iot:region:account-id:topicfilter/building/control_room/*"
},
{
"Effect": "Allow",
"Action": "iot:Receive",
"Resource": "arn:aws:iot:region:account-id:topic/building/*"
},
{
"Effect": "Deny",
"Action": "iot:Receive",
"Resource": "arn:aws:iot:region:account-id:topic/building/control_room/*"
}
]
}
El siguiente ejemplo de política tiene por objeto denegar la suscripción a temas relacionados building/
control_room con la denegación del recursobuilding/control_room/*. Sin embargo, los
1029
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
dispositivos pueden enviar solicitudes para suscribirse building/# y recibir mensajes de todos los temas
relacionadosbuilding, incluidosbuilding/control_room/data1.
La comprobación que puede estar mal configurada de la AWS IoT política marcará esta política con un
código de TOPIC_FILTERS_INTENDED_TO_DENY_ALLOWED_USING_WILDCARDS motivo.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": "arn:aws:iot:region:account-id:topicfilter/building/*"
},
{
"Effect": "Deny",
"Action": "iot:Subscribe",
"Resource": "arn:aws:iot:region:account-id:topicfilter/building/control_room/*"
},
{
"Effect": "Allow",
"Action": "iot:Receive",
"Resource": "arn:aws:iot:region:account-id:topic/building/*"
}
]
}
El siguiente es un ejemplo de una política configurada correctamente. Los dispositivos no tienen permiso
para suscribirse a subtemas de building/control_room/ ni para recibir mensajes de subtemas de.
building/control_room/
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": "arn:aws:iot:region:account-id:topicfilter/building/*"
},
{
"Effect": "Deny",
"Action": "iot:Subscribe",
"Resource": "arn:aws:iot:region:account-id:topicfilter/building/control_room/*"
},
{
"Effect": "Allow",
"Action": "iot:Receive",
"Resource": "arn:aws:iot:region:account-id:topic/building/*"
},
{
"Effect": "Deny",
"Action": "iot:Receive",
"Resource": "arn:aws:iot:region:account-id:topic/building/control_room/*"
}
]
}
1030
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
Note
Esta comprobación podría reportar falsos positivos. Le recomendamos que evalúe las políticas
marcadas y marque los recursos con falsos positivos mediante supresiones de auditoría.
Cómo solucionarlo
Esta comprobación marca las políticas que pueden estar mal configuradas, por lo que puede haber
falsos positivos. Marque los falsos positivos mediante supresiones de auditoría (p. 1064) para que no se
marquen en el futuro.
También puedes seguir estos pasos para corregir cualquier política no conforme asociada a cosas, grupos
de cosas u otras entidades:
Para ver ejemplos de cómo crear AWS IoT políticas para casos de uso comunes, consulte los ejemplos
de políticas de publicación o suscripción (p. 369) en la AWS IoT Core Guía para desarrolladores.
2. Verifique que todos los dispositivos asociados puedan conectarse a AWS IoT. Si un dispositivo no
puede conectarse, SetPolicyVersionutilícelo para revertir la política predeterminada a la versión anterior,
revisar la política e intentarlo de nuevo.
Utilice las variables de política de AWS IoT (p. 356) para hacer referencia de forma dinámica a los recursos
de AWS IoT en las políticas.
• La política proporciona permisos administrativos a todos los servicios utilizados en el último año por este
alias de rol (por ejemplo, "iot:*", "dynamodb:*", "iam:*", etc.).
• La política proporciona un amplio acceso a acciones de metadatos de objetos, acceso a acciones de
AWS IoT restringidas o un amplio acceso a acciones del plano de datos de AWS IoT.
• La política proporciona acceso a servicios de auditoría de seguridad como "iam", "cloudtrail",
"guardduty", "inspector" o "trustedadvisor".
1031
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
Gravedad: crítica
Detalles
Se devuelven los siguientes códigos de motivo cuando esta comprobación encuentra una política de IoT
no conforme:
• ALLOWS_BROAD_ACCESS_TO_USED_SERVICES
• ALLOWS_ACCESS_TO_SECURITY_AUDITING_SERVICES
• ALLOWS_BROAD_ACCESS_TO_IOT_THING_ADMIN_READ_ACTIONS
• ALLOWS_ACCESS_TO_IOT_NON_THING_ADMIN_ACTIONS
• ALLOWS_ACCESS_TO_IOT_THING_ADMIN_WRITE_ACTIONS
• ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS
Cómo solucionarlo
Siga estos pasos para corregir las políticas no conformes asociadas a objetos, grupos de objetos u otras
entidades:
1. Siga los pasos descritos en Autorizar llamadas directas aAWSservicios de uso deAWS IoT
Coreproveedor de credenciales (p. 395) para aplicar una política más restrictiva al alias de rol.
Esta comprobación se activa si el alias de rol tiene acceso a servicios que no se han utilizado para el
dispositivo de AWS IoT en el último año. Por ejemplo, la auditoría informa si tiene una función de IAM
vinculada al alias de la función que solo se usó AWS IoT el año pasado, pero la política adjunta a la
función también otorga permiso a "iam:getRole" y"dynamodb:PutItem".
Gravedad: media
1032
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
Detalles
Se devuelven los siguientes códigos de motivo cuando esta comprobación encuentra una política de AWS
IoT no conforme:
• ALLOWS_ACCESS_TO_UNUSED_SERVICES
Cómo solucionarlo
Siga estos pasos para corregir las políticas no conformes asociadas a objetos, grupos de objetos u otras
entidades:
1. Siga los pasos descritos en Autorizar llamadas directas aAWSservicios de uso deAWS IoT
Coreproveedor de credenciales (p. 395) para aplicar una política más restrictiva al alias de rol.
Gravedad: media
Detalles
Esta comprobación se aplica a los certificados de CA ACTIVE o PENDING_TRANSFER.
Se devuelven los siguientes códigos de motivo cuando esta comprobación encuentra un certificado de CA
no conforme:
• CERTIFICATE_APPROACHING_EXPIRATION
• CERTIFICATE_PAST_EXPIRATION
Cómo solucionarlo
Consulte las prácticas recomendadas de seguridad para saber cómo proceder. Es posible que desee:
1033
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
2. Verificar que puede firmar certificados de dispositivo con el nuevo certificado de CA.
3. Utilice UpdateCACertificate para marcar el antiguo certificado de CA como INACTIVO en AWS IoT.
También puede utilizar acciones de mitigación para realizar las siguientes acciones:
• Aplicar la acción de mitigación UPDATE_CA_CERTIFICATE en los resultados de la auditoría para
realizar este cambio.
• Aplique la acción de PUBLISH_FINDINGS_TO_SNS mitigación si desea implementar una respuesta
personalizada en respuesta al mensaje de Amazon SNS.
Gravedad: alta
Detalles
Se han realizado varias conexiones con el mismo ID de cliente, lo que ha provocado la desconexión de un
dispositivo ya conectado. La especificación de MQTT solo permite una conexión activa por ID de cliente,
con lo cual, cuando otro dispositivo se conecta con el mismo ID de cliente, se bloquea la conexión del
dispositivo anterior.
Cuando se realiza como parte de una auditoría bajo demanda, esta comprobación analiza cómo se usaban
los ID de cliente utilizados por los dispositivos para conectarse durante los 31 días anteriores al inicio de
la auditoría. Para las auditorías programadas, esta comprobación analiza los datos desde la última vez
que se realizó la auditoría hasta el momento en que comenzó esta instancia de la auditoría. Si ha tomado
medidas para mitigar esta condición durante el periodo de la comprobación, observe cuándo se realizaron
las conexiones/desconexiones para determinar si el problema persiste.
Se devuelven los siguientes códigos de motivo cuando esta comprobación encuentra una falta de
conformidad:
• DUPLICATE_CLIENT_ID_ACROSS_CONNECTIONS
Además, los resultados devueltos con esta comprobación incluyen el ID de cliente utilizado para
conectarse, los identificadores de las entidades principales y los tiempos de desconexión. Se muestran
primero los resultados más recientes.
Esto puede indicar que un dispositivo o las credenciales de un dispositivo se han puesto en riesgo y
podrían ser parte de un ataque DDoS. También es posible que los dispositivos estén mal configurados
en la cuenta o que el dispositivo tenga una mala conexión y se vea obligado a volver a conectarse varias
veces por minuto.
Cómo solucionarlo
Registre cada dispositivo como un objeto único en AWS IoT y use el nombre de objeto como ID de cliente
para la conexión. O use un UUID como ID de cliente al conectar el dispositivo a través de MQTT. También
puede utilizar acciones de mitigación para:
1034
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
Gravedad: media
Detalles
Esta comprobación se aplica a los certificados de dispositivo ACTIVE o PENDING_TRANSFER.
• CERTIFICATE_APPROACHING_EXPIRATION
• CERTIFICATE_PAST_EXPIRATION
Cómo solucionarlo
Consulte las prácticas recomendadas de seguridad para saber cómo proceder. Es posible que desee:
Gravedad: media
1035
AWS IoT Core Guía para desarrolladores
Comprobaciones de auditoría
Detalles
Un certificado de dispositivo no está en la lista de revocación de certificados de CA, pero sigue activo en
AWS IoT.
Se devuelven los siguientes códigos de motivo cuando esta comprobación encuentra una falta de
conformidad:
• CERTIFICATE_REVOKED_BY_ISSUER
Cómo solucionarlo
Compruebe que el certificado del dispositivo no ha sufrido un ataque. Si ha sido atacado, siga las prácticas
recomendadas de seguridad para mitigar la situación. Es posible que desee:
Registro desactivado
AWS IoTlos registros no están habilitados en AmazonCloudWatch. Verifica los registros V1 y V2.
Gravedad: baja
Detalles
Se devuelven los siguientes códigos de motivo cuando esta comprobación encuentra una falta de
conformidad:
• LOGGING_DISABLED
1036
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
Cómo solucionarlo
Habilite los registros de AWS IoT en CloudWatch. Consulte Herramientas de monitoreo (p. 444). También
puede utilizar acciones de mitigación para:
Comandos de auditoría
Administrar la configuración de auditorías
Utilice UpdateAccountAuditConfiguration para configurar los ajustes de auditoría de su cuenta Este
comando le permite habilitar las comprobaciones que desea que estén disponibles para las auditorías,
configurar notificaciones opcionales y configurar permisos.
UpdateAccountAuditConfiguration
Configura o vuelve a configurar los ajustes de auditoría de Device Defender para esta cuenta. La
configuración incluye cómo se envían las notificaciones de auditoría y qué comprobaciones de auditoría se
habilitan o deshabilitan.
Sinopsis
Formato cli-input-json
{
"roleArn": "string",
"auditNotificationTargetConfigurations": {
"string": {
"targetArn": "string",
"roleArn": "string",
"enabled": "boolean"
}
},
"auditCheckConfigurations": {
"string": {
"enabled": "boolean"
}
1037
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
}
}
Campos cli-input-json
auditNotificationTargetConfigurations
map Información sobre los destinos
a los que se envían las
notificaciones de auditoría.
En la primera llamada a
UpdateAccountAuditConfiguration
se necesita este parámetro y
1038
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
Salida
Ninguno
Errores
InvalidRequestException
DescribeAccountAuditConfiguration
Obtiene información sobre la configuración de auditoría de Device Defender para esta cuenta. La
configuración incluye cómo se envían las notificaciones de auditoría y qué comprobaciones de auditoría se
habilitan o deshabilitan.
Sinopsis
Formato cli-input-json
{
}
Salida
{
"roleArn": "string",
"auditNotificationTargetConfigurations": {
"string": {
"targetArn": "string",
"roleArn": "string",
"enabled": "boolean"
}
},
"auditCheckConfigurations": {
"string": {
"enabled": "boolean"
1039
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
}
}
}
En la primera llamada a
UpdateAccountAuditConfiguration,
se necesita este parámetro.
auditNotificationTargetConfigurations
map Información sobre los destinos
a los que se envían las
notificaciones de auditoría para
esta cuenta.
Errores
ThrottlingException
DeleteAccountAuditConfiguration
Restaura la configuración predeterminada para las auditorías de Device Defender para esta cuenta. Se
eliminarán todos los datos de configuración que haya introducido y todas las comprobaciones de auditoría
se restablecerán como deshabilitadas.
1040
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
Sinopsis
Formato cli-input-json
{
"deleteScheduledAudits": "boolean"
}
Campos cli-input-json
Salida
Ninguno
Errores
InvalidRequestException
Programación de auditorías
Utilice CreateScheduledAudit para crear una o varias auditorías programadas. Este comando permite
especificar las comprobaciones que desea realizar durante una auditoría y con qué frecuencia deben
ejecutarse.
CreateScheduledAudit
Crea una auditoría programada que se ejecuta en un intervalo de tiempo especificado.
1041
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
Sinopsis
Formato cli-input-json
{
"frequency": "string",
"dayOfMonth": "string",
"dayOfWeek": "string",
"targetCheckNames": [
"string"
],
"tags": [
{
"Key": "string",
"Value": "string"
}
],
"scheduledAuditName": "string"
}
Campos cli-input-json
1042
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
Patrón: [a-zA-Z0-9_-]+
Salida
{
"scheduledAuditArn": "string"
}
Errores
InvalidRequestException
1043
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
InternalFailureException
Se ha superado un límite.
ListScheduledAudits
Muestra una lista de las auditorías programadas.
Sinopsis
Formato cli-input-json
{
"nextToken": "string",
"maxResults": "integer"
}
Campos cli-input-json
Salida
{
"scheduledAudits": [
{
"scheduledAuditName": "string",
"scheduledAuditArn": "string",
"frequency": "string",
"dayOfMonth": "string",
"dayOfWeek": "string"
}
],
"nextToken": "string"
}
1044
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
Patrón: [a-zA-Z0-9_-]+
Errores
InvalidRequestException
DescribeScheduledAudit
Obtiene información acerca de una auditoría programada.
1045
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
Sinopsis
Formato cli-input-json
{
"scheduledAuditName": "string"
}
Campos cli-input-json
Patrón: [a-zA-Z0-9_-]+
Salida
{
"frequency": "string",
"dayOfMonth": "string",
"dayOfWeek": "string",
"targetCheckNames": [
"string"
],
"scheduledAuditName": "string",
"scheduledAuditArn": "string"
}
1046
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
Patrón: [a-zA-Z0-9_-]+
Errores
InvalidRequestException
UpdateScheduledAudit
Actualiza una auditoría programada, que incluye las comprobaciones que se realizan y con qué frecuencia
se lleva a cabo la auditoría.
Sinopsis
1047
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
[--target-check-names <value>] \
--scheduled-audit-name <value> \
[--cli-input-json <value>] \
[--generate-cli-skeleton]
Formato cli-input-json
{
"frequency": "string",
"dayOfMonth": "string",
"dayOfWeek": "string",
"targetCheckNames": [
"string"
],
"scheduledAuditName": "string"
}
Campos cli-input-json
1048
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
Patrón: [a-zA-Z0-9_-]+
Salida
{
"scheduledAuditArn": "string"
}
Errores
InvalidRequestException
DeleteScheduledAudit
Elimina una auditoría programada.
Sinopsis
Formato cli-input-json
1049
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
{
"scheduledAuditName": "string"
}
Campos cli-input-json
Patrón: [a-zA-Z0-9_-]+
Salida
Ninguno
Errores
InvalidRequestException
StartOnDemandAuditTask
Comienza una auditoría de Device Defender bajo demanda.
Sinopsis
Formato cli-input-json
{
"targetCheckNames": [
"string"
]
1050
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
Campos cli-input-json
Salida
{
"taskId": "string"
}
Patrón: [a-zA-Z0-9-]+
Errores
InvalidRequestException
Se ha superado un límite.
1051
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
el sistema no ha podido completar y, si la auditoría aún está en curso, aquellas en las que todavía está
trabajando.
Utilice ListAuditTasks para buscar las auditorías que se ejecutaron durante un intervalo de tiempo
específico.
DescribeAuditTask
Obtiene información acerca de una auditoría de Device Defender.
Sinopsis
Formato cli-input-json
{
"taskId": "string"
}
Campos cli-input-json
Patrón: [a-zA-Z0-9-]+
Salida
{
"taskStatus": "string",
"taskType": "string",
"taskStartTime": "timestamp",
"taskStatistics": {
"totalChecks": "integer",
"inProgressChecks": "integer",
"waitingForDataCollectionChecks": "integer",
"compliantChecks": "integer",
"nonCompliantChecks": "integer",
"failedChecks": "integer",
"canceledChecks": "integer"
},
"scheduledAuditName": "string",
"auditDetails": {
"string": {
"checkRunStatus": "string",
"checkCompliant": "boolean",
"totalResourcesCount": "long",
"nonCompliantResourcesCount": "long",
"errorCode": "string",
1052
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
"message": "string"
}
}
}
enum: IN_PROGRESS |
COMPLETADO | ERROR |
CANCELADO
enum:
ON_DEMAND_AUDIT_TASK |
SCHEDULED_AUDIT_TASK
Patrón: [a-zA-Z0-9_-]+
1053
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
enum: IN_PROGRESS |
WAITING_FOR_DATA_COLLECTION
| CANCELADO |
COMPLETED_COMPLIANT |
COMPLETED_NON_COMPLIANT
| ERROR
Errores
InvalidRequestException
1054
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
InternalFailureException
ListAuditTasks
Muestra una lista de las auditorías de Device Defender que se han realizado durante un periodo de tiempo
determinado.
Sinopsis
Formato cli-input-json
{
"startTime": "timestamp",
"endTime": "timestamp",
"taskType": "string",
"taskStatus": "string",
"nextToken": "string",
"maxResults": "integer"
}
Campos cli-input-json
enum:
ON_DEMAND_AUDIT_TASK |
SCHEDULED_AUDIT_TASK
1055
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
enum: IN_PROGRESS |
COMPLETADO | ERROR |
CANCELADO
Salida
{
"tasks": [
{
"taskId": "string",
"taskStatus": "string",
"taskType": "string"
}
],
"nextToken": "string"
}
Patrón: [a-zA-Z0-9-]+
enum: IN_PROGRESS |
COMPLETADO | ERROR |
CANCELADO
1056
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
enum:
ON_DEMAND_AUDIT_TASK |
SCHEDULED_AUDIT_TASK
Errores
InvalidRequestException
CancelAuditTask
Cancela una auditoría que está en curso. La auditoría puede ser programada o bajo demanda. Si la
auditoría no está en curso, se produce la excepción InvalidRequestException.
Sinopsis
Formato cli-input-json
{
"taskId": "string"
}
Campos cli-input-json
Salida
1057
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
Ninguno
Errores
ResourceNotFoundException
Puede definir acciones de mitigación y aplicarlas a los resultados de su auditoría. Para obtener más
información, consulte Acciones de mitigación (p. 1125).
ListAuditFindings
Muestra una lista de los hallazgos (resultados) de una auditoría de Device Defender o de las auditorías
realizadas durante un periodo de tiempo especificado. (Los hallazgos se conservan durante 180 días).
Sinopsis
Formato cli-input-json
{
"taskId": "string",
"checkName": "string",
"resourceIdentifier": {
"deviceCertificateId": "string",
"caCertificateId": "string",
"cognitoIdentityPoolId": "string",
"clientId": "string",
"policyVersionIdentifier": {
"policyName": "string",
"policyVersionId": "string"
},
"roleAliasArn": "string",
1058
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
"account": "string"
},
"maxResults": "integer",
"nextToken": "string",
"startTime": "timestamp",
"endTime": "timestamp"
}
Campos cli-input-json
Patrón: (0x)?[a-fA-F0-9]+
Patrón: (0x)?[a-fA-F0-9]+
patrón: [w+=,.@-]+
1059
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
Pattern: [0-9] +
Salida
{
"findings": [
{
"taskId": "string",
"checkName": "string",
"taskStartTime": "timestamp",
"findingTime": "timestamp",
"severity": "string",
"nonCompliantResource": {
"resourceType": "string",
"resourceIdentifier": {
"deviceCertificateId": "string",
"caCertificateId": "string",
"cognitoIdentityPoolId": "string",
"clientId": "string",
"policyVersionIdentifier": {
"policyName": "string",
"policyVersionId": "string"
},
"account": "string"
},
"additionalInfo": {
"string": "string"
}
},
"relatedResources": [
{
"resourceType": "string",
"resourceIdentifier": {
"deviceCertificateId": "string",
1060
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
"caCertificateId": "string",
"cognitoIdentityPoolId": "string",
"clientId": "string",
"iamRoleArn": "string",
"policyVersionIdentifier": {
"policyName": "string",
"policyVersionId": "string"
},
"account": "string"
},
"roleAliasArn": "string",
"additionalInfo": {
"string": "string"
}
}
],
"reasonForNonCompliance": "string",
"reasonForNonComplianceCode": "string"
}
],
"nextToken": "string"
}
Patrón: [a-zA-Z0-9-]+
1061
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
Patrón: (0x)?[a-fA-F0-9]+
Patrón: (0x)?[a-fA-F0-9]+
patrón: [w+=,.@-]+
Pattern: [0-9] +
miembro: RelatedResource
1062
AWS IoT Core Guía para desarrolladores
Comandos de auditoría
enum: DEVICE_CERTIFICATE
| CA_CERTIFICATE
| IOT_POLICY |
COGNITO_IDENTITY_POOL
| CLIENT_ID |
ACCOUNT_SETTINGS
Patrón: (0x)?[a-fA-F0-9]+
Patrón: (0x)?[a-fA-F0-9]+
patrón: [w+=,.@-]+
Pattern: [0-9] +
1063
AWS IoT Core Guía para desarrolladores
Supresiones de hallazgos de auditoría
Errores
InvalidRequestException
Las acciones de mitigación no estarán disponibles para los hallazgos de auditoría suprimidos.
Para obtener más información sobre las acciones de mitigación, consulteAcciones de
mitigación (p. 1125).
Para obtener información sobre cuotas de supresión de hallazgos de auditoría, consulteAWS IoTCuotas y
puntos de enlace de Device Defender.
Los informes de auditoría incluirán una nueva sección que enumera todos los hallazgos suprimidos
asociados al informe. Los hallazgos suprimidos no se tendrán en cuenta cuando evaluamos si una
comprobación de auditoría cumple las normas o no. También se devuelve un recuento de recursos
1064
AWS IoT Core Guía para desarrolladores
Supresiones de hallazgos de auditoría
Para las notificaciones de auditoría, los hallazgos suprimidos no se tienen en cuenta cuando evaluamos
si una comprobación de auditoría cumple las normas o no. También se incluye un recuento de recursos
suprimido en cada notificación de comprobación de auditoríaAWS IoT Device Defenderpublica en Amazon
CloudWatch y Amazon Simple Notification Service (Amazon SNS).
El siguiente procedimiento muestra cómo crear una supresión de hallazgos de auditoría enAWS
IoTconsola de .
1065
AWS IoT Core Guía para desarrolladores
Supresiones de hallazgos de auditoría
1066
AWS IoT Core Guía para desarrolladores
Supresiones de hallazgos de auditoría
6. Después de crear la supresión de búsqueda de auditoría, aparece un banner que confirma que se ha
creado la supresión de búsqueda de auditoría.
1067
AWS IoT Core Guía para desarrolladores
Supresiones de hallazgos de auditoría
1068
AWS IoT Core Guía para desarrolladores
Supresiones de hallazgos de auditoría
1069
AWS IoT Core Guía para desarrolladores
Supresiones de hallazgos de auditoría
1070
AWS IoT Core Guía para desarrolladores
Supresiones de hallazgos de auditoría
4. Después de hacer los cambios, elijaGuardar. LaEncontrar supresiónSe abrirá una ventana.
1071
AWS IoT Core Guía para desarrolladores
Supresiones de hallazgos de auditoría
• create-audit-supression
• describe-audit-supression
• actualización y supresión de auditorías
• supresión de eliminación de auditorías
• lista-auditorías-supresiones
Los comandos de supresión no indican desactivar una auditoría. Las auditorías seguirán
ejecutándose en tuAWS IoTdispositivos. Las supresiones solo se aplican a las conclusiones de la
auditoría.
check-name resource-identifier
AUTHENTICATE_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK
cognitoIdentityPoolId
CA_CERT_APPROACHING_EXPIRATION_CHECK caCertificateId
CA_CERTIFICATE_KEY_QUALITY_CHECK caCertificateId
CONFLICTING_CLIENT_IDS_CHECK clientId
DEVICE_CERT_APPROACHING_EXPIRATION_CHECKdeviceCertificateId
DEVICE_CERTIFICATE_KEY_QUALITY_CHECK deviceCertificateId
DEVICE_CERTIFICATE_SHARED_CHECK deviceCertificateId
1072
AWS IoT Core Guía para desarrolladores
Detect
check-name resource-identifier
IOT_POLICY_OVERLY_PERMISSIVE_CHECK policyVersionIdentifier
IOT_ROLE_ALIAS_ALLOWS_ACCESS_TO_UNUSED_SERVICES_CHECK
roleAliasArn
IOT_ROLE_ALIAS_OVERLY_PERMISSIVE_CHECK roleAliasArn
LOGGING_DISABLED_CHECK account
REVOKED_CA_CERT_CHECK caCertificateId
REVOKED_DEVICE_CERT_CHECK deviceCertificateId
UNAUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK
cognitoIdentityPoolId
El siguiente procedimiento muestra cómo crear una supresión de hallazgos de auditoría enAWSCLI.
Detect
AWS IoT Device Defender Detect permite identificar comportamientos inusuales que podrían indicar que
un dispositivo se ha visto comprometido cuando se monitorea el comportamiento de los dispositivos. Si
utiliza una combinación de métricas del lado de la nube (procedentes de AWS IoT) y de métricas del lado
del dispositivo (procedentes de agentes instalados en los dispositivos), puede detectar:
1073
AWS IoT Core Guía para desarrolladores
Detect
Crea perfiles de seguridad, que contienen definiciones de los comportamientos esperados de los
dispositivos, y los asigna a un grupo de dispositivos o a todos los dispositivos de su flota.AWS IoT Device
Defender Detect utiliza estos perfiles de seguridad para detectar anomalías y enviar alarmas a través de
Amazon.CloudWatchmétricas y notificaciones de Amazon Simple Notification Service.
AWS IoT Device Defender Detect puede detectar problemas de seguridad que se producen con frecuencia
en los dispositivos conectados:
• Tráfico desde un dispositivo a una dirección IP maliciosa conocida o a un punto de enlace no autorizado
que indica un posible comando y canal de control maliciosos.
• Tráfico anómalo, como un pico en el tráfico saliente, que indica que un dispositivo participa en un DDoS.
• Dispositivos con puertos e interfaces de administración remota a los que se puede acceder de forma
remota.
• Un pico en el índice de mensajes que se envían a la cuenta (por ejemplo, desde un dispositivo
fraudulento, lo que podría producir unos gastos excesivos por mensaje).
Casos de uso
Puede usar AWS IoT Device Defender Detect para medir la superficie de ataque de sus dispositivos.
Puede, por ejemplo, identificar dispositivos con puertos de servicio que con frecuencia son objeto de
campañas de ataques (el servicio telnet que se ejecuta en los puertos 23/2323, el servicio SSH que
se ejecuta en el puerto 22, los servicios HTTP/S que se ejecutan en los puertos 80/443/8080/8081).
Aunque estos puertos de servicio pueden tener motivos legítimos para utilizarse en los dispositivos,
también suelen formar parte de la superficie de ataque de los adversarios y llevan asociados riesgos.
DespuésAWS IoT Device DefenderDetecte las alarmas en la superficie del ataque, puede minimizarlas
(eliminando los servicios de red no utilizados) o ejecutar evaluaciones adicionales para identificar las
debilidades de seguridad (por ejemplo, telnet configurado con contraseñas comunes, predeterminadas
o débiles).
Detectar anomalías de comportamiento de dispositivos con posibles causas raíces de seguridad
Puedes usarAWS IoT Device DefenderDetecta métricas inesperadas del comportamiento del
dispositivo (número de puertos abiertos, número de conexiones, un puerto abierto inesperado,
conexiones a direcciones IP inesperadas) que puedan indicar una violación de seguridad. Por ejemplo,
un número de conexiones TCP más alto de lo esperado puede indicar que un dispositivo se está
utilizando para un ataque DDoS. Un proceso que se escucha en un puerto diferente al que espera
puede indicar una puerta trasera instalada en un dispositivo para control remoto. Puede usar AWS IoT
Device Defender Detect para sondear el estado de las flotas de dispositivos y contrastar los supuestos
de seguridad (por ejemplo, que ningún dispositivo está escuchando en el puerto 23 o 2323).
Puede habilitar la detección de amenazas basada en aprendizaje automático (ML) para identificar
automáticamente posibles amenazas.
Detectar un dispositivo configurado incorrectamente
Un pico en el número o tamaño de los mensajes enviados desde un dispositivo a su cuenta puede
indicar un dispositivo configurado incorrectamente. Un dispositivo como este podría aumentar los
gastos por mensaje. Del mismo modo, un dispositivo con muchos errores de autorización podría
requerir la reconfiguración de una política.
1074
AWS IoT Core Guía para desarrolladores
Monitorización del comportamiento
de dispositivos no registrados
Los mensajes registrados por los dispositivos se rechazan si el nombre del objeto contiene
caracteres de control o si el nombre del objeto tiene más de 128 bytes de caracteres con
codificación UTF-8.
Para investigar una alarma de anomalía, correlacione los detalles de la alarma con otra información
contextual, como los atributos del dispositivo, las tendencias históricas de las métricas del dispositivo, las
tendencias históricas de las métricas del perfil de seguridad, las métricas personalizadas y los registros,
para determinar si existe una amenaza a la seguridad.
El robo de propiedad intelectual implica el robo de las propiedades intelectuales de una persona
o empresa, incluidos secretos comerciales, hardware o software. Suele ocurrir durante la fase de
fabricación de los dispositivos. El robo de propiedad intelectual puede adoptar la forma de piratería,
robo de dispositivos o robo de certificados de dispositivos. El robo de propiedad intelectual basado
en la nube puede ocurrir debido a la presencia de políticas que permiten el acceso no deseado a
los recursos de IoT. Debe revisar sus políticas de IoT y activar las comprobaciones de auditoría
demasiado permisivas para identificar las políticas demasiado permisivas.
1075
AWS IoT Core Guía para desarrolladores
Casos de uso de seguridad
Métricas relacionadas:
Métrica Motivación
La exfiltración de datos se produce cuando un actor malintencionado lleva a cabo una transferencia de
datos no autorizada desde un despliegue de IoT o desde un dispositivo. El atacante lanza este tipo de
ataques a través de MQTT contra fuentes de datos del lado de la nube.
Métricas relacionadas:
Métrica Motivación
Suplantación de identidad:
Un ataque de suplantación de identidad consiste en el que los atacantes se hacen pasar por entidades
conocidas o de confianza en un esfuerzo por acceder a los servicios, aplicaciones o datosAWS IoT del
lado de la nube o participar en el mando y el control de los dispositivos de IoT.
Métricas relacionadas:
Métrica Motivación
1076
AWS IoT Core Guía para desarrolladores
Casos de uso de seguridad
Métrica Motivación
de confianza. Los comportamientos anómalos
en los errores de autorización, los intentos de
conexión o las desconexiones apuntan a un
posible escenario de suplantación de identidad.
El abuso de los serviciosAWS IoT en la nube se produce al publicar o suscribirse a temas con un
gran volumen de mensajes o con mensajes de gran tamaño. Las políticas demasiado permisivas o la
explotación de vulnerabilidades del dispositivo para el mando y el control también pueden provocar un
abuso de la infraestructura de la nube. Uno de los principales objetivos de este ataque es aumentar
tuAWS factura. Debe revisar sus políticas de IoT y activar las comprobaciones de auditoría demasiado
permisivas para identificar las políticas demasiado permisivas.
Métricas relacionadas:
Métrica Motivación
enial-of-service Ataque D:
Un ataque denial-of-service (DoS) tiene como objetivo apagar un dispositivo o una red, haciendo que
el dispositivo o la red sean inaccesibles para los usuarios previstos. Los ataques DoS bloquean el
acceso inundando el objetivo con tráfico o enviándole solicitudes que inician una ralentización del
sistema o hacen que el sistema falle. Sus dispositivos de IoT se pueden utilizar en ataques DoS.
Métricas relacionadas:
Métrica Motivación
Paquetes salientes Los ataques DoS suelen implicar tasas más altas
de comunicación saliente desde un dispositivo
Bytes salidos determinado y, según el tipo de ataque DoS,
puede haber un aumento en el número de
paquetes y bytes de salida, o en ambos.
1077
AWS IoT Core Guía para desarrolladores
Casos de uso de seguridad
Métrica Motivación
La escalada lateral de amenazas suele comenzar cuando un atacante obtiene acceso a un punto de
la red, por ejemplo, un dispositivo conectado. A continuación, el atacante intenta aumentar su nivel
de privilegios o su acceso a otros dispositivos mediante métodos como el robo de credenciales o la
explotación de vulnerabilidades.
Métricas relacionadas:
Métrica Motivación
1078
AWS IoT Core Guía para desarrolladores
Casos de uso de seguridad
Métricas relacionadas:
Métrica Motivación
Minería de criptomonedas
Métricas relacionadas:
Métrica Motivación
1079
AWS IoT Core Guía para desarrolladores
Conceptos
Métricas relacionadas:
Métrica Motivación
Conceptos
métrica
AWS IoT Device DefenderDetect usa métricas para detectar un comportamiento anómalo de los
dispositivos.AWS IoT Device Defender Detect compara el valor registrado de una métrica con el
valor esperado que proporciona el usuario. Estas métricas se pueden obtener de dos fuentes: de las
métricas del lado de la nube y de las métricas del lado del dispositivo: ML Detect admite 6 métricas del
lado de la nube y 7 métricas del lado del dispositivo. Para obtener una lista de las métricas admitidas
para ML Detect, consulteMétricas admitidas (p. 1086).
El comportamiento anómalo en la red de AWS IoT se detecta mediante el uso de métricas del lado
de la nube, como el número de errores de autorización o el número o el tamaño de mensajes que un
dispositivo envía o recibe a través de AWS IoT.
AWS IoT Device DefenderDetect también puede recopilar, agregar y monitorizar datos de métricas
generados porAWS IoTdispositivos (por ejemplo, los puertos en los que escucha un dispositivo, la
cantidad de bytes o paquetes enviados o las conexiones TCP del dispositivo).
Puede usar AWS IoT Device Defender Detect solo con métricas del lado de la nube. Para usar las
métricas del lado del dispositivo, primero debe implementar el SDK de AWS IoT en sus dispositivos
conectados a AWS IoT o en las gateways de los dispositivos para recopilar las métricas y enviarlas a
AWS IoT. Consulte Envío de métricas desde dispositivos (p. 1108).
Perfil de seguridad
Un comportamiento diceAWS IoT Device DefenderDetecta cómo puede saber cuándo un dispositivo
realiza alguna actividad anómala. Todas las acciones del dispositivo que no coinciden con un
comportamiento desencadenan una alerta. Un comportamiento de detección de reglas consiste en
1080
AWS IoT Core Guía para desarrolladores
Comportamientos
una métrica y un valor absoluto o umbral estadístico con un operador (por ejemplo, menor o igual que,
mayor o igual que), que describen el comportamiento esperado del dispositivo. Un comportamiento de
detección de ML consiste en una métrica y una configuración de detección de ML, que establecen un
modelo ML para conocer el comportamiento normal de los dispositivos.
modelo de ML
Puede definir una dimensión para ajustar el ámbito de un comportamiento. Por ejemplo, puede
definir una dimensión de filtrado de temas que aplique un comportamiento a los temas de MQTT
que coincidan con un patrón. Para obtener más información sobre cómo definir una dimensión para
utilizarla en un perfil de seguridad, consulteCreateDimension.
alarma
Cuando se detecta una anomalía, se puede enviar una notificación de alarma a través de un
CloudWatch métrica (consulteUso de las métricas de AWS IoT (p. 466)) o una notificación de SNS.
También se muestra una notificación de alarma en elAWS IoTjunto con información sobre la alarma
y un historial de las alarmas del dispositivo. También se envía una alarma cuando un dispositivo
monitorizado deja de mostrar un comportamiento anómalo o cuando ha estado provocando una
alarma, pero deja de informar durante un período prolongado.
Verification state
Después de crear una alarma, puede verificar la alarma como Verdadero positivo, positivo benigno,
Falso positivo o Desconocido. También puede agregar una descripción del estado de verificación
de las alarmas. Puede ver, organizar y filtrarAWS IoT Device Defenderalarmas mediante uno de
los cuatro estados de verificación. Puedes utilizar los estados de verificación de alarmas y las
descripciones relacionadas para informar a los miembros de tu equipo. Esto ayuda a su equipo a
realizar acciones de seguimiento, por ejemplo, realizar acciones de mitigación en alarmas positivas
verdaderas, omitir alarmas positivas benignas o continuar investigando alarmas desconocidas. El
estado de verificación predeterminado para todas las alarmas es Desconocido.
Supresión de alarmas
Comportamientos
Un perfil de seguridad contiene un conjunto de comportamientos. Cada comportamiento contiene una
métrica que especifica el comportamiento normal de un grupo de dispositivos o de todos los dispositivos
de la cuenta. Los comportamientos se dividen en dos categorías: comportamientos de detección de reglas
y comportamientos de detección de aprendizaje automático. Con los comportamientos de Rules Detect,
1081
AWS IoT Core Guía para desarrolladores
Comportamientos
usted define cómo deben comportarse sus dispositivos, mientras que ML Detect utiliza modelos de ML
basados en datos históricos de los dispositivos para evaluar cómo deben comportarse sus dispositivos.
Un perfil de seguridad puede ser de dos tipos de umbrales: ML o basado en reglas. Los perfiles de
seguridad de ML detectan automáticamente las anomalías operativas y de seguridad a nivel de dispositivo
en toda su flota al aprender de los datos anteriores. Los perfiles de seguridad basados en reglas requieren
que establezcas reglas estáticas de forma manual para supervisar el comportamiento del dispositivo.
name
Si se genera una alarma y el dispositivo infractor deja de infringir el comportamiento para el número
especificado de puntos de datos consecutivos, la alarma se desactiva. Si no se especifica, el valor
predeterminado es 1.
threshold type
Un perfil de seguridad puede ser de dos tipos de umbrales: ML o basado en reglas. Los perfiles
de seguridad de ML detectan automáticamente las anomalías operativas y de seguridad a nivel de
dispositivo en toda su flota al aprender de los datos anteriores. Los perfiles de seguridad basados en
reglas requieren que establezcas reglas estáticas de forma manual para supervisar el comportamiento
del dispositivo.
alarm suppressions
Puede gestionar las notificaciones de Detect alarm Amazon SNS configurando la notificación de
comportamiento en on osuppressed. La supresión de las alarmas no impide que Detect evalúe el
comportamiento de los dispositivos; Detect sigue marcando los comportamientos anómalos como
alarmas de infracción. Sin embargo, las alarmas suprimidas no se reenvían a las notificaciones de
Amazon SNS. Solo se puede acceder a ellos a través de la AWS IoT consola o la API.
Detección de reglas
dimension
Puede definir una dimensión para ajustar el ámbito de un comportamiento. Por ejemplo, puede
definir una dimensión de filtrado de temas que aplique un comportamiento a los temas de MQTT que
coincidan con un patrón. Para definir una dimensión para su uso en un perfil de seguridad, consulte
CreateDimension. Se aplica únicamente a Rules Detect.
criteria
Los criterios que determinan si un dispositivo se comporta normalmente con respecto a la metric.
Note
En la AWS IoT consola, puede elegir Avisarme para recibir una notificación a través de
Amazon SNS cuando AWS IoT Device Defender detecte que un dispositivo se comporta de
forma anómala.
1082
AWS IoT Core Guía para desarrolladores
Detección de ML
comparisonOperator
El operador que relaciona el objeto medido (metric) con los criterios (value o
statisticalThreshold).
Los valores posibles son: «menor que», less-than-equals «mayor que», "«," greater-than-equals
«," in-cidr-set «,"not-in-cidr-set» y "»in-port-set. not-in-port-set No todos los operadores son válidos
para todas las métricas. Los operadores para conjuntos y puertos CIDR solo son para usarlos con
métricas que impliquen dichas entidades.
value
El valor que se va a comparar con la metric. En función del tipo de métrica, debe contener
count (un valor), cidrs (una lista de CIDR) o ports (una lista de puertos).
statisticalThreshold
Este campo statistic indica un percentil. Da como resultado un valor por el que se determina
la conformidad con el comportamiento. Las métricas se recopilan una o más veces durante el
período especificado (durationSeconds) de todos los dispositivos de informes asociados a
este perfil de seguridad, y los percentiles se calculan en función de esos datos. Posteriormente,
las medidas se recopilan para un dispositivo y se acumulan a lo largo de la misma duración.
Si el valor resultante del dispositivo está por encima o por debajo (comparisonOperator)
del valor asociado con el percentil especificado, se considera que el dispositivo se ajusta al
comportamiento. De lo contrario, el dispositivo infringirá dicho comportamiento.
Un percentil indica el porcentaje de todas las mediciones consideradas que caigan por debajo del
valor asociado. Por ejemplo, si el valor asociado a "p90" (el percentil 90.º) es 123, el 90% de todas
las mediciones fueron inferiores a 123.
durationSeconds
Utilícelo para especificar el periodo de tiempo durante el cual se evalúa el comportamiento, para
aquellos criterios que tienen una dimensión de tiempo (por ejemplo, NUM_MESSAGES_SENT).
Para una comparación de métricas statisticalThreshhold, se trata del período de tiempo
durante el que se recopilan mediciones para todos los dispositivos a fin de determinar los valores
statisticalThreshold y, a continuación, para cada dispositivo para determinar cómo se
comparta en comparación.
Detección de ML
ML Detect confidence
ML Detect admite tres niveles de confianza: HighMedium, yLow. Highconfianza significa una baja
sensibilidad en la evaluación del comportamiento anómalo y, con frecuencia, un número menor
de alarmas, la Medium confianza significa una sensibilidad media y la Low confianza significa una
sensibilidad alta y, con frecuencia, un número mayor de alarmas.
Detección de ML
Con el aprendizaje automático Detect (ML Detect), puede crear perfiles de seguridad que utilizan el
aprendizaje automático para conocer los comportamientos esperados de los dispositivos mediante la
creación automática de modelos basados en los datos históricos de los dispositivos y los asigna a un
grupo de dispositivos o a todos los dispositivos de su flota. AWS IoT Device Defenderluego identifica las
anomalías y activa las alarmas mediante los modelos ML.
1083
AWS IoT Core Guía para desarrolladores
Detección de ML
Note
ML Detect ahora permite monitorear las métricas de estado operativo que son exclusivas de su
flota. Puede utilizar métricas personalizadas (p. 1088) del lado del dispositivo y un monitoreo más
detallado de su flota con la función de dimensiones. (p. 1117) Además de configurar las alarmas
estáticas de forma manual con Rules Detect, ahora puedes utilizar el aprendizaje automático para
conocer automáticamente los comportamientos esperados de tu flota en función de las métricas
personalizadas. También puedes filtrar las métricas de la nube en función de las dimensiones.
Para obtener información sobre cómo empezar a utilizar ML Detect, consulteGuía ML Detect (p. 971).
Otro caso de uso de ML Detect es monitorear los comportamientos de los dispositivos que cambian
dinámicamente con el tiempo. ML Detect aprende periódicamente los comportamientos dinámicos
esperados de los dispositivos en función de los patrones de datos cambiantes de los dispositivos. Por
ejemplo, el volumen de mensajes enviados desde el dispositivo puede variar entre días laborables y fines
de semana, y ML Detect aprenderá este comportamiento dinámico.
1084
AWS IoT Core Guía para desarrolladores
Detección de ML
Mientras ML Detect está creando el modelo inicial, se necesitan 14 días y un mínimo de 25 000 puntos
de datos por métrica durante los últimos 14 días para generar un modelo. Posteriormente, actualiza el
modelo cada día que haya un número mínimo de puntos de datos métricos. Si no se cumple el requisito
mínimo, ML Detect intentará crear el modelo al día siguiente y lo volverá a intentar todos los días durante
los próximos 30 días antes de interrumpir el modelo para realizar las evaluaciones.
Requisitos mínimos
Para entrenar y crear el modelo de aprendizaje automático inicial, ML Detect tiene los siguientes requisitos
mínimos.
Se necesitan 14 días para construir los modelos iniciales. Después de eso, el modelo se actualiza
todos los días con datos métricos de un período final de 14 días.
Puntos de datos totales mínimos
Los puntos de datos mínimos requeridos para crear un modelo de aprendizaje automático son 25
000 puntos de datos por métrica durante los últimos 14 días. Para seguir entrenando y actualizando
el modelo, ML Detect requiere que se cumplan los puntos de datos mínimos de los dispositivos
monitoreados. Es aproximadamente el equivalente a las siguientes configuraciones:
• 60 dispositivos conectados y con actividad encendida AWS IoT a intervalos de 45 minutos.
• 40 dispositivos a intervalos de 30 minutos.
• 15 dispositivos a intervalos de 10 minutos.
• 7 dispositivos a intervalos de 5 minutos.
Objetivos de grupos de dispositivos
Para recopilar datos, debe tener elementos en los grupos de elementos de destino del perfil de
seguridad.
Una vez creado el modelo inicial, los modelos de aprendizaje automático se actualizan todos los días y
requieren al menos 25 000 puntos de datos durante un período de 14 días.
Limitaciones
Puede utilizar ML Detect con dimensiones en las siguientes métricas del lado de la nube:
1085
AWS IoT Core Guía para desarrolladores
Detección de ML
Puede marcar las alarmas a través de la AWS IoT Device Defenderconsola o mediante la acción de la
PutVerificationStateOnViolationAPI.
Métricas admitidas
Puede utilizar las siguientes métricas del lado de la nube con ML Detect:
Service Quotas
Para obtener información sobre las cuotas y los límites del servicio ML Detect, consulte AWS IoT Device
Defenderpuntos de conexión y cuotas.
• create-security-profile
• attach-security-profile
• list-security-profiles
• describe-security-profile
1086
AWS IoT Core Guía para desarrolladores
Detección de ML
• update-security-profile
• delete-security-profile
• get-behavior-model-training-resúmenes
• list-active-violations
• list-violation-events
APIs de detección de ML
Las siguientes API se pueden usar para crear y administrar perfiles de seguridad de ML Detect.
• CreateSecurityProfile
• AttachSecurityProfile
• ListSecurityProfiles
• DescribeSecurityProfile
• UpdateSecurityProfile
• DeleteSecurityProfile
• GetBehaviorModelTrainingSummaries
• ListActiveViolations
• ListViolationEvents
• PutVerificationStateOnViolation
Para pausar un perfil de seguridad de ML Detect mediante la consola, primero debe tener un grupo de
cosas vacío. Para crear un grupo de cosas vacío, consulteGrupos de objetos estáticos (p. 288). Si ha
creado un grupo de cosas vacío, defina el grupo de cosas vacío como destino del perfil de seguridad
de ML Detect.
Note
Note
1087
AWS IoT Core Guía para desarrolladores
Métricas personalizadas
Note
Esta opción solo está disponible en la AWS CLI. Al igual que en el flujo de trabajo de la
consola, debes volver a establecer el destino de tu perfil de seguridad en un grupo de
dispositivos con dispositivos en un plazo de 30 días o no podrás volver a activar el perfil de
seguridad. Para adjuntar un perfil de seguridad a un grupo de dispositivos, utilice el attach-
security-profilecomando.
Eliminar un perfil de seguridad de ML Detect mediante la CLI
Note
Métricas personalizadas
conAWS IoT Device Defendermétricas personalizadas, puede definir y supervisar las métricas que son
exclusivas de su flota o caso de uso, como la cantidad de dispositivos conectados a pasarelas Wi-Fi,
los niveles de carga de las baterías o la cantidad de ciclos de alimentación de los enchufes inteligentes.
Los comportamientos de métricas personalizadas se definen en Perfiles de seguridad, que especifican
los comportamientos esperados para un grupo de dispositivos (un grupo de cosas) o para todos los
dispositivos. Puede supervisar los comportamientos mediante la configuración de alarmas, que puede
utilizar para detectar y responder a problemas específicos de los dispositivos.
1088
AWS IoT Core Guía para desarrolladores
Métricas personalizadas
1. DebajoNombre, escriba un nombre para la métrica Este nombre no se puede modificar después de
haber creado la métrica
2. DebajoNombre para mostrar (opcional), puedes introducir un nombre descriptivo para tu métrica
personalizada. No tiene por qué ser único y se puede modificar después de la creación.
3. DebajoTipo, elige el tipo de métrica que quieres supervisar. Los tipos de métricaslista de
cadenas,ip-address-list,lista de números, ynúmero. El tipo no se puede modificar después de la
creación.
Note
Las estadísticas de percentiles no están disponibles para las métricas cuando alguno de los
valores de métricas es un número negativo.
Tras eliminar una métrica personalizada, se pierden todos los datos asociados a la métrica.
Esta acción no se puede deshacer.
1090
AWS IoT Core Guía para desarrolladores
Métricas personalizadas
puede ver las métricas que se recopilan y determinar los umbrales para configurar las alarmas. Las
instrucciones para configurar el agente de dispositivos están disponibles en laAWS IoTLéame de Device
Defender Agent SDK (Python). Para obtener más información, consulteAWS IoT Device DefenderSDK de
agente (Python).
Salida:
{
"metricName": "batteryPercentage",
"metricArn": "arn:aws:iot:us-east-1:1234564789012:custommetric/batteryPercentage"
}
Salida:
{
"securityProfileArn": "arn:aws:iot:us-east-1:1234564789012:securityprofile/
batteryUsage",
"securityProfileName": "batteryUsage"
}
Note
Las estadísticas de percentiles no están disponibles para las métricas cuando alguno de los
valores de métricas es un número negativo.
1091
AWS IoT Core Guía para desarrolladores
Métricas personalizadas
{
"metricNames": [
"batteryPercentage"
]
}
{
"metricName": "batteryPercentage",
"metricArn": "arn:aws:iot:us-east-1:1234564789012:custommetric/batteryPercentage",
"metricType": "number",
"displayName": "remaining battery percentage on device",
"creationDate": "2020-11-17T23:01:35.110000-08:00",
"lastModifiedDate": "2020-11-17T23:02:12.879000-08:00"
}
1. Para eliminar una métrica personalizada, primero quítela de los perfiles de seguridad a los que esté
asociada. Utilizarlist-security-profilespara ver los perfiles de seguridad con una métrica
personalizada determinada.
2. Para eliminar una métrica personalizada de un perfil de seguridad, utilice laupdate-security-
profilescomando. Ingresa toda la información que quieras conservar, pero excluye la métrica
personalizada.
1092
AWS IoT Core Guía para desarrolladores
Métricas personalizadas
--behaviors "[{\"name\":\"cellularBandwidth\",\"metric\":\"aws:message-byte-size
\",\"criteria\":{\"comparisonOperator\":\"less-than\",\"value\":{\"count\":128},
\"consecutiveDatapointsToAlarm\":1,\"consecutiveDatapointsToClear\":1}}]"
{
"behaviors": [{\"name\":\"cellularBandwidth\",\"metric\":\"aws:message-byte-size
\",\"criteria\":{\"comparisonOperator\":\"less-than\",\"value\":{\"count\":128},
\"consecutiveDatapointsToAlarm\":1,\"consecutiveDatapointsToClear\":1}}],
"securityProfileName": "batteryUsage",
"lastModifiedDate": 2020-11-17T23:02:12.879000-09:00,
"securityProfileDescription": "Shows how much battery is left in percentile.",
"version": 2,
"securityProfileArn": "arn:aws:iot:us-east-1:1234564789012:securityprofile/
batteryUsage",
"creationDate": 2020-11-17T23:02:12.879000-09:00
}
HTTP 200
Comandos de la CLI
Puede utilizar los siguientes comandos de la CLI para crear y administrar métricas
• create-custom-metric
• describe-custom-metric
• list-custom-metrics
• update-custom-metric
• delete-custom-metric
• list-security-profiles
API de métricas
Las siguientes API se pueden usar para crear y administrar métricas personalizadas.
• CreateCustomMetric
• DescribeCustomMetric
• ListCustomMetrics
• UpdateCustomMetric
• DeleteCustomMetric
• ListSecurityProfiles
1093
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
Usa esta métrica para especificar la cantidad máxima o mínima de tráfico saliente que un dispositivo debe
enviar, medida en bytes, en un período de tiempo determinado.
Unidades: bytes
Duración: un entero no negativo. Los valores válidos son 300, 600, 900, 1800 o 3600 segundos.
Example
{
"name": "TCP outbound traffic",
"metric": "aws:all-bytes-out",
"criteria": {
"comparisonOperator": "less-than-equals",
"value": {
"count": 4096
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "TCP outbound traffic",
"metric": "aws:all-bytes-out",
"criteria": {
"comparisonOperator": "less-than-equals",
"statisticalThreshold": {
"statistic": "p50"
},
"durationSeconds": 900,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
1094
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
Bytes en (aws:all-bytes-in)
El número de bytes entrantes en un dispositivo durante un período de tiempo determinado.
Usa esta métrica para especificar la cantidad máxima o mínima de tráfico entrante que debe recibir un
dispositivo, medida en bytes, en un período de tiempo determinado.
Unidades: bytes
Duración: un entero no negativo. Los valores válidos son 300, 600, 900, 1800 o 3600 segundos.
Example
{
"name": "TCP inbound traffic",
"metric": "aws:all-bytes-in",
"criteria": {
"comparisonOperator": "less-than-equals",
"value": {
"count": 4096
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "TCP inbound traffic",
"metric": "aws:all-bytes-in",
"criteria": {
"comparisonOperator": "less-than-equals",
"statisticalThreshold": {
"statistic": "p90"
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
1095
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
{
"name": "Inbound traffic ML behavior",
"metric": "aws:all-bytes-in",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
}
Usa esta métrica para especificar el número máximo de puertos TCP que cada dispositivo debe
monitorear.
Unidad: errores
Unidades: errores
Duración: un entero no negativo. Los valores válidos son 300, 600, 900, 1800 o 3600 segundos.
Example
{
"name": "Max TCP Ports",
"metric": "aws:num-listening-tcp-ports",
"criteria": {
"comparisonOperator": "less-than-equals",
"value": {
"count": 5
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "Max TCP Ports",
"metric": "aws:num-listening-tcp-ports",
"criteria": {
1096
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
"comparisonOperator": "less-than-equals",
"statisticalThreshold": {
"statistic": "p50"
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "Max TCP Port ML behavior",
"metric": "aws:num-listening-tcp-ports",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
}
Usa esta métrica para especificar la cantidad máxima de puertos UDP que cada dispositivo debe
monitorear.
Unidad: errores
Unidades: errores
Duración: un entero no negativo. Los valores válidos son 300, 600, 900, 1800 o 3600 segundos.
Example
{
"name": "Max UDP Ports",
"metric": "aws:num-listening-udp-ports",
"criteria": {
"comparisonOperator": "less-than-equals",
"value": {
"count": 5
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
1097
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
{
"name": "Max UDP Ports",
"metric": "aws:num-listening-udp-ports",
"criteria": {
"comparisonOperator": "less-than-equals",
"statisticalThreshold": {
"statistic": "p50"
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "Max UPD Port ML behavior",
"metric": "aws:num-listening-tcp-ports",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
}
Utilice esta métrica para especificar la cantidad máxima o mínima de tráfico saliente total que un dispositivo
debe enviar en un período de tiempo determinado.
Unidades: paquetes
Duración: un entero no negativo. Los valores válidos son 300, 600, 900, 1800 o 3600 segundos.
Example
{
"name": "TCP outbound traffic",
"metric": "aws:all-packets-out",
"criteria": {
"comparisonOperator": "less-than-equals",
"value": {
"count": 100
1098
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "TCP outbound traffic",
"metric": "aws:all-packets-out",
"criteria": {
"comparisonOperator": "less-than-equals",
"statisticalThreshold": {
"statistic": "p90"
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "Outbound sent ML behavior",
"metric": "aws:all-packets-out",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
}
Paquetes en (aws:all-packets-in)
El número de paquetes entrantes en un dispositivo durante un período de tiempo determinado.
Utilice esta métrica para especificar la cantidad máxima o mínima de tráfico entrante total que un
dispositivo debe recibir en un período de tiempo determinado.
Unidades: paquetes
Duración: un entero no negativo. Los valores válidos son 300, 600, 900, 1800 o 3600 segundos.
Example
1099
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
Example
{
"name": "TCP inbound traffic",
"metric": "aws:all-packets-in",
"criteria": {
"comparisonOperator": "less-than-equals",
"statisticalThreshold": {
"statistic": "p90"
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "Inbound sent ML behavior",
"metric": "aws:all-packets-in",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
}
Utilice esta métrica para especificar un conjunto de rutas interdominios sin clases (CIDR) permitidas
(anteriormente denominadas listas blancas) o denegadas (anteriormente denominadas listas negras)
desde las que cada dispositivo debe conectarse o noAWS IoT.
1100
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
Unidades: n/a
Example
{
"name": "Denied source IPs",
"metric": "aws:destination-ip-address",
"criteria": {
"comparisonOperator": "not-in-cidr-set",
"value": {
"cidrs": [ "12.8.0.0/16", "15.102.16.0/24" ]
}
},
"suppressAlerts": true
}
Utilice esta métrica para especificar un conjunto de puertos TCP permitidos (anteriormente denominados
en la lista blanca) o denegados (anteriormente denominados en la lista negra) en los que cada dispositivo
debe o no escuchar.
Unidades: n/a
Example
{
"name": "Listening TCP Ports",
"metric": "aws:listening-tcp-ports",
"criteria": {
"comparisonOperator": "in-port-set",
"value": {
"ports": [ 443, 80 ]
}
},
"suppressAlerts": true
}
Utilice esta métrica para especificar un conjunto de puertos UDP permitidos (anteriormente denominados
en la lista blanca) o denegados (anteriormente denominados en la lista negra) en los que cada dispositivo
debe o no escuchar.
1101
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
Unidades: n/a
Example
{
"name": "Listening UDP Ports",
"metric": "aws:listening-udp-ports",
"criteria": {
"comparisonOperator": "in-port-set",
"value": {
"ports": [ 1025, 2000 ]
}
}
}
Usa esta métrica para especificar el número máximo o mínimo de conexiones TCP activas que debe tener
cada dispositivo (todos los estados TCP).
Unidades: conexiones
Example
{
"name": "TCP Connection Count",
"metric": "aws:num-established-tcp-connections",
"criteria": {
"comparisonOperator": "less-than-equals",
"value": {
"count": 3
},
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "TCP Connection Count",
"metric": "aws:num-established-tcp-connections",
"criteria": {
"comparisonOperator": "less-than-equals",
"statisticalThreshold": {
"statistic": "p90"
},
"durationSeconds": 900,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
1102
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
},
"suppressAlerts": true
}
{
"name": "Connection count ML behavior",
"metric": "aws:num-established-tcp-connections",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
}
métricas_personalizadas
cmet Y Objeto Un informe
puede tener
ambos o,
al menos,
unometrics o
uncustom_metrics
bloque.
Bloque de encabezado
1103
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
Bloque de métricas:
Conexiones de TCP
established_connections
ec tcp_connectionsN Objeto Estado
de TCP
establecido
connections cs established_connections
N Lista<Objeto>
total t established_connections
N Número >= 0 Número de
conexiones
establecidas
listening_tcp_ports
tp métricas N Objeto
1104
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
total t listening_tcp_ports
N Número >= 0
listening_udp_ports
up métricas N Objeto
total t listening_udp_ports
N Número >= 0
Estadísticas de la red
Example
{
"header": {
"report_id": 1530304554,
"version": "1.0"
},
"metrics": {
1105
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
"listening_tcp_ports": {
"ports": [
{
"interface": "eth0",
"port": 24800
},
{
"interface": "eth0",
"port": 22
},
{
"interface": "eth0",
"port": 53
}
],
"total": 3
},
"listening_udp_ports": {
"ports": [
{
"interface": "eth0",
"port": 5353
},
{
"interface": "eth0",
"port": 67
}
],
"total": 2
},
"network_stats": {
"bytes_in": 29358693495,
"bytes_out": 26485035,
"packets_in": 10013573555,
"packets_out": 11382615
},
"tcp_connections": {
"established_connections": {
"connections": [
{
"local_interface": "eth0",
"local_port": 80,
"remote_addr": "192.168.0.1:8000"
},
{
"local_interface": "eth0",
"local_port": 80,
"remote_addr": "192.168.0.1:8000"
}
],
"total": 2
}
}
},
"custom_metrics": {
"MyMetricOfType_Number": [
{
"number": 1
}
],
"MyMetricOfType_NumberList": [
{
"number_list": [
1,
2,
3
1106
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
]
}
],
"MyMetricOfType_StringList": [
{
"string_list": [
"value_1",
"value_2"
]
}
],
"MyMetricOfType_IpList": [
{
"ip_list": [
"172.0.0.0",
"172.0.0.10"
]
}
]
}
}
{
"hed": {
"rid": 1530305228,
"v": "1.0"
},
"met": {
"tp": {
"pts": [
{
"if": "eth0",
"pt": 24800
},
{
"if": "eth0",
"pt": 22
},
{
"if": "eth0",
"pt": 53
}
],
"t": 3
},
"up": {
"pts": [
{
"if": "eth0",
"pt": 5353
},
{
"if": "eth0",
"pt": 67
}
],
"t": 2
},
"ns": {
"bi": 29359307173,
"bo": 26490711,
"pi": 10014614051,
1107
AWS IoT Core Guía para desarrolladores
Métricas del lado del dispositivo
"po": 11387620
},
"tc": {
"ec": {
"cs": [
{
"li": "eth0",
"lp": 80,
"rad": "192.168.0.1:8000"
},
{
"li": "eth0",
"lp": 80,
"rad": "192.168.0.1:8000"
}
],
"t": 2
}
}
},
"cmet": {
"MyMetricOfType_Number": [
{
"number": 1
}
],
"MyMetricOfType_NumberList": [
{
"number_list": [
1,
2,
3
]
}
],
"MyMetricOfType_StringList": [
{
"string_list": [
"value_1",
"value_2"
]
}
],
"MyMetricOfType_IpList": [
{
"ip_list": [
"172.0.0.0",
"172.0.0.10"
]
}
]
}
}
Debe implementar de forma segura la segunda versión delAWS IoT SDK en los dispositivosAWS IoT
conectados o en las puertas de enlace de los dispositivos para recopilar las métricas del dispositivo.
Consulta la lista completa de SDK aquí.
1108
AWS IoT Core Guía para desarrolladores
Métricas del lado de la nube
Puede utilizarAWS IoT Device Client para publicar métricas, ya que proporciona un agente único que
cubre las funciones presentes en ambosAWS IoT dispositivosAWS IoT Device Defender y en Device
Management. Estas funciones incluyen trabajos, túneles seguros, publicación deAWS IoT Device Defender
métricas y mucho más.
Publica las métricas del dispositivo en el tema reservadoAWS IoT paraAWS IoT Device Defender
recopilarlas y evaluarlas.
"device-defender": {
"enabled": true,
"interval-in-seconds": 300
}
Warning
Unidades: bytes
Example
{
"name": "Max Message Size",
"metric": "aws:message-byte-size",
"criteria": {
"comparisonOperator": "less-than-equals",
"value": {
"count": 1024
1109
AWS IoT Core Guía para desarrolladores
Métricas del lado de la nube
},
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "Message size ML behavior",
"metric": "aws:message-byte-size",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
}
Un dispositivo emite una alarma si, durante tres períodos consecutivos de cinco minutos, transmite
mensajes en los que el tamaño acumulado es superior al medido en el 90 por ciento de los demás
dispositivos que informan sobre este comportamiento del perfil de seguridad.
Usa esta métrica para especificar el número máximo o mínimo de mensajes que se pueden enviar AWS
IoT entre cada dispositivo en un período de tiempo determinado.
Unidades: mensajes
Duración: un entero no negativo. Los valores válidos son 300, 600, 900, 1800 o 3600 segundos.
1110
AWS IoT Core Guía para desarrolladores
Métricas del lado de la nube
Example
{
"name": "Messages sent ML behavior",
"metric": "aws:num-messages-sent",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
}
Usa esta métrica para especificar el número máximo o mínimo de mensajes que se pueden recibir AWS
IoT entre cada dispositivo en un período de tiempo determinado.
1111
AWS IoT Core Guía para desarrolladores
Métricas del lado de la nube
Unidades: mensajes
Duración: un entero no negativo. Los valores válidos son 300, 600, 900, 1800 o 3600 segundos.
Example
{
"name": "In bound message count",
"metric": "aws:num-messages-received",
"criteria": {
"comparisonOperator": "less-than-equals",
"value": {
"count": 50
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "In bound message rate",
"metric": "aws:num-messages-received",
"criteria": {
"comparisonOperator": "less-than-equals",
"statisticalThreshold": {
"statistic": "p99"
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "Messages received ML behavior",
"metric": "aws:num-messages-received",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
}
1112
AWS IoT Core Guía para desarrolladores
Métricas del lado de la nube
Unidad: errores
Duración: un entero no negativo. Los valores válidos son 300, 600, 900, 1800 o 3600 segundos.
Example
{
"name": "Authorization Failures",
"metric": "aws:num-authorization-failures",
"criteria": {
"comparisonOperator": "less-than",
"value": {
"count": 5
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "Authorization Failures",
"metric": "aws:num-authorization-failures",
"criteria": {
"comparisonOperator": "less-than-equals",
"statisticalThreshold": {
"statistic": "p50"
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "Authorization failures ML behavior",
"metric": "aws:num-authorization-failures",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
}
IP de origen (aws:source-ip-address)
La dirección IP desde la que se ha conectado un dispositivo a AWS IoT.
1113
AWS IoT Core Guía para desarrolladores
Métricas del lado de la nube
Utilice esta métrica para especificar un conjunto de rutas interdominios sin clases (CIDR) permitidas
(anteriormente denominadas listas blancas) o denegadas (anteriormente denominadas listas negras)
desde las que cada dispositivo debe conectarse o no. AWS IoT
Unidades: n/a
Example
{
"name": "Denied source IPs",
"metric": "aws:source-ip-address",
"criteria": {
"comparisonOperator": "not-in-cidr-set",
"value": {
"cidrs": [ "12.8.0.0/16", "15.102.16.0/24" ]
}
},
"suppressAlerts": true
}
Utilice esta métrica para especificar el número máximo o mínimo de intentos de conexión para cada
dispositivo. Se cuentan los intentos correctos y los no correctos.
Duración: un entero no negativo. Los valores válidos son 300, 600, 900, 1800 o 3600 segundos.
Example
{
"name": "Connection Attempts",
"metric": "aws:num-connection-attempts",
"criteria": {
"comparisonOperator": "less-than-equals",
"value": {
"count": 5
},
"durationSeconds": 600,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
1114
AWS IoT Core Guía para desarrolladores
Métricas del lado de la nube
{
"name": "Connection Attempts",
"metric": "aws:num-connection-attempts",
"criteria": {
"comparisonOperator": "less-than-equals",
"statisticalThreshold": {
"statistic": "p10"
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "Connection attempts ML behavior",
"metric": "aws:num-connection-attempts",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": false
}
Desconexiones (aws:num-desconexiones)
Número de veces que un dispositivo se desconecta de AWS IoT durante un periodo de tiempo
determinado.
Utilice esta métrica para especificar el número máximo o mínimo de veces que un dispositivo se ha
desconectado de AWS IoT durante un periodo de tiempo determinado.
Unidades: desconexiones
Duración: un entero no negativo. Los valores válidos son 300, 600, 900, 1800 o 3600 segundos.
Example
{
"name": "Disconnections",
"metric": "aws:num-disconnects",
"criteria": {
"comparisonOperator": "less-than-equals",
"value": {
"count": 5
},
"durationSeconds": 600,
"consecutiveDatapointsToAlarm": 1,
1115
AWS IoT Core Guía para desarrolladores
Métricas del lado de la nube
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "Disconnections",
"metric": "aws:num-disconnects",
"criteria": {
"comparisonOperator": "less-than-equals",
"statisticalThreshold": {
"statistic": "p10"
},
"durationSeconds": 300,
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1
},
"suppressAlerts": true
}
{
"name": "Disconnects ML behavior",
"metric": "aws:num-disconnects",
"criteria": {
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"mlDetectionConfig": {
"confidenceLevel": "HIGH"
}
},
"suppressAlerts": true
}
Usa esta métrica para especificar la duración máxima durante la que un dispositivo permanece
desconectadoAWS IoT.
Example
{
"name": "DisconnectDuration",
"metric": "aws:disconnect-duration",
"criteria": {
"comparisonOperator": "less-than-equals",
"value": {
"count": 5
}
},
"suppressAlerts": true
1116
AWS IoT Core Guía para desarrolladores
Establecer el ámbito de las métricas en los
perfiles de seguridad utilizando dimensiones
Se pueden utilizar comodines de MQTT en los valores de las dimensiones. Los comodines de MQTT
le permiten suscribirse a varios temas simultáneamente. Hay dos tipos diferentes de comodines: de un
nivel (+) y de varios niveles (#). Por ejemplo, el valor de dimensión Data/bulb/+/activity crea una
suscripción que busca correspondencias en todos los temas que existen en el mismo nivel que +. Los
valores de dimensión también admiten la variable de sustitución del ID de cliente MQTT $ {iot:ClientId}.
Las dimensiones de tipo TOPIC_FILTER son compatibles con el siguiente conjunto de métricas del lado de
la nube:
1117
AWS IoT Core Guía para desarrolladores
Establecer el ámbito de las métricas en los
perfiles de seguridad utilizando dimensiones
2. En elNombre de la cosacolumna, elija el elemento para ver información sobre la causa de la alarma.
{
"arn": "arn:aws:iot:us-west-2:123456789012:dimension/TopicFilterForAuthMessages",
"name": "TopicFilterForAuthMessages"
}
1118
AWS IoT Core Guía para desarrolladores
Establecer el ámbito de las métricas en los
perfiles de seguridad utilizando dimensiones
{\"comparisonOperator\":\"less-than\",\"value\":{\"count\":10},\"durationSeconds\":300,
\"consecutiveDatapointsToAlarm\":1,\"consecutiveDatapointsToClear\":1}}]" \
--additional-metrics-to-retain-v2 "[{\"metric\": \"aws:num-authorization-failures\",
\"metricDimension\": {\"dimensionName\": \"TopicFilterForAuthMessages\",\"operator\":
\"NOT_IN\"}}]"
{
"securityProfileArn": "arn:aws:iot:us-west-2:1234564789012:securityprofile/
ProfileForConnectedDevice",
"securityProfileName": "ProfileForConnectedDevice"
}
Para ahorrar tiempo, también puede cargar un parámetro desde un archivo en lugar de
escribirlo como un valor de parámetro de la línea de comandos. Para obtener más información,
consulteCargandoAWS CLIParámetros de un archivo. A continuación se muestra el parámetro
behavior en formato JSON expandido:
[
{
"criteria": {
"comparisonOperator": "less-than",
"consecutiveDatapointsToAlarm": 1,
"consecutiveDatapointsToClear": 1,
"value": {
"count": 128
}
},
"metric": "aws:message-byte-size",
"metricDimension": {
"dimensionName:": "TopicFilterForAuthMessages"
},
"name": "CellularBandwidth"
}
]
• Utilice el comando ListSecurityProfiles para ver perfiles de seguridad con una dimensión determinada:
1119
AWS IoT Core Guía para desarrolladores
Establecer el ámbito de las métricas en los
perfiles de seguridad utilizando dimensiones
{
"securityProfileIdentifiers": [
{
"name": "ProfileForConnectedDevice",
"arn": "arn:aws:iot:us-west-2:1234564789012:securityprofile/
ProfileForConnectedDevice"
}
]
}
{
"name": "TopicFilterForAuthMessages",
"lastModifiedDate": 1585866222.317,
"stringValues": [
"device/${iot:ClientId}/auth"
],
"creationDate": 1585854500.474,
"type": "TOPIC_FILTER",
"arn": "arn:aws:iot:us-west-2:1234564789012:dimension/TopicFilterForAuthMessages"
}
1. Para eliminar una dimensión, primero desconéctela de los perfiles de seguridad a los que esté
asociada. Utilice el comando ListSecurityProfiles para ver perfiles de seguridad con una determinada
dimensión.
2. Para quitar una dimensión de un perfil de seguridad, utilice el comando UpdateSecurityProfile.
Introduzca toda la información que desee conservar, pero excluya la dimensión:
{
"behaviors": [
{
"metric": "aws:message-byte-size",
1120
AWS IoT Core Guía para desarrolladores
Permisos
"name": "CellularBandwidth",
"criteria": {
"consecutiveDatapointsToClear": 1,
"comparisonOperator": "less-than",
"consecutiveDatapointsToAlarm": 1,
"value": {
"count": 128
}
}
},
{
"metric": "aws:num-authorization-failures",
"name": "Authorization",
"criteria": {
"durationSeconds": 300,
"comparisonOperator": "less-than",
"consecutiveDatapointsToClear": 1,
"consecutiveDatapointsToAlarm": 1,
"value": {
"count": 10
}
}
}
],
"securityProfileName": "ProfileForConnectedDevice",
"lastModifiedDate": 1585936349.12,
"securityProfileDescription": "Check to see if authorization fails 10 times in 5
minutes or if cellular bandwidth exceeds 128",
"version": 2,
"securityProfileArn": "arn:aws:iot:us-west-2:123456789012:securityprofile/Preo/
ProfileForConnectedDevice",
"creationDate": 1585846909.127
}
3. Una vez desconectada la dimensión, utilice el comando DeleteDimension para eliminar la dimensión:
Permisos
Esta sección contiene información sobre cómo configurar los roles y políticas de IAM necesarias para
administrarAWS IoT Device DefenderDetectar. Para obtener más información, consulte la Guía del usuario
de IAM.
Política de permisos
{
"Version":"2012-10-17",
"Statement":[
{
1121
AWS IoT Core Guía para desarrolladores
Comandos de detección
"Effect":"Allow",
"Action":[
"sns:Publish"
],
"Resource":[
"arn:aws:sns:region:account-id:your-topic-name"
]
}
]
}
Política de confianza
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
También necesita una política de permisos de IAM asociada al usuario de IAM que permita al usuario
pasar roles. Consulte Concesión de permisos a un usuario para transferir un rol a un servicio de AWS.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": [
"iam:GetRole",
"iam:PassRole"
],
"Resource": "arn:aws:iam::account-id:role/Role_To_Pass"
}
]
}
Comandos de detección
Puede utilizar los comandos de Detect de esta sección para configurar perfiles de seguridad de Detect de
ML o de Detect de Reglas, para identificar y supervisar comportamientos inusuales que podrían indicar que
un dispositivo está comprometido.
1122
AWS IoT Core Guía para desarrolladores
Comandos de detección
CreateDimension
DescribeDimension
ListDimensions
DeleteDimension
UpdateDimension
CreateSecurityProfile
AttachSecurityProfile
DetachSecurityProfile
DeleteSecurityProfile
DescribeSecurityProfile
ListTargetsForSecurityProfile
UpdateSecurityProfile
ValidateSecurityProfileBehaviors
ListSecurityProfilesForTarget
1123
AWS IoT Core Guía para desarrolladores
Cómo utilizar AWS IoT Device Defender Detect
ListActiveViolations
ListViolationEvents
Utilice la consola de AWS IoT para analizar sus métricas de dispositivos y determinar qué constituye
un comportamiento típico para sus dispositivos.
3. Cree un conjunto de comportamientos para el perfil de seguridad. Los comportamientos contienen
métricas que especifican el comportamiento normal de un grupo de dispositivos o de todos los
dispositivos de su cuenta. Para obtener más información y ejemplos, consulte Métricas del lado de
la nube (p. 1109) y Métricas del lado del dispositivo (p. 1094). Después de crear un conjunto de
comportamientos, puede validarlos conValidateSecurityProfileBehaviors.
4. UsarCreateSecurityProfileAcción para crear un perfil de seguridad que incluya los comportamientos.
Puede utilizar elalertTargetspara enviar alarmas a un objetivo (un tema SNS) cuando un
dispositivo vulnere un comportamiento. (Si envía alarmas usando SNS, tenga en cuenta que estas
se tendrán en cuenta paraCuenta de AWSde la cuota de temas SNS. Si se produce una gran oleada
de infracciones, podría superarse la cuota de temas de SNS. También puede utilizar CloudWatch
métricas para comprobar las vulneraciones. Para obtener más información, consulte Uso de las
métricas de AWS IoT (p. 466).
5. UsarAttachSecurityProfileAcción para asociar el perfil de seguridad a un grupo de dispositivos (un
grupo de objetos), a todos los objetos registrados en la cuenta, a todos los objetos no registrados
o a todos los dispositivos.AWS IoT Device Defender Detect comienza comprobando si hay un
comportamiento anómalo, y si se detectan vulneraciones del comportamiento, envía alarmas. Es
posible que desee asociar un perfil de seguridad a todos los objetos no registrados si, por ejemplo,
tiene previsto interactuar con dispositivos móviles que no están en el registro de objetos de su cuenta.
Puede definir diferentes conjuntos de comportamientos para diferentes grupos de dispositivos para
satisfacer sus necesidades.
Para asociar un perfil de seguridad a un grupo de dispositivos, debe especificar el ARN del grupo de
objetos que los contiene. El ARN de un grupo de objetos tiene el siguiente formato:
1124
AWS IoT Core Guía para desarrolladores
Acciones de mitigación
arn:aws:iot:region:account-id:thinggroup/thing-group-name
Para asociar un perfil de seguridad a todos los objetos registrados en unCuenta de AWS(sin tener en
cuenta los objetos no registrados), debe especificar un ARN con el siguiente formato:
arn:aws:iot:region:account-id:all/registered-things
Para asociar un perfil de seguridad a todos los objetos no registrados, debe especificar un ARN con el
siguiente formato:
arn:aws:iot:region:account-id:all/unregistered-things
Para asociar un perfil de seguridad a todos los dispositivos, debe especificar un ARN con el siguiente
formato:
arn:aws:iot:region:account-id:all/things
6. También puede realizar un seguimiento de las infracciones con elListActiveViolations, que le permite
ver qué infracciones se detectaron para un perfil de seguridad o dispositivo de destino determinado.
Acciones de mitigación
Puedes usarAWS IoT Device Defendertomar medidas para mitigar los problemas detectados en una
alarma de detección o detección de auditoría.
Note
No se llevarán a cabo acciones de mitigación sobre los hallazgos de auditoría suprimidos. Para
obtener más información sobre las supresiones de hallazgos de auditoría, consulteSupresiones de
hallazgos de auditoría (p. 1064).
1125
AWS IoT Core Guía para desarrolladores
Acciones de mitigación de auditorías
• Todos los resultados de una auditoría. Esta opción está disponible en la consola de AWS IoT y a través
de la AWS CLI.
• Una lista de resultados individuales. Esta opción solo está disponible a través de la AWS CLI
• Un conjunto filtrado de los resultados de una auditoría.
En la siguiente tabla se muestran los tipos de las comprobaciones de auditoría y las acciones de mitigación
compatibles para cada una de ellas:
REVOKED_CA_CERT_CHECK PUBLISH_FINDING_TO_SNS,
UPDATE_CA_CERTIFICATE
INTERMEDIATE_CA_REVOKED_FOR_ACTIVE_DEVICE_CERTIFICATES_CHECK
PUBLISH_FINDING_TO_SNS,
UPDATE_DEVICE_CERTIFICATE,
ADD_THINGS_TO_THING_GROUP
DEVICE_CERTIFICATE_SHARED_CHECK PUBLISH_FINDING_TO_SNS,
UPDATE_DEVICE_CERTIFICATE,
ADD_THINGS_TO_THING_GROUP
UNAUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK
PUBLISH_FINDING_TO_SNS
AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK
PUBLISH_FINDING_TO_SNS
IOT_POLICY_OVERLY_PERMISSIVE_CHECK PUBLISH_FINDING_TO_SNS,
REPLACE_DEFAULT_POLICY_VERSION
IOT_POLICY_POTENTIAL_MISCONFIGURATION_CHECK
PUBLISH_FINDING_TO_SNS,
REPLACE_DEFAULT_POLICY_VERSION
CA_CERTIFICATE_EXPIRING_CHECK PUBLISH_FINDING_TO_SNS,
UPDATE_CA_CERTIFICATE
CONFLICTING_CLIENT_IDS_CHECK PUBLISH_FINDING_TO_SNS
REVOKED_DEVICE_CERTIFICATE_STILL_ACTIVE_CHECK
PUBLISH_FINDING_TO_SNS,
UPDATE_DEVICE_CERTIFICATE,
ADD_THINGS_TO_THING_GROUP
LOGGING_DISABLED_CHECK PUBLISH_FINDING_TO_SNS,
ENABLE_IOT_LOGGING
DEVICE_CERTIFICATE_KEY_QUALITY_CHECK PUBLISH_FINDING_TO_SNS,
UPDATE_DEVICE_CERTIFICATE,
ADD_THINGS_TO_THING_GROUP
CA_CERTIFICATE_KEY_QUALITY_CHECK PUBLISH_FINDING_TO_SNS,
UPDATE_CA_CERTIFICATE
IOT_ROLE_ALIAS_OVERLY_PERMISSIVE_CHECK PUBLISH_FINDING_TO_SNS
IOT_ROLE_ALIAS_ALLOWS_ACCESS_TO_UNUSED_SERVICES_CHECK
PUBLISH_FINDING_TO_SNS
1126
AWS IoT Core Guía para desarrolladores
Acciones de mitigación de auditorías
Todas las comprobaciones de auditoría permiten publicar los resultados de la auditoría en Amazon
SNS para que pueda realizar acciones personalizadas en respuesta a la notificación. Cada tipo de
comprobación de auditoría puede admitir acciones de mitigación adicionales:
REVOKED_CA_CERT_CHECK
• Cambiar el estado del certificado para marcarlo como inactivo en AWS IoT.
DEVICE_CERTIFICATE_SHARED_CHECK
• Cambiar el estado del certificado del dispositivo para marcarlo como inactivo en AWS IoT.
• Añadir dispositivos que utilizan dicho certificado a un grupo de objetos.
UNAUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK
• No se admiten otras acciones.
AUTHENTICATED_COGNITO_ROLE_OVERLY_PERMISSIVE_CHECK
• No se admiten otras acciones.
IOT_POLICY_OVERLY_PERMISSIVE_CHECK
• Añadir una versión de política de AWS IoT en blanco para restringir los permisos.
IOT_POLICY_POTENTIAL_MISCONFIGURATION_CHECK
• Identifique posibles errores de configuración enAWS IoTpolíticas.
CA_CERT_APPROACHING_EXPIRATION_CHECK
• Cambiar el estado del certificado para marcarlo como inactivo en AWS IoT.
CONFLICTING_CLIENT_IDS_CHECK
• No se admiten otras acciones.
DEVICE_CERT_APPROACHING_EXPIRATION_CHECK
• Cambiar el estado del certificado del dispositivo para marcarlo como inactivo en AWS IoT.
• Añadir dispositivos que utilizan dicho certificado a un grupo de objetos.
DEVICE_CERTIFICATE_KEY_QUALITY_CHECK
• Cambiar el estado del certificado del dispositivo para marcarlo como inactivo en AWS IoT.
• Añadir dispositivos que utilizan dicho certificado a un grupo de objetos.
CA_CERTIFICATE_KEY_QUALITY_CHECK
• Cambiar el estado del certificado para marcarlo como inactivo en AWS IoT.
REVOKED_DEVICE_CERT_CHECK
• Cambiar el estado del certificado del dispositivo para marcarlo como inactivo en AWS IoT.
• Añadir dispositivos que utilizan dicho certificado a un grupo de objetos.
LOGGING_DISABLED_CHECK
• Habilitar el registro.
AWS IoT Device Defenderapoya los siguientes tipos de acciones de mitigación en relación con los
hallazgos de la auditoría:
1127
AWS IoT Core Guía para desarrolladores
Detectar acciones de mitigación
Al configurar acciones estándar para los problemas encontrados durante una auditoría, puede responder
a estos problemas de forma coherente. Utilizar estas acciones de mitigación definidas también le ayuda a
resolver los problemas con mayor rapidez y con menos posibilidad de que se produzcan errores.
Important
Algunas acciones, como, por ejemplo, reactivar un certificado de dispositivo, solo se pueden realizar
manualmente. AWS IoT Device Defender no proporciona un mecanismo para revertir automáticamente las
acciones de mitigación que se han aplicado.
1128
AWS IoT Core Guía para desarrolladores
Cómo definir y administrar las acciones de mitigación
• Utilice el comando CreateMitigationAction para crear la acción de mitigación. El nombre único que dé
a la acción se utiliza cuando se aplica dicha acción a los resultados de la auditoría. Elija un nombre
significativo.
Para utilizar la consola de AWS IoT para ver y modificar las acciones de mitigación
ElAcciones de mitigaciónla página muestra una lista de todas las acciones de mitigación definidas
para suCuenta de AWS.
2. Elija el enlace del nombre de la acción de la acción de mitigación que desea cambiar.
3. EscojaEditary realice los cambios en la acción de mitigación. No puede cambiar el nombre porque el
nombre de la acción de mitigación se utiliza para identificarla.
4. EscojaActualizarpara guardar los cambios de la acción de mitigación en suCuenta de AWS.
Para utilizar la AWS CLI para obtener una lista de acciones de mitigación
• Utilice el comando ListMitigationAction para mostrar las acciones de mitigación. Si desea cambiar o
eliminar una acción de mitigación, anote del nombre.
Para utilizar la consola de AWS IoT para eliminar una acción de mitigación
ElAcciones de mitigaciónla página muestra todas las acciones de mitigación que están definidas para
suCuenta de AWS.
1129
AWS IoT Core Guía para desarrolladores
Aplicación de acciones de mitigación
Para utilizar la consola de AWS IoT para ver los detalles de una acción de mitigación
ElAcciones de mitigaciónla página muestra todas las acciones de mitigación que están definidas para
suCuenta de AWS.
2. Elija el enlace del nombre de la acción de mitigación que desee ver.
Para utilizar la AWS CLI para ver los detalles de una acción de mitigación
Puede ver la lista de ejecuciones de acciones y cancelar una ejecución que aún no se ha completado.
Las acciones ya realizadas como parte de la ejecución de la acción cancelada no se revierten. Si está
aplicando varias acciones a un conjunto de resultados y una de esas acciones produce un error, se omiten
la acciones posteriores para ese resultado (pero se siguen aplicado a otros resultados). El estado de la
tarea para el el resultado es FAILED. El taskStatus se establece como error (Failed) si una o varias
de las acciones fracasan cuando se aplican a los resultados. Las acciones se aplican en el orden en que
estén especificadas.
Cada ejecución de acción aplica a un conjunto de acciones a un destino. Ese destino puede ser una lista
de resultados o puede ser todos los resultados de una auditoría.
En el siguiente diagrama se muestra cómo puede definir una tarea de mitigación de auditoría para que
tome todos los resultados de una auditoría y les aplique un conjunto de acciones. Una única ejecución
aplica una acción a un resultado. La tarea de acciones de mitigación de auditoría genera un resumen de
ejecución.
1130
AWS IoT Core Guía para desarrolladores
Aplicación de acciones de mitigación
En el siguiente diagrama se muestra cómo puede definir una tarea de mitigación de auditoría para que
tome una lista de resultados individuales de una o varias auditorías y les aplique un conjunto de acciones.
Una única ejecución aplica una acción a un resultado. La tarea de acciones de mitigación de auditoría
genera un resumen de ejecución.
1131
AWS IoT Core Guía para desarrolladores
Aplicación de acciones de mitigación
Puede utilizar la AWS CLI o la consola de AWS IoT para aplicar acciones de mitigación.
Para usar la consola AWS IoT para aplicar acciones de mitigación iniciando la ejecución de una
acción
1132
AWS IoT Core Guía para desarrolladores
Aplicación de acciones de mitigación
Note
Si no ha configurado acciones para suCuenta de AWS, la lista de acciones está vacía. Puede
elegir elCrear una acción de mitigaciónenlace para crear una o más acciones de mitigación.
6. Cuando haya especificado todas las acciones que desea aplicar, elijaIniciar tarea.
Para usar la AWS CLI para aplicar acciones de mitigación iniciando la ejecución de una acción de
mitigación de auditoría
1. Si desea aplicar acciones a todos los resultados de la auditoría, utilice el comando ListAuditTasks para
encontrar el ID de la tarea.
2. Si desea aplicar acciones solo a resultados seleccionados, utilice el comando ListAuditFindings para
obtener los ID de los resultados.
3. Utilice el comando ListMitigationActions y anote los nombres de las acciones de mitigación que se van
a aplicar.
4. Utilice el comando StartAuditMitigationActionsTask para aplicar las acciones al destino. Anote el ID de
la tarea. Puede utilizar el ID para comprobar el estado de la ejecución de la acción, revisar los detalles
o cancelarla.
Para utilizar la consola de AWS IoT para ver sus ejecuciones de acciones
Una lista de tareas de acción muestra cuando cada se inició cada una y su estado actual.
2. Elija el enlace Name (Nombre) para ver los detalles de la tarea. Los detalles incluyen todas las
acciones que aplica la tarea, su destino y su estado.
Puede utilizar los filtros Show executions for (Mostrar ejecuciones para) en tipo de acciones o estados
de acción.
3. Para ver los detalles de la tarea, en Executions (Ejecuciones), elija Show (Mostrar).
1133
AWS IoT Core Guía para desarrolladores
Permisos
Para utilizar la AWS CLI para mostrar una lista de tareas iniciadas
1. Use ListAuditMitigationActionsTasks para ver las tareas de acciones de mitigación de auditoría. Puede
proporcionar filtros para limitar los resultados. Si desea ver los detalles de la tarea, anote el ID de la
tarea.
2. Utilice ListAuditMitigationActionsExecutions para ver los detalles de ejecución de una tarea de
acciones de mitigación de auditoría en particular.
3. Use DescribeAuditMitigationActionsTask para ver los detalles de la tarea, como los parámetros
especificados cuando se inició la tarea.
Para utilizar la AWS CLI para cancelar una tarea de acciones de mitigación de auditoría en
ejecución
Permisos
Para cada acción de mitigación que defina, debe proporcionar el rol utilizado para aplicar dicha acción.
UPDATE_DEVICE_CERTIFICATE
{
1134
AWS IoT Core Guía para desarrolladores
Permisos
"Effect":"Allow",
"Action":[
"iot:UpdateCertificate"
],
"Resource":[
"*"
]
}
]
}
UPDATE_CA_CERTIFICATE
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"iot:UpdateCACertificate"
],
"Resource":[
"*"
]
}
]
}
ADD_THINGS_TO_THING_GROUP
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"iot:ListPrincipalThings",
"iot:AddThingToThingGroup"
],
"Resource":[
"*"
]
}
]
}
1135
AWS IoT Core Guía para desarrolladores
Permisos
REPLACE_DEFAULT_POLICY_VERSION
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"iot:CreatePolicyVersion"
],
"Resource":[
"*"
]
}
]
}
ENABLE_IOT_LOGGING
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"iot:SetV2LoggingOptions"
],
"Resource":[
"*"
]
},
{
"Effect":"Allow",
"Action":[
"iam:PassRole"
],
"Resource":[
"<IAM role
ARN used for setting up
logging>"
]
}
]
}
1136
AWS IoT Core Guía para desarrolladores
Comandos de las acciones de mitigación
PUBLISH_FINDING_TO_SNS
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"sns:Publish"
],
"Resource":[
"<The SNS
topic to which the finding
is published>"
]
}
]
}
Para todos los tipos de acciones de mitigación, utilice la siguiente plantilla de política de confianza:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:iot:*:111122223333::*"
},
"StringEquals": {
"aws:SourceAccount": "111122223333:"
}
}
}
]
}
1137
AWS IoT Core Guía para desarrolladores
Uso de AWS IoT Device Defender
con otros servicios de AWS.
Para usarAWS IoT Device Defenderen un dispositivo integrado sin FreeRTOS, su dispositivo debe tener
laAWSSDK C integrado para IoToAWSBiblioteca IoT Device Defender. ElAWSEl SDK de IoT Embedded
C incluyeAWSBiblioteca IoT Device Defender. Para obtener información sobre cómo integrarAWS IoT
1138
AWS IoT Core Guía para desarrolladores
Uso de AWS IoT Device Defender
con AWS IoT Device Management
Device Defendercon sus dispositivos integrados, consulte las siguientes demostraciones,AWS IoT Device
DefenderporAWSDemostraciones de métricas estándar y personalizadas del SDK integrado de IoT.
La función de indexación de flotas para respaldar la indexaciónAWS IoT Device Defenderlos datos
sobre infracciones están en la versión preliminar deAWS IoT Device Managementy está sujeto a
cambios.
Con laAWS IoT Device Defender integración con Security Hub, puede enviar los resultados desdeAWS
IoT Device Defender Security Hub. Security Hub incluye esos resultados en su análisis de la posición de
seguridad.
Contenido
• Habilitación y configuración de la integración (p. 1139)
• Cómo AWS IoT Device Defender envía los resultados a Security Hub (p. 1140)
• Tipos de hallazgos que envía AWS IoT Device Defender (p. 1140)
• Latencia para el envío de hallazgos (p. 1140)
• Reintento cuando Security Hub no está disponible (p. 1141)
• Actualización de los resultados existentes en Security Hub (p. 1141)
• Hallazgo típico de AWS IoT Device Defender (p. 1141)
• DisablingAWS IoT Device Defender the flow of findings from an integration Security Hub (p. 1145)
1139
AWS IoT Core Guía para desarrolladores
Integración de Security Hub
Después de habilitar ambosAWS IoT Device Defender y Security Hub, abra la página de integraciones en
la consola de Security Hub y, a continuación, elija Aceptar los hallazgos para auditar, Detectar o ambas.
AWS IoT Device Defendercomienza a enviar los resultados a Security Hub.
Security Hub proporciona herramientas para administrar los resultados de todas estas fuentes. Puede ver
y filtrar listas de resultados y ver los detalles de una búsqueda. Para obtener más información, consulte
Visualización de resultados en la Guía del usuario de AWS Security Hub. También puede realizar un
seguimiento del estado de una investigación de un hallazgo. Para obtener más información, consulte
Adopción de medidas en función de los resultados en la Guía del usuario de AWS Security Hub.
Todos los resultados en Security Hub usan un formato JSON estándar denominado AWSSecurity Finding
Format (ASFF). El ASFF incluye detalles sobre el origen del problema, los recursos afectados y el estado
actual del hallazgo. Para obtener más información acerca de ASFF, consulte AWSSecurity Finding Format
(ASFF) en la Guía delAWS Security Hub usuario de.
AWS IoT Device Defenderes uno de losAWS servicios que envía los resultados a Security Hub.
AWS IoT Device DefenderLa auditoría envía las actualizaciones de búsqueda a Security Hub tanto para
los resúmenes de las comprobaciones de auditoría como para los hallazgos de la auditoría en cada tarea
de auditoría. Si todos los recursos que se encuentran en las comprobaciones de auditoría cumplen con
los requisitos o se cancela una tarea de auditoría, Audit actualiza los resúmenes de comprobaciones de
Security Hub a un estado de registro ARCHIVADO. Si un recurso se notificó como no conforme en una
comprobación de auditoría, pero se informó como tal en la última tarea de auditoría, Audit lo cambia a
compatible y también actualiza el hallazgo de Security Hub a un estado de registro ARCHIVADO.
AWS IoT Device DefenderDisabling envía los resultados de la infracción a Security Hub. Estos hallazgos
de infracción incluyen el aprendizaje automático (ML) y los comportamientos estadísticos y estáticos.
Para enviar los resultados a Security Hub,AWS IoT Device Defender utilice el AWSSecurity Finding Format
(ASFF). En ASFF, el campo Types proporciona el tipo de hallazgo. Los hallazgos de AWS IoT Device
Defender pueden tener los siguientes valores para Types.
Comportamientos inusuales
El tipo de búsqueda para los ID de cliente de MQTT y las comprobaciones compartidas de certificados
de dispositivos conflictivos, y el tipo de búsqueda para Detect.
Verificación de software y configuración y vulnerabilidades
1140
AWS IoT Core Guía para desarrolladores
Integración de Security Hub
AWS IoT Device DefenderDetect envía los resultados de las infracciones casi en tiempo real. Cuando una
infracción se activa o desactiva (lo que significa que la alarma se crea o se elimina), se crea o archiva
inmediatamente el hallazgo correspondiente de Security Hub.
AWS IoT Device DefenderLa auditoría también actualiza los resúmenes de las comprobaciones en
Security Hub. Si se encuentran recursos no conformes en una comprobación de auditoría o si la
comprobación falla, el estado del hallazgo de Security Hub pasa a estar activo. De lo contrario,AWS IoT
Device Defender Audit archiva el hallazgo en Security Hub.
AWS IoT Device DefenderDetect crea una detección de Security Hub cuando se produce una infracción
(por ejemplo, cuando hay una alarma). Esa conclusión se actualiza solo si se cumple uno de los criterios
siguientes:
• El hallazgo caducará pronto en Security Hub, por lo queAWS IoT Device Defender envía una
actualización para mantener el hallazgo actualizado. Los hallazgos se eliminan al cabo 90 días de la
última actualización o 90 días después de que se crearan si no hay actualizaciones. Para obtener más
información, consulte las cuotas de Security Hub en la Guía delAWS Security Hub usuario.
• La infracción correspondiente desactiva la alarma, por lo queAWS IoT Device Defender actualiza su
estado de búsqueda a ARCHIVADO.
El siguiente ejemplo muestra un hallazgo típico de Security Hub para un hallazgo de auditoría.
LaReportType entradaProductFields esAuditFinding.
{
"SchemaVersion": "2018-10-08",
"Id": "336757784525/IOT_POLICY/policyexample/1/IOT_POLICY_OVERLY_PERMISSIVE_CHECK/
ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS",
"ProductArn": "arn:aws:securityhub:us-west-2::product/aws/iot-device-defender-audit",
"ProductName": "IoT Device Defender - Audit",
"CompanyName": "AWS",
"Region": "us-west-2",
"GeneratorId": "1928b87ab338ee2f541f6fab8c41c4f5",
"AwsAccountId": "123456789012",
"Types": [
"Software and Configuration Check/Vulnerabilities"
],
"CreatedAt": "2022-11-06T22:11:40.941Z",
1141
AWS IoT Core Guía para desarrolladores
Integración de Security Hub
"UpdatedAt": "2022-11-06T22:11:40.941Z",
"Severity": {
"Label": "CRITICAL",
"Normalized": 90
},
"Title": "IOT_POLICY_OVERLY_PERMISSIVE_CHECK:
ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS",
"Description": "IOT_POLICY policyexample:1 is reported as non-compliant for
IOT_POLICY_OVERLY_PERMISSIVE_CHECK by Audit task 9f71b6e90cfb57d4ac671be3a4898e6a.
The non-compliant reason is Policy allows broad access to IoT data plane actions:
[iot:Connect].",
"SourceUrl": "https://us-west-2.console.aws.amazon.com/iot/home?region=us-west-2#/policy/
policyexample",
"ProductFields": {
"CheckName": "IOT_POLICY_OVERLY_PERMISSIVE_CHECK",
"TaskId": "9f71b6e90cfb57d4ac671be3a4898e6a",
"TaskType": "ON_DEMAND_AUDIT_TASK",
"PolicyName": "policyexample",
"IsSuppressed": "false",
"ReasonForNonComplianceCode": "ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS",
"ResourceType": "IOT_POLICY",
"FindingId": "1928b87ab338ee2f541f6fab8c41c4f5",
"PolicyVersionId": "1",
"ReportType": "AuditFinding",
"TaskStartTime": "1667772700554",
"aws/securityhub/FindingId": "arn:aws:securityhub:us-west-2::product/aws/iot-device-
defender-audit/336757784525/IOT_POLICY/policyexample/1/IOT_POLICY_OVERLY_PERMISSIVE_CHECK/
ALLOWS_BROAD_ACCESS_TO_IOT_DATA_PLANE_ACTIONS",
"aws/securityhub/ProductName": "IoT Device Defender - Audit",
"aws/securityhub/CompanyName": "AWS"
},
"Resources": [
{
"Type": "AwsIotPolicy",
"Id": "policyexample",
"Partition": "aws",
"Region": "us-west-2",
"Details": {
"Other": {
"PolicyVersionId": "1"
}
}
}
],
"WorkflowState": "NEW",
"Workflow": {
"Status": "NEW"
},
"RecordState": "ACTIVE",
"FindingProviderFields": {
"Severity": {
"Label": "CRITICAL"
},
"Types": [
"Software and Configuration Check/Vulnerabilities"
]
}
}
El siguiente ejemplo muestra una conclusión de Security Hub para un resumen de la comprobación de
auditoría. LaReportType entradaProductFields esCheckSummary.
1142
AWS IoT Core Guía para desarrolladores
Integración de Security Hub
{
"SchemaVersion": "2018-10-08",
"Id": "615243839755/SCHEDULED_AUDIT_TASK/daily_audit_schedule_checks/
DEVICE_CERTIFICATE_KEY_QUALITY_CHECK",
"ProductArn": "arn:aws:securityhub:us-east-1::product/aws/iot-device-defender-audit",
"ProductName": "IoT Device Defender - Audit",
"CompanyName": "AWS",
"Region": "us-east-1",
"GeneratorId": "f3021945485adf92487c273558fcaa51",
"AwsAccountId": "123456789012",
"Types": [
"Software and Configuration Check/Vulnerabilities/CVE"
],
"CreatedAt": "2022-10-18T14:20:13.933Z",
"UpdatedAt": "2022-10-18T14:20:13.933Z",
"Severity": {
"Label": "CRITICAL",
"Normalized": 90
},
"Title": "DEVICE_CERTIFICATE_KEY_QUALITY_CHECK Summary: Completed with 2 non-compliant
resources",
"Description": "Task f3021945485adf92487c273558fcaa51 of weekly scheduled Audit
daily_audit_schedule_checks completes. 2 non-cimpliant resources are found for
DEVICE_CERTIFICATE_KEY_QUALITY_CHECK out of 1000 resources in the account. The percentage
of non-compliant resources is 0.2%.",
"SourceUrl": "https://us-east-1.console.aws.amazon.com/iot/home?region=us-east-1#/dd/
audit/results/f3021945485adf92487c273558fcaa51/DEVICE_CERTIFICATE_KEY_QUALITY_CHECK",
"ProductFields": {
"TaskId": "f3021945485adf92487c273558fcaa51",
"TaskType": "SCHEDULED_AUDIT_TASK",
"ScheduledAuditName": "daily_audit_schedule_checks",
"CheckName": "DEVICE_CERTIFICATE_KEY_QUALITY_CHECK",
"ReportType": "CheckSummary",
"CheckRunStatus": "COMPLETED_NON_COMPLIANT",
"NonComopliantResourcesCount": "2",
"SuppressedNonCompliantResourcesCount": "1",
"TotalResourcesCount": "1000",
"aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/
iot-device-defender-audit/615243839755/SCHEDULED/daily_audit_schedule_checks/
DEVICE_CERTIFICATE_KEY_QUALITY_CHECK",
"aws/securityhub/ProductName": "IoT Device Defender - Audit",
"aws/securityhub/CompanyName": "AWS"
},
"Resources": [
{
"Type": "AwsIotAuditTask",
"Id": "f3021945485adf92487c273558fcaa51",
"Region": "us-east-1"
}
],
"WorkflowState": "NEW",
"Workflow": {
"Status": "NEW"
},
"RecordState": "ACTIVE",
"FindingProviderFields": {
"Severity": {
"Label": "CRITICAL"
},
"Types": [
"Software and Configuration Check/Vulnerabilities/CVE"
]
}
}
1143
AWS IoT Core Guía para desarrolladores
Integración de Security Hub
En el ejemplo siguiente se muestra una conclusión típica de Security Hub para una infracción deAWS IoT
Device Defender Detect Hub.
{
"SchemaVersion": "2018-10-08",
"Id": "e92a782593c6f5b1fc7cb6a443dc1a12",
"ProductArn": "arn:aws:securityhub:us-east-1::product/aws/iot-device-defender-detect",
"ProductName": "IoT Device Defender - Detect",
"CompanyName": "AWS",
"Region": "us-east-1",
"GeneratorId": "arn:aws:iot:us-east-1:123456789012:securityprofile/MySecurityProfile",
"AwsAccountId": "123456789012",
"Types": [
"Unusual Behaviors"
],
"CreatedAt": "2022-11-09T22:45:00Z",
"UpdatedAt": "2022-11-09T22:45:00Z",
"Severity": {
"Label": "MEDIUM",
"Normalized": 40
},
"Title": "Registered thing MyThing is in alarm for STATIC behavior MyBehavior.",
"Description": "Registered thing MyThing violates STATIC behavior MyBehavior of security
profile MySecurityProfile. Violation was triggered because the device did not conform to
aws:num-disconnects less-than 1.",
"SourceUrl": "https://us-east-1.console.aws.amazon.com/iot/home?region=us-east-1#/dd/
securityProfile/MySecurityProfile?tab=violations",
"ProductFields": {
"ComparisonOperator": "less-than",
"BehaviorName": "MyBehavior",
"ViolationId": "e92a782593c6f5b1fc7cb6a443dc1a12",
"ViolationStartTime": "1668033900000",
"SuppressAlerts": "false",
"ConsecutiveDatapointsToAlarm": "1",
"ConsecutiveDatapointsToClear": "1",
"DurationSeconds": "300",
"Count": "1",
"MetricName": "aws:num-disconnects",
"BehaviorCriteriaType": "STATIC",
"ThingName": "MyThing",
"SecurityProfileName": "MySecurityProfile",
"aws/securityhub/FindingId": "arn:aws:securityhub:us-east-1::product/aws/iot-device-
defender-detect/e92a782593c6f5b1fc7cb6a443dc1a12",
"aws/securityhub/ProductName": "IoT Device Defender - Detect",
"aws/securityhub/CompanyName": "AWS"
},
"Resources": [
{
"Type": "AwsIotRegisteredThing",
"Id": "MyThing",
"Region": "us-east-1",
"Details": {
"Other": {
"SourceUrl": "https://us-east-1.console.aws.amazon.com/iot/home?region=us-
east-1#/thing/MyThing?tab=violations",
"IsRegisteredThing": "true",
"ThingArn": "arn:aws:iot:us-east-1:123456789012:thing/MyThing"
}
}
}
],
"WorkflowState": "NEW",
"Workflow": {
"Status": "NEW"
1144
AWS IoT Core Guía para desarrolladores
Prevención del suplente confuso entre servicios
},
"RecordState": "ACTIVE",
"FindingProviderFields": {
"Severity": {
"Label": "MEDIUM"
},
"Types": [
"Unusual Behaviors"
]
}
}
Para obtener más información, consulte Desactivar y habilitar el flujo de hallazgos desde una integración
(Security Hub API,AWS CLI) en la Guía delAWS Security Hub usuario de.
Hay tres recursosAWS IoT Device Defenderaccesos suyos que pueden verse afectados por el confuso
problema de seguridad del adjunto, la ejecución de auditorías, el envío de notificaciones de SNS por
violaciones del perfil de seguridad y la ejecución de acciones de mitigación. Para cada una de estas
acciones, los valores deaws:SourceArndebe ser como sigue:
La forma más eficaz de protegerse contra el problema del suplente confuso es utilizar la clave de
contexto de condición global de aws:SourceArn con el ARN completo del recurso. Si no conoce el
ARN completo del recurso o si especifica varios recursos, utilice la clave de condición de contexto
global aws:SourceArn con comodines (*) para las partes desconocidas del ARN. Por ejemplo,
arn:aws:servicename:*:123456789012:*.
1145
AWS IoT Core Guía para desarrolladores
Prácticas recomendadas de seguridad
para agentes de dispositivos
El siguiente ejemplo muestra cómo se pueden utilizar las claves contextuales de condición global
aws:SourceArn y aws:SourceAccount en AWS IoT Device Defender para evitar el problema del
adjunto confundido.
{
"Version": "2012-10-17",
"Statement": {
"Sid": "ConfusedDeputyPreventionExamplePolicy",
"Effect": "Allow",
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:iot:*:123456789012::*"
},
"StringEquals": {
"aws:SourceAccount": "123456789012:"
}
}
}
}
Al proceso del agente se debe otorgar solo los permisos mínimos necesarios para realizar sus tareas.
Mecanismos básicos
• El agente debe ejecutarse como un usuario no raíz.
• El agente se debe ejecutar como un usuario dedicado, en su propio grupo.
• Al usuario/grupo se le deben otorgar permisos de solo lectura sobre los recursos necesarios para
recopilar y transmitir métricas.
• Ejemplo: solo lectura en /proc /sys para el agente de muestra.
• Para ver un ejemplo de cómo configurar un proceso para que se ejecute con permisos reducidos,
consulte las instrucciones de configuración que se incluyen enAgente de muestra de Python.
Hay una serie de mecanismos Linux conocidos que pueden ayudarle a restringir o aislar aún más el
proceso de su agente:
Mecanismos avanzados
• CGroups
• SELinux
• Chroot
• Espacios de nombres Linux
Resiliencia operativa
Un proceso de agente debe ser resiliente a errores y excepciones operativas inesperados y no debe
bloquearse ni salir de forma permanente. El código debe manejar con soltura excepciones y, como
1146
AWS IoT Core Guía para desarrolladores
Prácticas recomendadas de seguridad
para agentes de dispositivos
Un agente debe usar el menor número posible de dependencias (es decir, bibliotecas de terceros)
en su implementación. Si el uso de una biblioteca se justifica debido a la complejidad de una tarea
(por ejemplo, Transport Layer Security), use solo dependencias bien mantenidas y establezca un
mecanismo para mantenerlas actualizadas. Si las dependencias agregadas contienen funcionalidades
que el agente no usa y que están activas de manera predeterminada (por ejemplo, abrir puertos,
sockets de dominio), desactívelas en su código o por medio de los archivos de configuración de la
biblioteca.
Aislamiento de procesos
Un proceso de agente solo debe contener la funcionalidad requerida para realizar la recopilación y la
transmisión de métricas del dispositivo. No debe aprovecharse de otros procesos del sistema como
un contenedor ni implementar funcionalidad para otros casos de uso fuera de su ámbito. Además, el
proceso del agente debe abstenerse de crear canales de comunicación de entrada como puertos de
socket de dominio y de servicio de red que permitirían que procesos locales o remotos interfiriesen en
su funcionamiento e influyesen en su integridad y aislamiento.
Sigilo
El nombre de un proceso de agente no debe contener palabras clave como seguridad, monitorización
o auditoría que indiquen su finalidad y valor de seguridad. Nombres en clave genéricos o aleatorios
yunique-per-devicese prefieren los nombres de los procesos. Se debe seguir el mismo principio al
asignar nombre al directorio en el que residen los binarios del agente y los nombres y valores de los
argumentos del proceso.
Información mínima compartida
Ningún artefacto de agente implementado en los dispositivos debe contener información confidencial
como credenciales con privilegios, depuración ni código muerto, o comentarios insertados o archivos
de documentación que revelen detalles sobre el procesamiento del lado del servidor de métricas
recopiladas por el agente u otros detalles sobre sistemas backend.
Transport Layer Security
Para establecer canales seguros de TLS para la transmisión de datos, un agente debe hacer cumplir
todas las validaciones del lado del cliente, como la validación de certificados y nombres de dominio en
el nivel de la aplicación, si no están habilitadas de manera predeterminada. Además, un agente debe
usar un almacén de certificados raíz que contenga entidades de confianza y no contenga certificados
que pertenezcan a emisores de certificados atacados.
Implementación segura
1147
AWS IoT Core Guía para desarrolladores
Asesor de dispositivos
Asesor de dispositivoses una capacidad de prueba totalmente gestionada y basada en la nube para
validar los dispositivos de IoT durante el desarrollo del software del dispositivo. Device Advisor proporciona
pruebas prediseñadas que puede utilizar para validar los dispositivos de IoT y lograr una conectividad
confiable y segura conAWS IoT Core, antes de implementar los dispositivos en producción. Las pruebas
prediseñadas de Device Advisor le ayudan a validar el software de su dispositivo con respecto a las
mejores prácticas de uso deTLS,MATT,Sombra del dispositivo, yEmpleos de IoT. También puede
descargar los informes de calificación firmados para enviarlos alAWSRed de socios para que su dispositivo
califique para laAWSCatálogo de dispositivos asociadossin necesidad de enviar el dispositivo y esperar a
que lo prueben.
Note
Device Advisor es compatible con las regiones us-east-1, us-west-2, ap-northeast-1 y eu-west-1.
Device Advisor es compatible con dispositivos y clientes que utilizan el MQTT y el MQTT
enWebSocketProtocolos seguros (WSS) para publicar mensajes y suscribirse a ellos. Todos los
protocolos admiten IPv4 e IPv6.
Device Advisor admite certificados de servidor RSA.
Cualquier dispositivo que se haya creado para conectarse aAWS IoT Corepuede aprovechar Device
Advisor. Puede acceder a Device Advisor desdeAWS IoTconsola, o mediante elAWS CLIo SDK. Cuando
esté listo para probar el dispositivo, regístrelo enAWS IoT Corey configure el software del dispositivo con
el terminal de Device Advisor. A continuación, elija las pruebas prediseñadas, configúrelas, ejecútelas
en su dispositivo y obtenga los resultados de las pruebas junto con registros detallados o un informe de
calificación.
Device Advisor es un punto final de prueba en elAWSnube. Puede probar sus dispositivos configurándolos
para que se conecten al punto final de prueba proporcionado por el Device Advisor. Una vez configurado
un dispositivo para conectarse al punto final de prueba, puede visitar la consola del Device Advisor o
utilizar laAWSSDK para elegir las pruebas que quieres ejecutar en tus dispositivos. Luego, Device Advisor
administra todo el ciclo de vida de una prueba, incluido el aprovisionamiento de recursos, la programación
del proceso de prueba, la administración de la máquina de estados, el registro del comportamiento del
dispositivo, el registro de los resultados y el suministro de los resultados finales en forma de informe de
prueba.
Protocolos TLS
El protocolo Transport Layer Security (TLS) se utiliza para cifrar datos confidenciales en redes inseguras
como Internet. El protocolo TLS es el sucesor del protocolo Secure Sockets Layer (SSL).
1148
AWS IoT Core Guía para desarrolladores
Configuración
Configuración
Antes de utilizar Device Advisor por primera vez, realice las siguientes tareas:
Puede crear rápidamente el rol de dispositivo con la consola de Device Advisor. Para obtener
información sobre cómo configurar su función de dispositivo con la consola de Device Advisor,
consulteCómo empezar a utilizar el Device Advisor en la consola.
1. Ir a laAWS Identity and Access Managementconsolae inicie sesión enCuenta de AWSque utiliza para
las pruebas de Device Advisor.
2. En el panel de navegación de la izquierda, seleccionaPolíticas.
3. Elija Create Policy (Crear política).
4. BajoCrear política, haga lo siguiente:
a. ParaServicio, eligeIoT.
b. BajoAcciones, realice una de las siguientes acciones:
• (Recomendado) Seleccione las acciones en función de la política adjunta al producto o
certificado de IoT que creó en la sección anterior.
1149
AWS IoT Core Guía para desarrolladores
Cree un rol de IAM para usarlo como rol de dispositivo
• Connect
• Publish
• Subscribe
• Receive
• RetainPublish
c. BajoRecursos, restringen el cliente, el tema y los recursos del tema. Restringir estos recursos es
una práctica recomendada de seguridad. Para restringir los recursos, haga lo siguiente:
1150
AWS IoT Core Guía para desarrolladores
Cree una política gestionada a medida para
que un usuario de IAM utilice Device Advisor
Important
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAwsIoTCoreDeviceAdvisor",
"Effect": "Allow",
"Principal": {
"Service": "iotdeviceadvisor.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "111122223333"
},
"ArnLike": {
"aws:SourceArn":
"arn:aws:iotdeviceadvisor:*:111122223333:suitedefinition/*"
}
}
}
]
}
1151
AWS IoT Core Guía para desarrolladores
Crear un usuario de IAM para usar Device Advisor
Le recomendamos que cree un usuario de IAM para usarlo cuando ejecute las pruebas de Device
Advisor. Ejecutar las pruebas de Device Advisor desde un usuario administrador puede suponer
riesgos de seguridad y no se recomienda.
Para conceder acceso programático a los usuarios, elija una de las siguientes opciones.
1152
AWS IoT Core Guía para desarrolladores
Configuración del dispositivo
Cree un conjunto de permisos. Siga las instrucciones de Create a permission set (Creación de un
conjunto de permisos) en la Guía del usuario de AWS IAM Identity Center.
• Usuarios administrados en IAM a través de un proveedor de identidades:
Cree un rol para la federación de identidades. Siga las instrucciones de Creación de un rol para un
proveedor de identidad de terceros (federación) en la Guía del usuario de IAM.
• Usuarios de IAM:
• Cree un rol que el usuario pueda asumir. Siga las instrucciones de Creación de un rol para un
usuario de IAM en la Guía del usuario de IAM.
• (No recomendado) Adjunte una política directamente a un usuario o agregue un usuario a un
grupo de usuarios. Siga las instrucciones de Adición de permisos a un usuario (consola) de la
Guía del usuario de IAM.
8. Introduzca el nombre de la política de administración personalizada que creó en el cuadro de
búsqueda. A continuación, active la casilla de verificación paraNombre de la política.
9. Elija Next: Tags (Siguiente: etiquetas).
10. Elija Next: Review.
11. Seleccione la opción Create user.
12. Elija Cerrar.
Device Advisor permite la conexión TLS cuando se realiza una prueba en elRunningestado. Niega la
conexión TLS antes y después de cada ejecución de prueba. Por este motivo, le recomendamos que utilice
el mecanismo de reintento de Device Connect para disfrutar de una experiencia de prueba totalmente
automatizada con Device Advisor. Puede ejecutar conjuntos de pruebas que incluyan más de un caso
de prueba, como TLS connect, MQTT connect y MQTT publish. Si realizas varios casos de prueba, te
recomendamos que tu dispositivo intente conectarse a nuestro terminal de prueba cada cinco segundos. A
continuación, puede automatizar la ejecución de varios casos de prueba en secuencia.
1153
AWS IoT Core Guía para desarrolladores
Introducción a Device Advisor en la consola
Note
Para preparar el software del dispositivo para las pruebas, te recomendamos que utilices un SDK
que pueda conectarse aAWS IoT Core. A continuación, debe actualizar el SDK con el punto de
conexión de prueba de Device Advisor proporcionado para suCuenta de AWS.
Device Advisor admite dos tipos de puntos de conexión: puntos de conexión a nivel de cuenta y a nivel de
dispositivo. Elija el punto final que mejor se adapte a su caso de uso. Para ejecutar simultáneamente varios
conjuntos de pruebas para diferentes dispositivos, utilice un punto final a nivel de dispositivo.
o bien
Para ejecutar un conjunto de pruebas a la vez, elija un punto de conexión a nivel de cuenta. Ejecute el
siguiente comando para obtener el punto final a nivel de cuenta:
Para obtener más información sobre el uso de Device Advisor, consulteflujo de trabajo de Device
Advisor (p. 1161)yFlujo de trabajo de consola detallado de Device Advisor (p. 1165).
Para completar este tutorial, siga los pasos descritos enConfiguración (p. 1149).
Note
1154
AWS IoT Core Guía para desarrolladores
Introducción a Device Advisor en la consola
Introducción
2. ElIntroducción a Device Advisorla página proporciona una descripción general de los pasos
necesarios para crear un conjunto de pruebas y ejecutar pruebas en su dispositivo. También puede
encontrar el punto final de prueba de Device Advisor para su cuenta aquí. Debe configurar el firmware
o el software del dispositivo utilizado para la prueba para conectarse a este punto final de prueba.
Para completar este tutorial, primero debescrear una cosa y certificar. Después de revisar la
información deCómo funciona, eligeSiguiente.
1155
AWS IoT Core Guía para desarrolladores
Introducción a Device Advisor en la consola
Debe proporcionar las propiedades del conjunto de pruebas al crear el conjunto de pruebas. Puede
configurar las siguientes propiedades de nivel de suite:
5. (Opcional) Para actualizar la configuración del grupo del conjunto de pruebas, elijaEditarbotón situado
junto al nombre del grupo de prueba.
1156
AWS IoT Core Guía para desarrolladores
Introducción a Device Advisor en la consola
6. (Opcional) Para actualizar la configuración del caso de prueba de un caso de prueba, elija
laEditarbotón situado junto al nombre del caso de prueba.
7. (Opcional) Para añadir más grupos de pruebas al conjunto de pruebas, elijaAñadir grupo de pruebay,
a continuación, siga las instrucciones del paso 5.
8. (Opcional) Para añadir más casos de prueba, arrastre los casos de prueba hasta elCasos de
pruebapertenezca a cualquiera de sus grupos de prueba.
1157
AWS IoT Core Guía para desarrolladores
Introducción a Device Advisor en la consola
9. Puede cambiar el orden de los grupos de prueba y los casos de prueba. Para realizar cambios,
arrastre los casos de prueba listados hacia arriba o hacia abajo en la lista. Device Advisor ejecuta las
pruebas en el orden en que las ha enumerado.
11. Puede configurar una función de dispositivo que Device Advisor utilice para realizarAWS IoTAcciones
de MQTT en nombre de su dispositivo de prueba. ParaConexión MQTTsolo caso de prueba,
elConectarla acción se selecciona automáticamente. Esto se debe a que la función de dispositivo
requiere este permiso para ejecutar el conjunto de pruebas. Para otros casos de prueba, se
seleccionan las acciones correspondientes.
Proporcione los valores de los recursos para cada una de las acciones seleccionadas. Por ejemplo,
para elConectaracción, proporcione el ID de cliente que utiliza su dispositivo para conectarse al punto
final de Device Advisor. Puede proporcionar varios valores separados por comas y valores de prefijo
con un carácter comodín (*). Por ejemplo, para conceder permiso para publicar sobre cualquier tema
que comience porMyTopic, introduceMyTopic*como valor del recurso.
1158
AWS IoT Core Guía para desarrolladores
Introducción a Device Advisor en la consola
Configure el rol de su dispositivo con una de las dos opciones proporcionadas y, a continuación,
elijaSiguiente.
12. En elPunto final de la pruebasección, seleccione el punto final que mejor se adapte a su caso
de uso. Para ejecutar varios conjuntos de pruebas simultáneamente con el mismoCuenta de
AWS, seleccionePunto final a nivel de dispositivo. Para ejecutar un conjunto de pruebas a la vez,
seleccionePunto final a nivel de cuenta.
13. Paso 4muestra una descripción general del dispositivo de prueba, el extremo de prueba, el conjunto
de pruebas y el rol del dispositivo de prueba seleccionados configurados. Para realizar cambios en
una sección, elija laEditarbotón de la sección que desea editar. Una vez que haya confirmado la
configuración de prueba, elijaCorrepara crear el conjunto de pruebas y ejecutar las pruebas.
Note
Para obtener los mejores resultados, puede conectar el dispositivo de prueba seleccionado al
extremo de prueba de Device Advisor antes de iniciar la ejecución del conjunto de pruebas.
Le recomendamos que cree un mecanismo para que su dispositivo intente conectarse a
nuestro punto de conexión de prueba cada cinco segundos durante un máximo de uno o dos
minutos.
1159
AWS IoT Core Guía para desarrolladores
Introducción a Device Advisor en la consola
1160
AWS IoT Core Guía para desarrolladores
flujo de trabajo de Device Advisor
Requisitos previos
Antes de comenzar este tutorial, complete los pasos que se describen enConfiguración (p. 1149).
Sintaxis de rootGroup
Un grupo raíz es una cadena JSON que especifica los casos de prueba que se deben incluir en el conjunto
de pruebas. También especifica las configuraciones necesarias para esos casos de prueba. Utilice el
grupo raíz para estructurar y ordenar su conjunto de pruebas en función de sus necesidades. La jerarquía
de un conjunto de pruebas es:
Un conjunto de pruebas debe tener al menos un grupo de prueba y cada grupo de prueba debe tener al
menos un caso de prueba. Device Advisor ejecuta las pruebas en el orden en que usted define los grupos
de prueba y los casos de prueba.
{
"configuration": { // for all tests in the test suite
"": ""
}
"tests": [{
"name": ""
"configuration": { // for all sub-groups in this test group
"": ""
},
"tests": [{
"name": ""
"configuration": { // for all test cases in this test group
"": ""
},
"test": {
"id": ""
1161
AWS IoT Core Guía para desarrolladores
Cree una definición de conjunto de pruebas
"version": ""
}
}]
}]
}
Para obtener información sobre cómo utilizar el"id"y"version"campos para cada caso de prueba
(testbloque), consulteCasos de prueba de Device Advisor (p. 1184). Esta sección también contiene
información sobre losconfigurationajustes.
El siguiente bloque es un ejemplo de configuración de grupo raíz. Esta configuración especifica laEstuche
MQTT Connect HappyyReintentos de retroceso exponencial de MQTT Connectcasos de prueba, junto con
descripciones de los campos de configuración.
{
"configuration": {}, // Suite-level configuration
"tests": [ // Group definitions should be provided here
{
"name": "My_MQTT_Connect_Group", // Group definition name
"configuration": {} // Group definition-level configuration,
"tests": [ // Test case definitions should be provided here
{
"name": "My_MQTT_Connect_Happy_Case", // Test case definition name
"configuration": {
"EXECUTION_TIMEOUT": 300 // Test case definition-level
configuration, in seconds
},
"test": {
"id": "MQTT_Connect", // test case id
"version": "0.0.0" // test case version
}
},
{
"name": "My_MQTT_Connect_Jitter_Backoff_Retries", // Test case definition name
"configuration": {
"EXECUTION_TIMEOUT": 600 // Test case definition-level
configuration, in seconds
},
"test": {
"id": "MQTT_Connect_Jitter_Backoff_Retries", // test case id
"version": "0.0.0" // test case version
}
}]
}]
}
Debe proporcionar la configuración del grupo raíz al crear la definición del conjunto de pruebas. Guarde
elsuiteDefinitionIdque se devuelve en el objeto de respuesta. Puede utilizar este identificador para
recuperar la información de definición del conjunto de pruebas y ejecutar el conjunto de pruebas.
response = iotDeviceAdvisorClient.createSuiteDefinition(
CreateSuiteDefinitionRequest.builder()
.suiteDefinitionConfiguration(SuiteDefinitionConfiguration.builder()
1162
AWS IoT Core Guía para desarrolladores
Obtenga una definición del conjunto de pruebas
.suiteDefinitionName("your-suite-definition-name")
.devices(
DeviceUnderTest.builder()
.thingArn("your-test-device-thing-arn")
.certificateArn("your-test-device-certificate-arn")
.deviceRoleArn("your-device-role-arn") //if using SigV4 for MQTT
over WebSocket
.build()
)
.rootGroup("your-root-group-configuration")
.devicePermissionRoleArn("your-device-permission-role-arn")
.protocol("MqttV3_1_1 || MqttV5 || MqttV3_1_1_OverWebSocket ||
MqttV5_OverWebSocket")
.build()
)
.build()
)
response = iotDeviceAdvisorClient.GetSuiteDefinition(
GetSuiteDefinitionRequest.builder()
.suiteDefinitionId("your-suite-definition-id")
.build()
)
Ejemplo de SDK:
response = iotDeviceAdvisorClient.getEndpoint(GetEndpointRequest.builder()
.certificateArn("your-test-device-certificate-arn")
.thingArn("your-test-device-thing-arn")
.deviceRoleArn("your-device-role-arn") //if using SigV4 for MQTT over WebSocket
.build())
1163
AWS IoT Core Guía para desarrolladores
Ejecute un conjunto de pruebas
Para.parallelRun(), utilizartruesi usa un punto final a nivel de dispositivo para ejecutar varios
conjuntos de pruebas en paralelo utilizando unoCuenta de AWS.
Ejemplo de SDK:
response = iotDeviceAdvisorClient.startSuiteRun(StartSuiteRunRequest.builder()
.suiteDefinitionId("your-suite-definition-id")
.suiteRunConfiguration(SuiteRunConfiguration.builder()
.primaryDevice(DeviceUnderTest.builder()
.certificateArn("your-test-device-certificate-arn")
.thingArn("your-test-device-thing-arn")
.deviceRoleArn("your-device-role-arn") //if using SigV4 for MQTT over WebSocket
.build())
.parallelRun(true | false)
.build())
.build())
Guarde elsuiteRunIdde la respuesta. Lo usará para recuperar los resultados de la ejecución de este
conjunto de pruebas.
Ejemplo de SDK:
response = iotDeviceAdvisorClient.GetSuiteRun(
GetSuiteRunRequest.builder()
.suiteDefinitionId("your-suite-definition-id")
.suiteRunId("your-suite-run-id")
.build())
Ejemplo de SDK:
1164
AWS IoT Core Guía para desarrolladores
Obtenga un informe de calificación para ejecutar
satisfactoriamente el conjunto de pruebas de calificación
response = iotDeviceAdvisorClient.StopSuiteRun(
StopSuiteRun.builder()
.suiteDefinitionId("your-suite-definition-id")
.suiteRunId("your-suite-run-id")
.build())
Ejemplo de SDK:
response = iotDeviceAdvisorClient.getSuiteRunReport(
GetSuiteRunReportRequest.builder()
.suiteDefinitionId("your-suite-definition-id")
.suiteRunId("your-suite-run-id")
.build()
)
Tutoriales
• Requisitos previos (p. 1165)
• Cree una definición de conjunto de pruebas (p. 1166)
• Iniciar la ejecución de un conjunto de pruebas (p. 1171)
• Detener la ejecución de un conjunto de pruebas (opcional) (p. 1172)
• Ver detalles y registros de ejecución del conjunto de pruebas (p. 1174)
• Descarga unAWS IoTinforme de calificación (p. 1175)
Requisitos previos
Para completar este tutorial, necesitascrear una cosa y certificar.
1165
AWS IoT Core Guía para desarrolladores
Cree una definición de conjunto de pruebas
1166
AWS IoT Core Guía para desarrolladores
Cree una definición de conjunto de pruebas
3. EligePropiedades del conjunto de pruebas. Debe crear las propiedades del conjunto de pruebas al
crear el conjunto de pruebas.
• Nombre del conjunto de pruebas: Puede crear la suite con un nombre personalizado.
• Tiempo de espera(opcional): el tiempo de espera en segundos para cada caso de prueba del
conjunto de pruebas actual. Si no especificas un valor de tiempo de espera, se utilizará el valor
predeterminado.
• Etiquetas(opcional): añada etiquetas al conjunto de pruebas.
1167
AWS IoT Core Guía para desarrolladores
Cree una definición de conjunto de pruebas
1168
AWS IoT Core Guía para desarrolladores
Cree una definición de conjunto de pruebas
6. Para modificar la configuración a nivel de caso de prueba para el caso de prueba que ha agregado
al grupo de prueba, elijaEditar. A continuación, introduzca unNombrepara asignar un nombre
personalizado al grupo.
Para añadir más grupos de pruebas al conjunto de pruebas, elijaAñadir grupo de prueba.
Siga los pasos anteriores para crear y configurar más grupos de prueba o para añadir más
casos de prueba a uno o más grupos de prueba. Los grupos de prueba y los casos de prueba
se pueden reordenar seleccionando y arrastrando un caso de prueba a la posición deseada.
Device Advisor ejecuta las pruebas en el orden en que usted define los grupos de prueba y
los casos de prueba.
7. Elija Siguiente.
8. EnPaso 3, configure una función de dispositivo que Device Advisor utilizará para realizarAWS
IoTAcciones de MQTT en nombre de su dispositivo de prueba.
1169
AWS IoT Core Guía para desarrolladores
Cree una definición de conjunto de pruebas
Configure el rol de su dispositivo mediante una de las dos opciones proporcionadas y elijaSiguiente.
9. EnPaso 4, asegúrese de que la configuración proporcionada en cada uno de los pasos sea correcta.
Para editar la configuración proporcionada para un paso en particular, elijaEditarpara el paso
correspondiente.
Si no se pudo crear el conjunto de pruebas, asegúrese de que el conjunto de pruebas, los grupos de
pruebas, los casos de prueba y la función del dispositivo se hayan configurado de acuerdo con las
instrucciones anteriores.
1170
AWS IoT Core Guía para desarrolladores
Iniciar la ejecución de un conjunto de pruebas
La página de detalles del conjunto de pruebas muestra toda la información relacionada con el conjunto
de pruebas.
3. EligeAcciones, entoncesEjecute el conjunto de pruebas.
4. BajoEjecute la configuración, tendrás que seleccionar unAWS IoTcosa o certificado para probar
con Device Advisor. Si no tienes ningún objeto o certificado existente, primerocrearAWS IoT
Corerecursos (p. 1149).
EnPunto final de la pruebasección, seleccione el punto final que mejor se adapte a su caso. Si planea
ejecutar varios conjuntos de pruebas simultáneamente utilizando el mismoAWScuenta en el futuro,
seleccionaPunto final a nivel de dispositivo. De lo contrario, si planea ejecutar solo un conjunto de
pruebas a la vez, seleccionePunto final a nivel de cuenta.
Configure su dispositivo de prueba con el punto final de prueba del Device Advisor seleccionado.
1171
AWS IoT Core Guía para desarrolladores
Detener la ejecución de un conjunto de pruebas (opcional)
5. EligeIr a los resultadosen el banner superior para ver los detalles de la prueba.
1172
AWS IoT Core Guía para desarrolladores
Detener la ejecución de un conjunto de pruebas (opcional)
1173
AWS IoT Core Guía para desarrolladores
Ver detalles y registros de ejecución del conjunto de pruebas
3. Para acceder alCloudWatchregistros para la ejecución del conjunto de pruebas, elijaRegistro del
conjunto de pruebas.
1174
AWS IoT Core Guía para desarrolladores
Descarga unAWS IoTinforme de calificación
1175
AWS IoT Core Guía para desarrolladores
Flujo de trabajo de consola de pruebas de larga duración
4. (Opcional) Introduzca el tiempo máximo que Device Advisor debe esperar hasta que se completen las
pruebas básicas. Seleccione Save.
1176
AWS IoT Core Guía para desarrolladores
Flujo de trabajo de consola de pruebas de larga duración
6. En este paso,Crear un nuevo roloSeleccione un rol existente. Para obtener más información, consulte
Cree un rol de IAM para usarlo como rol de dispositivo (p. 1149).
1177
AWS IoT Core Guía para desarrolladores
Flujo de trabajo de consola de pruebas de larga duración
7. Revise todas las configuraciones creadas hasta este paso y seleccioneCrear conjunto de pruebas.
1178
AWS IoT Core Guía para desarrolladores
Flujo de trabajo de consola de pruebas de larga duración
1179
AWS IoT Core Guía para desarrolladores
Flujo de trabajo de consola de pruebas de larga duración
11. Para ver los resultados de la ejecución del conjunto de pruebas, seleccioneEjecuciones y resultados
de las pruebasen el panel de navegación izquierdo. Elija el conjunto de pruebas que se ejecutó para
ver los detalles de los resultados.
12. El paso anterior abre la página de resumen de la prueba. Todos los detalles de la ejecución de la
prueba se muestran en esta página. Cuando la consola solicite iniciar la conexión del dispositivo,
conecte el dispositivo al punto final proporcionado. El progreso de las pruebas se ve en esta página.
1180
AWS IoT Core Guía para desarrolladores
Terminales de VPC de Device Advisor (AWS PrivateLink)
13. La prueba de larga duración proporciona unaResumen del registro de pruebasen el panel lateral,
que muestra todos los eventos importantes que se producen entre el dispositivo y el corredor casi en
tiempo real. Para ver registros más detallados, haga clic enRegistro de casos de prueba.
1181
AWS IoT Core Guía para desarrolladores
Consideraciones para los puntos de conexión
de VPC de AWS IoT Core Device Advisor
validar el software de su dispositivo con respecto a las mejores prácticas de uso deTLS,MATT,Sombra del
dispositivo, yAWS IoTTrabajos.
AWS PrivateLinkalimenta los puntos finales de la interfaz que se utilizan con sus dispositivos de IoT.
Este servicio le ayuda a acceder aAWS IoT Core Device Advisorpruebe el terminal de forma privada sin
una puerta de enlace a Internet, un dispositivo NAT, una conexión VPN oAWS Direct Connectconexión.
Las instancias de tu VPC que envían paquetes TCP y MQTT no necesitan direcciones IP públicas para
comunicarse conAWS IoT Core Device Advisorpuntos finales de prueba. Tráfico entre tu VPC yAWS
IoT Core Device Advisor no se vaNube de AWS. Cualquier comunicación de TLS y MQTT entre los
dispositivos de IoT y los casos de prueba de Device Advisor se mantiene dentro de los recursos de
suCuenta de AWS.
Cada punto de enlace de la interfaz está representado por una o más interfaces de redes elásticas en las
subredes.
Para obtener más información sobre el uso de los puntos de conexión de VPC de la interfaz,
consulteTerminales de interfaz VPC (AWS PrivateLink)en elGuía del usuario de Amazon VPC.
• AWS IoT Core Device Advisoractualmente permite realizar llamadas al punto final de prueba de Device
Advisor (plano de datos) desde su VPC. Un intermediario de mensajes utiliza las comunicaciones del
plano de datos para enviar y recibir datos. Lo hace con la ayuda de paquetes TLS y MQTT. Terminales
de VPC paraAWS IoT Core Device Advisorconecta tuAWS IoTpuntos finales de prueba de dispositivo a
Device Advisor. Acciones de la API del plano de controlno son utilizadas por este extremo de VPC. Para
crear o ejecutar un conjunto de pruebas u otras API del plano de control, utilice la consola, unAWSSDK,
oAWSInterfaz de línea de comandos a través de Internet pública.
• Los siguientesRegiones de AWSadmite puntos de conexión de VPC paraAWS IoT Core Device Advisor:
• Este de EE. UU. (Norte de Virginia)
• Oeste de EE. UU. (Oregón)
• Asia-Pacífico (Tokio)
• Europa (Irlanda)
• Device Advisor admite MQTT con certificados de cliente X.509 y certificados de servidor RSA.
• Políticas de terminales de VPCno son compatibles en este momento.
• Compruebe el punto final de VPCprerrequisitospara obtener instrucciones sobre cómocrear recursosque
conectan puntos finales de VPC. Debe crear una VPC y subredes privadas para utilizarlasAWS IoT Core
Device AdvisorTerminales de VPC.
• Hay cuotas en los recursos de AWS PrivateLink. Para obtener más información, consulte AWS
PrivateLink Cupos.
• Los puntos finales de VPC solo admiten tráfico IPv4.
1182
AWS IoT Core Guía para desarrolladores
Controlar el acceso aAWS IoT Core Device
Advisorsobre puntos finales de VPC
Tenga en cuenta que puede crear un punto final de VPC paraAWS IoT Coremediante el siguiente nombre
de servicio:
• com.amazonaws.región.deviceadvisor.iot
De forma predeterminada, el DNS privado está activado para el endpoint. Esto garantiza que el uso del
punto final de prueba predeterminado permanezca dentro de las subredes privadas. Para obtener tu
punto de conexión a nivel de cuenta o dispositivo, usa la consola,AWS CLIo unAWSSDK. Por ejemplo, si
corresget-endpointdentro de una subred pública o en la Internet pública, puede obtener su punto final y
usarlo para conectarse a Device Advisor. Para obtener más información, consulte Acceso a un servicio a
través de un punto de conexión de interfaz en la Guía del usuario de Amazon VPC.
Para conectar los clientes de MQTT a las interfaces de punto final de la VPC,AWS PrivateLinkel servicio
crea registros DNS en una zona alojada privada adjunta a tu VPC. Estos registros DNS dirigen laAWS
IoTsolicitudes del dispositivo al punto final de la VPC.
• SourceVpc
• SourceVpce
• URL de origen de VPC
Note
AWS IoT Core Device Advisorno admitePolíticas de terminales de VPCen este momento.
La siguiente política otorga permiso para conectarse aAWS IoT Core Device Advisorutilizando un ID de
cliente que coincida con el nombre de la cosa. También publica en cualquier tema con el prefijo del nombre
de la cosa. La política depende de que el dispositivo se conecte a un extremo de VPC con un ID de punto
de enlace de VPC determinado. Esta política niega los intentos de conexión a tu públicoAWS IoT Core
Device Advisorpunto final de la prueba.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Connect"
],
1183
AWS IoT Core Guía para desarrolladores
Casos de prueba de Device Advisor
"Resource": [
"arn:aws:iot:us-east-1:123456789012:client/
${iot:Connection.Thing.ThingName}"
],
"Condition": {
"StringEquals": {
"aws:SourceVpce": "vpce-1a2b3c4d"
}
}
},
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": [
"arn:aws:iot:us-east-1:123456789012:topic/
${iot:Connection.Thing.ThingName}/*"
]
}
]
}
1184
AWS IoT Core Guía para desarrolladores
TLS
• TLS recibe fragmentos de tamaño máximo (p. 1186)(«TLS recibe fragmentos de tamaño máximo»)
• Certificado de servidor TLS caducado (p. 1189)(«Certificado de servidor caducado»)
• Certificado TLS de servidor de gran tamaño (p. 1187)(«Certificado TLS de servidor de gran tamaño»)
• Conexión MQTT (p. 1189)(«El dispositivo envía CONNECT aAWS IoT Core(Caso feliz)»)
• Suscríbete a MQTT (p. 1195)(«Puede suscribirse (Happy Case)»)
• Publicación en MQTT (p. 1193)(«QoS0 (caso feliz)»)
• Reintentos de MQTT Connect Jitter (p. 1190)(«La conexión del dispositivo se reintenta con un retroceso
de fluctuación: no hay respuesta de CONNACK»)
TLS
Utilice estas pruebas para determinar si el protocolo de seguridad de la capa de transporte (TLS) entre sus
dispositivos yAWS IoTes seguro.
Note
Camino feliz
Conexión TLS
Valida si el dispositivo bajo prueba puede completar el protocolo de enlace de TLS aAWS IoT. Esta
prueba no valida la implementación de MQTT del dispositivo cliente.
"tests":[
{
"name":"my_tls_connect_test",
"configuration": {
// optional:
"EXECUTION_TIMEOUT":"300", //in seconds
},
"test":{
"id":"TLS_Connect",
"version":"0.0.0"
}
}
]
1185
AWS IoT Core Guía para desarrolladores
TLS
Este caso de prueba valida que el dispositivo puede recibir y procesar fragmentos de TLS de tamaño
máximo. El dispositivo de prueba debe suscribirse a un tema preconfigurado con QoS 1 para recibir
una carga útil grande. Puede personalizar la carga útil con la configuración${payload}.
"tests":[
{
"name":"TLS Receive Maximum Size Fragments",
"configuration": {
// optional:
"EXECUTION_TIMEOUT":"300", //in seconds
"PAYLOAD_FORMAT":"{"message":"${payload}"}", // A string with a placeholder
${payload}, or leave it empty to receive a plain string.
"TRIGGER_TOPIC": "test_1" // A topic to which a device will subscribe, and to
which a test case will publish a large payload.
},
"test":{
"id":"TLS_Receive_Maximum_Size_Fragments",
"version":"0.0.0"
}
}
]
Conjuntos de cifrado
Soporte de dispositivos TLS paraAWS IoTsuites de cifrado recomendadas
Valida que los conjuntos de cifrado del mensaje de saludo del cliente TLS del dispositivo bajo prueba
contengan lo recomendadoAWS IoTsuites de cifrado (p. 402). Proporciona información adicional sobre
los conjuntos de cifrado compatibles con el dispositivo.
"tests":[
{
"name":"my_tls_support_aws_iot_cipher_suites_test",
"configuration": {
// optional:
"EXECUTION_TIMEOUT":"300", // in seconds
},
"test":{
"id":"TLS_Support_AWS_IoT_Cipher_Suites",
"version":"0.0.0"
}
}
]
1186
AWS IoT Core Guía para desarrolladores
TLS
Le sugerimos que compruebe que todos los conjuntos de cifrado no compatibles son seguros.
• Fallar— El dispositivo objeto de prueba no contiene ninguno de losAWS IoTsuites de cifrado
compatibles.
"tests":[
{
"name":"my_tls_large_size_server_cert_test",
"configuration": {
// optional:
"EXECUTION_TIMEOUT":"300", // in seconds
},
"test":{
"id":"TLS_Large_Size_Server_Cert",
"version":"0.0.0"
}
}
]
1187
AWS IoT Core Guía para desarrolladores
TLS
• Fallar— El dispositivo objeto de prueba no pudo completar el protocolo de enlace de TLS conAWS
IoTdebido a un error durante el proceso de apretón de manos.
Valida que el dispositivo que se está probando cierra la conexión si se le presenta un certificado de
servidor sin una firma válida de la CA de ATS. Un dispositivo solo debe conectarse a un punto final
que presente un certificado válido.
"tests":[
{
"name":"my_tls_unsecure_server_cert_test",
"configuration": {
// optional:
"EXECUTION_TIMEOUT":"300", //in seconds
},
"test":{
"id":"TLS_Unsecure_Server_Cert",
"version":"0.0.0"
}
}
]
Valida que el dispositivo que se está probando cierra la conexión si se le presenta un certificado de
servidor para un nombre de dominio diferente al solicitado.
"tests":[
{
"name":"my_tls_incorrect_subject_name_cert_test",
"configuration": {
// optional:
"EXECUTION_TIMEOUT":"300", // in seconds
},
"test":{
1188
AWS IoT Core Guía para desarrolladores
MQTT
"id":"TLS_Incorrect_Subject_Name_Server_Cert",
"version":"0.0.0"
}
}
]
Valida que el dispositivo que se está probando cierra la conexión si se le presenta un certificado de
servidor caducado.
"tests":[
{
"name":"my_tls_expired_cert_test",
"configuration": {
// optional:
"EXECUTION_TIMEOUT":"300", //in seconds
},
"test":{
"id":"TLS_Expired_Server_Cert",
"version":"0.0.0"
}
}
]
MQTT
CONECTAR, DESCONECTAR y VOLVER A CONECTAR
«El dispositivo envía CONNECT aAWS IoT Core(Caso feliz)»
1189
AWS IoT Core Guía para desarrolladores
MQTT
Note
"tests":[
{
"name":"my_mqtt_connect_test",
"configuration": {
// optional:
"EXECUTION_TIMEOUT":"300", // in seconds
},
"test":{
"id":"MQTT_Connect",
"version":"0.0.0"
}
}
]
Este caso de prueba comprobará si el dispositivo (cliente) puede devolver un mensaje de PUBACK si
ha recibido un mensaje de publicación del corredor tras suscribirse a un tema con QoS1.
El contenido de la carga útil y el tamaño de la carga se pueden configurar para este caso de prueba.
Si el tamaño de la carga está configurado, Device Advisor sobrescribirá el valor del contenido de la
carga y enviará una carga predefinida al dispositivo con el tamaño deseado. El tamaño de la carga
útil es un valor comprendido entre 0 y 128 y no puede superar los 128 KB.AWS IoT Corerechaza
las solicitudes de publicación y conexión de un tamaño superior a 128 KB, como se ve enAWS IoT
Corelímites y cuotas del intermediario de mensajes y del protocolopágina.
"tests":[
{
"name":"my_mqtt_client_puback_qos1",
"configuration": {
// optional:"TRIGGER_TOPIC": "myTopic",
"EXECUTION_TIMEOUT":"300", // in seconds
"PAYLOAD_FOR_PUBLISH_VALIDATION":"custom payload",
"PAYLOAD_SIZE":"100" // in kilobytes
},
"test": {
"id": "MQTT_Client_Puback_QoS1",
"version": "0.0.0"
}
}
]
«La conexión del dispositivo se reintenta con un retroceso de fluctuación: no hay respuesta de CONNACK»
Valida que el dispositivo que se está probando utilice el amortiguador de fluctuación adecuado al
volver a conectarse con el corredor al menos cinco veces. El corredor registra la marca de tiempo del
1190
AWS IoT Core Guía para desarrolladores
MQTT
dispositivo objeto de la solicitud CONNECT de la prueba, realiza la validación de los paquetes, hace
una pausa sin enviar un CONNACK al dispositivo que se está probando y espera a que el dispositivo
en prueba vuelva a enviar la solicitud. Se permite que se realice el sexto intento de conexión y se
permite que CONNACK regrese al dispositivo bajo prueba.
El proceso anterior se realiza de nuevo. En total, este caso de prueba requiere que el dispositivo se
conecte al menos 12 veces en total. Las marcas de tiempo recopiladas se utilizan para validar que
el dispositivo que se está probando utiliza el retroceso de fluctuación. Si el dispositivo que se está
probando tiene un retraso de retroceso estrictamente exponencial, este caso de prueba pasará con
advertencias.
"tests":[
{
"name":"my_mqtt_jitter_backoff_retries_test",
"configuration": {
// optional:
"EXECUTION_TIMEOUT":"300", // in seconds
},
"test":{
"id":"MQTT_Connect_Jitter_Backoff_Retries",
"version":"0.0.0"
}
}
]
«Se reintenta la conexión del dispositivo con un retraso exponencial: no hay respuesta de CONNACK»
Valida que el dispositivo que se está probando utilice el retroceso exponencial adecuado al volver
a conectarse con el corredor al menos cinco veces. El corredor registra la marca de tiempo del
dispositivo objeto de la solicitud CONNECT de la prueba, realiza la validación de los paquetes, hace
una pausa sin enviar un CONNACK al dispositivo cliente y espera a que el dispositivo en prueba
vuelva a enviar la solicitud. Las marcas de tiempo recopiladas se utilizan para validar que el dispositivo
bajo prueba utiliza un retroceso exponencial.
"tests":[
{
"name":"my_mqtt_exponential_backoff_retries_test",
"configuration": {
// optional:
"EXECUTION_TIMEOUT":"600", // in seconds
},
1191
AWS IoT Core Guía para desarrolladores
MQTT
"test":{
"id":"MQTT_Connect_Exponential_Backoff_Retries",
"version":"0.0.0"
}
}
]
«Reconexión del dispositivo con reducción de fluctuación: después de la desconexión del servidor»
Valida si un dispositivo que se está probando utiliza la fluctuación y el retardo necesarios al volver
a conectarse después de desconectarse del servidor. Device Advisor desconecta el dispositivo del
servidor al menos cinco veces y observa el comportamiento del dispositivo durante la reconexión
a MQTT. Device Advisor registra la fecha y hora de la solicitud CONNECT del dispositivo que se
está probando, realiza la validación de los paquetes, hace una pausa sin enviar un CONNACK al
dispositivo cliente y espera a que el dispositivo en prueba vuelva a enviar la solicitud. Las marcas de
tiempo recopiladas se utilizan para validar que el dispositivo que se está probando utiliza la fluctuación
y el retraso al volver a conectarse. Si el dispositivo que se está probando tiene un retroceso
estrictamente exponencial o no implementa un mecanismo de retroceso de fluctuación adecuado,
este caso de prueba pasará con advertencias. Si el dispositivo bajo prueba ha implementado un
mecanismo de retroceso lineal o uno de retroceso constante, la prueba fallará.
"tests":[
{
"name":"my_mqtt_reconnect_backoff_retries_on_server_disconnect",
"configuration":{
// optional:
"EXECUTION_TIMEOUT":"300", // in seconds
"RECONNECTION_ATTEMPTS": 5
},
"test":{
"id":"MQTT_Reconnect_Backoff_Retries_On_Server_Disconnect",
"version":"0.0.0"
}
}
]
Valida si un dispositivo que se está probando utiliza la fluctuación y el retardo necesarios al volver
a conectarse con una conexión inestable. Device Advisor desconecta el dispositivo del servidor
después de cinco conexiones satisfactorias y observa el comportamiento del dispositivo durante la
reconexión a MQTT. Device Advisor registra la fecha y hora de la solicitud CONNECT del dispositivo
que se está probando, realiza la validación de los paquetes, devuelve el CONNACK, se desconecta,
registra la marca de tiempo de la desconexión y espera a que el dispositivo en prueba vuelva a
enviar la solicitud. Las marcas de tiempo recopiladas se utilizan para validar que el dispositivo que
se está probando utiliza fluctuaciones y retrocesos al volver a conectarse después de conexiones
satisfactorias pero inestables. Si el dispositivo que se está probando tiene un retroceso estrictamente
1192
AWS IoT Core Guía para desarrolladores
MQTT
"tests":[
{
"name":"my_mqtt_reconnect_backoff_retries_on_unstable_connection",
"configuration":{
// optional:
"EXECUTION_TIMEOUT":"300", // in seconds
"RECONNECTION_ATTEMPTS": 5
},
"test":{
"id":"MQTT_Reconnect_Backoff_Retries_On_Unstable_Connection",
"version":"0.0.0"
}
}
]
Publicación
«QoS0 (caso feliz)»
Valida que el dispositivo bajo prueba publique un mensaje con QoS0 y QoS1. También puede validar
el tema del mensaje y la carga especificando el valor del tema y la carga útil en la configuración de la
prueba.
Note
"tests":[
{
"name":"my_mqtt_publish_test",
"configuration":{
// optional:
"EXECUTION_TIMEOUT":"300", // in seconds
"TOPIC_FOR_PUBLISH_VALIDATION": "my_TOPIC_FOR_PUBLISH_VALIDATION",
"PAYLOAD_FOR_PUBLISH_VALIDATION": "my_PAYLOAD_FOR_PUBLISH_VALIDATION",
},
"test":{
"id":"MQTT_Publish",
"version":"0.0.0"
}
}
]
1193
AWS IoT Core Guía para desarrolladores
MQTT
Valida que el dispositivo bajo prueba vuelva a publicar un mensaje enviado con QoS1, si el corredor
no envía PUBACK. También puede validar el tema del mensaje especificando este tema en la
configuración de la prueba. El dispositivo cliente no debe desconectarse antes de volver a publicar
el mensaje. Esta prueba también valida que el mensaje republicado tenga el mismo identificador de
paquete que el original. Durante la ejecución de la prueba, si el dispositivo pierde la conexión y se
vuelve a conectar, el caso de prueba se restablecerá sin errores y el dispositivo tendrá que volver a
realizar los pasos del caso de prueba.
"tests":[
{
"name":"my_mqtt_publish_retry_test",
"configuration":{
// optional:
"EXECUTION_TIMEOUT":"300", // in seconds
"TOPIC_FOR_PUBLISH_VALIDATION": "my_TOPIC_FOR_PUBLISH_VALIDATION",
"PAYLOAD_FOR_PUBLISH_VALIDATION": "my_PAYLOAD_FOR_PUBLISH_VALIDATION",
},
"test":{
"id":"MQTT_Publish_Retry_No_Puback",
"version":"0.0.0"
}
}
]
"tests":[
{
"name":"my_mqtt_publish_retained_messages_test",
"configuration":{
// optional:
"EXECUTION_TIMEOUT":"300", // in seconds
"TOPIC_FOR_PUBLISH_RETAINED_VALIDATION": "my_TOPIC_FOR_PUBLISH_RETAINED_VALIDATION",
"PAYLOAD_FOR_PUBLISH_RETAINED_VALIDATION": "my_PAYLOAD_FOR_PUBLISH_RETAINED_VALIDATION",
},
"test":{
"id":"MQTT_Publish_Retained_Messages",
"version":"0.0.0"
}
1194
AWS IoT Core Guía para desarrolladores
MQTT
}
]
Valida que el dispositivo bajo prueba publique un mensaje con la propiedad de usuario correcta.
Puede validar la propiedad del usuario configurando el par nombre-valor en la configuración de la
prueba. Si la propiedad del usuario no se proporciona o no coincide, se produce un error en el caso de
prueba.
"tests":[
{
"name":"my_mqtt_user_property_test",
"test":{
"USER_PROPERTIES": [
{"name": "name1", "value":"value1"},
{"name": "name2", "value":"value2"}
],
"EXECUTION_TIMEOUT":"300", // in seconds
},
"test":{
"id":"MQTT_Publish_User_Property",
"version":"0.0.0"
}
}
]
Suscribirse
«Puedo suscribirme (Happy Case)»
Valida que el dispositivo en prueba esté suscrito a los temas de MQTT. También puedes validar el
tema al que se suscribe el dispositivo en prueba especificando este tema en la configuración de la
prueba.
"tests":[
{
"name":"my_mqtt_subscribe_test",
"configuration":{
// optional:
"EXECUTION_TIMEOUT":"300", // in seconds
"TOPIC_LIST_FOR_SUBSCRIPTION_VALIDATION":
["my_TOPIC_FOR_PUBLISH_VALIDATION_a","my_TOPIC_FOR_PUBLISH_VALIDATION_b"]
},
"test":{
"id":"MQTT_Subscribe",
1195
AWS IoT Core Guía para desarrolladores
MQTT
"version":"0.0.0"
}
}
]
Valida que el dispositivo en prueba vuelva a intentar una suscripción fallida a los temas de MQTT.
A continuación, el servidor espera y no envía un SUBACK. Si el dispositivo cliente no vuelve a
intentar la suscripción, se produce un error en la prueba. El dispositivo cliente debe volver a intentar la
suscripción fallida con el mismo ID de paquete. También puedes validar el tema al que se suscribe el
dispositivo en prueba especificando este tema en la configuración de la prueba. Durante la ejecución
de la prueba, si el dispositivo pierde la conexión y se vuelve a conectar, el caso de prueba se
restablecerá sin errores y el dispositivo tendrá que volver a realizar los pasos del caso de prueba.
"tests":[
{
"name":"my_mqtt_subscribe_retry_test",
"configuration":{
"EXECUTION_TIMEOUT":"300", // in seconds
// optional:
"TOPIC_LIST_FOR_SUBSCRIPTION_VALIDATION":
["myTOPIC_FOR_PUBLISH_VALIDATION_a","my_TOPIC_FOR_PUBLISH_VALIDATION_b"]
},
"test":{
"id":"MQTT_Subscribe_Retry_No_Suback",
"version":"0.0.0"
}
}
]
Keep-Alive
«Matt No AckPingResp«
Este caso de prueba valida si el dispositivo que se está probando se desconecta cuando no recibe
una respuesta de ping. Como parte de este caso de prueba, Device Advisor bloquea las respuestas
enviadas desdeAWS IoT Corepara solicitudes de publicación, suscripción y ping. También valida si el
dispositivo bajo prueba desconecta la conexión MQTT.
"tests":[
{
"name":"Mqtt No Ack PingResp",
"configuration":
//optional:
"EXECUTION_TIMEOUT":"306", // in seconds
1196
AWS IoT Core Guía para desarrolladores
MQTT
},
"test":{
"id":"MQTT_No_Ack_PingResp",
"version":"0.0.0"
}
}
]
Sesión persistente
«Sesión persistente (caso feliz)»
Este caso de prueba valida el comportamiento del dispositivo cuando se desconecta de una sesión
persistente. El caso de prueba comprueba si el dispositivo puede volver a conectarse, reanudar las
suscripciones a los temas activados sin volver a suscribirse explícitamente, recibir los mensajes
almacenados en los temas y funcionar según lo esperado durante una sesión persistente. Cuando se
aprueba este caso de prueba, indica que el dispositivo cliente puede mantener una sesión persistente
con elAWS IoT Corecorredor de la manera esperada. Para obtener más información sobreAWS
IoTSesiones persistentes, consulteUso de sesiones persistentes de MQTT.
En este caso de prueba, se espera que el dispositivo cliente se CONECTE con elAWS IoT Corecon
un marcador de sesión limpio establecido en false y, a continuación, suscríbase a un tema
desencadenante. Tras una suscripción exitosa, el dispositivo se desconectará medianteAWS IoT
CoreAsesor de dispositivos. Mientras el dispositivo esté desconectado, se almacenará una carga de
mensajes de QoS 1 en ese tema. A continuación, Device Advisor permitirá que el dispositivo cliente se
vuelva a conectar con el punto final de prueba. En este punto, dado que hay una sesión persistente,
se espera que el dispositivo cliente reanude sus suscripciones a temas sin enviar ningún paquete
SUBSCRIBE adicional y reciba el mensaje de QoS 1 del corredor. Tras volver a conectarse, si el
dispositivo cliente vuelve a suscribirse a su tema de activación enviando un paquete SUBSCRIBE
adicional o si el cliente no recibe el mensaje almacenado del tema de activación, el caso de prueba
fallará.
"tests":[
{
"name":"my_mqtt_persistent_session_happy_case",
"configuration":{
//required:
"TRIGGER_TOPIC": "myTrigger/topic",
// optional:
// if Payload not provided, a string will be stored in the trigger topic to be
sent back to the client device
"PAYLOAD": "The message which should be received from AWS IoT Broker after re-
connecting to a persistent session from the specified trigger topic.",
"EXECUTION_TIMEOUT":"300" // in seconds
},
"test":{
1197
AWS IoT Core Guía para desarrolladores
MQTT
"id":"MQTT_Persistent_Session_Happy_Case",
"version":"0.0.0"
}
}
]
Este caso de prueba ayuda a validar el comportamiento del dispositivo cuando un dispositivo
desconectado se vuelve a conectar a una sesión persistente caducada. Cuando la sesión caduque,
esperamos que el dispositivo vuelva a suscribirse a los temas a los que se suscribió anteriormente
mediante el envío explícito de un nuevo paquete SUBSCRIBE.
Durante la primera conexión, esperamos que el dispositivo de prueba se CONECTE con elAWSBroker
de IoT, como suCleanSessionel indicador está configurado en false para iniciar una sesión
persistente. A continuación, el dispositivo debe suscribirse a un tema desencadenante. A continuación,
el dispositivo se desconecta medianteAWS IoT CoreDevice Advisor, tras una suscripción satisfactoria
y el inicio de una sesión persistente. Tras la desconexión,AWS IoT CoreDevice Advisor permite que
el dispositivo de prueba se vuelva a conectar con el punto final de prueba. En este punto, cuando
el dispositivo de prueba envía otro paquete CONNECT,AWS IoT CoreDevice Advisor devuelve un
paquete CONNACK que indica que la sesión persistente ha caducado. El dispositivo de prueba
debe interpretar este paquete correctamente y se espera que vuelva a suscribirse al mismo tema de
activación cuando finalice la sesión persistente. Si el dispositivo de prueba no vuelve a suscribirse a su
disparador de temas, se produce un error en el caso de prueba. Para superar la prueba, el dispositivo
debe entender que la sesión persistente ha terminado y enviar un nuevo paquete SUBSCRIBE para el
mismo tema de activación en la segunda conexión.
Si este caso de prueba es válido para un dispositivo de prueba, indica que el dispositivo es capaz de
gestionar la reconexión al expirar la sesión persistente de la manera esperada.
"tests":[
{
"name":"my_expired_persistent_session_test",
"configuration":{
//required:
"TRIGGER_TOPIC": "myTrigger/topic",
// optional:
"EXECUTION_TIMEOUT":"300" // in seconds
},
"test":{
"id":"MQTT_Expired_Persistent_Session",
"version":"0.0.0"
}
}
]
1198
AWS IoT Core Guía para desarrolladores
Sombra
Sombra
Realice estas pruebas para comprobar el uso de los dispositivos que se están probandoAWS IoTEl
servicio Device Shadow es correcto. Para obtener más información, consulte Servicio Device Shadow de
AWS IoT (p. 683). Si estos casos de prueba están configurados en su conjunto de pruebas, es necesario
proporcionar algo al iniciar la ejecución del conjunto.
Publicación
«El dispositivo publica el estado después de conectarse (caso feliz)»
Valida si un dispositivo puede publicar su estado después de conectarse aAWS IoT Core
"tests":[
{
"name":"my_shadow_publish_reported_state",
"configuration": {
// optional:
"EXECUTION_TIMEOUT":"300", // in seconds
"SHADOW_NAME": "SHADOW_NAME",
"REPORTED_STATE": {
"STATE_ATTRIBUTE": "STATE_VALUE"
}
},
"test":{
"id":"Shadow_Publish_Reported_State",
"version":"0.0.0"
}
}
]
ElREPORTED_STATEse puede proporcionar para una validación adicional del estado de sombra exacto
del dispositivo, después de que se conecte. De forma predeterminada, este caso de prueba valida el
estado de publicación del dispositivo.
Actualización
«El dispositivo actualiza el estado informado al estado deseado (caso feliz)»
Valida si el dispositivo lee todos los mensajes de actualización recibidos y sincroniza el estado del
dispositivo para que coincida con las propiedades de estado deseadas. El dispositivo debe publicar el
último estado registrado después de la sincronización. Si su dispositivo ya tiene una sombra existente
antes de ejecutar la prueba, asegúrese de que el estado deseado configurado para el caso de prueba
y el estado actual registrado no coincidan todavía. Puede identificar los mensajes de actualización de
1199
AWS IoT Core Guía para desarrolladores
Ejecución del trabajo
Shadow enviados por Device Advisor consultando laClientTokencampo en el documento Shadow tal y
como estaráDeviceAdvisorShadowTestCaseSetup.
"tests":[
{
"name":"my_shadow_update_reported_state",
"configuration": {
"DESIRED_STATE": {
"STATE_ATTRIBUTE": "STATE_VALUE"
},
// optional:
"EXECUTION_TIMEOUT":"300", // in seconds
"SHADOW_NAME": "SHADOW_NAME"
},
"test":{
"id":"Shadow_Update_Reported_State",
"version":"0.0.0"
}
}
]
Este caso de prueba le ayuda a validar si su dispositivo puede recibir actualizaciones medianteAWS
IoTTrabajos y publique el estado de las actualizaciones satisfactorias. Para obtener más información
sobreAWS IoTTrabajos, consulteTrabajos.
Para ejecutar correctamente este caso de prueba, hay dos reservadosAWStemas que necesitas para
conceder tuFunción del dispositivo. Para suscribirse a los mensajes relacionados con la actividad
laboral, utilicenotificarynotificar a continuacióntemas. Su función de dispositivo debe conceder la
acción PUBLICAR para los siguientes temas:
• $aws/things/thingName/jobs/jobId/get
• $aws/things/thingName/jobs/jobId/update
Se recomienda conceder las acciones SUSCRÍBETE y RECEIVE para los siguientes temas:
• $aws/things/thingName/jobs/get/accepted
• $aws/things/thingName/jobs/jobId/get/rejected
• $aws/things/thingName/jobs/jobId/update/accepted
• $aws/things/thingName/jobs/jobId/update/rejected
1200
AWS IoT Core Guía para desarrolladores
Ejecución del trabajo
• $aws/things/thingName/jobs/notify-next
Para obtener más información sobre estos temas reservados, consulte temas reservados paraAWS
IoTTrabajos.
"tests": [
{
"name":"my_job_execution",
"configuration": {
// optional:
// Test case will create a job task by using either JOB_DOCUMENT or
JOB_DOCUMENT_SOURCE.
// If you manage the job task on your own, leave it empty and provide the
JOB_JOBID (self-managed job task).
// JOB_DOCUMENT is a JSON formatted string
"JOB_DOCUMENT": "{
\"operation\":\"reboot\",
\"files\" : {
\"fileName\" : \"install.py\",
\"url\" : \"${aws:iot:s3-presigned-url:https://s3.amazonaws.com/bucket-
name/key}\"
}
}",
// JOB_DOCUMENT_SOURCE is an S3 link to the job document. It will be used only
if JOB_DOCUMENT is not provided.
"JOB_DOCUMENT_SOURCE": "https://s3.amazonaws.com/bucket-name/key",
// JOB_JOBID is mandatory, only if neither document nor document source is
provided. (Test case needs to know the self-managed job task id).
"JOB_JOBID": "String",
// JOB_PRESIGN_ROLE_ARN is used for the presign Url, which will replace the
placeholder in the JOB_DOCUMENT field
"JOB_PRESIGN_ROLE_ARN": "String",
// Presigned Url expiration time. It must be between 60 and 3600 seconds, with
the default value being 3600.
"JOB_PRESIGN_EXPIRES_IN_SEC": "Long"
"EXECUTION_TIMEOUT": "300", // in seconds
},
"test": {
"id": "Job_Execution",
"version": "0.0.0"
}
}
]
1201
AWS IoT Core Guía para desarrolladores
Permisos y políticas
Permisos y políticas
Puede utilizar las siguientes pruebas para determinar si las políticas adjuntas a los certificados de sus
dispositivos siguen las prácticas recomendadas estándar.
Valida si las políticas de permisos asociadas a un dispositivo siguen las prácticas recomendadas y no
otorgan al dispositivo más permisos de los necesarios.
"tests":[
{
"name":"my_security_device_policies",
"configuration": {
// optional:
"EXECUTION_TIMEOUT":"60" // in seconds
},
"test": {
"id": "Security_Device_Policies",
"version": "0.0.0"
}
}
]
1202
AWS IoT Core Guía para desarrolladores
Pruebas de larga duración
El conjunto de pruebas básicas puede incluir lo siguiente, en función de las operaciones seleccionadas:
CONNECT
Este escenario valida si el dispositivo puede establecer una conexión correcta con el corredor.
1203
AWS IoT Core Guía para desarrolladores
Pruebas de larga duración
PUBLICAR
QoS 0
Este caso de prueba valida si el dispositivo envía correctamente unPUBLISHmensaje al corredor durante
una publicación con QoS 0. La prueba no espera a quePUBACKmensaje que recibirá el dispositivo.
QoS 1
En este caso de prueba, se espera que el dispositivo envíe dosPUBLISHmensajes al corredor con QoS
1. Después de la primeraPUBLISHmensaje, el corredor espera hasta 15 segundos antes de responder.
El dispositivo debe volver a intentar el originalPUBLISHmensaje con el mismo identificador de paquete
dentro de la ventana de 15 segundos. Si lo hace, el corredor responde con unPUBACKmensaje y la prueba
se valida. Si el dispositivo no vuelve a intentar elPUBLISH, el originalPUBACKse envía al dispositivo y la
prueba se marca comoPase con advertencias, junto con un mensaje del sistema. Durante la ejecución
de la prueba, si el dispositivo pierde la conexión y se vuelve a conectar, el escenario de prueba se
restablecerá sin errores y el dispositivo tendrá que volver a realizar los pasos del escenario de prueba.
1204
AWS IoT Core Guía para desarrolladores
Pruebas de larga duración
SUSCRIBIR
Este escenario valida si el dispositivo se suscribe correctamente con el bróker.
QoS 0
Este caso de prueba valida si el dispositivo envía correctamente unSUBSCRIBEmensaje al corredor
durante una suscripción con QoS 0. La prueba no espera a que el dispositivo reciba un mensaje SUBACK.
QoS 1
En este caso de prueba, se espera que el dispositivo envíe dosSUBSCRIBEmensajes al corredor con
QoS 1. Después de la primeraSUBSCRIBEmensaje, el corredor espera hasta 15 segundos antes de
1205
AWS IoT Core Guía para desarrolladores
Pruebas de larga duración
RECONECTAR
Este escenario valida si el dispositivo se vuelve a conectar correctamente con el corredor después de
que el dispositivo se haya desconectado de una conexión correcta. Device Advisor no desconectará el
dispositivo si se conectó más de una vez anteriormente durante el conjunto de pruebas. En su lugar,
marcará la prueba comoPase.
1206
AWS IoT Core Guía para desarrolladores
Pruebas de larga duración
Este escenario se valida si, después de que el dispositivo se suscriba a un tema y reciba
unPUBLISHmensaje del corredor, devuelve unPUBACKmensaje.
1207
AWS IoT Core Guía para desarrolladores
Pruebas de larga duración
1208
AWS IoT Core Guía para desarrolladores
Pruebas de larga duración
SESIÓN PERSISTENTE
Note
Este escenario valida el comportamiento del dispositivo a la hora de mantener sesiones persistentes. La
prueba se valida cuando se cumplen las siguientes condiciones:
• El dispositivo se conecta al bróker con una suscripción de QoS 1 activa y las sesiones persistentes
habilitadas.
• El dispositivo se desconecta correctamente del corredor durante la sesión.
• El dispositivo se vuelve a conectar al corredor y reanuda las suscripciones a sus temas de activación sin
volver a suscribirse explícitamente a esos temas.
• El dispositivo recibe correctamente los mensajes almacenados por el corredor para los temas a los que
se ha suscrito y funciona según lo esperado.
Para obtener más información sobreAWS IoTSesiones persistentes, consulteUso de sesiones persistentes
de MQTT.
MANTENERSE VIVO
Este escenario valida si el dispositivo se desconecta correctamente después de no recibir una respuesta
de ping del intermediario. La conexión debe tener configurado un temporizador Keep-Alive válido. Como
parte de esta prueba, el corredor bloquea todas las respuestas enviadas paraPUBLISH,SUBSCRIBE,
yPINGREQmensajes. También valida si el dispositivo bajo prueba desconecta la conexión MQTT.
1209
AWS IoT Core Guía para desarrolladores
Pruebas de larga duración
CONECTIVIDAD INTERMITENTE
Este escenario valida si el dispositivo puede volver a conectarse al corredor después de que el corredor
desconecte el dispositivo a intervalos aleatorios durante un período de tiempo aleatorio.
1210
AWS IoT Core Guía para desarrolladores
Pruebas de larga duración
Este escenario valida si el dispositivo cuenta con un mecanismo de bloqueo implementado cuando el
corredor se desconecta de él varias veces. Device Advisor indica el tipo de retroceso como exponencial,
fluctuante, lineal o constante. El número de intentos de retroceso se puede configurar mediante
elBACKOFF_CONNECTION_ATTEMPTSopción. El valor predeterminado es 5. El valor se puede configurar
entre 5 y 10.
Este escenario valida si el dispositivo puede volver a conectarse correctamente después de que el
intermediario lo desconecte durante un período prolongado (hasta 120 minutos). El tiempo de desconexión
del servidor se puede configurar mediante laLONG_SERVER_DISCONNECT_TIMEopción. El valor
predeterminado es de 120 minutos. Este valor se puede configurar de 30 a 120 minutos.
1211
AWS IoT Core Guía para desarrolladores
Pruebas de larga duración
OPERACIONES
{
"OPERATIONS": ["PUBLISH", "SUBSCRIBE"]
//by default the test assumes device can CONNECT
}
ESCENARIOS
Según las operaciones seleccionadas, el caso de prueba ejecuta escenarios para validar el
comportamiento del dispositivo. Hay dos tipos de escenarios:
1212
AWS IoT Core Guía para desarrolladores
Pruebas de larga duración
• Escenarios básicosson pruebas sencillas que validan si el dispositivo puede realizar las operaciones
seleccionadas anteriormente como parte de la configuración. Se preseleccionan en función de
las operaciones especificadas en la configuración. No se requiere ninguna entrada adicional en la
configuración.
• Escenarios avanzadosson escenarios más complejos que se realizan contra el dispositivo para
validar si el dispositivo sigue las mejores prácticas cuando se cumple con las condiciones del
mundo real. Son opcionales y se pueden pasar como una matriz de escenarios a la entrada de
configuración del conjunto de pruebas.
{
"SCENARIOS": [ // list of advanced scenarios
"PUBACK_QOS_1",
"RECEIVE_LARGE_PAYLOAD",
"PERSISTENT_SESSION",
"KEEP_ALIVE",
"INTERMITTENT_CONNECTIVITY",
"RECONNECT_BACK_OFF",
"LONG_SERVER_DISCONNECT"
]
}
TIME_OUT_BASIC_TESTS_EXECUTION_TIME:
El tiempo máximo que el caso de prueba esperará hasta que se completen todas las pruebas básicas.
El valor predeterminado es 60 minutos. Este valor se puede configurar de 30 a 120 minutos.
TIEMPO DE DESCONEXIÓN DEL SERVIDOR PROLONGADO:
El tiempo que tardó el caso de prueba en desconectar y volver a conectar el dispositivo durante la
prueba de desconexión prolongada del servidor. El valor predeterminado es 60 minutos. Este valor se
puede configurar de 30 a 120 minutos.
TIEMPO DE EJECUCIÓN ADICIONAL:
La configuración de esta opción proporciona un período de tiempo, una vez finalizadas todas las
pruebas, para monitorear los eventos entre el dispositivo y el corredor. El valor predeterminado es 0
minutos. Este valor se puede configurar de 0 a 120 minutos.
INTENTOS DE CONEXIÓN DE RETROCESO:
Esta opción configura el número de veces que el caso de prueba desconecta el dispositivo. Esto se
utiliza en la prueba Reconnect Backoff. El valor predeterminado es de 5 intentos. Este valor se puede
configurar de 5 a 10.
FORMATO__DE_CARGA LARGA:
El formato de la carga útil del mensaje que el dispositivo espera cuando el caso de prueba se publique
en un tema de QoS 1 suscrito por el dispositivo.
{
"tests":[
{
"name":"my_mqtt_long_duration_test",
"configuration": {
// optional
"OPERATIONS": ["PUBLISH", "SUBSCRIBE"],
"SCENARIOS": [
"LONG_SERVER_DISCONNECT",
"RECONNECT_BACK_OFF",
1213
AWS IoT Core Guía para desarrolladores
Pruebas de larga duración
"KEEP_ALIVE",
"RECEIVE_LARGE_PAYLOAD",
"INTERMITTENT_CONNECTIVITY",
"PERSISTENT_SESSION",
],
"BASIC_TESTS_EXECUTION_TIMEOUT": 60, // in minutes (60 minutes by default)
"LONG_SERVER_DISCONNECT_TIME": 60, // in minutes (120 minutes by default)
"ADDITIONAL_EXECUTION_TIME": 60, // in minutes (0 minutes by default)
"BACKOFF_CONNECTION_ATTEMPTS": "5",
"LONG_PAYLOAD_FORMAT":"{"message":"${payload}"}"
},
"test":{
"id":"MQTT_Long_Duration",
"version":"0.0.0"
}
}
]
}
1214
AWS IoT Core Guía para desarrolladores
Preparación para el uso del catálogo de
recursos de software Package Catalog
El paquete de software contiene una o más versiones de paquete que se pueden implementar como una
sola unidad. Las versiones del paquete pueden contener firmware, actualizaciones del sistema operativo,
aplicaciones de dispositivos, configuraciones y parches de seguridad. A medida que el software evoluciona
con el tiempo, puede crear una nueva versión del paquete e implementarla en su flota.
ElAWS IoTel centro de paquetes de software se encuentra dentroAWS IoT Core. Puede utilizar el centro
para registrar y mantener de forma centralizada el inventario y los metadatos de sus paquetes de software,
lo que crea un catálogo de paquetes de software y sus versiones. Puede optar por agrupar los dispositivos
en función de los paquetes de software y las versiones de paquetes implementadas en el dispositivo. Esta
función brinda la oportunidad de mantener el inventario de paquetes del lado del dispositivo como una
sombra, asociar y agrupar los dispositivos en función de las versiones, y visualizar la distribución de las
versiones de los paquetes en toda la flota mediante las métricas de la flota.
Si ha establecido un sistema interno de implementación de software, puede seguir utilizando ese proceso
para implementar las versiones de sus paquetes. Si no tiene un proceso de implementación establecido
o si lo prefiere, le recomendamos que utiliceAWS IoTtrabajospara utilizar las funciones del Catálogo de
Paquetes de Software. Para obtener más información, consultePreparándoseAWS IoTtrabajos.
Note
Existe un problema conocido al registrar los eventos del Catálogo de Paquetes de Software
enAWS CloudTrail. ElsourceIPAddresscampo en CloudTrail los registros indican falsamente
que la solicitud proviene deinternal AWS. Se trata de un problema temporal y nuestro equipo
está trabajando para corregirlo lo antes posible. Para obtener más información, consulteCloudTrail
referencia de eventos de registro.
La siguiente sección proporciona una descripción general del ciclo de vida de la versión del paquete, así
como información para su uso.AWS IoT Device ManagementCatálogo de paquetes de software.
• Borrador
Cuando se crea una versión de paquete, está en undraftestado. Este estado indica que el paquete de
software se está preparando o está incompleto.
Mientras la versión del paquete esté en este estado, no podrá configurarla como la versión
predeterminada, implementarla ni editar el nombre de la versión del paquete.
Puede editar la descripción, los atributos y las etiquetas de la versión del paquete. También puede
asociarlo a unAWS IoTcosa
Cuando la versión del paquete esté lista para su implementación, haga la transición de la versión del
paquete a unapublishedestado. Mientras estaba en elpublishedestado, puede elegir identificar la
versión del paquete como la versión predeterminada editando el paquete de software en la consola o
mediante elUpdatePackageFuncionamiento API
Puede editar los datos de una versión de paquete publicada, incluidas la descripción y las etiquetas. No
puede editar el nombre ni los atributos de la versión del paquete.
1216
AWS IoT Core Guía para desarrolladores
Convenciones de nomenclatura de versiones de paquetes
Si hay disponible una nueva versión del paquete, puede realizar la transición de las versiones
anteriores adeprecated. Aún puede implementar trabajos con undeprecatedla versión del paquete e
identifíquela como la versión por defecto.
Cuando la versión de un paquete esdeprecated, solo puede editar algunos de sus datos, como la
descripción y las etiquetas. Sin embargo, no puede editar el nombre ni los atributos de la versión del
paquete.
Puede realizar la transición de una versión del paquete que esté endeprecated
estado apublishedo serdeletedmediante la consola o emitiendo
elUpdatePackageVersionoDeletePackageVersionOperaciones de API.
• Eliminado
Si ya no tiene la intención de utilizar una versión de paquete, puede eliminarla mediante la consola o
emitiendo elDeletePackageVersionFuncionamiento API
Note
Si eliminas una versión del paquete mientras hay trabajos pendientes que hacen referencia
a ella, recibirás un mensaje de error cuando el trabajo se complete correctamente e intente
actualizar la sombra reservada denominada.
Si la versión del paquete de software que desea eliminar aparece como la versión de
paquete predeterminada, primero debe actualizar el paquete para asignar otra versión
como predeterminada o dejar el campo sin nombre. Para ello, utilice la consola o
elUpdatePackageVersionFuncionamiento API (Para eliminar cualquier versión de paquete con
nombre asignado como predeterminada, definaunsetDefaultVersionel parámetro es verdadero
al ejecutar elUpdatePackageFuncionamiento API)
Si eliminas un paquete de software a través de la consola, se eliminarán todas las versiones del paquete
asociadas a ese paquete, a menos que una de ellas se designe como versión predeterminada.
Versión predeterminada
Establecer una versión como predeterminada es opcional. El paquete se puede agregar o eliminar las
versiones de paquete predeterminadas. También puede implementar una versión de paquete que no figure
como la versión predeterminada.
Al crear una versión de paquete, se coloca en undraftestado y no se puede nombrar como versión
predeterminada hasta que no se haga la transición de la versión del paquete a publicada. Software
Package Catalog no selecciona automáticamente una versión como predeterminada ni actualiza una
1217
AWS IoT Core Guía para desarrolladores
Los atributos de la versión
versión de paquete más reciente como predeterminada. Debe asignar intencionadamente un nombre a la
versión del paquete que elija a través de la consola o emitiendo elUpdatePackageVersionFuncionamiento
API
No es necesario seguir una convención de nomenclatura específica para los atributos del paquete
de software y de la versión del paquete. Puede crear pares de nombre-valor para satisfacer las
necesidades de su empresa.
El tamaño combinado de todos los atributos de una versión de paquete está limitado a 3 KB. Para obtener
información, consulteCatálogo de paquetes de software: límites de paquetes de software y versiones de
paquetes.
Habilitar la indexación de la flota para Software Package Catalog implica costos de servicio
estándar. Para obtener más información, consulteAWS IoT Device Management, Precios.
Una sombra reservada con nombre es similar a unallamada sombracon la excepción de que su nombre
está predefinido y no se puede cambiar. Además, la sombra reservada denominada no se actualiza con
los metadatos y solo usa elversionyattributespalabras clave. (Nota:Actualice las solicitudes que
incluyan otras palabras clave, comodescription, recibirá una respuesta de error en larejectedtema
Para obtener más información, consulteMensajes de error de Device Share.
Se puede crear al crear unAWS IoTcosa a través de la consola, cuando unAWS IoTel trabajo completa y
actualiza correctamente la sombra, y si ejecuta elUpdateThingShadowFuncionamiento API Para obtener
más información, consulteUpdateThingShadowen elAWS IoT Coreguía para desarrolladores
1218
AWS IoT Core Guía para desarrolladores
Registros de AWS CloudTrail
Note
La indexación de la sombra reservada con nombre no cuenta para el número de sombras con
nombre que la indexación de flotas puede indexar. Para obtener más información, consulteAWS
IoT Device Managementlímites y cuotas de indexación de flotas. Además, si eliges tenerAWS
IoTlos trabajos actualizan la sombra con el nombre reservado cuando un trabajo se completa
correctamente, la llamada a la API se cuenta para las operaciones de registro y Device
Shadow, y puede implicar un coste. Para obtener más información, consulteAWS IoT Device
Managementlímites y cuotas de puestos de trabajoy elIndexingFilterTipo de datos API
Estructura del$packagesombra
{
"state": {
"reported": {
"<packageName>": {
"version": "",
"attributes": {
}
}
}
},
"version" : 1
"timestamp" : 1672531201
}
• <packageName>: El nombre del paquete de software instalado, que se actualiza con laNombre del
paqueteparámetro.
• version: el nombre de la versión del paquete instalado, que se actualiza con laNombre de la
versiónparámetro.
• attributes: Metadatos opcionales almacenados por el dispositivo e indexados por Fleet Indexing.
Esto permite a los clientes consultar sus índices en función de los datos almacenados.
• version: El número de versión de la sombra. Se incrementa automáticamente cada vez que se
actualiza la sombra y comienza en1.
• timestamp: Indica cuándo se actualizó por última vez la sombra y cuándo se grabó enHora de Unix.
Para obtener más información sobre el formato y el comportamiento de una sombra con nombre asignado,
consulteServicio de sombra de dispositivo de AWS IoTOrden mensajes.
1219
AWS IoT Core Guía para desarrolladores
Preparar la seguridad
• Elimine primero todas las versiones asociadas. Si una de las versiones se designa comoversión
predeterminada, debe eliminar la versión predeterminada nombrada del paquete. Como la designación
de una versión predeterminada es opcional, no hay ningún conflicto al eliminarla. Para eliminar
la versión predeterminada del paquete de software, edítelo a través de la consola o utilice el
UpdatePackageVersionFuncionamiento API
Mientras no haya una versión de paquete predeterminada con nombre, puede usar la consola para
eliminar un paquete de software y también se eliminarán todas sus versiones del paquete. Si utiliza una
llamada a la API para eliminar paquetes de software, primero debe eliminar las versiones del paquete y, a
continuación, el paquete de software.
Preparar la seguridad
En esta sección se analizan los principales requisitos de seguridad paraAWS IoT Device
ManagementCatálogo de paquetes de software.
Estructura el paquete de software y los ARN de las versiones del paquete de la siguiente manera:
• Paquete de
software:arn:aws:iot:<region>:<accountID>:package/<packageName>/package
• Versión del paquete:arn:aws:iot:<region>:<accountID>:package/<packageName>/
version/<versionName>
Note
Existen otros derechos relacionados que podría incluir en esta política. Por ejemplo, se puede
incluir el ARN para eljob,thinggroup, yjobtemplate. Para obtener más información y una
lista completa de las opciones de políticas, consulteProteja a los usuarios y los dispositivos
conAWS IoTEmpleos.
Por ejemplo, si tiene un paquete de software y una versión de paquete con el siguiente nombre:
• AWS IoTcosa:myThing
• Nombre PackagesamplePackage
• Versión1.0.0
1220
AWS IoT Core Guía para desarrolladores
AWS IoTJob: derechos para
implementar versiones de paquetes
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:createPackage",
"iot:createPackageVersion",
"iot:updatePackage",
"iot:updatePackageVersion"
],
"Resource": [
"arn:aws:iot:us-east-1:111122223333:package/samplePackage",
"arn:aws:iot:us-east-1:111122223333:package/samplePackage/version/1.0.0"
]
},
{
"Effect": "Allow",
"Action": [
"iot:GetThingShadow",
"iot:UpdateThingShadow"
],
"Resource": "arn:aws:iot:us-east-1:111122223333:thing/myThing/$package"
}
]
}
Política IAM
La política de IAM otorga el derecho a crear un trabajo que incluya el paquete y la versión que aparecen
enResourcesección.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:CreateJob",
"iot:CreateJobTemplate"
],
"Resource":[
"arn:aws:iot:*:111122223333:job/<jobId>",
"arn:aws:iot:*:111122223333:thing/<thingName>/$package",
"arn:aws:iot:*:111122223333:thinggroup/<thingGroupName>",
"arn:aws:iot:*:111122223333:jobtemplate/<jobTemplateName>",
"arn:aws:iot:*:111122223333:package/<packageName>/version/<versionName>"
]
}
]
1221
AWS IoT Core Guía para desarrolladores
AWS IoTJob: derechos para actualizar
la sombra reservada con nombre
Note
Si desea implementar un trabajo que desinstale un paquete y una versión, debe autorizar un ARN
donde esté la versión del paquete$null, como en los siguientes:
arn:aws:iot:<regionCode>:111122223333:package/<packageName>/version/$null
Si opta por tener elAWS IoTEl servicio de trabajo actualiza la sombra con el nombre reservado
cuando un trabajo se completa correctamente, la llamada a la API se cuenta para tuDevice
Shadow y operaciones de registroy puede suponer un coste. Para obtener más información,
consulte Precios de AWS IoT Core.
Permisos
La política de permisos otorga los derechos para consultar y actualizar la sombra del objeto.
El$packageEl parámetro del ARN del recurso apunta a la sombra con nombre reservado.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:DescribeEndpoint",
"Resource": ""
},
{
"Effect": "Allow",
"Action": [
"iot:GetThingShadow",
"iot:UpdateThingShadow"
],
"Resource": [
"arn:aws:iot:<regionCode>:111122223333:thing/<thingName>/$package"
]
}
]
}
1222
AWS IoT Core Guía para desarrolladores
AWS IoTPermisos de trabajo para
descargar desde Amazon S3
Relación de confianza
Además de la política de permisos, el rol requiere una relación de confianza conAWS IoT Corepara
que la entidad pueda asumir el rol y actualizar la sombra reservada con nombre.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
objetivo:PassRole permiso
Por último, debe tener el permiso para transferir el rol aAWS IoT Corecuando llamas al
UpdatePackageConfigurationFuncionamiento API
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:PassRole",
"iot:UpdatePackageConfiguration"
],
"Resource": "arn:aws:iam::111122223333:role/<roleName>"
}
]
}
1223
AWS IoT Core Guía para desarrolladores
Establecer el$packagela sombra como fuente de datos
específica instalada o no tienen ninguna versión de paquete instalada. Puedes obtener más información
combinando atributos. Por ejemplo, identificar cosas que tienen una versión específica y que son de un
tipo de cosa específico (como la versión v1.0.0 y el tipo de cosa de pump_sensor). Para obtener más
información, consulteIndexación de flotas.
Como alternativa, puedes activar la indexación de la flota al crear tu primer paquete. CuandoHabilite las
dependencias para la administración de paquetesAparece un cuadro de diálogo, elija la opción para añadir
paquetes y versiones de software del dispositivo como fuentes de datos para la indexación de la flota. Al
seleccionar esta opción, también habilita la indexación de la flota.
Note
Habilitar la indexación de la flota para Software Package Catalog implica costos de servicio
estándar. Para obtener más información, consulteAWS IoT Device Management, Precios.
En elAWS IoTpágina de detalles del paquete de software de consola, elDescubrimientoEl panel muestra
las métricas estándar ingeridas a través del$packagesombra.
1224
AWS IoT Core Guía para desarrolladores
Patrones Query
visualizarla, se tiene en cuenta para el número máximo de límites de las métricas de la flota. Para
obtener más información, consulteLímites y cuotas de indexación de flotas.
Si desea conocer otro método para obtener información sobre la recopilación de la distribución de
las versiones de los paquetes, consulteRecopilación de la distribución de versiones de paquetes
mediantegetBucketsAggregation.
Patrones Query
La indexación de flotas con Software Package Catalog utiliza la mayoría de las funciones compatibles
(por ejemplo, términos y frases y campos de búsqueda) que son estándar para la indexación de
flotas. La excepción es que elcomparisonyrangelas consultas no están disponibles para la sombra
reservada llamada ($package)versionclave. Sin embargo, estas consultas están disponibles para
elattributesclave. Para obtener más información, consulteSintaxis Query.
Datos Ejemplo
Nota:para obtener información sobre la sombra reservada con nombre y su estructura, consulteSombra
con nombre reservado.
En este ejemplo, un primer dispositivo recibe el nombreAnyThingy tiene instalados los siguientes
paquetes:
• Paquete de software:SamplePackage
ID Package1111
{
"state": {
"reported": {
"SamplePackage": {
"version": "1.0.0",
"attributes": {
"s3UrlForSamplePackage": "https://EXAMPIEBUCKET.s3.us-
west-2.amazonaws.com/exampleCodeFile1",
"packageID": "1111"
}
}
}
}
}
• Paquete de software:SamplePackage
ID Package1111
• Paquete de software:OtherPackage
ID Package2222
1225
AWS IoT Core Guía para desarrolladores
Recopilación de la distribución de las versiones
del paquete mediantegetBucketsAggregation
{
"state": {
"reported": {
"SamplePackage": {
"version": "1.0.0",
"attributes": {
"s3UrlForSamplePackage": "https://EXAMPIEBUCKET.s3.us-
west-2.amazonaws.com/exampleCodeFile1",
"packageID": "1111"
}
},
"OtherPackage": {
"version": "1.2.5",
"attributes": {
"s3UrlForOtherPackage": "https://EXAMPIEBUCKET.s3.us-
west-2.amazonaws.com/exampleCodeFile2",
"packageID": "2222"
}
},
}
}
}
Consultas de ejemplo
En la siguiente tabla se muestran ejemplos de consultas basadas en las sombras de los dispositivos de
ejemplo paraAnyThingyAnotherThing. Para obtener más información, consulteConsultas de cosas de
ejemplo.
1226
AWS IoT Core Guía para desarrolladores
PreparándoseAWS IoTEmpleos
• Defina un campo personalizado en la indexación de flotas para cada paquete de software. Nota:La
creación de campos personalizados cuenta paraAWS IoTcuotas de servicios de indexación de la flota.
• Formatee el campo personalizado de la siguiente manera:
shadow.name.$package.reported.<packageName>.version
Para obtener más información, consulte la .Campos personalizadossección enAWS IoTindexación flota
PreparándoseAWS IoTEmpleos
AWS IoT Device ManagementSe amplía el catálogo de paquetes de softwareAWS IoTLos trabajos se
realizan mediante parámetros de sustitución e integración conAWS IoTla indexación de flotas, los grupos
de elementos dinámicos y elAWS IoTuna cosa reservada llamada sombra.
Note
Para utilizar todas las funciones que ofrece Software Package Catalog, debe crear estasAWS
Identity and Access ManagementFunciones y políticas (IAM):AWS IoTDerechos de trabajo para
implementar versiones de paquetesyAWS IoTDerechos de trabajo para actualizar la sombra
reservada con nombre. Para obtener más información, consultePreparar la seguridad.
${aws:iot:package:<packageName>:version:<versionName>:attributes:<anyAttributeName>}
En este ejemplo, hay un paquete de software llamado,samplePackage, y tiene una versión de paquete
llamada2.1.5que tenga los siguientes atributos:
• nombre:s3URL, valor:https://EXAMPIEBUCKET.s3.us-west-2.amazonaws.com/
exampleCodeFile
• Este atributo identifica la ubicación del archivo de código almacenado en Amazon S3.
• nombre:signature, valor:aaaaabbbbbcccccdddddeeeeefffffggggghhhhhiiiiijjjj
• Este atributo proporciona un valor de firma en código que el dispositivo requiere como medida de
seguridad. Para obtener más información, consulteFirma de código para trabajos. Nota:Este atributo
es un ejemplo y no es obligatorio como parte del catálogo de paquetes de software ni de los trabajos.
{
"samplePackage": "${aws:iot:package:samplePackage1:version:2.1.5:attributes:s3URL}"
}
1227
AWS IoT Core Guía para desarrolladores
Preparar el documento de trabajo y la
versión del paquete para su despliegue
{
"samplePackage": "${aws:iot:package:samplePackage1:version:2.1.5:attributes:signature}"
}
{
...
"Steps": {
"uninstall": ["samplePackage"],
"download": [
{
"samplePackage": "${aws:iot:package:samplePackage1:version:2.1.5:attributes:s3URL}"
},
],
"signature": [
"samplePackage" :
"${aws:iot:package:samplePackage1:version:2.1.5:attributes:signature}"
]
}
}
Una vez realizada la sustitución, se implementa el siguiente documento de trabajo en los dispositivos:
{
...
"Steps": {
"uninstall": ["samplePackage"],
"download": [
{
"samplePackage": "https://EXAMPIEBUCKET.s3.us-west-2.amazonaws.com/exampleCodeFile"
},
],
"signature": [
"samplePackage" : "aaaaabbbbbcccccdddddeeeeefffffggggghhhhhiiiiijjjj"
]
}
}
1228
AWS IoT Core Guía para desarrolladores
Asignar un nombre a los paquetes
y las versiones al implementarlos
Cuando haya revisado la versión del paquete y esté satisfecho con su configuración, cámbiela
apublishedbien a través de la página de detalles del paquete de software en elAWS IoTconsola, o
ejecutando elUpdatePackageVersionFuncionamiento API
Puede incluir paquetes de software adicionales y versiones de paquetes que no estén incluidas en el
documento de trabajo. Si lo hace, el trabajo no proporciona instrucciones al dispositivo sobre qué hacer
con esos archivos y se espera que el dispositivo sepa qué hacer. Por ejemplo, puedes enviar archivos
adicionales al dispositivo si contienen datos a los que el dispositivo pueda hacer referencia.
Puedes optar por asociar o actualizar manualmente una versión del paquete a la versión reservada
denominada shadow de la cosa en las siguientes situaciones:
• Registra una cosa paraAWS IoT Coresin asociar la versión del paquete instalado.
• AWS IoTJobs no está configurado para actualizar la cosa reservada llamada shadow.
• Utilizas un proceso interno para enviar las versiones de los paquetes a tu flota y ese proceso no se
actualizaAWS IoT Corecuando se complete.
Note
Asociar una versión de paquete a unaAWS IoTesta cosa no actualiza directamente el software del
dispositivo. Debe implementar la versión del paquete en el dispositivo para actualizar el software
del dispositivo.
Puedes añadir o actualizar una versión de paquete a un objeto reservado llamado shadow ($package)
a través de la consola o elUpdateThingShadowFuncionamiento API Para obtener más información,
consulteAsociar una versión de paquete a unaAWS IoTcosa.
1229
AWS IoT Core Guía para desarrolladores
Introducción
Uso de la consola
Para utilizar elAWS Management Console, inicie sesión en suAWScuenta y navega hastaAWS IoT Core.
En el panel de navegación, elijaPaquetes de software. A continuación, puede crear y gestionar paquetes y
sus versiones desde esta sección.
Puede utilizar elAWS IoT CoreOperaciones de API para crear y administrar las funciones del Catálogo de
Paquetes de Software para la creación y administración de las funciones. Para obtener más información,
consulteAWS IoTReferencia APIyAWSSDK y kits de herramientas. ElAWS CLIlos comandos también
administran su catálogo. Para obtener más información, consulte la .AWS IoTReferencia de comandos CLI.
a. Si túno tengo un papelpara ello: cuando elCrear rolaparece el cuadro de diálogo, introduzca
unNombre roly, a continuación, elegirCrear.
1230
AWS IoT Core Guía para desarrolladores
Se abrirá la página de una versión del paquete
ElVersión por defectola casilla de verificación está desactivada porque las versiones
de los paquetes se crean en undraftestado. Puede asignar un nombre a la versión
predeterminada después de crear la versión del paquete y al cambiar el estado apublished.
Para obtener más información, consulte Ciclo de vida de la versión de paquete (p. 1216).
3. [Opcional] Para ayudarte a administrar esta versión o a comunicar información a tus dispositivos,
introduce uno o más pares de nombre-valor paraLos atributos de la versión. EligeAñadir atributopara
cada par nombre-valor que introduzca. Para obtener más información, consulte Los atributos de la
versión (p. 1218).
4. [Opcional] El paquete se puede implementar con las etiquetas que se pueden implementar como una
herramienta. Para añadir etiquetas, expandaEtiquetas, eligeAñadiretiquete e introduzca un par de
valores. Se abrirá la página de hasta 50 etiquetas. Para obtener más información, consulteEtiquetar
tuAWS IoTrecursos.
5. Elija Create package (Crear paquete). ElAWS IoTpaquete softwareaparece la página y su paquete
aparece en la tabla de paquetes.
6. [Opcional] Para revisar la información sobre el paquete de software y la versión del paquete que creó,
elija el nombre del paquete. Se abrirá la página de detalles del paquete.
Requisitos previos:
• RegistrarseAWS IoTcosas conAWS IoT Core. Para obtener instrucciones sobre cómo añadir tus
dispositivos aAWS IoT Core, véaseSe abrirá una cosa y un objeto.
1231
AWS IoT Core Guía para desarrolladores
Se abrirá la página de una versión del paquete
• [Opcional] Crea unAWS IoTgrupo de cosas o grupo de cosas dinámico para dirigirse a los dispositivos
en los que va a implementar la versión del paquete. Para obtener instrucciones para crear un grupo de
cosas, consulteSe abrirá un grupo de cosas estático. Para obtener instrucciones sobre cómo crear un
grupo de cosas dinámico, consulteCree un grupo de cosas dinámico.
• Cree un paquete de software y una versión del paquete. Para obtener más información, consulte Crear
un paquete de software y una versión del paquete (p. 1230).
• Se abrirá un documento de trabajo. Para obtener más información, consultePreparación del documento
de trabajo y la versión del paquete para su despliegue.
Nota:Le recomendamos que no utilice información de identificación personal en los campos Nombre
del trabajo y descripción del trabajo.
7. [Opcional] Añade cualquier etiqueta para asociarla a este trabajo.
8. Elija Siguiente.
9. BajoObjetivos de trabajo, elija las cosas o los grupos de cosas que deberían recibir el trabajo.
10. En elArchivo de trabajocampo, especifique el archivo JSON del documento de trabajo.
11. AbrirIntegración de trabajos con el servicio Package Catalog.
12. Seleccione los paquetes y las versiones que se especifican en el documento de trabajo.
Note
• Configuración de despliegue
• Configuración de programación
1232
AWS IoT Core Guía para desarrolladores
Se abrirá la página de un paquete
Después de crear el trabajo, la consola genera una firma JSON y la coloca en su documento del trabajo.
Puede utilizar elAWS IoTconsola para ver el estado de un trabajo o cancelar o eliminar un trabajo. Para
gestionar los trabajos, vaya a laCentro de tareas de la consola.
Requisitos previos:
• Crea unAWS IoTcosa, o cosas, y establecer la telemetría medianteAWS IoT Core. Para obtener más
información, consulte Introducción a AWS IoT Core.
• Cree un paquete de software y una versión del paquete. Para obtener más información, consulte Crear
un paquete de software y una versión del paquete (p. 1230).
• Instale el software de la versión empaquetada en el dispositivo.
Note
Asociar una versión de paquete a unaAWS IoTesta cosa no actualiza ni instala el software en el
dispositivo físico. La versión del paquete debe estar implementada en el dispositivo.
1233
AWS IoT Core Guía para desarrolladores
Tipos de medición y solucionadores
UsaAWS IoT CoreUbicación del dispositivo para probar la ubicación de sus dispositivos de IoT mediante
solucionadores de terceros. Solucionadoresson algoritmos proporcionados por proveedores externos que
resuelven los datos de medición y estiman la ubicación de su dispositivo. Al identificar la ubicación de sus
dispositivos, puede rastrearlos y depurarlos en el campo para solucionar cualquier problema.
Temas
• Tipos de medición y solucionadores (p. 1234)
• ¿Cómo?AWS IoT CoreLa ubicación del dispositivo funciona (p. 1235)
• Cómo usarAWS IoT CoreUbicación del dispositivo (p. 1236)
• Resolver la ubicación de los dispositivos de IoT (p. 1237)
• Resolver la ubicación del dispositivo medianteAWS IoT CoreTemas de MQTT sobre ubicación de
dispositivos (p. 1241)
• Solucionadores de ubicación y carga útil del dispositivo (p. 1246)
1234
AWS IoT Core Guía para desarrolladores
¿Cómo?AWS IoT CoreLa ubicación del dispositivo funciona
Para obtener más información sobre los solucionadores de ubicación y ejemplos que muestran la carga
útil del dispositivo para los distintos tipos de medición, consulteSolucionadores de ubicación y carga útil del
dispositivo (p. 1246).
Los siguientes pasos muestran cómoAWS IoT CoreLa ubicación del dispositivo funciona.
Los datos de medición sin procesar relacionados con la ubicación del dispositivo se envían primero
desde el dispositivo. Los datos de medición se especifican como una carga JSON.
1235
AWS IoT Core Guía para desarrolladores
Cómo usarAWS IoT CoreUbicación del dispositivo
Los datos de medición se procesan yAWS IoT CoreLa ubicación del dispositivo elige los datos de
medición que se van a utilizar, que pueden ser información de Wi-Fi, telefonía móvil, escaneo de
GNSS o dirección IP.
3. Elija un solucionador
El solucionador de terceros se elige en función de los datos de medición. Por ejemplo, si los datos
de medición contienen información de direcciones IP y de Wi-Fi, elige el solucionador de Wi-Fi y el
solucionador de búsqueda inversa de IP.
4. Obtener la ubicación resuelta
Se envía una solicitud de API a los proveedores del solucionador solicitando resolver la
ubicación.AWS IoT Core A continuación, Device Location obtiene la información de geolocalización
estimada de los solucionadores.
5. Elige la ubicación resuelta
Se comparan la información de ubicación resuelta y su precisión, yAWS IoT CoreLa ubicación del
dispositivo selecciona los resultados de geolocalización con la mayor precisión.
6. Información de ubicación de salida
La información de geolocalización se le envía como carga útil de GeoJSON. La carga contiene las
coordenadas geográficas del WGS84, la información de precisión, los niveles de confianza y la marca
de tiempo en la que se obtuvo la ubicación resuelta.
Especifique los datos de medición sin procesar relacionados con la ubicación del dispositivo como
carga JSON. Para recuperar los datos de medición de la carga útil, vaya a los registros de su
dispositivo o utiliceCloudWatchRegistra y copia la información de los datos de la carga útil. La carga
JSON debe contener uno o más tipos de medición de datos. Para ver ejemplos que muestran el
formato de carga útil de varios solucionadores, consulteSolucionadores de ubicación y carga útil del
dispositivo (p. 1246).
2. Resolver información de ubicación
En los siguientes temas se muestra cómo utilizarAWS IoT CoreUbicación del dispositivo y ejemplos de
carga útil de ubicación del dispositivo.
1236
AWS IoT Core Guía para desarrolladores
Resolver la ubicación de los dispositivos de IoT
Temas
• Resolver la ubicación del dispositivo (consola) (p. 1237)
• Resolver la ubicación del dispositivo (API) (p. 1239)
• Solución de errores al resolver la ubicación (p. 1240)
El código siguiente muestra un ejemplo de carga JSON. La carga contiene datos de medición de
datos móviles y de Wi-Fi. Si su carga contiene tipos adicionales de datos de medición, se utilizará
el solucionador con la mayor precisión. Para obtener más información y ejemplos de carga útil,
consultethe section called “Solucionadores de ubicación y carga útil del dispositivo” (p. 1246).
Note
{
"Timestamp": 1664313161,
"Ip":{
"IpAddress": "54.240.198.35"
},
"WiFiAccessPoints": [{
"MacAddress": "A0:EC:F9:1E:32:C1",
"Rss": -77
}],
"CellTowers": {
"Gsm": [{
"Mcc": 262,
"Mnc": 1,
"Lac": 5126,
"GeranCid": 16504,
"GsmLocalId": {
"Bsic": 6,
"Bcch": 82
},
"GsmTimingAdvance": 1,
"RxLevel": -110,
"GsmNmr": [{
"Bsic": 7,
"Bcch": 85,
"RxLevel": -100,
"GlobalIdentity": {
1237
AWS IoT Core Guía para desarrolladores
Resolver la ubicación del dispositivo (consola)
"Lac": 1,
"GeranCid": 1
}
}]
}],
"Wcdma": [{
"Mcc": 262,
"Mnc": 7,
"Lac": 65535,
"UtranCid": 14674663,
"WcdmaNmr": [{
"Uarfcndl": 10786,
"UtranCid": 14674663,
"Psc": 149
},
{
"Uarfcndl": 10762,
"UtranCid": 14674663,
"Psc": 211
}
]
}],
"Lte": [{
"Mcc": 262,
"Mnc": 2,
"EutranCid": 2898945,
"Rsrp": -50,
"Rsrq": -5,
"LteNmr": [{
"Earfcn": 6300,
"Pci": 237,
"Rsrp": -60,
"Rsrq": -6,
"EutranCid": 2898945
},
{
"Earfcn": 6300,
"Pci": 442,
"Rsrp": -70,
"Rsrq": -7,
"EutranCid": 2898945
}
]
}]
}
}
La información de ubicación es del tipo blob y se devuelve como una carga útil que utiliza el formato
GeoJSON, que es un formato que se utiliza para codificar estructuras de datos geográficos. La carga
útil contiene:
• Las coordenadas geográficas del WGS84, que incluyen la información de latitud y longitud. También
puede incluir información sobre la altitud.
• El tipo de información de ubicación notificada, comoPunto. Un tipo de ubicación de punto representa
la ubicación como latitud y longitud del WGS84, codificadas comoPunto GeoJSON.
• La información de precisión horizontal y vertical, que indica la diferencia entre la información de
ubicación estimada por los solucionadores y la ubicación real del dispositivo.
• El nivel de confianza, que indica la incertidumbre en la respuesta de estimación de ubicación. El
valor predeterminado es 0.68, lo que indica una probabilidad del 68% de que la ubicación real del
dispositivo esté dentro del radio de incertidumbre de la ubicación estimada.
1238
AWS IoT Core Guía para desarrolladores
Resolver la ubicación del dispositivo (API)
• La ciudad, el estado, el país y el código postal donde se encuentra el dispositivo. Esta información
se notificará solo cuando se utilice el solucionador de búsqueda inversa de IP.
• La información de marca de tiempo, que corresponde a la fecha y la hora en que se resolvió la
ubicación. Utiliza el formato de marca de tiempo de Unix.
El código siguiente muestra un ejemplo de carga útil de GeoJSON devuelta al resolver la ubicación.
Note
SiAWS IoT CoreLa ubicación del dispositivo informa de errores cuando intenta resolver la
ubicación, usted puede solucionar los errores y resolver la ubicación. Para obtener más
información, consulte Solución de errores al resolver la ubicación (p. 1240).
{
"coordinates": [
13.376076698303223,
52.51823043823242
],
"type": "Point",
"properties": {
"verticalAccuracy": 45,
"verticalConfidenceLevel": 0.68,
"horizontalAccuracy": 303,
"horizontalConfidenceLevel": 0.68,
"country": "USA",
"state": "CA",
"city": "Sunnyvalue",
"postalCode": "91234",
"timestamp": "2022-11-18T12:23:58.189Z"
}
}
El siguiente comando muestra un ejemplo de cómo resolver la ubicación mediante esta operación de API.
Note
1239
AWS IoT Core Guía para desarrolladores
Solución de errores al resolver la ubicación
estimada obtenida como respuesta de la CLI en formato GeoJSON. Por ejemplo, el comando
siguiente almacena la información de ubicación enlocationout.jsonarchivo.
Este ejemplo incluye los puntos de acceso Wi-Fi y la dirección IP como tipos de medición.AWS IoT Core
La ubicación del dispositivo elige entre el solucionador de Wi-Fi y el solucionador de búsqueda inversa de
IP, y selecciona el solucionador con mayor precisión.
La ubicación resuelta se devuelve como una carga útil que utiliza el formato GeoJSON, que es un
formato que se utiliza para codificar estructuras de datos geográficos. A continuación, se almacena
enlocationout.jsonarchivo. La carga contiene las coordenadas de latitud y longitud del WGS84, la
información sobre el nivel de precisión y confianza, el tipo de datos de ubicación y la marca de tiempo en la
que se resolvió la ubicación.
{
"coordinates": [
13.37704086303711,
52.51865005493164
],
"type": "Point",
"properties": {
"verticalAccuracy": 707,
"verticalConfidenceLevel": 0.68,
"horizontalAccuracy": 389,
"horizontalConfidenceLevel": 0.68,
"country": "USA",
"state": "CA",
"city": "Sunnyvalue",
"postalCode": "91234",
"timestamp": "2022-11-18T14:03:57.391Z"
}
}
• error 400
Este error indica que el formato JSON de la carga útil del dispositivo no puede validarse conAWS IoT
CoreUbicación del dispositivo. El error puede producirse porque:
• Los datos de medición de JSON tienen un formato incorrecto.
• La carga contiene solo la información de la marca de tiempo.
• Los parámetros de los datos de medición, como la dirección IP, no son válidos.
Para resolver este error, compruebe si su JSON tiene el formato correcto y contiene datos de uno o más
tipos de medición como entrada. Si la dirección IP no es válida, para obtener información sobre cómo
puede proporcionar una dirección IP válida para resolver el error, consulteSolucionador de búsqueda
inversa de IP (p. 1251).
• error 403
1240
AWS IoT Core Guía para desarrolladores
Resolver la ubicación del dispositivo
mediante temas de MQTT
Este error indica que no tiene los permisos para realizar la operación de la API ni para utilizar laAWS
IoTconsola para recuperar la ubicación del dispositivo. Para resolver este error, compruebe que dispone
de los permisos necesarios para realizar esta acción. Este error puede producirse siAWS Management
Consolesesión o tuAWS CLIel token de sesión ha caducado. Para resolver este error, actualice el token
de sesión para usar elAWS CLI, o cerrar sesión enAWS Management Consoley, a continuación, inicie
sesión con sus credenciales.
• error 404
Este error indica que no se encontró ni resolvió ninguna información de ubicaciónAWS IoT
CoreUbicación del dispositivo. El error puede producirse debido a casos como la insuficiencia de datos
en la entrada de datos de medición. Por ejemplo:
• La información de la dirección MAC o de la torre de telefonía móvil no es suficiente.
• La dirección IP no está disponible para buscar y recuperar la ubicación.
• La carga útil del GNSS no es suficiente.
Para resolver el error en estos casos, compruebe si los datos de medición contienen la información
suficiente necesaria para resolver la ubicación del dispositivo.
• Error 500
Este error indica que se ha producido una excepción interna del servidor cuandoAWS IoT CoreLa
ubicación del dispositivo intentó resolver la ubicación. Para intentar corregir este error, actualice la
sesión y vuelva a intentar enviar los datos de medición para resolverlos.
$aws/device_location/{customer_device_id}/
1241
AWS IoT Core Guía para desarrolladores
Política de ubicación de dispositivos (temas de MQTT)
Los siguientes son los temas reservados que se utilizan para interactuar conAWS IoT CoreUbicación del
dispositivo.
El siguiente es un ejemplo de la política requerida para recibir mensajes sobre los distintos temas.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": [
"arn:aws:iotwireless:region:account:topic/$aws/device_location/customer_device_id/
get_position_estimate"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
1242
AWS IoT Core Guía para desarrolladores
Temas de ubicación del dispositivo y carga útil
"Resource": [
"arn:aws:iotwireless:region:account:topic/$aws/device_location/customer_device_id/
get_position_estimate/accepted",
"arn:aws:iotwireless:region:account:topic/$aws/device_location/customer_device_id/
get_position_estimate/rejected"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iotwireless:region:account:topic/$aws/device_location/customer_device_id/
get_position_estimate/accepted",
"arn:aws:iotwireless:region:account:topic/$aws/device_location/customer_device_id/
get_position_estimate/rejected"
]
}
]
}
Temas
• /get_position_estimate (p. 1243)
• /get_position_estimate/accepted (p. 1244)
• /get_position_estimate/rejected (p. 1245)
/get_position_estimate
Publique un mensaje sobre este tema para obtener los datos de medición sin procesar del dispositivo para
resolverlos medianteAWS IoT CoreUbicación del dispositivo.
$aws/device_location/customer_device_id/get_position_estimate
El mensaje publicado en este tema debe ser una carga JSON válida. Si el mensaje de entrada
no tiene un formato JSON válido, no recibirás ninguna respuesta. Para obtener más información,
consulteCarga útil de mensajes (p. 1243).
El formato de carga de mensajes sigue una estructura similar a la delAWS IoT Wirelesscuerpo de solicitud
de operación de la API,GetPositionEstimate. Contiene:
1243
AWS IoT Core Guía para desarrolladores
Temas de ubicación del dispositivo y carga útil
{
"Timestamp": "1664313161",
"MessageId": "ABCD1",
"WiFiAccessPoints": [
{
"MacAddress": "A0:EC:F9:1E:32:C1",
"Rss": -66
}
],
"Ip":{
"IpAddress": "54.192.168.0"
},
"Gnss":{
"Payload":"8295A614A2029517F4F77C0A7823B161A6FC57E25183D96535E3689783F6CA48",
"CaptureTime":1354393948
}
}
Ejemplo de política de
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": [
"arn:aws:iotwireless:region:account:topic/$aws/device_location/customer_device_id/
get_position_estimate"
]
}
]
}
/get_position_estimate/accepted
AWS IoT CoreDevice Location publica una respuesta a este tema cuando devuelve la información de
ubicación resuelta del dispositivo. La información de ubicación se devuelve enFormato GeoJSON.
$aws/device_location/customer_device_id/get_position_estimate/accepted
1244
AWS IoT Core Guía para desarrolladores
Temas de ubicación del dispositivo y carga útil
{
"coordinates": [
13.37704086303711,
52.51865005493164
],
"type": "Point",
"properties": {
"verticalAccuracy": 707,
"verticalConfidenceLevel": 0.68,
"horizontalAccuracy": 389,
"horizontalConfidenceLevel": 0.68,
"country": "USA",
"state": "CA",
"city": "Sunnyvalue",
"postalCode": "91234",
"timestamp": "2022-11-18T14:03:57.391Z",
"messageId": "ABCD1"
}
}
Ejemplo de política de
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iotwireless:region:account:topic/$aws/device_location/customer_device_id/
get_position_estimate/accepted"
]
},
{
"Effect": "Allow",
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iotwireless:region:account:topic/$aws/device_location/customer_device_id/
get_position_estimate/accepted"
]
}
]
}
/get_position_estimate/rejected
AWS IoT CoreDevice Location publica una respuesta de error a este tema cuando no puede resolver la
ubicación del dispositivo.
1245
AWS IoT Core Guía para desarrolladores
Solucionadores de ubicación y carga útil del dispositivo
$aws/device_location/customer_device_id/get_position_estimate/rejected
A continuación se muestra la carga útil del mensaje y un ejemplo de política. Para obtener información
sobre los errores, consulteSolución de errores al resolver la ubicación (p. 1240).
A continuación se muestra un ejemplo de la carga útil del mensaje que proporciona el código de error y el
mensaje, que indican por quéAWS IoT CoreLa ubicación del dispositivo no pudo resolver la información
de ubicación. Si especificó unMessageIdal proporcionar sus datos de medición sin procesar yAWS
IoT CoreLa ubicación del dispositivo no pudo resolver la información de ubicación y, a continuación, la
mismaMessageIdla información se devolverá en la carga útil del mensaje.
{
"errorCode": 500,
"errorMessage":"Internal server error",
"messageId": "ABCD1"
}
Ejemplo de política de
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Subscribe"
],
"Resource": [
"arn:aws:iotwireless:region:account:topic/$aws/device_location/customer_device_id/
get_position_estimate/rejected"
]
},
{
"Action": [
"iot:Receive"
],
"Resource": [
"arn:aws:iotwireless:region:account:topic/$aws/device_location/customer_device_id/
get_position_estimate/rejected"
]
}
]
}
1246
AWS IoT Core Guía para desarrolladores
Solucionador basado en Wi-Fi
Para resolver la ubicación del dispositivo, especifique uno o más de estos tipos de datos de medición. Se
devolverá una ubicación única y resuelta para todos los datos de medición combinados.
Temas
• Solucionador basado en Wi-Fi (p. 1247)
• Solucionador basado en dispositivos móviles (p. 1247)
• Solucionador de búsqueda inversa de IP (p. 1251)
• solucionador GNSS (p. 1251)
ElLoRaLos dispositivos WAN deben tenerLoRaChipset Edge, que puede decodificar la información de
escaneo de Wi-Fi entrante. LoRaEdge es una plataforma de consumo ultrabajo que integra un sistema
de largo alcanceLoRatransceptor, escáner GNSS de múltiples constelaciones y escáner MAC Wi-Fi
pasivo dirigido a aplicaciones de geolocalización. Cuando se recibe un mensaje de enlace ascendente
del dispositivo, los datos del escaneo de Wi-Fi se envían aAWS IoT CoreUbicación del dispositivo, y la
ubicación se estima en función de los resultados del escaneo de Wi-Fi. La información decodificada se
pasa entonces al solucionador basado en Wi-Fi para recuperar la información de ubicación.
{
"Timestamp": 1664313161, // optional
"WiFiAccessPoints": [
{
"MacAddress": "A0:EC:F9:1E:32:C1", // required
"Rss": -75 // required
}
]
}
• GSM
• CDMA
• WCDMA
• TD-SCDMA
1247
AWS IoT Core Guía para desarrolladores
Solucionador basado en dispositivos móviles
• LATE
{
"Timestamp": 1664313161, // optional
"CellTowers": {
"Lte": [
{
"Mcc": int, // required
"Mnc": int, // required
"EutranCid": int, // required
"Tac": int, // optional
"LteLocalId": { // optional
"Pci": int, // required
"Earfcn": int, // required
},
"LteTimingAdvance": int, // optional
"Rsrp": int, // optional
"Rsrq": float, // optional
"NrCapable": boolean, // optional
"LteNmr": [
{
"Pci": int, // required
"Earfcn": int, // required
"EutranCid": int, // required
"Rsrp": int, // optional
"Rsrq": float // optional
}
]
}
]
}
}
{
"Timestamp": 1664313161, // optional
1248
AWS IoT Core Guía para desarrolladores
Solucionador basado en dispositivos móviles
"CellTowers": {
"Gsm": [
{
"Mcc": int, // required
"Mnc": int, // required
"Lac": int, // required
"GeranCid": int, // required
"GsmLocalId": { // optional
"Bsic": int, // required
"Bcch": int, // required
},
"GsmTimingAdvance": int, // optional
"RxLevel": int, // optional
"GsmNmr": [ // optional
{
"Bsic": int, // required
"Bcch": int, // required
"RxLevel": int, // optional
"GlobalIdentity": {
"Lac": int, // required
"GeranCid": int // required
}
}
]
}
]
}
Cuando utilice estos datos de medición, debe especificar información como la potencia de la señal y la
información de identificación, la información de la estación base y los parámetros adicionales opcionales.
El código siguiente muestra un ejemplo del formato de carga. Para obtener más información sobre estos
parámetros, consulteObjeto CDMA.
{
"Timestamp": 1664313161, // optional
"CellTowers": {
"Cdma": [
{
"SystemId": int, // required
"NetworkId": int, // required
"BaseStationId": int, // required
"RegistrationZone": int, // optional
"CdmaLocalId": { // optional
"PnOffset": int, // required
"CdmaChannel": int, // required
},
"PilotPower": int, // optional
"BaseLat": float, // optional
"BaseLng": float, // optional
"CdmaNmr": [ // optional
{
"PnOffset": int, // required
"CdmaChannel": int, // required
"PilotPower": int, // optional
"BaseStationId": int // optional
}
]
}
]
}
}
1249
AWS IoT Core Guía para desarrolladores
Solucionador basado en dispositivos móviles
{
"Timestamp": 1664313161, // optional
"CellTowers": {
"Wcdma": [
{
"Mcc": int, // required
"Mnc": int, // required
"UtranCid": int, // required
"Lac": int, // optional
"WcdmaLocalId": { // optional
"Uarfcndl": int, // required
"Psc": int, // required
},
"Rscp": int, // optional
"Pathloss": int, // optional
"WcdmaNmr": [ // optional
{
"Uarfcndl": int, // required
"Psc": int, // required
"UtranCid": int, // required
"Rscp": int, // optional
"Pathloss": int, // optional
}
]
}
]
}
}
TD-SCDMA (acceso múltiple por división de código síncrono por división de tiempo)
Cuando utilice estos datos de medición, debe especificar información como el código de red y país, la
información de identificación y potencia de la señal, la información de la estación base y los parámetros
adicionales opcionales. El código siguiente muestra un ejemplo del formato de carga. Para obtener más
información sobre estos parámetros, consulteObjeto CDMA.
{
"Timestamp": 1664313161, // optional
"CellTowers": {
"Tdscdma": [
{
"Mcc": int, // required
"Mnc": int, // required
"UtranCid": int, // required
"Lac": int, // optional
"TdscdmaLocalId": { // optional
"Uarfcn": int, // required
"CellParams": int, // required
},
"TdscdmaTimingAdvance": int, // optional
"Rscp": int, // optional
"Pathloss": int, // optional
"TdscdmaNmr": [ // optional
{
"Uarfcn": int, // required
"CellParams": int, // required
1250
AWS IoT Core Guía para desarrolladores
Solucionador de búsqueda inversa de IP
Al utilizar la búsqueda inversa de IP, usted se compromete a no utilizarla con el fin de identificar o
localizar una dirección particular o postal específica.
Cuando se utiliza este solucionador, también se indican la ciudad, el estado, el país y el código
postal en el que se encuentra el dispositivo, además de las coordenadas. Para ver un ejemplo,
consulte Resolver la ubicación del dispositivo (consola) (p. 1237).
{
"Timestamp": 1664313161,
"Ip":{
"IpAddress":"54.240.198.35"
}
}
solucionador GNSS
Utilice el solucionador GNSS (Sistema global de navegación por satélite) para recuperar la ubicación del
dispositivo mediante la información contenida en los mensajes de resultados del escaneo GNSS o en
los mensajes NAV. Si lo desea, puede proporcionar información de asistencia GNSS adicional, lo que
reduce la cantidad de variables que el solucionador debe utilizar para buscar señales. Al proporcionar
esta información de asistencia, que incluye la posición, la altitud y la información de precisión y tiempo
de captura, el solucionador puede identificar fácilmente los satélites a la vista y calcular la ubicación del
dispositivo.
Este solucionador se puede utilizar conLoRadispositivos WAN y otros dispositivos que se han
aprovisionado conAWS IoT. Para los dispositivos de IoT generales, si los dispositivos admiten la
estimación de ubicación mediante GNSS, cuando se recibe la información de escaneo del GNSS del
1251
AWS IoT Core Guía para desarrolladores
solucionador GNSS
AntesAWS IoT CoreLa ubicación del dispositivo puede resolver la ubicación del dispositivo; debe
eliminar el byte de destino de la carga útil.
{
"Timestamp": 1664313161, // optional
"Gnss": {
"AssistAltitude": number, // optional
"AssistPosition": [ number ], // optional
"CaptureTime": number, // optional
"CaptureTimeAccuracy": number, // optional
"Payload": "string", // required
"Use2DSolver": boolean // optional
}
}
1252
AWS IoT Core Guía para desarrolladores
Cómo se generan los mensajes de los eventos
A continuación, mostramos un ejemplo de política necesaria para recibir eventos del ciclo de vida:
{
"Version":"2012-10-17",
"Statement":[{
"Effect":"Allow",
"Action":[
"iot:Subscribe",
"iot:Receive"
],
"Resource":[
"arn:aws:iot:region:account:/$aws/events/*"
]
}]
}
• Para activar los mensajes de eventos, vaya a laAjustespestaña de laAWS IoTconsola y, a continuación,
en lamensajes basados en eventossección, eligeEl ID de cliente. Puede especificar los eventos que
desea gestionar.
• Para controlar qué tipos de eventos se publican mediante la API o la CLI, llame
aUpdateEventConfigurationsAPI o utilice laupdate-event-configurationsCLI command. Por ejemplo:
1253
AWS IoT Core Guía para desarrolladores
Habilitar eventos paraAWS IoT
Note
Todas las comillas (") van precedidas de barras diagonales invertidas (\).
1254
AWS IoT Core Guía para desarrolladores
Habilitar eventos paraAWS IoT
1255
AWS IoT Core Guía para desarrolladores
Habilitar eventos paraAWS IoT
$aws/events/
thingTypeAssociation/
thing/thingName/
thingType/thingTypeName/
removed
1256
AWS IoT Core Guía para desarrolladores
Eventos de registro
Eventos de registro
El registro puede publicar mensajes de eventos cuando se crean, actualizan o eliminan cosas, tipos de
cosas y grupos de cosas. Estos eventos, sin embargo, no están disponibles de forma predeterminada.
Para obtener más información sobre cómo activar estos eventos, consulteHabilitar eventos paraAWS
IoT (p. 1253).
Eventos de cosas
Cosa creada, actualizada o eliminada
El registro publica los siguientes mensajes de eventos cuando se crean, actualizan o eliminan objetos:
• $aws/events/thing/thingName/created
• $aws/events/thing/thingName/updated
• $aws/events/thing/thingName/deleted
{
"eventType" : "THING_EVENT",
"eventId" : "f5ae9b94-8b8e-4d8e-8c8f-b3266dd89853",
"timestamp" : 1234567890123,
"operation" : "CREATED|UPDATED|DELETED",
"accountId" : "123456789012",
"thingId" : "b604f69c-aa9a-4d4a-829e-c480e958a0b5",
"thingName" : "MyThing",
"versionNumber" : 1,
"thingTypeName" : null,
"attributes": {
"attribute3": "value3",
"attribute1": "value1",
"attribute2": "value2"
}
}
eventType
Se establece en "THING_EVENT".
eventId
1257
AWS IoT Core Guía para desarrolladores
Eventos de tipo cosa
• CREATED
• UPDATED
• DELETED
accountId
TuCuenta de AWSJID.
thingId
La versión del objeto que se crea, actualiza o elimina. Este valor se establece en 1 cuando se crea un
objeto. Aumenta en 1 cada vez que se actualiza el objeto.
thingTypeName
• $aws/events/thingType/thingTypeName/created
• $aws/events/thingType/thingTypeName/updated
• $aws/events/thingType/thingTypeName/deleted
{
"eventType" : "THING_TYPE_EVENT",
"eventId" : "8827376c-4b05-49a3-9b3b-733729df7ed5",
"timestamp" : 1234567890123,
"operation" : "CREATED|UPDATED|DELETED",
"accountId" : "123456789012",
"thingTypeId" : "c530ae83-32aa-4592-94d3-da29879d1aac",
"thingTypeName" : "MyThingType",
"isDeprecated" : false|true,
"deprecationDate" : null,
1258
AWS IoT Core Guía para desarrolladores
Eventos de tipo cosa
eventType
Se establece en "THING_TYPE_EVENT".
eventId
TuCuenta de AWSJID.
thingTypeId
El nombre del tipo de objeto que se crea o elimina, o que está descartado.
isDeprecated
Un conjunto de pares nombre-valor asociados con el tipo de objeto que puede utilizarse para realizar
búsquedas.
description
• $aws/events/thingTypeAssociation/thing/thingName/thingType/typeName/added
• $aws/events/thingTypeAssociation/thing/thingName/thingType/typeName/removed
1259
AWS IoT Core Guía para desarrolladores
Eventos de grupos de cosas
{
"eventId" : "87f8e095-531c-47b3-aab5-5171364d138d",
"eventType" : "THING_TYPE_ASSOCIATION_EVENT",
"operation" : "ADDED",
"thingId" : "b604f69c-aa9a-4d4a-829e-c480e958a0b5",
"thingName": "myThing",
"thingTypeName" : "MyThingType",
"timestamp" : 1234567890123,
}
eventId
Se establece en "THING_TYPE_ASSOCIATION_EVENT".
operación
• $aws/events/thingGroup/groupName/created
• $aws/events/thingGroup/groupName/updated
• $aws/events/thingGroup/groupName/deleted
1260
AWS IoT Core Guía para desarrolladores
Eventos de grupos de cosas
{
"eventType": "THING_GROUP_EVENT",
"eventId": "8b9ea8626aeaa1e42100f3f32b975899",
"timestamp": 1603995417409,
"operation": "UPDATED",
"accountId": "571EXAMPLE833",
"thingGroupId": "8757eec8-bb37-4cca-a6fa-403b003d139f",
"thingGroupName": "Tg_level5",
"versionNumber": 3,
"parentGroupName": "Tg_level4",
"parentGroupId": "5fce366a-7875-4c0e-870b-79d8d1dce119",
"description": "New description for Tg_level5",
"rootToParentThingGroups": [
{
"groupArn": "arn:aws:iot:us-west-2:571EXAMPLE833:thinggroup/TgTopLevel",
"groupId": "36aa0482-f80d-4e13-9bff-1c0a75c055f6"
},
{
"groupArn": "arn:aws:iot:us-west-2:571EXAMPLE833:thinggroup/Tg_level1",
"groupId": "bc1643e1-5a85-4eac-b45a-92509cbe2a77"
},
{
"groupArn": "arn:aws:iot:us-west-2:571EXAMPLE833:thinggroup/Tg_level2",
"groupId": "0476f3d2-9beb-48bb-ae2c-ea8bd6458158"
},
{
"groupArn": "arn:aws:iot:us-west-2:571EXAMPLE833:thinggroup/Tg_level3",
"groupId": "1d9d4ffe-a6b0-48d6-9de6-2e54d1eae78f"
},
{
"groupArn": "arn:aws:iot:us-west-2:571EXAMPLE833:thinggroup/Tg_level4",
"groupId": "5fce366a-7875-4c0e-870b-79d8d1dce119"
}
],
"attributes": {
"attribute1": "value1",
"attribute3": "value3",
"attribute2": "value2"
},
"dynamicGroupMappingId": null
}
eventType
Se establece en "THING_GROUP_EVENT".
eventId
1261
AWS IoT Core Guía para desarrolladores
Eventos de grupos de cosas
• DELETED
accountId
TuCuenta de AWSJID.
thingGroupId
La versión del grupo de objetos. Este valor se establece en 1 cuando se crea un grupo de objetos.
Aumenta en 1 cada vez que se actualiza el grupo de objetos.
parentGroupName
Una matriz de información acerca del grupo principal de objetos. Hay un elemento para cada grupo de
cosas principal, empezando por el grupo de cosas raíz y continuando hasta el grupo de cosas principal
del grupo de cosas. Cada entrada contiene las del grupo de cosasgroupArnygroupId.
attributes
• $aws/events/thingGroupMembership/thingGroup/thingGroupName/thing/thingName/
added
• $aws/events/thingGroupMembership/thingGroup/thingGroupName/thing/thingName/
removed
{
"eventType" : "THING_GROUP_MEMBERSHIP_EVENT",
"eventId" : "d684bd5f-6f6e-48e1-950c-766ac7f02fd1",
"timestamp" : 1234567890123,
"operation" : "ADDED|REMOVED",
"accountId" : "123456789012",
"groupArn" : "arn:aws:iot:ap-northeast-2:123456789012:thinggroup/MyChildThingGroup",
"groupId" : "06838589-373f-4312-b1f2-53f2192291c4",
"thingArn" : "arn:aws:iot:ap-northeast-2:123456789012:thing/MyThing",
"thingId" : "b604f69c-aa9a-4d4a-829e-c480e958a0b5",
"membershipId" : "8505ebf8-4d32-4286-80e9-c23a4a16bbd8"
1262
AWS IoT Core Guía para desarrolladores
Eventos de grupos de cosas
eventType
Se establece en "THING_GROUP_MEMBERSHIP_EVENT".
eventId
El ID del evento.
timestamp
ADDED cuando se añade un objeto a un grupo de objetos. REMOVED cuando se elimina un objeto de un
grupo de objetos.
accountId
TuCuenta de AWSJID.
groupArn
El ID del grupo.
thingArn
Un ID que representa la relación entre objeto y el grupo de objetos. Este valor se genera cuando
añade un objeto a un grupo de objetos.
• $aws/events/thingGroupHierarchy/thingGroup/parentThingGroupName/
childThingGroup/childThingGroupName/added
• $aws/events/thingGroupHierarchy/thingGroup/parentThingGroupName/
childThingGroup/childThingGroupName/removed
{
"eventType" : "THING_GROUP_HIERARCHY_EVENT",
"eventId" : "264192c7-b573-46ef-ab7b-489fcd47da41",
"timestamp" : 1234567890123,
"operation" : "ADDED|REMOVED",
"accountId" : "123456789012",
1263
AWS IoT Core Guía para desarrolladores
Eventos de trabajos
"thingGroupId" : "8f82a106-6b1d-4331-8984-a84db5f6f8cb",
"thingGroupName" : "MyRootThingGroup",
"childGroupId" : "06838589-373f-4312-b1f2-53f2192291c4",
"childGroupName" : "MyChildThingGroup"
}
eventType
Se establece en "THING_GROUP_HIERARCHY_EVENT".
eventId
El ID del evento.
timestamp
ADDED cuando se añade un objeto a un grupo de objetos. REMOVED cuando se elimina un objeto de un
grupo de objetos.
accountId
TuCuenta de AWSJID.
thingGroupId
Eventos de trabajos
ElAWS IoTEl servicio de trabajos publica en temas reservados del protocolo MQTT cuando los trabajos
están pendientes, completados o cancelados, y cuando un dispositivo informa de un éxito o un error al
ejecutar un trabajo. Los dispositivos o las aplicaciones de administración y supervisión pueden realizar un
seguimiento del estado de los trabajos suscribiéndose a estos temas.
Mensajes de respuesta delAWS IoTEl servicio de empleos no pasa por el intermediario de mensajes
y otros clientes o reglas no pueden suscribirse a él. Para suscribirse a los mensajes relacionados con
la actividad laboral, utilice elnotifyynotify-nexttemas Para obtener información sobre temas
relacionados con los empleos, consulteTemas de trabajos (p. 121).
Para recibir notificaciones sobre las actualizaciones de los trabajos, habilite estos eventos de trabajos
mediante elAWS Management Console, o mediante la API o la CLI. Para obtener más información,
consulte Habilitar eventos paraAWS IoT (p. 1253).
1264
AWS IoT Core Guía para desarrolladores
Eventos de trabajos
Dado que cancelar o eliminar un trabajo puede llevar un tiempo, se envían dos mensajes para indicar el
comienzo y el final de una solicitud. Por ejemplo, cuando se inicia una solicitud de cancelación, se envía
un mensaje al tema $aws/events/job/jobID/cancellation_in_progress. Cuando finaliza una
solicitud de cancelación, se envía un mensaje al tema $aws/events/job/jobID/canceled.
En las solicitudes de eliminación de trabajos se lleva a cabo un proceso parecido. Las aplicaciones de
administración y monitorización pueden suscribirse a estos temas y hacer un seguimiento del estado de los
trabajos. Para obtener más información acerca de cómo publicar en temas de MQTT y suscribirse a ellos,
consulte the section called “Protocolos de comunicación de dispositivos” (p. 87).
Políticas de trabajo
Trabajo finalizado/cancelado/eliminado
El servicio Jobs de AWS IoT publica un mensaje en un tema de MQTT cuando se completa, cancela o
elimina un trabajo, o bien cuando la cancelación o la eliminación está en curso:
• $aws/events/job/jobID/completed
• $aws/events/job/jobID/canceled
• $aws/events/job/jobID/deleted
• $aws/events/job/jobID/cancellation_in_progress
• $aws/events/job/jobID/deletion_in_progress
{
"eventType": "JOB",
"eventId": "7364ffd1-8b65-4824-85d5-6c14686c97c6",
"timestamp": 1234567890,
"operation": "completed",
"jobId": "27450507-bf6f-4012-92af-bb8a1c8c4484",
"status": "COMPLETED",
"targetSelection": "SNAPSHOT|CONTINUOUS",
"targets": [
"arn:aws:iot:us-east-1:123456789012:thing/a39f6f91-70cf-4bd2-a381-9c66df1a80d0",
"arn:aws:iot:us-east-1:123456789012:thinggroup/2fc4c0a4-6e45-4525-
a238-0fe8d3dd21bb"
],
"description": "My Job Description",
"completedAt": 1234567890123,
"createdAt": 1234567890123,
"lastUpdatedAt": 1234567890123,
"jobProcessDetails": {
"numberOfCanceledThings": 0,
"numberOfRejectedThings": 0,
"numberOfFailedThings": 0,
"numberOfRemovedThings": 0,
"numberOfSucceededThings": 3
}
}
{
"eventType": "JOB",
"eventId": "568d2ade-2e9c-46e6-a115-18afa1286b06",
"timestamp": 1234567890,
"operation": "canceled",
"jobId": "4d2a531a-da2e-47bb-8b9e-ff5adcd53ef0",
1265
AWS IoT Core Guía para desarrolladores
Eventos de trabajos
"status": "CANCELED",
"targetSelection": "SNAPSHOT|CONTINUOUS",
"targets": [
"arn:aws:iot:us-east-1:123456789012:thing/Thing0-947b9c0c-ff10-4a80-b4b3-
cd33d0145a0f",
"arn:aws:iot:us-east-1:123456789012:thinggroup/ThingGroup1-95c644d5-1621-41a6-9aa5-
ad2de581d18f"
],
"description": "My job description",
"createdAt": 1234567890123,
"lastUpdatedAt": 1234567890123
}
{
"eventType": "JOB",
"eventId": "568d2ade-2e9c-46e6-a115-18afa1286b06",
"timestamp": 1234567890,
"operation": "deleted",
"jobId": "4d2a531a-da2e-47bb-8b9e-ff5adcd53ef0",
"status": "DELETED",
"targetSelection": "SNAPSHOT|CONTINUOUS",
"targets": [
"arn:aws:iot:us-east-1:123456789012:thing/Thing0-947b9c0c-ff10-4a80-b4b3-
cd33d0145a0f",
"arn:aws:iot:us-east-1:123456789012:thinggroup/
ThingGroup1-95c644d5-1621-41a6-9aa5-ad2de581d18f"
],
"description": "My job description",
"createdAt": 1234567890123,
"lastUpdatedAt": 1234567890123,
"comment": "Comment for this operation"
}
{
"eventType": "JOB",
"eventId": "568d2ade-2e9c-46e6-a115-18afa1286b06",
"timestamp": 1234567890,
"operation": "cancellation_in_progress",
"jobId": "4d2a531a-da2e-47bb-8b9e-ff5adcd53ef0",
"status": "CANCELLATION_IN_PROGRESS",
"targetSelection": "SNAPSHOT|CONTINUOUS",
"targets": [
"arn:aws:iot:us-east-1:123456789012:thing/Thing0-947b9c0c-ff10-4a80-b4b3-
cd33d0145a0f",
"arn:aws:iot:us-east-1:123456789012:thinggroup/
ThingGroup1-95c644d5-1621-41a6-9aa5-ad2de581d18f"
],
"description": "My job description",
"createdAt": 1234567890123,
"lastUpdatedAt": 1234567890123,
"comment": "Comment for this operation"
}
{
"eventType": "JOB",
"eventId": "568d2ade-2e9c-46e6-a115-18afa1286b06",
1266
AWS IoT Core Guía para desarrolladores
Eventos del ciclo de vida
"timestamp": 1234567890,
"operation": "deletion_in_progress",
"jobId": "4d2a531a-da2e-47bb-8b9e-ff5adcd53ef0",
"status": "DELETION_IN_PROGRESS",
"targetSelection": "SNAPSHOT|CONTINUOUS",
"targets": [
"arn:aws:iot:us-east-1:123456789012:thing/Thing0-947b9c0c-ff10-4a80-b4b3-
cd33d0145a0f",
"arn:aws:iot:us-east-1:123456789012:thinggroup/
ThingGroup1-95c644d5-1621-41a6-9aa5-ad2de581d18f"
],
"description": "My job description",
"createdAt": 1234567890123,
"lastUpdatedAt": 1234567890123,
"comment": "Comment for this operation"
}
El servicio Jobs de AWS IoT publica un mensaje cuando un dispositivo actualiza la ejecución de un
trabajo al estado final:
• $aws/events/jobExecution/jobID/succeeded
• $aws/events/jobExecution/jobID/failed
• $aws/events/jobExecution/jobID/rejected
• $aws/events/jobExecution/jobID/canceled
• $aws/events/jobExecution/jobID/timed_out
• $aws/events/jobExecution/jobID/removed
• $aws/events/jobExecution/jobID/deleted
{
"eventType": "JOB_EXECUTION",
"eventId": "cca89fa5-8a7f-4ced-8c20-5e653afb3572",
"timestamp": 1234567890,
"operation": "succeeded|failed|rejected|canceled|removed|timed_out",
"jobId": "154b39e5-60b0-48a4-9b73-f6f8dd032d27",
"thingArn": "arn:aws:iot:us-east-1:123456789012:myThing/6d639fbc-8f85-4a90-924d-
a2867f8366a7",
"status": "SUCCEEDED|FAILED|REJECTED|CANCELED|REMOVED|TIMED_OUT",
"statusDetails": {
"key": "value"
}
}
Es posible que los mensajes de ciclo de vida se envíen de forma desordenada. Puede que reciba
mensajes duplicados.
En este tema:
• Eventos de conexión/desconexión (p. 1268)
1267
AWS IoT Core Guía para desarrolladores
Eventos de conexión/desconexión
Eventos de conexión/desconexión
Note
¿ConAWS IoTAl indexar la flota de Device Management, puede buscar cosas, ejecutar consultas
agregadas y crear grupos dinámicos basados en los eventos de conexión o desconexión de
cosas. Para obtener más información, consulteIndexación de flotas.
AWS IoT publica un mensaje en los siguientes temas MQTT cuando un cliente se conecta o se
desconecta:
A continuación, se muestra una lista de elementos JSON que se encuentran en los mensajes de conexión/
desconexión publicados en el tema $aws/events/presence/connected/clientId.
clientId
Los ID de cliente que contienen los símbolos # o + no recibirán eventos del ciclo de vida.
clientInitiatedDisconnect
True si el cliente inició la desconexión. De lo contrario, devuelve false. Sólo se encuentra en mensajes
de desconexión.
disconnectReason
La razón por la que el cliente se está desconectando. Sólo se encuentra en mensajes de desconexión.
La siguiente tabla contiene valores válidos e indica si el bróker los enviaráMensajes de última voluntad
y testamento (LWT) (p. 100)cuando se produce la desconexión.
1268
AWS IoT Core Guía para desarrolladores
Eventos de conexión/desconexión
eventType
La dirección IP del cliente que se conecta. Puede estar en formato IPv4 o IPv6. Sólo se encuentra en
los mensajes de conexión.
principalIdentifier
Las credenciales que se utilizan para la autenticación. En el caso de los certificados de autenticación
mutua de TLS, se trata del ID de certificado. Para el resto de conexiones, se trata de las credenciales
de IAM.
sessionIdentifier
Un identificador único global de AWS IoT que existe durante toda la vida de la sesión.
timestamp
El número de versión del evento del ciclo de vida. Se trata de un valor entero largo que aumenta de
forma monótona para cada conexión de un ID de cliente. El número de versión puede utilizarlo un
suscriptor para deducir el orden de los eventos del ciclo de vida.
1269
AWS IoT Core Guía para desarrolladores
Eventos de suscripción/cancelación de suscripción
Note
Los mensajes de conexión y desconexión de una conexión de cliente tienen el mismo número
de versión.
El número de versión podría saltarse algunos valores y no se garantiza que se vaya a
incrementar de forma coherente en 1 para cada evento.
Si un cliente no se conecta durante aproximadamente una hora, el número de versión se
restablece a 0. En las sesiones persistentes, el número de versión se restablece a 0 después
de que un cliente haya estado desconectado durante más tiempo del configurado time-to-live
(TTL) para la sesión persistente.
{
"clientId": "186b5",
"timestamp": 1573002230757,
"eventType": "connected",
"sessionIdentifier": "a4666d2a7d844ae4ac5d7b38c9cb7967",
"principalIdentifier": "12345678901234567890123456789012",
"ipAddress": "192.0.2.0",
"versionNumber": 0
}
{
"clientId": "186b5",
"timestamp": 1573002340451,
"eventType": "disconnected",
"sessionIdentifier": "a4666d2a7d844ae4ac5d7b38c9cb7967",
"principalIdentifier": "12345678901234567890123456789012",
"clientInitiatedDisconnect": true,
"disconnectReason": "CLIENT_INITIATED_DISCONNECT",
"versionNumber": 0
}
$aws/events/subscriptions/subscribed/clientId
o bien
1270
AWS IoT Core Guía para desarrolladores
Eventos de suscripción/cancelación de suscripción
$aws/events/subscriptions/unsubscribed/clientId
Donde clientId es el ID de cliente MQTT que se conecta con el agente de mensajes de AWS IoT.
{
"clientId": "186b5",
"timestamp": 1460065214626,
"eventType": "subscribed" | "unsubscribed",
"sessionIdentifier": "00000000-0000-0000-0000-000000000000",
"principalIdentifier": "000000000000/ABCDEFGHIJKLMNOPQRSTU:some-user/
ABCDEFGHIJKLMNOPQRSTU:some-user",
"topics" : ["foo/bar","device/data","dog/cat"]
}
A continuación, se ofrece una lista de elementos JSON que se encuentran en los mensajes suscritos y no
suscritos publicados en los temas $aws/events/subscriptions/subscribed/clientId y $aws/
events/subscriptions/unsubscribed/clientId.
clientId
Los ID de cliente que contienen los símbolos # o + no recibirán eventos del ciclo de vida.
eventType
Las credenciales que se utilizan para la autenticación. En el caso de los certificados de autenticación
mutua de TLS, se trata del ID de certificado. Para otras conexiones, se trata de credenciales de IAM.
sessionIdentifier
Un identificador único global de AWS IoT que existe durante toda la vida de la sesión.
timestamp
Note
Es posible que los mensajes de ciclo de vida se envíen de forma desordenada. Puede que reciba
mensajes duplicados.
1271
AWS IoT Core Guía para desarrolladores
Introducción
AWS IoT Corepara LoRa WAN solo admite el formato de dirección IPv4. No admite IPv6 ni la
configuración de doble pila (IPv4 e IPv6). Para obtener más información, consulte Servicio de
AWSAplicaciones compatibles con IPv6.
Introducción
LoRaLos dispositivos WAN son dispositivos de largo alcance, de bajo consumo y que funcionan con
baterías que utilizan el protocolo LoRa WAN para operar en un espectro radioeléctrico sin licencia.
LoRaWAN es un protocolo de comunicación de red de área amplia (LPWAN) de bajo consumo en el que
se basaLoRa. LoRaes el protocolo de capa física que permite la comunicación de área amplia y bajo
consumo entre dispositivos.
Puede integrar sus dispositivos LoRa WAN de la misma manera que incorporaría otros dispositivos de
IoTAWS IoT. Para conectar sus dispositivos LoRa WAN aAWS IoT, debe utilizar una puerta de enlace
LoRa WAN. La puerta de enlace actúa como un puente AWS IoT Core para conectar el dispositivo a la
LoRa WAN e intercambiar mensajes. AWS IoT Corefor LoRa WAN usa el motor de AWS IoT reglas para
enrutar los mensajes de sus dispositivos LoRa WAN a otros AWS IoT servicios.
Para reducir el esfuerzo de desarrollo e integrar rápidamente sus dispositivos a AWS IoT Core la LoRa
WAN, le recomendamos que utilice dispositivos finales LoRa con certificación WAN. Para obtener más
información, consulte la página de descripción general del producto AWS IoT Core para LoRa WAN.
Para obtener información sobre cómo obtener la certificación LoRa WAN de sus dispositivos, consulte
Certificación de productos LoRa WAN.
Con la consola
Para incorporar sus dispositivos LoRa WAN y puertas de enlace mediante elAWS Management Console,
inicie sesión en la página de LoRaWAN de la AWS IoT Core AWS IoT consola AWS Management Console
y navegue hasta ella. A continuación, puede utilizar la sección Introducción para agregar sus puertas de
enlace y dispositivos a AWS IoT Core la LoRa WAN. Para obtener más información, consulte Uso de la
consola para integrar el dispositivo y la puerta de enlace aAWS IoT Core para LoRaWAN (p. 1277).
Puede incorporar dispositivos LoRa WAN y Sidewalk mediante la API AWS IoTinalámbrica. La API AWS
IoT inalámbrica en AWS IoT Core la que se basa la LoRa WAN es compatible con el AWS SDK. Para
obtener más información, consulte AWSSDK y kits de herramientas.
1272
AWS IoT Core Guía para desarrolladores
AWS IoT Corepara regiones y
puntos de conexión LoRa WAN
Puede utilizar AWS CLI para ejecutar comandos para incorporar y administrar sus puertas de enlace y
dispositivos LoRa WAN. Para obtener más información, consulte la referencia de CLI AWS IoT inalámbrica.
Para una comunicación más segura entre sus dispositivosAWS IoT, puede conectar sus dispositivos a
una LoRa WAN a través AWS IoT Core de su nube privada virtual (VPC), AWS PrivateLink en lugar de
conectarse a través de la Internet pública. Para obtener más información, consulte Conectarse aAWS IoT
Core para LoRaWANa través de un punto final de interfaz VPC (p. 1308).
AWS IoT Corepara LoRa WAN tiene cuotas que se aplican a los datos del dispositivo que se transmiten
entre los dispositivos y el TPS máximo para las operaciones de la API AWS IoT inalámbrica. Para obtener
más información, consulte AWS IoT Corelas cuotas de LoRa WAN en la Referencia AWS general.
Para obtener más información sobre la descripción general del producto y los precios, consulte AWS IoT
Coreprecios.
AWS IoT Corefor LoRa WAN administra las políticas de servicios y dispositivos necesarias para
comunicarse con las puertas de enlace y los dispositivos de la LoRa WAN. AWS IoT Core AWS IoT
Corefor LoRa WAN también administra los destinos que describen las AWS IoT reglas que envían los
datos del dispositivo a otros servicios.
• Incorpore y conecte dispositivos LoRa WAN y puertas de enlace AWS IoT sin necesidad de configurar y
administrar un LNS privado.
• Conecte dispositivos LoRa WAN que cumplan con las especificaciones LoRa WAN 1.0.x o 1.1
estandarizadas por LoRa Alliance. Estos dispositivos pueden funcionar en modo de clase A, clase B o
clase C.
• Utilice puertas de enlace LoRa WAN compatibles con la versión 2.0.4 o posterior de LoRa Basics
Station. Todas las puertas de enlace que cumplen los requisitos AWS IoT Core para la LoRa WAN
ejecutan una versión compatible de LoRa Basics Station.
1273
AWS IoT Core Guía para desarrolladores
¿Qué es LoRa WAN?
• Supervise la intensidad de la señal, el ancho de banda y el factor AWS IoT Core de dispersión utilizando
la velocidad de datos adaptativa de la LoRa WAN y optimice la velocidad de datos si es necesario.
• Actualice el firmware de las puertas de enlace LoRa WAN mediante el servicio CUPS y el firmware de
los dispositivos LoRa WAN mediante actualizaciones de firmware inalámbricas (FUOTA).
Temas
• ¿Qué es LoRa WAN? (p. 1274)
• Cómo AWS IoT Core funciona la LoRa WAN (p. 1275)
LoRaes una tecnología de frecuencia de audio inalámbrica que funciona en un espectro de radiofrecuencia
sin licencia. LoRaes un protocolo de capa física que utiliza la modulación de espectro ensanchado y admite
la comunicación de largo alcance a costa de un ancho de banda estrecho. Utiliza una forma de onda de
banda estrecha con una frecuencia central para enviar datos, lo que lo hace resistente a las interferencias.
The Things Fundamentals on LoRa WAN contiene un vídeo introductorio que abarca los aspectos
básicos de la LoRa WAN y una serie de capítulos que le ayudarán a aprender sobre LoRa la LoRa WAN.
• ¿Qué es LoRa WAN?
LoRaAlliance proporciona una descripción técnica de la LoRa LoRa WAN, incluido un resumen de las
especificaciones de la LoRa WAN en las diferentes regiones.
1274
AWS IoT Core Guía para desarrolladores
Cómo AWS IoT Core funciona la LoRa WAN
• LoRaEstación básica
Semtech Corporation proporciona conceptos útiles sobre los conceptos LoRa básicos de las puertas
de enlace y los nodos finales. LoRaBasics Station, un software de código abierto que se ejecuta en
su puerta de enlace LoRa WAN, se mantiene y distribuye a través del GitHubrepositorio de Semtech
Corporation. También puede obtener información sobre los protocolos LNS y CUPS que describen cómo
intercambiar datos de LoRa WAN y realizar actualizaciones de configuración.
AWS IoT Corefor LoRa WAN le ayuda a conectar y administrar dispositivos LoRa WAN inalámbricos (red
de área amplia de largo alcance y bajo consumo) y reemplaza la necesidad de desarrollar y operar un
LNS. Los dispositivos WAN (LoRaWAN) y las puertas de enlace de largo alcance pueden conectarse AWS
IoT Core mediante AWS IoT Core LoRa WAN.
A continuación se muestra cómo interactúa un dispositivo LoRa WAN con AWS IoT Core una LoRa WAN.
También muestra cómo AWS IoT Core una LoRa WAN reemplaza a un LNS y se comunica con otros
Servicio de AWS s del. Nube de AWS
LoRaLos dispositivos WAN se comunican a AWS IoT Core través de puertas de enlace LoRa WAN. AWS
IoT Corefor LoRa WAN administra las políticas de servicios y dispositivos necesarias para AWS IoT Core
administrar y comunicarse con las puertas de enlace y los dispositivos de la LoRa WAN. AWS IoT Corefor
LoRa WAN también administra los destinos que describen las AWS IoT reglas que envían los datos del
dispositivo a otros servicios.
El catálogo de dispositivos AWS asociados contiene puertas de enlace y kits de desarrollador que
cumplen los requisitos para su uso en LoRa WAN. AWS IoT Core Para obtener más información,
consulte Uso de pasarelas calificadas del catálogo de dispositivosAWS asociados (p. 1319).
2. Añada sus dispositivos inalámbricos y puertas de enlace LoRa WAN a AWS IoT Core for LoRa WAN.
Conexión de puertas de enlace y dispositivos aAWS IoT Core para LoRaWAN (p. 1276)le brinda
información sobre cómo describir sus recursos y agregar sus dispositivos inalámbricos y puertas de
enlace LoRa WAN a AWS IoT Core for LoRa WAN. También aprenderá a configurar los demás recursos
de LoRa WAN que necesitará AWS IoT Core para administrar estos dispositivos y enviar sus datos a los
AWS servicios.
1275
AWS IoT Core Guía para desarrolladores
Conexión de puertas de enlace y
dispositivos aAWS IoT Core para LoRaWAN
Comience con nuestro AWS IoT Core ejemplo de solución LoRa WAN y hágalo suyo.
El siguiente vídeo describe cómo AWS IoT Core funciona la LoRa WAN y explica el proceso de agregar
puertas de enlace LoRa WAN desde. AWS Management Console
• AWS IoT Coretaller para LoRa WAN
El taller abarca los aspectos básicos de la tecnología LoRa WAN y su implementación AWS IoT Core
para LoRa WAN. También puede utilizar el taller para recorrer los laboratorios que muestran cómo
conectar la puerta de enlace y el dispositivo a una LoRa WAN AWS IoT Core para crear una solución de
IoT de muestra.
AWS IoT Core para LoRaWANasigna identificadores únicos a los recursos que crea para los dispositivos
inalámbricos, las puertas de enlace y los perfiles; sin embargo, también puede asignar a los recursos
nombres más descriptivos para facilitar su identificación. Antes de añadir dispositivos, puertas de enlace,
perfiles y destinos aAWS IoT Core para LoRaWAN, considere cómo los nombrará para que sean más
fáciles de administrar.
También puedes añadir etiquetas a los recursos que crees. Antes de añadir tuLoRaDispositivos WAN,
considere cómo podría utilizar las etiquetas para identificar y administrar susAWS IoT Core para
LoRaWANrecursos. Las etiquetas se pueden modificar después de añadirlas.
Para obtener más información sobre los nombres y el etiquetado, consulteDescriba suAWS IoT
CoreporLoRaRecursos de WAN (p. 1277).
1276
AWS IoT Core Guía para desarrolladores
Uso de la consola para integrar el dispositivo y la
puerta de enlace aAWS IoT Core para LoRaWAN
utilizado fácilmente por otrosAWSservicios.AWS IoT Core para LoRaWANusosAWS IoTreglas que pueden
usarAWS Lambdafunciones para procesar y decodificar los mensajes del dispositivo en un formato que
otrosAWSlos servicios pueden utilizar.
Para transformar los datos del dispositivo y enviarlos a otrosAWSservicios, necesita saber:
Con esa información, puede crear elAWS IoTregla que realiza la conversión y envía los datos convertidos
alAWSservicios que lo utilizarán.
Gran parte de los datos que introduce al configurarAWS IoT Core para LoRaWANlos recursos los
proporcionan los proveedores de los dispositivos y son específicos paraLoRaEspecificaciones de WAN
que admiten. En los siguientes temas se describe cómo puede describir suAWS IoT CoreporLoRaUtilice
los recursos de WAN y utilice la consola o la API para añadir sus puertas de enlace y dispositivos.
Temas
• Describa suAWS IoT CoreporLoRaRecursos de WAN (p. 1277)
• Incorpore sus puertas de enlace aAWS IoT Core para LoRaWAN (p. 1279)
• Integra tus dispositivos paraAWS IoT Core para LoRaWAN (p. 1288)
Antes de empezar a crear los recursos, tenga en cuenta la convención de nomenclatura de sus
dispositivos, puertas de enlace y destino.AWS IoT Core para LoRaWANofrece varias opciones para
identificar los recursos que se crean. MientrasAWS IoT Core para LoRaWANlos recursos reciben un
identificador único cuando se crean, este identificador no es descriptivo ni se puede cambiar una vez
creado el recurso. También puede asignar un nombre, añadir una descripción y adjuntar etiquetas y
valores de etiquetas a la mayoríaAWS IoT Core para LoRaWANrecursos para facilitar la selección, la
identificación y la administración de susAWS IoT Core para LoRaWANrecursos.
Para puertas de enlace, dispositivos y perfiles, el nombre del recurso es un campo opcional que puede
cambiar una vez creado el recurso. El nombre aparece en las listas que se muestran en las páginas del
centro de recursos.
Para los destinos, usted proporciona un nombre que sea único en suAWScuenta yRegión de AWS. No
puede cambiar el nombre del destino después de crear el recurso de destino.
1277
AWS IoT Core Guía para desarrolladores
Describa suAWS IoT CoreporLoRaRecursos de WAN
Si bien un nombre puede tener hasta 256 caracteres, el espacio de visualización en el centro de
recursos es limitado. Asegúrese de que la parte distintiva del nombre aparezca en los primeros 20 o 30
caracteres, si es posible.
• Etiquetas de recursos (p. 1278)
Las etiquetas son pares de metadatos clave-valor que se pueden adjuntar aAWSrecursos. Usted elige
las claves de etiqueta y sus valores correspondientes.
Las puertas de enlace, los destinos y los perfiles pueden tener hasta 50 etiquetas adjuntas. Los
dispositivos no admiten etiquetas.
Nombres de recursos
AWS IoT Core para LoRaWANsoporte de recursos para el nombre
El campo de nombre aparece en las listas de recursos del centro de recursos; sin embargo, el espacio es
limitado y, por lo tanto, es posible que solo estén visibles los primeros 15 a 30 caracteres del nombre.
Al seleccionar los nombres de los recursos, tenga en cuenta cómo desea que identifiquen los recursos y
cómo se mostrarán en la consola.
Descripción
Los recursos de destino, dispositivo y puerta de enlace también admiten un campo de descripción, que
puede aceptar hasta 2048 caracteres. El campo de descripción solo aparece en la página de detalles del
recurso individual. Si bien el campo de descripción puede contener mucha información, dado que solo
aparece en la página de detalles del recurso, no es práctico para escanearlo en el contexto de varios
recursos.
Etiquetas de recursos
AWS IoT Core para LoRaWANsoporte de recursos paraAWSetiquetas
1278
AWS IoT Core Guía para desarrolladores
Incorpore sus puertas de enlace
aAWS IoT Core para LoRaWAN
Las etiquetas son palabras o frases que actúan como metadatos que puede utilizar para identificar y
organizar susAWSrecursos. Puede pensar en la clave de etiqueta como una categoría de información y en
el valor de la etiqueta como un valor específico de esa categoría.
Por ejemplo, puede tener un valor de etiqueta decolory luego asignar a algunos recursos un valor
deazulpara esa etiqueta y otras, un valor derojo. Con eso, podrías usar elEditor de etiquetasen
elAWSconsola para encontrar los recursos con uncolorvalor de etiqueta deazul.
Para obtener más información sobre el etiquetado y las estrategias de etiquetado, consulteEditor de
etiquetas.
Antes de embarcar en su puerta de enlace aAWS IoT Core para LoRaWAN, le recomendamos que:
• Utilice puertas de enlace que estén calificadas para su uso conAWS IoT Core para LoRaWAN. Estas
puertas de enlace se conectan aAWS IoT Coresin ningún ajuste de configuración adicional y tienen
una versión compatible de LoRaEstación básicasoftware que se ejecuta en ellos. Para obtener más
información, consulte Administración de puertas de enlace conAWS IoT Core para LoRa WAN (p. 1318).
• Tenga en cuenta la convención de nomenclatura de los recursos que cree para poder administrarlos
más fácilmente. Para obtener más información, consulte Describa suAWS IoT CoreporLoRaRecursos de
WAN (p. 1277).
• Tenga preparados con antelación los parámetros de configuración que son exclusivos de cada puerta
de enlace para introducirlos, lo que facilita la introducción de los datos en la consola. Los parámetros
de configuración de la puerta de enlace inalámbrica queAWS IoTrequiere comunicarse con la puerta de
enlace y administrarla, incluir la EUI de la puerta de enlace y suLoRabanda de frecuencia.
Para incorporar sus puertas de entrada aAWS IoT Core para LoRaWAN:
• Considere la selección de la banda de frecuencia y añada la función de IAM necesaria (p. 1280)
• Agregue una puerta de enlace aAWS IoT Core para LoRaWAN (p. 1281)
• Conecta tuLoRaPuerta de enlace WAN y verificación del estado de su conexión (p. 1286)
1279
AWS IoT Core Guía para desarrolladores
Incorpore sus puertas de enlace
aAWS IoT Core para LoRaWAN
Si vas a añadir tu puerta de enlace mediante la consola, haz clic enCrear rolen la consola para
crear la función de IAM necesaria y, a continuación, omitir estos pasos. Solo debe realizar estos
pasos si utiliza la CLI para crear la puerta de enlace.
Agregue la función de IAM para permitir que el servidor de configuración y actualización (CUPS)
administre las credenciales de la puerta de enlace
Si los resultados de la búsqueda están vacíos, no tiene la función de IAM necesaria. Continúe el
procedimiento para añadirlo.
3. EnSeleccione el tipo de entidad de confianza, eligeOtroCuenta de AWS.
4. EnID de cuenta, introduce tuCuenta de AWSID y, a continuación, elijaSiguiente: Permisos.
5. En el cuadro de búsqueda, escriba AWSIoTWirelessGatewayCertManager.
1280
AWS IoT Core Guía para desarrolladores
Incorpore sus puertas de enlace
aAWS IoT Core para LoRaWAN
"Principal": {
"Service": "iotwireless.amazonaws.com"
},
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "iotwireless.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
Si realizó este procedimiento mientras agregaba una puerta de enlace, puede cerrar esta ventana y la
consola de IAM y volver a laAWS IoTconsola para terminar de añadir la puerta de enlace.
Antes de añadir su puerta de enlace, le recomendamos que tenga en cuenta los factores mencionados
en laAntes de incorporar su pasarelasección deIncorpore sus puertas de enlace aAWS IoT Core para
LoRaWAN (p. 1279).
Si vas a añadir tu puerta de enlace por primera vez, te recomendamos que utilices la consola. Si desea
agregar su puerta de enlace mediante la CLI en su lugar, debe haber creado ya la función de IAM
necesaria para que la puerta de enlace pueda conectarse conAWS IoT Core para LoRaWAN. Para obtener
información sobre cómo crear el rol, consulteAgregue una función de IAM para permitir que el servidor de
configuración y actualización (CUPS) administre las credenciales de la puerta de enlace (p. 1280).
1281
AWS IoT Core Guía para desarrolladores
Incorpore sus puertas de enlace
aAWS IoT Core para LoRaWAN
enlacepara ver la puerta de enlace que ha añadido. Si desea añadir más puertas de enlace, elijaAgregar
puerta de enlace.
Utilice elDetalles de la pasarelasección para proporcionar información sobre los datos de configuración
del dispositivo, como la EUI del Gateway y la configuración de la banda de frecuencia.
• EUI de Gateway
El EUI (identificador único extendido) del dispositivo de puerta de enlace individual. El EUI es un
código alfanumérico de 16 dígitos, comoc0ee40ffff29df10, que identifica de forma única una
puerta de enlace en suLoRaRed WAN. Esta información es específica de su modelo de puerta de
enlace y puede encontrarla en su dispositivo de puerta de enlace o en su manual de usuario.
Note
La EUI del Gateway es diferente de la dirección MAC de Wi-Fi que puede ver impresa en
su dispositivo de puerta de enlace. La EUI sigue un estándar EUI-64 que identifica de forma
única su puerta de enlace y, por lo tanto, no se puede volver a utilizar en otrasCuenta de
AWSs y regiones.
• Banda de frecuencia (región RF)
Estos campos son opcionales y puede utilizarlos para proporcionar información adicional sobre la puerta
de enlace y su configuración.
• Nombre, descripción y etiquetas de su puerta de enlace
1282
AWS IoT Core Guía para desarrolladores
Incorpore sus puertas de enlace
aAWS IoT Core para LoRaWAN
Especifique si desea crear unAWS IoTcosa y asóciala con la puerta de entrada. Cosas enAWS
IoTpuede facilitar la búsqueda y la administración de los dispositivos. Asociar una cosa a su puerta de
enlace permite que la puerta de enlace acceda a otraAWS IoT Corecaracterísticas.
4. Crea y descarga el certificado de gateway
Para autenticar su puerta de enlace para que pueda comunicarse de forma segura conAWS IoT,
tuLoRaLa puerta de enlace WAN debe presentar una clave privada y un certificado paraAWS IoT Core
para LoRaWAN. Crea unCertificado Gatewaypara queAWS IoTpuede verificar la identidad de su puerta
de enlace mediante el estándar X.509.
Haga clic enCrear certificadopulse y descargue los archivos del certificado. Los usará más adelante
para configurar su puerta de enlace.
5. Copie los puntos de conexión CUPS y LNS y descargue los certificados
TuLoRaLa puerta de enlace WAN debe conectarse a un punto final de CUPS o LNS al establecer una
conexión conAWS IoT Core para LoRaWAN. Le recomendamos que utilice el extremo CUPS, ya que
también proporciona administración de la configuración. Para verificar la autenticidad deAWS IoT Core
para LoRaWANpuntos finales, su puerta de enlace utilizará un certificado de confianza para cada uno
de los puntos finales de CUPS y LNS.
Haga clic enCopiarbotón para copiar los extremos de CUPS y LNS. Necesitará esta información más
adelante para configurar la puerta de enlace. A continuación, haga clic enDescargar certificados de
confianza del servidorbotón para descargar los certificados de confianza para los terminales CUPS y
LNS.
6. Cree el rol de IAM para los permisos de la puerta de enlace
Debe agregar una función de IAM que permita al servidor de configuración y actualización (CUPS)
administrar las credenciales de la puerta de enlace. Debe hacer esto antes deLoRaLa puerta de enlace
WAN intenta conectarse conAWS IoT Core para LoRaWAN; sin embargo, solo tiene que hacerlo una
vez.
Si es la primera vez que agrega una puerta de enlace mediante la API o la CLI, debe agregar
laIoTWirelessGatewayCertManagerFunción de IAM para que la puerta de enlace pueda
conectarse conAWS IoT Core para LoRaWAN. Para obtener información sobre cómo
crear el rol, consulte la siguiente secciónAgregue una función de IAM para permitir que el
servidor de configuración y actualización (CUPS) administre las credenciales de la puerta de
enlace (p. 1280).
En las siguientes secciones se muestra cómo añadir una puerta de enlace mediante elAWS IoT
WirelessOperaciones de API oAWS CLI. Primero agrega su puerta de enlace y, a continuación, asocia un
certificado a la puerta de enlace. También puede utilizar las operaciones de API adicionales, por ejemplo,
para actualizar una puerta de enlace existente.
Temas
• Cómo añadir tu puerta de enlace (p. 1284)
• Asocie un certificado a su pasarela (p. 1284)
• Operaciones de API adicionales (p. 1286)
1283
AWS IoT Core Guía para desarrolladores
Incorpore sus puertas de enlace
aAWS IoT Core para LoRaWAN
Puede utilizar elAWS CLIpara crear una puerta de enlace inalámbrica mediante
elCreateWirelessGatewayoperación de la API ocreate-wireless-gatewayComando CLI para agregar su
puerta de enlace inalámbrica.
Note
También puede realizar este procedimiento con la API utilizando los métodos de la API de AWS
que corresponden a los comandos CLI que se muestran aquí.
Después de añadir su puerta de enlace aAWS IoT Wireless, debe estar asociado a un certificado
para conectarse al punto final de CUPS. Para conectarse al punto final, su puerta de enlace está en
ejecuciónLoRaBasics Station requiere los siguientes archivos:
• cups.crt- El certificado CUPS de la puerta de enlace que utiliza para conectarse al punto final de
CUPS.
• cups.key- Clave privada correspondiente al certificado.
• cups.trust- El certificado de confianza del terminal CUPS.
• cups.uri- El URI del punto final de CUPS.
Los siguientes pasos muestran cómo generar un certificado y asociarlo a la puerta de enlace.
Temas
• Paso 1: Generar un certificado de puerta de enlace (p. 1284)
• Paso 2: Obtener el certificado de confianza del servidor y el punto de conexión CUPS (p. 1285)
• Paso 3: Asocie el certificado a su pasarela (p. 1285)
Para generar un certificado para su puerta de enlace, utilice elAWS IoTAcción de API de referencia de
API,CreateKeysAndCertificate, o elAWS CLIcomando,create-keys-and-certificateComando CLI.
1284
AWS IoT Core Guía para desarrolladores
Incorpore sus puertas de enlace
aAWS IoT Core para LoRaWAN
La ejecución de este comando genera el certificado y la clave privada, así como un identificador de
certificado. El siguiente ejemplo muestra un resultado de la ejecución de este comando.
{
"certificateArn": "arn:aws:iot:us-
east-1:123456789012:cert/abc1234d55ef32101a34434bb123cba2a011b2cdefa6bb5cee1a221b4567ab12",
"certificateId": "abc1234d55ef32101a34434bb123cba2a011b2cdefa6bb5cee1a221b4567ab12",
"certificatePem": "-----BEGIN CERTIFICATE-----\n..\n-----END CERTIFICATE-----\n,
"KeyPair": {
"PublicKey": "-----BEGIN PUBLIC KEY -----\n..\n----END PUBLIC KEY----\n",
"PrivateKey": "----BEGIN RSA PRIVATE KEY----\n..\nEND RSA PRIVATE KEY----\n"
}
}
Guarde el ID del certificado temporalmente, ya que se utilizará en el paso siguiente para asociar el
certificado a la pasarela.
Note
Debe almacenar la clave privada de forma segura,cups.key. Si pierde la clave privada, vuelva a
ejecutarcreate-keys-and-certificatecomando para generar otro certificado.
El siguiente comando muestra un ejemplo de cómo obtener el certificado de confianza del servidor y el URI
del punto final. Al ejecutar el comando, definaservice-typeparámetro paraCUPS.
{
"ServiceType": "CUPS",
"ServiceEndpoint": "https://ABCDEFGHIJKLMN.cups.lorawan.us-east-1.amazonaws.com:443",
"ServerTrust": "-----BEGIN CERTIFICATE-----\n..\n-----END CERTIFICATE-----\n"
}
Debe asociar el certificado de la puerta de enlace que generó con la puerta de enlace que agregó.AWS
IoT Core para LoRaWANutilizará esta información para identificar el certificado que utilizará la puerta de
enlace para conectarse al punto final del CUPS.
1285
AWS IoT Core Guía para desarrolladores
Incorpore sus puertas de enlace
aAWS IoT Core para LoRaWAN
{
"IotCertificateId": "<CertificateId>"
}
Puede utilizar las siguientes acciones de la API para realizar las tareas asociadas a agregar, actualizar o
eliminar unLoRaPuerta de enlace WAN.
• GetWirelessGateway
• ListWirelessGateways
• UpdateWirelessGateway
• DeleteWirelessGateway
Para obtener la lista completa de las acciones y los tipos de datos disponibles para crear y administrarAWS
IoT Core para LoRaWANrecursos, consulte laAWS IoT WirelessReferencia de API.
Para obtener información sobre las CLI que puede utilizar, consulteAWS CLIreferencia.
Después de añadir la información de la pasarela aAWS IoT Core para LoRaWAN, añada un pocoAWS IoT
Core para LoRaWANinformación al dispositivo de puerta de enlace. La documentación proporcionada por
el proveedor de la puerta de enlace debe describir el proceso para cargar los archivos de certificado en la
puerta de enlace y configurar el dispositivo de puerta de enlace con el que se comunicaráAWS IoT Core
para LoRaWAN.
Puertas de enlace aptas para su uso conAWS IoT Core para LoRaWAN
1286
AWS IoT Core Guía para desarrolladores
Incorpore sus puertas de enlace
aAWS IoT Core para LoRaWAN
Para obtener instrucciones sobre cómo configurar suLoRaPuerta de enlace WAN, consulteconfigurar
dispositivo de puerta de enlacesección delAWS IoT Core para LoRaWANtaller. Aquí encontrará
información sobre las instrucciones para conectar puertas de enlace que cumplan los requisitos para su
uso conAWS IoT Core para LoRaWAN.
Las siguientes instrucciones muestran cómo conectar las puertas de enlace que admiten el protocolo
CUPS.
Para obtener más información sobre cómo obtener esta información, consulteAgregue una puerta de
enlace aAWS IoT Core para LoRaWAN (p. 1281).
Las siguientes instrucciones muestran cómo conectar las puertas de enlace que admiten el protocolo LNS.
Para obtener más información sobre cómo obtener esta información, consulteAgregue una puerta de
enlace aAWS IoT Core para LoRaWAN (p. 1281).
Después de eso, ha conectado su puerta de enlace aAWS IoT Core para LoRaWAN, puede comprobar el
estado de la conexión y obtener información sobre cuándo se recibió el último enlace ascendente mediante
la consola o la API.
HTTP/1.1 200
1287
AWS IoT Core Guía para desarrolladores
Integra tus dispositivos paraAWS IoT Core para LoRaWAN
Content-type: application/json
{
"ConnectionStatus": "Connected",
"LastUplinkReceivedAt": "2021-03-24T23:13:08.476015749Z",
"WirelessGatewayId": "30cbdcf3-86de-4291-bfab-5bfa2b12bad5"
}
LoRaLos dispositivos WAN utilizan unLoRaProtocolo WAN para intercambiar datos con aplicaciones
alojadas en la nube.AWS IoT Core para LoRaWANes compatible con dispositivos que cumplen con 1.0.x o
1.1LoRaEspecificaciones de WAN estandarizadas porLoRaAlianza.
UNLoRaEl dispositivo WAN normalmente contiene uno o más sensores y actores. Los dispositivos envían
datos de telemetría de enlace ascendente a través deLoRaPuertas de enlace WAN paraAWS IoT Core
para LoRaWAN. Las aplicaciones alojadas en la nube pueden controlar los sensores enviando comandos
de enlace descendente aLoRaDispositivos WAN a través deLoRaPuertas de enlace WAN.
Antes de incorporar el dispositivo inalámbrico aAWS IoT Core para LoRaWAN, debe tener preparada la
siguiente información con antelación:
Note
Tener listos de antemano los parámetros de configuración que son exclusivos de cada dispositivo
permite introducir los datos en la consola sin problemas. Los parámetros específicos que debe introducir
dependen deLoRaEspecificación WAN que utiliza el dispositivo. Para ver la lista completa de sus
especificaciones y parámetros de configuración, consulte la documentación de cada dispositivo.
• Nombre y descripción del dispositivo (opcional)
La información de estos campos opcionales proviene de cómo se organizan y describen los elementos
del sistema inalámbrico. Para obtener más información sobre cómo nombrar y describir sus recursos,
consulteDescriba suAWS IoT CoreporLoRaRecursos de WAN (p. 1277).
• Perfiles de dispositivos y servicios
1288
AWS IoT Core Guía para desarrolladores
Integra tus dispositivos paraAWS IoT Core para LoRaWAN
Cada dispositivo debe estar asignado a un destino que procesará sus mensajes para enviarlos
aAWS IoTy otros servicios. ElAWS IoTlas reglas que procesan y envían los mensajes del dispositivo
son específicas del formato de mensaje del dispositivo. Para procesar los mensajes del dispositivo
y enviarlos al servicio correcto, identifica el destino que crearás para usarlo con los mensajes del
dispositivo y asígnalo al dispositivo.
Antes de suLoRaEl dispositivo WAN puede enviar datos de enlace ascendente, debe completar un proceso
llamadoactivaciónoprocedimiento de unión. Para activar el dispositivo, puede utilizar OTAA (activación
inalámbrica) o ABP (activación por personalización).
ABP no requiere un procedimiento de unión y utiliza claves estáticas. Cuando usa OTAA, suLoRaEl
dispositivo WAN envía una solicitud de unión y el servidor de red puede permitir la solicitud. Le
recomendamos que utilice OTAA para activar el dispositivo, ya que se generan nuevas claves de sesión
para cada activación, lo que hace que sea más seguro.
LoRaVersión WAN
1289
AWS IoT Core Guía para desarrolladores
Integra tus dispositivos paraAWS IoT Core para LoRaWAN
Cuando usa OTAA, suLoRaLos dispositivos WAN y las aplicaciones alojadas en la nube comparten las
claves raíz. Estas claves raíz dependen de si utilizas la versión v1.0.x o la v1.1. La v1.0.x solo tiene una
clave raíz,AppKey(Clave de aplicación) mientras que la versión 1.1 tiene dos claves raíz,AppKey(Clave
de aplicación) yNwkKey(Clave de red). Las claves de sesión se derivan en función de las claves raíz de
cada activación. Tanto elNwkKeyyAppKeyson valores hexadecimales de 32 dígitos que proporcionó su
proveedor de servicios inalámbricos.
Después de seleccionar elEspecificación de dispositivo inalámbrico, verá los parámetros EUI (identificador
único extendido) del dispositivo inalámbrico que se muestran en la consola. Puede encontrar esta
información en la documentación del dispositivo o del proveedor inalámbrico.
Para obtener más información sobre los identificadores únicos, las claves de sesión, las claves raíz y la
seguridad integral, consulte la LoRaAlianzadocumentación.
Las siguientes listas describen las acciones de la API que realizan las tareas asociadas a agregar,
actualizar o eliminar un perfil de servicio.
• CreateWirelessDevice
• GetWirelessDevice
• ListWirelessDevices
• UpdateWirelessDevice
• DeleteWirelessDevice
Para obtener la lista completa de las acciones y los tipos de datos disponibles para crear y administrarAWS
IoT Core para LoRaWANrecursos, consulte laAWS IoT WirelessReferencia de API.
También puede realizar este procedimiento con la API utilizando los métodos de la API de AWS
que corresponden a los comandos CLI que se muestran aquí.
1290
AWS IoT Core Guía para desarrolladores
Integra tus dispositivos paraAWS IoT Core para LoRaWAN
Contenido de input.json
{
"Description": "My LoRaWAN wireless device",
"DestinationName": "IoTWirelessDestination",
"LoRaWAN": {
"DeviceProfileId": "ab0c23d3-b001-45ef-6a01-2bc3de4f5333",
"ServiceProfileId": "fe98dc76-cd12-001e-2d34-5550432da100",
"OtaaV1_1": {
"AppKey": "3f4ca100e2fc675ea123f4eb12c4a012",
"JoinEui": "b4c231a359bc2e3d",
"NwkKey": "01c3f004a2d6efffe32c4eda14bcd2b4"
},
"DevEui": "ac12efc654d23fc2"
},
"Name": "SampleIoTWirelessThing",
"Type": LoRaWAN
}
Para obtener información sobre las CLI que puede utilizar, consulteAWS CLIreferencia
Los parámetros de configuración y los valores que se deben introducir en estos perfiles los proporciona el
fabricante del dispositivo.
Si vas a añadir un dispositivo inalámbrico mediante la consola tal y como se describe enAñada la
especificación de su dispositivo inalámbrico aAWS IoT Core para LoRaWANuso de la consola (p. 1289),
después de añadir la especificación del dispositivo inalámbrico, puede añadir el perfil del dispositivo. Como
alternativa, también puede añadir dispositivos inalámbricos desdePerfilespágina delAWS IoTconsola
enLoRaMENDIGOpestaña.
Puede elegir entre los perfiles de dispositivo predeterminados o crear un perfil de dispositivo nuevo. Le
recomendamos que utilice los perfiles de dispositivo predeterminados. Si su aplicación requiere que cree
un perfil de dispositivo, proporcione unNombre del perfil del dispositivo, selecciona elBanda de frecuencia
(RfRegion)que utilice para el dispositivo y la puerta de enlace, y mantenga las demás configuraciones en
los valores predeterminados, a menos que se especifique lo contrario en la documentación del dispositivo.
1291
AWS IoT Core Guía para desarrolladores
Integra tus dispositivos paraAWS IoT Core para LoRaWAN
Las siguientes listas describen las acciones de la API que realizan las tareas asociadas a agregar,
actualizar o eliminar un perfil de servicio.
• CreateDeviceProfile
• GetDeviceProfile
• ListDeviceProfiles
• UpdateDeviceProfile
• DeleteDeviceProfile
Para obtener la lista completa de las acciones y los tipos de datos disponibles para crear y administrarAWS
IoT Core para LoRaWANrecursos, consulte laAWS IoT WirelessReferencia de API.
Al ejecutar este comando, se crea automáticamente un perfil de dispositivo con un identificador que puede
utilizar al crear el dispositivo inalámbrico. Ahora puede crear el perfil de servicio mediante la siguiente API
y, a continuación, crear el dispositivo inalámbrico mediante los perfiles de dispositivo y servicio.
{
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:DeviceProfile/12345678-
a1b2-3c45-67d8-e90fa1b2c34d",
"Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d"
}
Para obtener información sobre las CLI que puede utilizar, consulteAWS CLIreferencia
1292
AWS IoT Core Guía para desarrolladores
Integra tus dispositivos paraAWS IoT Core para LoRaWAN
Las siguientes listas describen las acciones de la API que realizan las tareas asociadas a agregar,
actualizar o eliminar un perfil de servicio.
• CreateServiceProfile
• GetServiceProfile
• ListServiceProfiles
• DeleteServiceProfile
Para obtener la lista completa de las acciones y los tipos de datos disponibles para crear y administrarAWS
IoT Core para LoRaWANrecursos, consulte laAWS IoT WirelessReferencia de API.
Al ejecutar este comando, se crea automáticamente un perfil de servicio con un identificador que puede
utilizar al crear el dispositivo inalámbrico. Ahora puede crear el dispositivo inalámbrico mediante los perfiles
de dispositivo y servicio.
{
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:ServiceProfile/12345678-
a1b2-3c45-67d8-e90fa1b2c34d",
"Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d"
}
Porque la mayoríaLoRaLos dispositivos WAN no envían datos aAWS IoT CoreporLoRaWAN en un formato
que pueda ser utilizado porAWSservicios, unAWS IoTla regla debe procesarlo primero. ElAWS IoTla regla
contiene la sentencia SQL que interpreta los datos del dispositivo y las acciones de la regla del tema que
envían el resultado de la sentencia SQL a los servicios que la utilizarán.
Como alternativa, también puede añadir unAWS IoT Core para LoRaWANdestino desde elDestinospágina
delAWS IoTconsola.
Para procesar los datos de un dispositivo, especifique los siguientes campos al crear unAWS IoT
CoreporLoRaDestino WAN y, a continuación, elijaAñadir destino.
1293
AWS IoT Core Guía para desarrolladores
Integra tus dispositivos paraAWS IoT Core para LoRaWAN
ElAWS IoTregla que está configurada para evaluar los mensajes enviados por el dispositivo y procesar
los datos del dispositivo. El nombre de la regla se asignará a su destino. El destino requiere la regla
para procesar los mensajes que recibe. Puede elegir que los mensajes se procesen invocando unAWS
IoTregla o publicando enAWS IoTintermediario de mensajes.
• Si eligesIntroduzca un nombre de regla, introduzca un nombre y, a continuación, elijaCopiarpara
copiar el nombre de la regla que introducirás al crear elAWS IoTregla. Puedes elegirCrear reglapara
crear la regla ahora o ir aReglasCentro delAWS IoTconsola y cree una regla con ese nombre.
También puede introducir una regla y utilizar laAvanzadoconfiguración para especificar un nombre
de tema. El nombre del tema se proporciona durante la invocación de la regla y se accede a él
mediantetopicexpresión dentro de la regla. Para obtener más información acerca de las reglas del
AWS IoT, consulte Reglas para AWS IoT (p. 516).
• Si eligesPublica enAWS IoTintermediario de mensajes, introduzca un nombre de tema. A
continuación, puede copiar el nombre del tema de MQTT y varios suscriptores podrán suscribirse
a este tema para recibir los mensajes publicados sobre ese tema. Para obtener más información,
consulte Temas de MQTT (p. 112).
Para obtener más información sobreAWS IoTnormas para destinos, consulteCrear reglas para
procesarLoRaMensajes de dispositivos WAN (p. 1296).
• Role name (Nombre de rol)
El rol de IAM que otorga a los datos del dispositivo el permiso para acceder a la regla nombrada
enNombre de la regla. En la consola, puede crear una nueva función de servicio o seleccionar una
función de servicio existente. Si va a crear un nuevo rol de servicio, puede introducir un nombre
de rol (por ejemplo,IoTWirelessDestinationRole), o déjelo en blanco paraAWS IoT Core
para LoRaWANpara generar un nuevo nombre de rol.AWS IoT Core para LoRaWANluego creará
automáticamente el rol de IAM con los permisos adecuados en su nombre.
Para obtener más información sobre las funciones de IAM, consulteUso de roles de IAM.
La siguiente lista contiene las acciones de la API que realizan las tareas asociadas a agregar, actualizar o
eliminar un destino.
• CreateDestination
• GetDestination
• ListDestinations
• UpdateDestination
• DeleteDestination
Para obtener la lista completa de las acciones y los tipos de datos disponibles para crear y administrarAWS
IoT Core para LoRaWANrecursos, consulte laAWS IoT WirelessReferencia de API.
1294
AWS IoT Core Guía para desarrolladores
Integra tus dispositivos paraAWS IoT Core para LoRaWAN
Puede utilizar elAWS CLIpara añadir un destino mediante elcrear-destinocomando. El siguiente ejemplo
muestra cómo crear un destino introduciendo un nombre de regla medianteRuleNamecomo el valor
deexpression-typeparámetro. Si desea especificar un nombre de tema para publicar o suscribirse al
agente de mensajes, cambie laexpression-typevalor del parámetro enMqttTopicd.
Al ejecutar este comando, se crea un destino con el nombre de destino, el nombre de la regla y el nombre
de la función especificados. Para obtener información sobre los nombres de reglas y funciones de los
destinos, consulteCrear reglas para procesarLoRaMensajes de dispositivos WAN (p. 1296)yCrea un rol de
IAM para tus destinos (p. 1295).
Para obtener información sobre las CLI que puede utilizar, consulteAWS CLIreferencia.
Al utilizar la consola para añadir un destino,AWS IoT Core para LoRaWANcrea automáticamente un rol de
IAM para usted, tal como se describió anteriormente en este tema. Al añadir un destino mediante la API o
la CLI, debe crear el rol de IAM para su destino.
Para crear una política de IAM para suAWS IoT Core para LoRaWANrol de destino
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:DescribeEndpoint",
"iot:Publish"
],
"Resource": "*"
}
]
}
4. EscojaPolítica de revisión, y enNombre, introduzca un nombre para esta política. Necesitará este
nombre para usarlo en el siguiente procedimiento.
Para crear un rol de IAM para unAWS IoT Core para LoRaWANdestino
1295
AWS IoT Core Guía para desarrolladores
Integra tus dispositivos paraAWS IoT Core para LoRaWAN
"Principal": {
"Service": "iotwireless.amazonaws.com"
},
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "iotwireless.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
Con esta función definida, puede encontrarla en la lista de funciones al configurar suAWS IoT Core para
LoRaWANdestinos.
AWS IoT Core para LoRaWANdestinos (p. 1293)asocie un dispositivo inalámbrico a la regla que
procesa los datos de los mensajes del dispositivo para enviarlos a otros servicios. La regla actúa sobre
los datos del dispositivo tan pronto comoAWS IoT Core para LoRaWANlo recibe.AWS IoT Core para
LoRaWANdestinos (p. 1293)pueden compartirlo todos los dispositivos cuyos mensajes tengan el mismo
formato de datos y que envíen sus datos al mismo servicio.
1296
AWS IoT Core Guía para desarrolladores
Integra tus dispositivos paraAWS IoT Core para LoRaWAN
servicio. Por lo general, la regla llama a unAWS Lambdafunción para convertir los datos de los mensajes
del dispositivo al formato que requiere un servicio y, a continuación, envía el resultado al servicio.
La siguiente ilustración muestra cómo se protegen y procesan los datos de los mensajes a medida que
pasan del dispositivo inalámbrico a unAWSservicio.
1. ElLoRaEl dispositivo inalámbrico WAN cifra sus mensajes binarios mediante el modo CTR AES128
antes de transmitirlos.
2. AWS IoT Core para LoRaWANdescifra el mensaje binario y codifica la carga útil del mensaje binario
descifrado como una cadena de base64.
3. El mensaje codificado en base64 resultante se envía como carga de mensajes binarios (una carga
de mensajes que no tiene el formato de un documento JSON) alAWS IoTregla descrita en el destino
asignado al dispositivo.
4. ElAWS IoTla regla dirige los datos del mensaje al servicio descrito en la configuración de la regla.
La carga binaria cifrada recibida del dispositivo inalámbrico no es alterada ni interpretada porAWS IoT Core
para LoRaWAN. La carga útil del mensaje binario descifrado se codifica solo como una cadena de base64.
Para que los servicios puedan acceder a los elementos de datos de la carga útil de mensajes binarios, una
función llamada por la regla debe separar los elementos de datos de la carga útil. La carga útil del mensaje
codificado en base64 es una cadena ASCII, por lo que podría almacenarse como tal para analizarla más
adelante.
Para unAWS IoT Core para LoRaWANregla para enviar mensajes del dispositivo a otrosAWSservicios,
requiere unAWS IoT Core para LoRaWANun destino y unAWS IoTregla asignada a ese destino. ElAWS
IoTla regla debe contener una sentencia de consulta SQL y al menos una acción de regla.
• Una cláusula SELECT de SQL que selecciona y formatea los datos de la carga útil del mensaje
• Un filtro de temas (el objeto FROM de la sentencia de consulta de reglas) que identifica los mensajes
que se van a utilizar
1297
AWS IoT Core Guía para desarrolladores
Integra tus dispositivos paraAWS IoT Core para LoRaWAN
• Una sentencia condicional opcional (una cláusula WHERE de SQL) que especifica las condiciones en las
que se debe actuar
Este es un ejemplo de una sentencia de consulta de reglas que puede procesar cargas
desdeLoRaDispositivos WAN:
En este ejemplo, elPayloadDataes una carga binaria codificada en base64 enviada por
suLoRaDispositivo WAN.
Este es un ejemplo de una sentencia de consulta de reglas que puede realizar una decodificación binaria
de la carga entrante y transformarla en un formato diferente, como JSON:
{
"PayloadData":PayloadData,
"Fport": WirelessMetadata.LoRaWAN.FPort
}) as decodingoutput
Para obtener más información sobre el uso de las cláusulas SELECT AND WHERE, consulteReferencia de
la SQL de AWS IoT (p. 610)
Para obtener información sobreAWS IoTreglas y cómo crearlas y usarlas, consulteReglas para AWS
IoT (p. 516)yCreandoAWS IoTreglas para enrutar los datos del dispositivo a otros servicios (p. 208).
Para obtener información sobre la creación y el usoAWS IoT Core para LoRaWANdestinos, consulteAñadir
destinos aAWS IoT CoreporLoRaMENDIGO (p. 1293).
Para obtener información sobre el uso de cargas de mensajes binarios en una regla, consulteUso de las
cargas binarias (p. 676).
Para obtener más información sobre la seguridad de los datos y el cifrado utilizados para proteger la carga
útil del mensaje durante su viaje, consulteProtección de los datos en AWS IoT Core (p. 401).
Para obtener una arquitectura de referencia que muestre un ejemplo de decodificación e implementación
binarias de reglas de IoT, consulteAWS IoT Core para LoRaWANMuestras de solución enGitHub.
1298
AWS IoT Core Guía para desarrolladores
Configure la información de posición para los
dispositivos LoRa WAN y las puertas de enlace
Después de añadir el dispositivo, consulta el manual del usuario del dispositivo para obtener información
sobre cómo iniciar el envío de un mensaje de enlace ascendente desde tuLoRaDispositivo WAN.
HTTP/1.1 200
Content-type: application/json
{
"LastUplinkReceivedAt": "2021-03-24T23:13:08.476015749Z",
"LoRaWAN": {
"DataRate": 5,
"DevEui": "647fda0000006420",
"Frequency": 868100000,
"Gateways": [
{
"GatewayEui": "c0ee40ffff29df10",
"Rssi": -67,
"Snr": 9.75
}
],
"WirelessDeviceId": "30cbdcf3-86de-4291-bfab-5bfa2b12bad5"
}
Pasos siguientes
Ahora que ha conectado el dispositivo y ha verificado el estado de la conexión, puede observar el formato
de los metadatos del enlace ascendente recibidos del dispositivo mediante lacliente de prueba MQTTen
elPruebapágina delAWS IoTconsola. Para obtener más información, consulte Ver el formato de los
mensajes de enlace ascendente enviados desdeLoRaDispositivos WAN (p. 1338).
1299
AWS IoT Core Guía para desarrolladores
Cómo funciona el posicionamiento
para los dispositivos LoRa WAN
Puede utilizar la LoRa WANAWS IoT Core para especificar los datos de posición estática o activar el
posicionamiento para identificar la posición del dispositivo en tiempo real mediante solucionadores de
terceros. Puede agregar o actualizar la información de posición de los dispositivos LoRa WAN o las
puertas de enlace, o de ambos.
La información de posición se especifica al agregar el dispositivo o puerta deAWS IoT Core enlace a la
LoRa WAN o al editar los detalles de configuración del dispositivo o puerta de enlace. La información de
posición se especifica como carga útil de GeoJSON. El formato GeoJSON es un formato que se utiliza
para codificar estructuras de datos geográficos. La carga contiene las coordenadas de latitud y longitud de
la ubicación del dispositivo, que se basan en el sistema de coordenadas del Sistema Geodésico Mundial
(WGS84).
Una vez que los solucionadores hayan calculado la posición de tu recurso, si tienes Amazon Location
Service, puedes activar un mapa de ubicación de Amazon en el que se mostrará la posición de tu recurso.
Con los datos de posición, puede:
• Active el posicionamiento para identificar y obtener la posición de sus dispositivos LoRa WAN.
• Rastrea y monitorea la posición de tus puertas de enlace y dispositivos.
• DefinaAWS IoT reglas que procesen cualquier actualización de los datos de posición y los dirijan a
otrosServicio de AWS. Para ver la lista de acciones de la regla, consulteAcciones de reglas de AWS
IoT (p. 524).
• Cree alertas y reciba notificaciones a los dispositivos en caso de cualquier actividad inusual utilizando los
datos de posición y Amazon SNS.
Los solucionadores de terceros solo se pueden usar con dispositivos LoRa WAN que tengan
el chip LoRa Edge. No se puede usar con puertas de enlace LoRa WAN. En el caso de las
puertas de enlace, puedes seguir especificando la información de posición estática e identificar la
ubicación en un mapa de ubicación de Amazon.
1. Agrega tu dispositivo
Antes de activar el posicionamiento, añada primero su dispositivo aAWS IoT Core la LoRa WAN. El
dispositivo LoRa WAN debe tener el chipset LoRa Edge, que es una plataforma de consumo ultrabajo
que integra un LoRa transceptor de largo alcance, un escáner GNSS de múltiples constelaciones y un
escáner MAC Wi-Fi pasivo dirigido a aplicaciones de geolocalización.
2. Activar el posicionamiento
Para obtener la posición de sus dispositivos en tiempo real, active el posicionamiento. Cuando el
dispositivo LoRa WAN envía un mensaje de enlace ascendente, los datos de escaneo de Wi-Fi y
GNSS contenidos en el mensaje se envían aAWS IoT Core la LoRa WAN mediante el puerto marco
de geolocalización.
3. Recuperar información de posición
Recupere la posición estimada del dispositivo de los solucionadores calculada en función de los
resultados del escaneo de los transceptores. Si la información de posición se calculó utilizando los
1300
AWS IoT Core Guía para desarrolladores
Descripción general del flujo de trabajo de posicionamiento
resultados del escaneo de Wi-Fi y GNSS,AWS IoT Core para LoRa WAN selecciona la posición
estimada que tiene la mayor precisión.
4. Ver la información del puesto
Como los solucionadores no se pueden usar para puertas de enlace LoRa WAN, la
información de precisión se indicará como0.0.
Para obtener más información sobre el formato de los mensajes de enlace ascendente y los puertos de
frecuencia que se utilizan para el solucionador de posicionamiento, consulteMensaje de enlace ascendente
desdeAWS IoT Core la LoRa WAN al motor de reglas (p. 1305).
Especifique la información de posición estática de su dispositivo o puerta de enlace como carga útil de
GeoJSON, utilizando las coordenadas de latitud y longitud. También puede especificar una coordenada
de altitud opcional. Estas coordenadas se basan en el sistema de coordenadas WGS84. Para obtener
más información, consulte Sistema geodésico mundial (WGS84).
2. Activar el posicionamiento de los dispositivos
Si utilizas dispositivos LoRa WAN que tienen el chip LoRa Edge, puedes activar opcionalmente el
posicionamiento para rastrear la posición del dispositivo en tiempo real. Cuando el dispositivo envía un
mensaje de enlace ascendente, los datos de escaneo de GNSS y Wi-Fi se envían aAWS IoT Core la
LoRa WAN mediante el puerto marco de geolocalización. A continuación, los solucionadores utilizan
esta información para resolver la posición del dispositivo.
3. Agregar un destino a los datos de posición de la ruta
Puede agregar un destino que describa la regla de IoT para procesar los datos del dispositivo y enrutar
la información de posición actualizada aAWS IoT Core la LoRa WAN. También puedes ver la última
posición conocida de tu recurso en un mapa de ubicación de Amazon.
1301
AWS IoT Core Guía para desarrolladores
Configuración de la posición de los recursos
Si tus dispositivos tienen el chip LoRa Edge, puedes activar el posicionamiento para calcular la información
de posición en tiempo real. Para sus puertas de enlace, puede seguir introduciendo las coordenadas de
posición estáticas y utilizar Amazon Location para rastrear la posición de la puerta de enlace en un mapa
de ubicación de Amazon.
Los solucionadores de terceros no se pueden usar con puertas de enlace LoRa WAN. En el caso
de las puertas de enlace, aún puede especificar las coordenadas de posición estática. Cuando no
se utilicen solucionadores para calcular la posición, como en el caso de las puertas de enlace, la
información de precisión se indicará como0.0.
Puede configurar la posición de la puerta deAWS Management Console enlace mediante la APIAWS IoT
inalámbrica o laAWS CLI.
Una vez configurada la posición de la puerta de enlace,AWS IoT Core para LoRa WAN crea un mapa de
ubicación de Amazon denominadoiotwireless.map. Puedes ver este mapa en la página de detalles de
tu puerta de enlace, en la pestaña Posición. Según las coordenadas de posición que haya especificado,
la posición de su puerta de enlace se mostrará como un marcador en el mapa. Puedes acercar o alejar
la imagen para ver con claridad la posición de tu puerta de enlace en el mapa. En la pestaña Posición,
también verás la información de precisión y la marca de tiempo en la que se determinó la posición de tu
puerta de enlace.
1302
AWS IoT Core Guía para desarrolladores
Configuración de la posición de
las puertas de enlace LoRa WAN
Note
Si no tienes instalados los mapas de Amazon Location Service, verás un mensaje que indica
que debes usar Amazon Location Service para acceder al mapa y ver la posición de la puerta de
enlace. Si usa los mapas de Amazon Location Service, se le cobrarán cargos adicionalesCuenta
de AWS. Para obtener más información, consulte Precios de AWS IoT Core.
El mapa actúa como fuente de datos del mapa a los que se accede mediante operaciones deGet API,
como GetMapTile.iotwireless.map Para obtener información sobre lasGet API que se utilizan en los
mapas, consulte la referencia de API de Amazon Location Service.
Para obtener más información sobre este mapa, vaya a la consola de Amazon Location Service,
seleccione mapas y, a continuación, elija iotwireless.map. Para obtener más información, consulte Maps en
la guía para desarrolladores de Amazon Location Service.
La información sobre los datos de posición históricos no está disponible. Al actualizar las
coordenadas de posición de la puerta de enlace, sobrescribe los datos de posición informados
anteriormente. Tras actualizar la posición, en la pestaña Posición de los detalles de la pasarela,
verás la información sobre la nueva posición. El cambio en la marca de tiempo indica que
corresponde a la última posición conocida de la puerta de enlace.
Contenido de gatewayposition.json
{
"type": "Point",
1303
AWS IoT Core Guía para desarrolladores
Configuración de la posición de los dispositivos LoRa WAN
Si ejecuta este comando, no se muestra ningún resultado. Para ver la información de posición que
especificó, utilice la operaciónGetResourcePosition de API.
Al ejecutar este comando, se muestra la información de posición de la puerta de enlace inalámbrica como
carga útil de GeoJSON. Verás información sobre las coordenadas de posición, el tipo de información
de posición y propiedades adicionales, como la marca de tiempo que corresponde a la última posición
conocida de la puerta de enlace.
{
{
"type": "Point",
"coordinates": [33.3318,-22.2155,13.123],
"properties": {
"timestamp": "2018-11-30T18:35:24Z"
}
}
}
Puede configurar la posición de su dispositivo mediante laAWS Management Console APIAWS IoT
inalámbrica o laAWS CLI.
1304
AWS IoT Core Guía para desarrolladores
Configuración de la posición de los dispositivos LoRa WAN
posición, puede especificar un valor comprendido entre 1 y 223 para el puerto de marco. El fPort 0 está
reservado para los mensajes MAC, el fPort 224 está reservado para las pruebas de cumplimiento de MAC
y los puertos 225-255 están reservados para future extensiones de aplicaciones estandarizadas.
El siguiente código muestra el formato del mensaje de enlace ascendente enviado desdeAWS IoT Core la
LoRa WAN con la información de posición, la precisión, la configuración del solucionador y los metadatos
inalámbricos. Los campos resaltados a continuación son opcionales. Si no hay información de precisión
vertical, el valor esnull.
{
// Position configuration parameters for given wireless device
"WirelessDeviceId": "5b58245e-146c-4c30-9703-0ca942e3ff35",
1305
AWS IoT Core Guía para desarrolladores
Configuración de la posición de los dispositivos LoRa WAN
"Timestamp": "2021-05-03T03:24:29Z"
}
}
}
Para añadir información sobre la posición del dispositivo, sigue estos pasos:
Especifique los datos de posición del dispositivo mediante las coordenadas de latitud y longitud y una
coordenada de altitud opcional. La información de posición se basa en el sistema de coordenadas
WGS84.
• Geolocalización
Active el posicionamiento si desea queAWS IoT Core la LoRa WAN utilice la geolocalización para
calcular la posición del dispositivo. Utiliza solucionadores de GNSS y Wi-Fi de terceros para identificar
la posición del dispositivo en tiempo real.
Elija un destino para describir laAWS IoT regla que procesa los datos de posición del dispositivo y los
reenvía aAWS IoT Core la LoRa WAN. Utilice este destino solo para enrutar los datos de posición.
Debe ser diferente del destino que utiliza para enrutar los datos del dispositivo a otrosServicio de
AWS.
Después de configurar la posición del dispositivo,AWS IoT Core para LoRa WAN crea un mapa de
ubicación de Amazon llamadoiotwireless.map. Puedes ver este mapa en la página de detalles de tu
dispositivo, en la pestaña Posición. En función de las coordenadas de posición que haya especificado o de
la posición calculada por los solucionadores de terceros, la posición del dispositivo se mostrará como un
marcador en el mapa. Puedes acercar o alejar la imagen para ver con claridad la posición de tu dispositivo
en el mapa. En la página de detalles del dispositivo, en la pestaña Posición, también verás la información
de precisión, la marca de tiempo en la que se determinó la posición del dispositivo y el destino de los datos
de posición que especificaste.
1306
AWS IoT Core Guía para desarrolladores
Configuración de la posición de los dispositivos LoRa WAN
Note
Si no has activado los mapas de Amazon Location Service, verás un mensaje que indica que
tendrás que usar Amazon Location Service para acceder al mapa y ver la posición. Si usa los
mapas de Amazon Location Service, se le cobrarán cargos adicionalesCuenta de AWS. Para
obtener más información, consulte Precios de AWS IoT Core.
El mapa actúa como fuente de datos del mapa a los que se accede mediante operaciones deGet API,
como GetMapTile.iotwireless.map Para obtener información sobre lasGet API que se utilizan en los
mapas, consulte la referencia de API de Amazon Location Service.
Para obtener más información sobre este mapa, vaya a la consola de Amazon Location Service,
seleccione mapas y, a continuación, elija iotwireless.map. Para obtener más información, consulte Maps en
la guía para desarrolladores de Amazon Location Service.
Para cambiar la configuración de posición del dispositivo, en la página de detalles del dispositivo,
selecciona Editar y, a continuación, actualiza la información de posición, cualquier configuración de
geolocalización y el destino.
Note
La información sobre los datos de posición históricos no está disponible. Al actualizar las
coordenadas de posición del dispositivo, sobrescribe los datos de posición informados
anteriormente. Tras actualizar la posición, en la pestaña Posición de los detalles del dispositivo,
verás la información de la nueva posición. El cambio en la marca de tiempo indica que
corresponde a la última posición conocida del dispositivo.
A continuación se muestra el contenido del deviceposition.json archivo. Para especificar los valores
de fPort para enviar los datos de geolocalización, utilice el objeto Positioning con las operaciones de la
UpdateWirelessDeviceAPI CreateWirelessDevicey.
Contenido de deviceposition.json
1307
AWS IoT Core Guía para desarrolladores
Conectarse aAWS IoT Core para LoRaWANa
través de un punto final de interfaz VPC
{
"type": "Point",
"coordinates": [33.3318, -22.2155, 13.123],
"properties": {
"verticalAccuracy": 707,
"horizontalAccuracy":
"timestamp": "2018-11-30T18:35:24Z"
}
}
Si ejecuta este comando, no se muestra ningún resultado. Para ver la información de posición que
especificó, utilice la operaciónGetResourcePosition de API.
Al ejecutar este comando, se muestra la información de posición del dispositivo inalámbrico como
carga útil de GeoJSON. Verás información sobre las coordenadas de posición, el tipo de ubicación y las
propiedades, que puede incluir la información de precisión y la marca de tiempo que corresponde a la
última posición conocida del dispositivo.
{
"type": "Point",
"coordinates": [33.3318, -22.2155, 13.123],
"properties": {
"verticalAccuracy": 707,
"horizontalAccuracy": 389,
"horizontalConfidenceLevel": 0.68,
"verticalConfidenceLevel": 0.68,
"timestamp": "2018-11-30T18:35:24Z"
}
}
AWS IoT Core para LoRaWANadmite puntos de conexión de la interfaz Amazon Virtual Private Cloud
que funcionan conAWS PrivateLink. Cada punto de conexión de VPC está representado por una o varias
Interfaces de red elásticas (ENI) con direcciones IP privadas en las subredes de la VPC.
Para obtener más información sobre VPC y puntos de conexión, consulteQué es Amazon VPC.
Para obtener más información sobreAWS PrivateLink, consulteAWS PrivateLinky puntos finales de VPC.
1308
AWS IoT Core Guía para desarrolladores
Conectarse aAWS IoT Core para LoRaWANa
través de un punto final de interfaz VPC
El siguiente diagrama muestra la arquitectura de enlace privado deAWS IoT Core para LoRaWAN.
La arquitectura utiliza una pasarela de tránsito y un solucionador de rutas 53 para compartir elAWS
PrivateLinkpuntos finales de interfaz entre su VPC, elAWS IoT Core para LoRaWANVPC y un entorno
local. Encontrará un diagrama de arquitectura más detallado al configurar la conexión a los puntos finales
de la interfaz de VPC.
AWS IoT Core para LoRaWANtiene tres puntos finales públicos. Cada extremo público tiene un extremo de
interfaz de VPC correspondiente. Los extremos públicos se pueden clasificar en puntos finales del plano de
control y del plano de datos. Para obtener información sobre estos puntos de conexión, consulteAWS IoT
Core para LoRaWANPuntos finales de la API.
Note
AWS PrivateLinkla compatibilidad con los terminales solo está disponible en EE. UU. Este (Norte
de Virginia) y Europa (Irlanda).
Puede utilizar los puntos finales de la API del plano de control para interactuar con elAWS IoT
WirelessAPIs. Se puede acceder a estos puntos de enlace desde un cliente alojado en su Amazon VPC
medianteAWS PrivateLink.
• Puntos finales de la API del plano de datos
Los extremos de la API del plano de datos sonLoRaTerminales del servidor de red WAN (LNS) y del
servidor de configuración y actualización (CUPS) que puede utilizar para interactuar con elAWS IoT
Core para LoRaWANTerminales LNS y CUPS. Se puede acceder a estos puntos de conexión desde
suLoRapuertas de enlace locales mediante el uso deAWS VPNoAWS Direct Connect. Obtendrá estos
puntos finales al incorporar su puerta de enlace aAWS IoT Core para LoRaWAN. Para obtener más
información, consulte Agregue una puerta de enlace aAWS IoT Core para LoRaWAN (p. 1281).
1309
AWS IoT Core Guía para desarrolladores
A bordoAWS IoT Core para LoRaWANpunto
final de la API del plano de control
Temas
• A bordoAWS IoT Core para LoRaWANpunto final de la API del plano de control (p. 1310)
• A bordoAWS IoT Core para LoRaWANpuntos finales de la API del plano de datos (p. 1312)
Puede utilizar el cliente alojado en su Amazon VPC para acceder a los puntos finales del plano de
control que funcionan conAWS PrivateLink. Estos puntos finales se utilizan para conectarse a laAWS IoT
WirelessUtilice la API a través de un punto final de interfaz en su nube privada virtual (VPC) en lugar de
conectarse a través de la Internet pública.
1310
AWS IoT Core Guía para desarrolladores
A bordoAWS IoT Core para LoRaWANpunto
final de la API del plano de control
Para obtener más información, consulteComience a utilizar las instancias Linux de Amazon EC2.
Al elegir esta opción, se resolverá automáticamente el DNS y se creará una ruta enAmazon Route 53
Public Data Planede modo que las API que utilice más adelante para probar la conexión pasen por los
extremos de privatelink.
• ParaGrupo de seguridad, elija los grupos de seguridad que desee asociar a las interfaces de red de
puntos finales.
• Si lo desea, puede añadir o eliminar etiquetas. Las etiquetas son pares de nombres y valores que se
utilizan para asociarlos al punto final.
3. Para crear tu terminal de VPC, eligeCrear punto final.
1311
AWS IoT Core Guía para desarrolladores
A bordoAWS IoT Core para LoRaWANpuntos
finales de la API del plano de datos
Los siguientes ejemplos muestran cómo puede probar la conexión al punto final de la interfaz mediante la
CLI.
Response:
{
"Arn": "arn:aws:iotwireless:region:acct_number:ServiceProfile/1a2345ba-4c5d-67b0-ab67-
e0c8342f2857",
"Id": "1a2345ba-4c5d-67b0-ab67-e0c8342f2857"
}
Del mismo modo, puede ejecutar los siguientes comandos para obtener la información del perfil de servicio
o enumerar todos los perfiles de servicio.
1312
AWS IoT Core Guía para desarrolladores
A bordoAWS IoT Core para LoRaWANpuntos
finales de la API del plano de datos
Para obtener más información, consulte Uso de los protocolos CUPS y LNS (p. 1319).
Para encontrar los puntos finales de la API de Data Plane para suCuenta de AWSy Región, utilice laget-
service-endpointEl comando CLI que se muestra aquí, o elGetServiceEndpointAPI DE REPOSO. Para
obtener más información, consulteAWS IoT Core para LoRaWANPuntos finales de la API del plano de
datos.
Puede conectar suLoRaPuerta de enlace WAN local con la que comunicarseAWS IoT Core para
LoRaWANpuntos finales. Para establecer esta conexión, primero conecte su puerta de enlace local a
suCuenta de AWSen tu VPC mediante una conexión VPN. A continuación, puede comunicarse con los
extremos de la interfaz del plano de datos en elAWS IoT Core para LoRaWANVPC que funcionan con
privatelink.
Para los extremos del plano de datos, elLoRalas puertas de enlace se conectan primero a suCuenta
de AWSen su Amazon VPC, que luego se conecta al punto final de la VPC en elAWS IoT Core para
LoRaWANVPC.
Al conectarse a los puntos finales, los nombres DNS se pueden resolver en una VPC, pero no en
varias VPC. Para deshabilitar el DNS privado al crear el endpoint, desactive laHabilitar nombre
DNSambientación. Puede utilizar la zona alojada privada para proporcionar información sobre cómo desea
que Route 53 responda a las consultas de DNS de sus VPC. Para compartir su VPC con un entorno local,
puede utilizar un solucionador de Route 53 para facilitar el DNS híbrido.
1313
AWS IoT Core Guía para desarrolladores
A bordoAWS IoT Core para LoRaWANpuntos
finales de la API del plano de datos
Si sigue este procedimiento para su terminal de CUPS, busquecups. El punto final tendrá el
formatocom.amazonaws.region.lorawan.cups.
• ParaVPCySubredes, elija la VPC en la que desea crear el punto final y las zonas de disponibilidad
(AZ) en las que desea crear la red de puntos de conexión.
Note
Si no selecciona esta opción, puede deshabilitar el DNS privado para el extremo de la VPC y, en su
lugar, utilizar una zona alojada privada.
• ParaGrupo de seguridad, elija los grupos de seguridad que desee asociar a las interfaces de red de
puntos finales.
• Si lo desea, puede añadir o eliminar etiquetas. Las etiquetas son pares de nombres y valores que se
utilizan para asociarlos al punto final.
3. Para crear tu terminal de VPC, eligeCrear punto final.
Después de crear una zona alojada privada, puede crear un registro que indique al DNS cómo desea que
se dirija el tráfico a ese dominio.
Crear un registro
1314
AWS IoT Core Guía para desarrolladores
A bordoAWS IoT Core para LoRaWANpuntos
finales de la API del plano de datos
Después de crear una zona alojada privada, puede crear un registro que indique al DNS cómo desea que
se dirija el tráfico a ese dominio. Para crear un registro:
1. En la lista de zonas alojadas que se muestra, elija la zona alojada privada que creó anteriormente y
elijaCrear registro.
2. Utilice el método del asistente para crear el registro. Si la consola le presenta elCreación rápidamétodo,
eligeCambiar al asistente.
3. EscojaEnrutamiento sencilloporPolítica de enrutamientoy luego eligeSiguiente.
4. En elConfigurar registrospágina, eligeDefinir registro simple.
5. En elDefinir registro simplepágina:
• ParaNombre del registro, introduce el alias de tuCuenta de AWSnúmero. Obtienes este valor al
incorporar tu puerta de enlace o al utilizar elGetServiceEndpointAPI DE REPOSO.
• ParaTipo de registro, mantenga el valor comoA - Routes traffic to an IPv4 address and
some AWS resources.
• ParaValor/Dirigir el tráfico a, eligeAlias para punto final de VPC. A continuación, elige tuRegióny, a
continuación, elija el punto final que creó anteriormente, tal y como se describe enCree un punto final
de interfaz Amazon VPC (p. 1313)de la lista de puntos finales que se muestra.
6. EscojaDefinir registro simplepara crear tu registro.
Al crear la resolución de entrada, solo tiene que especificar su VPC y las subredes que creó anteriormente
en sus zonas de disponibilidad (AZ). El solucionador de rutas 53 utiliza esta información para asignar
automáticamente una dirección IP para enrutar el tráfico a cada una de las subredes.
Pasos siguientes
Has creado la zona alojada privada y un solucionador de entrada para enrutar el tráfico de tus entradas
de DNS. Ahora puede usar una VPN de sitio a sitio o un endpoint de VPN de cliente. Para obtener más
información, consulte Usa VPN para conectarteLoRapuertas de entrada a suCuenta de AWS (p. 1316).
1315
AWS IoT Core Guía para desarrolladores
A bordoAWS IoT Core para LoRaWANpuntos
finales de la API del plano de datos
Antes de poder conectar las puertas de enlace locales, debe haber creado el punto final de la VPC y haber
configurado una zona alojada privada y una resolución de entrada para que el tráfico de las puertas de
enlace no pase por la Internet pública. Para obtener más información, consulte Cree un punto final de
interfaz de VPC y una zona alojada privada (p. 1313).
Si lleva consigo el hardware de gateway y desea configurar una conexión VPN, le recomendamos
que utilice Client VPN en su lugar. Para obtener instrucciones, consulte Punto de enlace de Client
VPN (p. 1317).
1. Cree otra VPC en el sitio desde el que desee configurar la conexión. ParaVPC-A, puedes reutilizar la
VPC que creaste anteriormente. Para crear otra VPC (por ejemplo,VPC-B), usa un bloque CIDR que no
se superponga con el bloque CIDR de la VPC que creaste anteriormente.
Para obtener información sobre la configuración de las VPC, siga las instrucciones que se describen
enAWSconfigurar conexión VPN de sitio a sitio.
Note
El método VPN de sitio a sitio descrito en el documento utiliza OpenSwan para la conexión
VPN, que solo admite un túnel VPN. Si utilizas un software comercial diferente para la VPN, es
posible que puedas configurar dos túneles entre los sitios.
2. Después de configurar la conexión VPN, actualice el/etc/resolv.confarchivo añadiendo la
dirección IP del solucionador entrante desde suCuenta de AWS. Utiliza esta dirección IP para el servidor
de nombres. Para obtener información sobre cómo obtener esta dirección IP, consulteConfigurar
la resolución de entrada de Route 53 (p. 1315). Para este ejemplo, podemos usar la dirección
IP10.100.0.145que se asignó cuando creó el Route 53 Resolver.
3. Ahora podemos probar si la conexión VPN utiliza elAWS PrivateLinkpunto final en lugar de navegar por
la Internet pública mediante unnslookupcomando. A continuación se muestra un ejemplo de ejecución
del comando.
nslookup account-specific-prefix.lns.lorawan.region.amazonaws.com
A continuación se muestra un ejemplo de resultado de la ejecución del comando, que muestra una
dirección IP privada que indica que la conexión se ha establecido con elAWS PrivateLinkPunto final de
LNS.
1316
AWS IoT Core Guía para desarrolladores
A bordoAWS IoT Core para LoRaWANpuntos
finales de la API del plano de datos
Server: 10.100.0.145
Address: 10.100.0.145
Non-authoritative answer:
Name: https://xxxxx.lns.lorawan.region.amazonaws.com
Address: 10.100.0.204
Para obtener información sobre el uso de una conexión VPN de sitio a sitio, consulteCómo funciona la VPN
de sitio a sitio.
1. Cree un punto final de VPN de cliente siguiendo las instrucciones que se describen enEmpezar conAWS
Client VPN.
2. Inicie sesión en su red local (por ejemplo, un enrutador Wi-Fi) mediante la URL de acceso de ese
enrutador (por ejemplo,192.168.1.1) y busque el nombre raíz y la contraseña.
3. Configura tuLoRaPuerta de enlace WAN siguiendo las instrucciones de la documentación de la puerta
de enlace y, a continuación, agregue su puerta de enlace aAWS IoT Core para LoRaWAN. Para obtener
información sobre cómo agregar su puerta de enlace, consulteIncorpore sus puertas de enlace aAWS
IoT Core para LoRaWAN (p. 1279).
4. Compruebe si el firmware de su gateway está actualizado. Si el firmware está desactualizado, puede
seguir las instrucciones proporcionadas en la red local para actualizar el firmware de la puerta de
enlace. Para obtener más información, consulte Actualice el firmware de la pasarela mediante el servicio
CUPS conAWS IoT Core para LoRaWAN (p. 1324).
5. Compruebe si se ha activado OpenVPN. Si se ha habilitado, vaya al paso siguiente para configurar
el cliente OpenVPN dentro de la red local. Si no está habilitada, sigue las instrucciones deGuía de
instalación de OpenVPN paraOpenWrt.
Note
Para este ejemplo, utilizamos OpenVPN. Puede utilizar otros clientes de VPN, comoAWS
VPNoAWS Direct Connectpara configurar la conexión VPN de su cliente.
1317
AWS IoT Core Guía para desarrolladores
Administración de puertas de enlace
conAWS IoT Core para LoRa WAN
Para obtener información sobre el uso de una conexión VPN de sitio a sitio, consultePrimeros pasos con
Client VPN.
Para probar suAWS PrivateLinkconexión al punto final de CUPS desde suLoRagateway, ejecute el
siguiente comando:
Para probar su terminal de LNS, primero aprovisione unLoRaDispositivo WAN que funcionará con su
puerta de enlace inalámbrica. A continuación, puede añadir su dispositivo y realizar launirseprocedimiento
tras el cual puede empezar a enviar mensajes de enlace ascendente.
1318
AWS IoT Core Guía para desarrolladores
Uso de pasarelas calificadas del
catálogo de dispositivosAWS asociados
abierto mantenido por Semtech Corporation y distribuido por su GitHubrepositorio. AWS IoT Core para
LoRaWANes compatible con la versión 2.0.4 y versiones posteriores de LoRa Basics Station.
El protocolo LNS establece una conexión de datos entre una puerta de enlace compatible con LoRa Basics
Station y un servidor de red. LoRa Los mensajes de enlace ascendente y descendente se intercambian a
través de esta conexión de datos de forma segura WebSockets.
• Balizamiento
Puede configurar los parámetros de balizamiento para sus puertas de enlace LoRa WAN que actúan
como puente para sus dispositivos LoRa WAN de clase B. Estos dispositivos reciben un mensaje de
enlace descendente en las franjas horarias programadas, por lo que debe configurar los parámetros de
balizamiento de sus puertas de enlace para transmitir estas balizas sincronizadas en el tiempo.
• Filtrado
Puede configurar losJoinEUI parámetrosNetID y de las puertas de enlace LoRa WAN para filtrar el
tráfico de datos del dispositivo. Filtrar el tráfico ayuda a conservar el uso del ancho de banda y reduce el
flujo de tráfico entre las puertas de enlace y el LNS.
• Subbandas
Puede configurar las subbandas de su puerta de enlace para especificar la subbanda concreta que
desea utilizar. En el caso de los dispositivos inalámbricos que no pueden saltar entre las distintas
1319
AWS IoT Core Guía para desarrolladores
Configure las capacidades de balizamiento y
filtrado de sus puertas de enlace LoRa WAN
subbandas, puede utilizar esta capacidad para comunicarse con los dispositivos que utilizan únicamente
los canales de frecuencia de esa subbanda en particular.
Los temas siguientes contienen más información sobre estos parámetros y sobre cómo configurarlos.
Los parámetros de balizamiento no están disponibles enAWS Management Console y solo se pueden
especificar mediante laAWS IoT Wireless API o elAWS CLI.
Temas
• Configuración de sus puertas de enlace para enviar balizas a dispositivos de clase B (p. 1320)
• Configuración de las subbandas y las capacidades de filtrado de su puerta de enlace (p. 1321)
Para configurar estos parámetros de balizamiento, su puerta de enlace debe ejecutar la versión 2.0.6 del
software LoRa Basics Station. Consulte Uso de pasarelas calificadas del catálogo de dispositivosAWS
asociados (p. 1319).
Los parámetros de balizamiento se configuran al añadir la puerta de enlace paraAWS IoT Core para
LoRaWAN utilizar la operación CreateWirelessGatewayde la API. Al invocar la operación de API,
especifique los siguientes parámetros utilizando elBeaconing objeto para sus puertas de enlace. Tras
configurar los parámetros, las puertas de enlace enviarán las balizas a los dispositivos en un intervalo de
128 segundos.
El siguiente ejemplo muestra cómo configurar estos parámetros para la puerta de enlace. Elinput.json
archivo contendrá detalles adicionales, como el certificado de puerta de enlace y las credenciales de
aprovisionamiento. Para obtener más información sobre cómo añadir su puerta de enlace alAWS IoT Core
para LoRaWAN uso de la operación deCreateWirelessGateway API, consulteAgregue una puerta de
enlace mediante la API (p. 1283).
Note
Los parámetros de balizamiento no están disponibles cuando añades tu puerta de enlace alAWS
IoT Core para LoRaWAN uso de laAWS IoT consola.
1320
AWS IoT Core Guía para desarrolladores
Configure las capacidades de balizamiento y
filtrado de sus puertas de enlace LoRa WAN
--cli-input-json file://input.json
Contenido de input.json
{
"Description": "My LoRaWAN gateway",
"LoRaWAN": {
"Beaconing": {
"DataRate": 8,
"Frequencies": ["923300000","923900000"]
},
"GatewayEui": "a1b2c3d4567890ab",
"RfRegion": US915,
"JoinEuiFilters": [
["0000000000000001", "00000000000000ff"],
["000000000000ff00", "000000000000ffff"]
],
"NetIdFilters": ["000000", "000001"],
"RfRegion": "US915",
"SubBands": [2]
}
}
{
"Arn": "arn:aws:iotwireless:us-east-1:400232685877aa:WirelessGateway/a01b2c34-
d44e-567f-abcd-0123e445663a",
"Id": a01b2c34-d44e-567f-abcd-0123e445663a"
}
La ejecución de este comando devuelve información sobre la puerta de enlace y los parámetros de
balizamiento.
1321
AWS IoT Core Guía para desarrolladores
Configure las capacidades de balizamiento y
filtrado de sus puertas de enlace LoRa WAN
su LoRa puerta de enlace primero consulta el punto final del LNS en el servidor CUPS y, a continuación,
establece una conexión de WebSockets datos con ese punto final. Una vez establecida la conexión, las
tramas de enlace ascendente y descendente se pueden intercambiar a través de esa conexión.
{
"msgtype" : "router_config"
"NetID" : [ INT, .. ]
"JoinEui" : [ [INT,INT], .. ] // ranges: beg,end inclusive
"region" : STRING // e.g. "EU863", "US902", ..
"hwspec" : STRING
"freq_range" : [ INT, INT ] // min, max (hz)
"DRs" : [ [INT,INT,INT], .. ] // sf,bw,dnonly
"sx1301_conf": [ SX1301CONF, .. ]
"nocca" : BOOL
"nodc" : BOOL
"nodwell" : BOOL
}
Las puertas de enlace transportan datos de dispositivos LoRa WAN hacia y desde LNS, por lo general a
través de redes de gran ancho de banda, como Wi-Fi, Ethernet o Cellular. Las pasarelas suelen recoger
todos los mensajes y atravesar el tráfico al que lleganAWS IoT Core para LoRaWAN. Sin embargo,
puede configurar las puertas de enlace para filtrar parte del tráfico de datos del dispositivo, lo que ayuda a
conservar el uso del ancho de banda y reduce el flujo de tráfico entre la puerta de enlace y el LNS.
Para configurar su LoRa puerta de enlace para filtrar los marcos de datos, puede utilizar los
parámetrosNetID yJoinEui elrouter_config mensaje. NetIDes una lista de los valores de NetID que
se aceptan. Se descartará cualquier LoRa marco de datos que contenga un marco de datos distinto de los
listados. JoinEuies una lista de pares de valores enteros que codifican rangos de valores de JoineUI. La
puerta de enlace eliminará los marcos de solicitud de unión a menos queJoinEui el campo del mensaje
esté dentro del rango [BegEui,EndEui].
Algunos dispositivos inalámbricos no pueden saltar entre subbandas y utilizar los canales de frecuencia
de una sola subbanda cuando están conectados a ellosAWS IoT Core para LoRaWAN. Para transmitir los
paquetes de enlace ascendente de esos dispositivos, configure las LoRa puertas de enlace para que usen
esa subbanda en particular. Para las puertas de enlace de otras regiones de RF, como la EU868, esta
configuración no es necesaria.
1322
AWS IoT Core Guía para desarrolladores
Configure las capacidades de balizamiento y
filtrado de sus puertas de enlace LoRa WAN
1. Vaya a la página de AWS IoT Core para LoRaWANpuertas de enlace de laAWS IoT consola y
seleccione Agregar puerta de enlace.
2. Especifique los detalles de la puerta de enlace, como la EUI de la puerta de enlace, la banda de
frecuencia (RFRegion) y un nombre y una descripción opcionales, y elija si desea asociarAWS IoT algo
a su puerta de enlace. Para obtener más información acerca de cómo agregar una puerta de enlace,
consulteAñadir una puerta de enlace mediante la consola (p. 1281).
3. En la sección de configuración deLoRa WAN, puede especificar las subbandas y la información de
filtrado.
• SubBands: Para añadir una subbanda, elija Agregar SubBand y especifique una lista de valores
enteros que indiquen qué subbandas admite la puerta de enlace. ElSubBands parámetro solo se
puede configurar en elRfRegion US915 y el AU915 y debe tener valores dentro del rango[1,8]
dentro de una de estas regiones compatibles.
• NetIdFilters: Para filtrar los marcos de enlace ascendente, elija Agregar NetId y especifique una
lista de valores de cadena que utiliza la puerta de enlace. El NetID de la trama de enlace ascendente
entrante desde el dispositivo inalámbrico debe coincidir al menos con uno de los valores de la lista; de
lo contrario, se descarta la trama.
• JoinEuiFilters: elija Agregar JoinEui rango y especifique una lista de pares de valores de cadena
que una puerta de enlace utiliza para filtrar LoRa los marcos. El valor joineUI especificado como parte
de la solicitud de unión del dispositivo inalámbrico debe estar dentro del rango de al menos uno de
JoinEuiRange los valores, cada uno de los cuales aparece como un par de [BegEui, EndEui]; de lo
contrario, se elimina el marco.
4. A continuación, puede continuar configurando la puerta de enlace siguiendo las instrucciones que se
describen enAñadir una puerta de enlace mediante la consola (p. 1281).
Tras añadir una puerta de enlace, en la página de AWS IoT Core para LoRaWANpuertas de enlace
de laAWS IoT consola, si seleccionas la puerta de enlace que has agregado, puedes ver los
filtrosSubBandsNetIdFilters yJoinEuiFilters en la sección de detalles específicos deLoRa WAN
de la página de detalles de la puerta de enlace.
{
"Arn": "arn:aws:iotwireless:us-east-1:400232685877aa:WirelessGateway/a11e3d21-
e44c-471c-afca-6716c228336a",
"Description": "Using my first LoRaWAN gateway",
"LoRaWAN": {
"GatewayEui": "a1b2c3d4567890ab",
"JoinEuiFilters": [
["0000000000000001", "00000000000000ff"],
["000000000000ff00", "000000000000ffff"]
],
"NetIdFilters": ["000000", "000001"],
"RfRegion": "US915",
"SubBands": [2]
},
"Name": "myFirstLoRaWANGateway"
1323
AWS IoT Core Guía para desarrolladores
Actualice el firmware de la pasarela mediante el
servicio CUPS conAWS IoT Core para LoRaWAN
"ThingArn": null,
"ThingName": null
}
También puede utilizar la UpdateWirelessGatewayAPI para actualizar los filtros, pero no las subbandas. Si
losNetIdfilters valoresJoinEuiFilters y son nulos, significa que no hay ninguna actualización para
los campos. Si los valores no son nulos y se incluyen listas vacías, se aplica la actualización. Para obtener
los valores de los campos que especificó, utilice la GetWirelessGatewayAPI.
Tendrá que actualizar con frecuencia el firmware de la puerta de enlace. Puede utilizar el servicio
CUPSAWS IoT Core para LoRaWAN para proporcionar actualizaciones de firmware a la pasarela, donde
también se pueden firmar las actualizaciones. Para actualizar el firmware de la puerta de enlace, puede
utilizar el SDK o la CLI, pero no la consola.
El proceso de actualización tarda hasta 45 minutos en completarse. Puede tardar más si configuras la
puerta de enlace por primera vez para conectarte a ellaAWS IoT Core para LoRaWAN. Los fabricantes de
puertas de enlace suelen proporcionar sus propios archivos y firmas de actualización de firmware para que
pueda usarlos en su lugar y continuarCargue el archivo de firmware a un bucket de S3 y agregue un rol de
IAM (p. 1328).
Si no dispone de los archivos de actualización del firmware, consulte unGenere el archivo de actualización
del firmware y la firma (p. 1324) ejemplo que puede utilizar para adaptarse a su aplicación.
Si no tiene este script, a continuación se muestran los comandos que se deben ejecutar para generar el
archivo de actualización del firmware. Las actualizaciones también se pueden firmar para garantizar que
el código no se haya alterado ni dañado y que los dispositivos ejecuten código publicado únicamente por
autores de confianza.
1324
AWS IoT Core Guía para desarrolladores
Actualice el firmware de la pasarela mediante el
servicio CUPS conAWS IoT Core para LoRaWAN
El script es específico de RAKWireless Gateway, por lo que tendrá que adaptarlo a su aplicación
en función de la puerta de enlace que utilice.
Script base
A continuación se muestra un ejemplo de script base para la pasarela RAKWireless Gateway basada en
Raspberry Pi. Puede guardar los siguientes comandos en un archivobase.sh y luego ejecutar el script en
la terminal del navegador web de la Raspberry Pi.
*#!/bin/bash*
execution_folder=/home/pi/Documents/basicstation/examples/aws_lorawan
station_path="$execution_folder/station"
version_path="$execution_folder/version.txt"
station_conf_path="$execution_folder/station_conf"
# Function to find the Basics Station binary at the end of this script
# and store it in the station path
function prepare_station()
{
match=$(grep --text --line-number '^STATION:$' $0 | cut -d ':' -f 1)
payload_start=$((match + 1))
match_end=$(grep --text --line-number '^END_STATION:$' $0 | cut -d ':' -f 1)
payload_end=$((match_end - 1))
lines=$(($payload_end-$payload_start+1))
head -n $payload_end $0 | tail -n $lines > $station_path
}
1325
AWS IoT Core Guía para desarrolladores
Actualice el firmware de la pasarela mediante el
servicio CUPS conAWS IoT Core para LoRaWAN
# Remove update.bin so that it is not read again next time Basics station starts
rm -f /tmp/update.bin
# Exit so that rest of this script which has binaries attached does not get executed
exit 0
Al script base, añadimos el binario Basics Station, el version.txt que identifica la versión a la que se va a
actualizar, ystation.conf en un script llamadoaddpayload.sh. A continuación, ejecute este script.
*#!/bin/bash
*
base.sh > fwstation
# Add station
echo "STATION:" >> fwstation
cat $1 >> fwstation
echo "" >> fwstation
echo "END_STATION:" >> fwstation
# Add version.txt
echo "VERSION:" >> fwstation
cat $2 >> fwstation
echo "" >> fwstation
echo "END_VERSION:" >> fwstation
# Add station.conf
echo "CONF:" >> fwstation
cat $3 >> fwstation
echo "END_CONF:" >> fwstation
# executable
chmod +x fwstation
Después de ejecutar estos scripts, puede ejecutar el siguiente comando en la terminal para generar el
archivo de actualización del firmware:fwstation.
• Una firma que debe generarse mediante una clave privada ECDSA y tener menos de 128 bytes.
• La clave privada que se usa para la firma y debe almacenarse en la puerta de enlace con el nombre de
archivo del formatosig-%d.key. Se recomienda utilizar el nombre del archivosig-0.key.
1326
AWS IoT Core Guía para desarrolladores
Actualice el firmware de la pasarela mediante el
servicio CUPS conAWS IoT Core para LoRaWAN
La firma y el CRC se pasarán a lasAWS IoT Core para LoRaWAN API. Para generar los archivos
anteriores, puede utilizar el siguiente scriptgen.sh, inspirado en el ejemplo de basicstation del GitHub
repositorio.
*#!/bin/bash
*function ecdsaKey() {
# Key not password protected for simplicity
openssl ecparam -name prime256v1 -genkey | openssl ec -out $1
}
# Generate signature
openssl dgst -sha512 -sign sig-0.prime256v1.pem $1 > sig-0.signature
La clave privada generada por el script debe guardarse en la puerta de enlace. El archivo de claves está
en formato binario.
./gen_sig.sh fwstation
read EC key
writing EC key
read EC key
writing EC key
read EC key
writing EC key
The crc for the private key=3434210794
$ cat sig-0.signature.base64
MEQCIDPY/p2ssgXIPNCOgZr+NzeTLpX+WfBo5tYWbh5pQWN3AiBROen+XlIdMScv
AsfVfU/ZScJCalkVNZh4esyS8mNIgA==
$ ls sig-0.key
sig-0.key
1327
AWS IoT Core Guía para desarrolladores
Actualice el firmware de la pasarela mediante el
servicio CUPS conAWS IoT Core para LoRaWAN
actualización del firmware como un objeto. Puede añadir una función de IAM que dé permiso al servidor
CUPS para leer el archivo de actualización del firmware en el bucket de S3.
El archivo de actualización del firmware que desee cargar depende de la puerta de enlace que utilice. Si
ha seguido un procedimiento similar al descrito enGenere el archivo de actualización del firmware y la
firma (p. 1324), cargará elfwstation archivo generado al ejecutar los scripts.
Creación de un bucket de S3
Para crear un bucket de S3, abra la consola de Amazon S3. Inicia sesión si aún no lo has hecho y sigue
estos pasos:
Ahora puede ver su depósito en la lista de depósitos que se muestra enAWS Management Console. Elige
tu bucket y completa los siguientes pasos para cargar tu archivo.
1328
AWS IoT Core Guía para desarrolladores
Actualice el firmware de la pasarela mediante el
servicio CUPS conAWS IoT Core para LoRaWAN
firma (p. 1324), cargará elfwstation archivo; de lo contrario, cargará el archivo proporcionado por el
fabricante de la pasarela.
3. Asegúrese de que todos los ajustes estén configurados en sus valores predeterminados. Asegúrese
de que las ACL predefinidas estén configuradas como privadas y seleccione Cargar para cargar el
archivo.
4. Copia el URI de S3 del archivo que has subido. Elige tu bucket y verás el archivo que has subido
en la lista de objetos. Elija su archivo y, a continuación, elija Copiar URI de S3. El URI será algo así
como:s3://iotwirelessfwupdate/fwstation si has nombrado tu bucket de forma similar al
ejemplo descrito anteriormente (fwstation). Utilizará el URI de Amazon S3 al crear el rol de IAM.
Para crear una política de IAM para su rol deAWS IoT Core para LoRaWAN destino, abra el centro de
políticas de la consola de IAM y, a continuación, complete los siguientes pasos:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:ListBucketVersions",
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::iotwirelessfwupdate/fwstation",
"arn:aws:s3:::iotwirelessfwupdate"
]
}
]
}
3. Elija Revisar política y, en Nombre, introduzca un nombre para esta política (por
ejemplo,IoTWirelessFwUpdatePolicy). Necesitará este nombre para usarlo en el procedimiento
siguiente.
4. Elija Create Policy (Crear política).
Ahora debe crear un rol de IAM y adjuntar la política que ha creado anteriormente para acceder al bucket
de S3. Abra el hub de roles de la consola de IAM y complete los siguientes pasos:
1329
AWS IoT Core Guía para desarrolladores
Actualice el firmware de la pasarela mediante el
servicio CUPS conAWS IoT Core para LoRaWAN
En el mensaje de confirmación que aparece después de ejecutar el paso anterior, elija el nombre del rol
que creó para editarlo. Editarás el rol para añadir la siguiente relación de confianza.
1. En la sección Resumen del rol que creó, elija la pestaña Relaciones de confianza y, a continuación,
elija Editar relación de confianza.
2. En el documento de política, cambie laPrincipal propiedad para que tenga un aspecto similar al de
este ejemplo.
"Principal": {
"Service": "iotwireless.amazonaws.com"
},
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "iotwireless.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
1330
AWS IoT Core Guía para desarrolladores
Actualice el firmware de la pasarela mediante el
servicio CUPS conAWS IoT Core para LoRaWAN
• estación
La versión y el tiempo de compilación del software Basics Station. Para identificar esta información,
también puede generarla mediante el software Basics Station que ejecuta su puerta de enlace (por
ejemplo,2.0.5(rpi/std) 2021-03-09 03:45:09).
• PackageVersion
Puede utilizar laAWS IoT Core para LoRaWAN API oAWS CLI obtenerlaCurrentVersion para su puerta
de enlace. Los siguientes comandos muestran cómo obtener esta información mediante la CLI.
1. Si ya aprovisionó una puerta de enlace, puede obtener información sobre la puerta de enlace mediante
el get-wireless-gatewaycomando.
{
"Name": "Raspberry pi",
"Id": "1352172b-0602-4b40-896f-54da9ed16b57",
"Description": "Raspberry pi",
"LoRaWAN": {
"GatewayEui": "5a11b0a85a11b0a8",
"RfRegion": "US915"
},
"Arn": "arn:aws:iotwireless:us-
east-1:231894231068:WirelessGateway/1352172b-0602-4b40-896f-54da9ed16b57"
}
1331
AWS IoT Core Guía para desarrolladores
Actualice el firmware de la pasarela mediante el
servicio CUPS conAWS IoT Core para LoRaWAN
--id "3039b406-5cc9-4307-925b-9948c63da25b"
A continuación se muestra un ejemplo de resultado del comando, con la información de los tres campos
mostrada porCurrentVersion.
{
"LoRaWAN": {
"CurrentVersion": {
"PackageVersion": "1.0.0",
"Model": "rpi",
"Station": "2.0.5(rpi/std) 2021-03-09 03:45:09"
}
}
}
Puede crear la definición de tareas de la puerta de enlace inalámbrica mediante laAWS IoT Core para
LoRaWAN API oAWS CLI. Los siguientes comandos muestran cómo crear la definición de tareas mediante
la CLI.
Proporcione el enlace a su objeto que contiene el archivo de actualización del firmware que cargó en
el bucket de S3. (por ejemplo,s3://iotwirelessfwupdate/fwstation.
• UpdateDataRole
Proporcione el enlace al ARN del rol del rol de IAM que creó, que proporciona permisos para leer el
bucket de S3. (por ejemplo,arn:aws:iam::123456789012:role/IoTWirelessFwUpdateRole.
• SigKeyCRC y UpdateSignature
cat input.json
{
"AutoCreateTasks": true,
"Name": "FirmwareUpdate",
"Update":
{
1332
AWS IoT Core Guía para desarrolladores
Actualice el firmware de la pasarela mediante el
servicio CUPS conAWS IoT Core para LoRaWAN
"UpdateDataSource" : "s3://iotwirelessfwupdate/fwstation",
"UpdateDataRole" : "arn:aws:iam::123456789012:role/IoTWirelessFwUpdateRole",
"LoRaWAN" :
{
"SigKeyCrc": 3434210794,
"UpdateSignature": "MEQCIDPY/p2ssgXIPNCOgZr+NzeTLpX+WfBo5tYWbh5pQWN3AiBROen
+XlIdMScvAsfVfU/ZScJCalkVNZh4esyS8mNIgA==",
"CurrentVersion" :
{
"PackageVersion": "1.0.0",
"Model": "rpi",
"Station": "2.0.5(rpi/std) 2021-03-09 03:45:09"
}
}
}
}
{
"Id": "4ac46ff4-efc5-44fd-9def-e8517077bb12",
"Arn": "arn:aws:iotwireless:us-
east-1:231894231068:WirelessGatewayTaskDefinition/4ac46ff4-efc5-44fd-9def-e8517077bb12"
}
Una tarea es una definición de tarea en proceso. Como especificó la creación automática de tareas
mediante la configuraciónAutoCreateTasks deTrue, la tarea de actualización del firmware se inicia en
cuanto se encuentra una puerta de enlace coincidente.
{
"WirelessGatewayId": "1352172b-0602-4b40-896f-54da9ed16b57",
"WirelessGatewayTaskDefinitionId": "ec11f9e7-b037-4fcc-aa60-a43b839f5de3",
"LastUplinkReceivedAt": "2021-03-12T09:56:12.047Z",
"TaskCreatedAt": "2021-03-12T09:56:12.047Z",
"Status": "IN_PROGRESS"
1333
AWS IoT Core Guía para desarrolladores
Elegir puertas de enlace para recibir el tráfico de
datos de enlace descendente de la LoRa WAN
La próxima vez que ejecute el comando, si la actualización del firmware surte efecto, mostrará los campos
actualizadosPackageVersion,Model y el estado de la tarea cambiará aCOMPLETED.
{
"WirelessGatewayId": "1352172b-0602-4b40-896f-54da9ed16b57",
"WirelessGatewayTaskDefinitionId": "ec11f9e7-b037-4fcc-aa60-a43b839f5de3",
"LastUplinkReceivedAt": "2021-03-12T09:56:12.047Z",
"TaskCreatedAt": "2021-03-12T09:56:12.047Z",
"Status": "COMPLETED"
}
En este ejemplo, le mostramos la actualización del firmware mediante la pasarela RAKWireless basada en
Raspberry Pi. El script de actualización del firmware detiene la ejecución BasicStation para almacenar lo
actualizado yModel los camposPackageVersion, por lo que BasicStation habrá que reiniciarlos.
Si la actualización del firmware falla, verá un estado deFIRST_RETRY desde el servidor CUPS y la puerta
de enlace envía la misma solicitud. Si el servidor CUPS no puede conectarse a la puerta de enlace
después de unSECOND_RETRY, mostrará un estado deFAILED.
Una vez finalizada la tarea anteriorCOMPLETED oFAILED, elimine la tarea anterior mediante el delete-
wireless-gateway-taskcomando antes de iniciar una nueva.
1334
AWS IoT Core Guía para desarrolladores
Elegir puertas de enlace para recibir el tráfico de
datos de enlace descendente de la LoRa WAN
Note
La lista de puertas de enlace que quieres usar no está disponible en laAWS IoT consola. Puede
especificar esta lista de puertas de enlace para utilizarla únicamente cuando utilice la operación
deSendDataToWirelessDevice API o la CLI.
Note
Puede especificar esta lista de puertas de enlace para utilizarla únicamente al enviar el mensaje
de enlace descendente a un dispositivo inalámbrico de clase B o clase C. Si utiliza un dispositivo
de clase A, la puerta de enlace que eligió al enviar el mensaje de enlace ascendente se utilizará
cuando se envíe un mensaje de enlace descendente al dispositivo.
En el siguiente ejemplo, se muestra cómo especificar estos parámetros para la puerta de enlace.
Elinput.json archivo contendrá detalles adicionales. Para obtener más información sobre el envío
de un mensaje de enlace descendente mediante la operación deSendDataToWirelessDevice API,
consulteRealice operaciones de cola de enlace descendente mediante la API (p. 1342).
Note
Los parámetros para especificar la lista de puertas de enlace participantes no están disponibles
cuando se envía un mensaje de enlace descendente desde laAWS IoT Core para LoRaWANAWS
IoT consola.
Contenido de input.json
{
"WirelessMetadata": {
"LoRaWAN": {
"FPort": "1",
"ParticipatingGateways": {
"DownlinkMode": "SEQUENTIAL",
"TransmissionInterval": 1200,
"GatewayList": [
{
"DownlinkFrequency": 100000000,
"GatewayID": a01b2c34-d44e-567f-abcd-0123e445663a
},
1335
AWS IoT Core Guía para desarrolladores
Administración de dispositivos con
AWS IoT Core para LoRaWAN
{
"DownlinkFrequency": 100000101,
"GatewayID": 12345678-a1b2-3c45-67d8-e90fa1b2c34d
}
]
}
}
}
}
{
MessageId: "6011dd36-0043d6eb-0072-0008"
}
La ejecución de este comando devuelve información sobre los mensajes de la cola y sus parámetros.
A continuación se presentan algunas consideraciones importantes al utilizar sus dispositivos conAWS IoT
Core para LoRaWAN. Para obtener información sobre cómo añadir tu dispositivo aAWS IoT Core para
LoRaWAN, consulteIntegra tus dispositivos paraAWS IoT Core para LoRaWAN (p. 1288).
• Sensores disponibles
• Capacidad de la batería
• Consumo de energía
• Costo
• Tipo de antena y alcance de transmisión
1336
AWS IoT Core Guía para desarrolladores
Uso de dispositivos con puertas de enlace
calificadas paraAWS IoT Core para LoRaWAN
LoRaVersión WAN
AWS IoT Core para LoRaWANes compatible con todos los dispositivos que cumplen con 1.0.x o
1.1LoRaEspecificaciones de WAN estandarizadas porLoRaAlianza.
Modos de activación
Antes de suLoRaEl dispositivo WAN puede enviar datos de enlace ascendente, debe completar un proceso
llamadoactivaciónounirseprocedimiento. Para activar el dispositivo, puede utilizar OTAA (activación
inalámbrica) o ABP (activación por personalización). Le recomendamos que utilice OTAA para activar el
dispositivo, ya que se generan nuevas claves de sesión para cada activación, lo que hace que sea más
seguro.
Clases de dispositivos
LoRaLos dispositivos WAN pueden enviar mensajes de enlace ascendente en cualquier momento.
Escuchar los mensajes de enlace descendente consume la capacidad de la batería y reduce su duración.
ElLoRaEl protocolo WAN especifica tres clases deLoRaDispositivos WAN.
• Los dispositivos de clase A duermen la mayor parte del tiempo y solo escuchan los mensajes de enlace
descendente durante un breve período de tiempo. Estos dispositivos son en su mayoría sensores
alimentados por baterías con una duración de la batería de hasta 10 años.
• Los dispositivos de clase B pueden recibir mensajes en ranuras de enlace descendente programadas.
Estos dispositivos son en su mayoría actuadores alimentados por baterías.
• Los dispositivos de clase C nunca duermen y escuchan continuamente los mensajes entrantes, por
lo que no hay mucho retraso en la recepción de los mensajes. Estos dispositivos son en su mayoría
actuadores alimentados por la red eléctrica.
Para obtener más información sobre estas consideraciones sobre los dispositivos inalámbricos, consulte
los recursos mencionados enMás información sobre LoRa WAN (p. 1274).
1337
AWS IoT Core Guía para desarrolladores
Gestione la comunicación entre
susLoRadispositivos WAN yAWS IoT
otrosServicio de AWSs y aplicaciones alojadas en la nube. Mensajes que se envían desdeAWS IoT Core
para LoRaWANy otrosServicio de AWSLos mensajes y aplicaciones de sus dispositivos se denominan
mensajes de enlace descendente.
A continuación se muestra cómo puede ver y administrar los mensajes de enlace ascendente y
descendente que se envían entre sus dispositivos y la nube. Puede mantener una cola de mensajes de
enlace descendente y enviarlos a sus dispositivos en el orden en que se agregaron a la cola.
Temas
• Ver el formato de los mensajes de enlace ascendente enviados desdeLoRaDispositivos
WAN (p. 1338)
• Poner en cola los mensajes de enlace descendente para enviarlos aLoRaDispositivos WAN (p. 1340)
• Datos de carga que corresponden al mensaje de carga cifrado que se envía desde el dispositivo
inalámbrico.
• Metadatos inalámbricos que incluyen:
• Información del dispositivo, comoDevEui, la velocidad de datos y el canal de frecuencia en el que
funciona el dispositivo.
• Parámetros adicionales opcionales e información de puerta de enlace para las puertas de enlace que
están conectadas al dispositivo. Los parámetros de la puerta de enlace incluyen la EUI, la SNR y la
RSSi de la puerta de enlace.
Al utilizar los metadatos inalámbricos, puede obtener información útil sobre el dispositivo
inalámbrico y los datos que se transmiten entre su dispositivo yAWS IoT. Por ejemplo, puede utilizar
elAckedMessageIdparámetro para comprobar si el dispositivo recibió el último mensaje de enlace
descendente confirmado. Si lo desea, si decide incluir la información de la puerta de enlace, puede
determinar si desea cambiar a un canal de puerta de enlace más seguro que esté más cerca de su
dispositivo.
Este diagrama identifica los elementos clave de unLoRaSistema WAN conectado aAWS IoT Core para
LoRaWAN, que muestra el plano de datos principal y cómo fluyen los datos a través del sistema.
1338
AWS IoT Core Guía para desarrolladores
Gestione la comunicación entre
susLoRadispositivos WAN yAWS IoT
Cuando el dispositivo inalámbrico comience a enviar datos de enlace ascendente,AWS IoT Core para
LoRaWANenvuelve la información de los metadatos inalámbricos con la carga y, a continuación, la envía a
suAWSaplicaciones.
Si sus dispositivos envían un mensaje de enlace ascendente sin un valor paraFport,AWS IoT
Core para LoRaWANañadirá el valor 225 alFporten el mensaje de enlace ascendente recibido.
{
"WirelessDeviceId": "5b58245e-146c-4c30-9703-0ca942e3ff35",
"PayloadData": "Cc48AAAAAAAAAAA=",
"WirelessMetadata":
{
"LoRaWAN":
{
"ADR": false,
"Bandwidth": 125,
"ClassB": false,
"CodeRate": "4/5",
"DataRate": "0",
"DevAddr": "00b96cd4",
"DevEui": "58a0cb000202c99",
"FOptLen": 2,
"FCnt": 1,
"Fport": 136,
"Frequency": "868100000",
"Gateways": [
{
"GatewayEui": "80029cfffe5cf1cc",
"Snr": -29,
"Rssi": 9.75
}
],
"MIC": "7255cb07",
"MType": "UnconfirmedDataUp",
"Major": "LoRaWANR1",
"Modulation": "LORA",
"PolarizationInversion": false,
1339
AWS IoT Core Guía para desarrolladores
Gestione la comunicación entre
susLoRadispositivos WAN yAWS IoT
"SpreadingFactor": 12,
"Timestamp": "2021-04-29T04:19:43Z"
}
}
}
La siguiente tabla muestra una descripción de los campos utilizados en los metadatos del enlace
ascendente:
Excluir los metadatos de la puerta de enlace de los metadatos del enlace ascendente
Si desea excluir la información de los metadatos de la pasarela de sus metadatos de enlace ascendente,
desactive laAddGwMetadataparámetro al crear el perfil de servicio. Para obtener información sobre cómo
deshabilitar este parámetro, consulteAgregar perfiles de servicio (p. 1292).
En este caso, no verá elGatewayssección en los metadatos del enlace ascendente, como se ilustra en el
siguiente ejemplo.
{
"WirelessDeviceId": "0d9a439b-e77a-4573-a791-49d5c0f4db95",
"PayloadData": "AAAAAAAA//8=",
"WirelessMetadata": {
"LoRaWAN": {
"ClassB": false,
"CodeRate": "4/5",
"DataRate": "1",
"DevAddr": "01920f27",
"DevEui": "ffffff10000163b0",
"FCnt": 1,
"FPort": 5,
"Timestamp": "2021-04-29T04:19:43Z"
}
}
}
1340
AWS IoT Core Guía para desarrolladores
Gestione la comunicación entre
susLoRadispositivos WAN yAWS IoT
desdeAWS IoT Core para LoRaWANa su dispositivo inalámbrico. Puedes programar y enviar mensajes de
enlace descendente para cada dispositivo en el que te hayas incorporadoAWS IoT Core para LoRaWAN.
Si tiene varios dispositivos a los que desea enviar un mensaje de enlace descendente, puede utilizar un
grupo de multidifusión. Los dispositivos de un grupo de multidifusión comparten la misma dirección de
multidifusión, que luego se distribuye a todo un grupo de dispositivos destinatarios. Para obtener más
información, consulte Cree grupos de multidifusión para enviar una carga de enlace descendente a varios
dispositivos (p. 1351).
A continuación se muestra cómo se ponen en cola los mensajes y se envían a los dispositivos de clase A.
1. AWS IoT Core para LoRaWANalmacena en búfer el mensaje de enlace descendente que ha añadido a
la cola con el puerto de fotogramas, los datos de carga y los parámetros del modo de confirmación que
especificó medianteAWS IoTconsola oAWS IoT WirelessAPI.
2. TuLoRaEl dispositivo WAN envía un mensaje de enlace ascendente para indicar que está en línea y
puede empezar a recibir mensajes de enlace descendente.
3. Si has añadido más de un mensaje de enlace descendente a la cola,AWS IoT Core para
LoRaWANenvía el primer mensaje de enlace descendente de la cola a su dispositivo con el indicador de
confirmación (ACK) activado.
4. El dispositivo envía un mensaje de enlace ascendente aAWS IoT Core para LoRaWANinmediatamente,
o se suspende hasta el siguiente mensaje de enlace ascendente e incluye el indicador ACK en el
mensaje.
5. ¿Cuándo?AWS IoT Core para LoRaWANrecibe el mensaje de enlace ascendente con el indicador
ACK, borra el mensaje de enlace descendente de la cola e indica que el dispositivo ha recibido
correctamente el mensaje de enlace descendente. Si el indicador ACK no aparece en el mensaje de
enlace ascendente después de comprobarlo tres veces, el mensaje se descarta.
1. Ir a laCentro de dispositivos delAWS IoTconsolay elige el dispositivo para el que quieres poner en cola
los mensajes de enlace descendente.
2. En elMensajes de enlace descendentesección de la página de detalles del dispositivo, elijaPoner en
cola los mensajes de enlace descendente.
3. Especifique los siguientes parámetros para configurar el mensaje de enlace descendente:
• Puerto F: Elija el puerto de marco con el que se comunicará el dispositivoAWS IoT Core para
LoRaWAN.
• Carga útil: especifique el mensaje de carga que desea enviar al dispositivo. El tamaño máximo de la
carga útil es de 242 bytes. Si la velocidad de datos adaptativa (ADR) está habilitada,AWS IoT Core
1341
AWS IoT Core Guía para desarrolladores
Gestione la comunicación entre
susLoRadispositivos WAN yAWS IoT
para LoRaWANlo usa para elegir la velocidad de datos óptima para el tamaño de la carga útil. Puede
optimizar aún más la velocidad de datos según sea necesario.
• Modo de confirmación: Confirme si el dispositivo ha recibido el mensaje de enlace descendente. Si un
mensaje requiere este modo, verás un mensaje de enlace ascendente con el indicador ACK en tu flujo
de datos y el mensaje se borrará de la cola.
4. Para añadir tu mensaje de enlace descendente a la cola, seleccionaEnviar.
Una vez que el mensaje de enlace descendente se haya añadido a la cola, ya no podrá editar
los parámetrosPuerto F,Carga útil, yModo de confirmación. Para enviar un mensaje de enlace
descendente con valores diferentes para estos parámetros, puede eliminar este mensaje y poner
en cola un nuevo mensaje de enlace descendente con los valores de los parámetros actualizados.
La cola muestra los mensajes de enlace descendente que has añadido. Para ver la carga útil de los
mensajes de enlace ascendente y descendente que se intercambian entre sus dispositivos yAWS IoT Core
para LoRaWAN, puede utilizar el analizador de red. Para obtener más información, consulte Monitoree su
flota de recursos inalámbricos en tiempo real mediante el analizador de redes (p. 1372).
El mensaje de enlace descendente que ha creado se añade a la cola. Cada mensaje de enlace
descendente subsiguiente se añade a la cola después de este mensaje. Puede ver una lista de mensajes
de enlace descendente enMensajes de enlace descendentesección de la página de detalles del
dispositivo. Tras recibir un enlace ascendente, los mensajes se envían al dispositivo. Una vez que el
dispositivo haya recibido un mensaje de enlace descendente, se eliminará de la cola. A continuación, el
siguiente mensaje se mueve hacia arriba en la cola para enviarse a tu dispositivo.
• Si encuentras mensajes en la cola que no quieres enviar, elige los mensajes y eligeBorrar.
• Si no quieres enviar ningún mensaje de la cola a tu dispositivo, puedes borrar toda la cola
seleccionandoBorrar cola de enlaces descendentes.
1342
AWS IoT Core Guía para desarrolladores
Gestione la comunicación entre
susLoRadispositivos WAN yAWS IoT
descendente. Para obtener más información, consulte Elegir puertas de enlace para recibir el
tráfico de datos de enlace descendente de la LoRa WAN (p. 1334).
{
MessageId: "6011dd36-0043d6eb-0072-0008"
}
• Para eliminar mensajes individuales, proporcione lamessageIDpara los mensajes que desee eliminar de
su dispositivo inalámbrico, especificados enwirelessDeviceId.
• Para borrar toda la cola de enlaces descendentes, especifiquemessageIDtan*para su dispositivo
inalámbrico, especificado enwirelessDeviceId.
Si no ves tu mensaje de enlace descendente en la cola después de agregarlo, tal y como se describe
enRealice operaciones de cola de enlace descendente mediante la consola (p. 1341), puede deberse
a que el dispositivo no ha completado un proceso llamadoactivaciónoprocedimiento de unión. Este
procedimiento se completa cuando el dispositivo se incorpora aAWS IoT Core para LoRaWAN. Para
obtener más información, consulte Añada la especificación de su dispositivo inalámbrico aAWS IoT Core
para LoRaWANuso de la consola (p. 1289).
Después de incorporar el dispositivo aAWS IoT Core para LoRaWAN, puedes supervisar tu dispositivo
para comprobar si la unión y la reincorporación se han realizado correctamente mediante el analizador
de redes o AmazonCloudWatch. Para obtener más información, consulte Monitorización y registro para
elAWS IoT Wireless uso de Amazon CloudWatch (p. 1449).
1343
AWS IoT Core Guía para desarrolladores
Gestione el tráfico de roaming desdeLoRaDispositivos
WAN fuera de la red doméstica
Al enviar un mensaje de enlace descendente a tu dispositivo desde la cola, es posible que aparezca un
error de nombre de recurso de Amazon (ARN) que falte. Este error puede producirse porque el destino
no se ha especificado correctamente para el dispositivo que recibe el mensaje de enlace descendente.
Para resolver este error, comprueba los detalles de destino del dispositivo.
La función de roaming se encuentra en la versión preliminar deAWS IoT Core para LoRaWANy está
sujeto a cambios. Está disponible para su uso únicamente en el este de EE. UU. (Norte de Virginia) y
del oeste de EE. UU. (Oregón)Regiones de AWS. Antes de utilizar esta función, asegúrese de haber
revisado los términos y condiciones de esta función. Para obtener más información, consulte los
Términos del servicio de AWS.
AWS IoT Core para LoRaWANadmite la función de roaming de acuerdo con laLoRaEspecificación de
Alliance para la itinerancia, tal como se describe enLoRaEspecificación de las interfaces de backend WAN
1.0. La capacidad de roaming se puede utilizar para conectar los dispositivos finales que se encuentran
fuera de la red doméstica. Para respaldar esta capacidad,AWS IoT Core para LoRaWANse asocia
conEveryNetpara ofrecer una cobertura de radio ampliada.
• Proporcione cobertura a los dispositivos cuando se muden de su red doméstica, comoDispositivo Aen la
figura que se muestra en elLoRaArquitectura de roaming WAN (p. 1346)sección.
• Amplíe la cobertura a los dispositivos que no tienen unLoRapuerta de enlace a la que
conectarse, comoDispositivo Ben la figura que se muestra en elLoRaArquitectura de roaming
WAN (p. 1346)sección. A continuación, el dispositivo puede utilizar la puerta de enlace proporcionada
por el socio para conectarse a la red doméstica.
TuLoRaLos dispositivos WAN pueden usar una red pública para conectarse a la nube mediante la función
de roaming, lo que reduce el tiempo de implementación y reduce el tiempo y el costo necesarios para
mantener una red privadaLoRaRed WAN.
En las siguientes secciones se describe la arquitectura de itinerancia, cómo funciona la itinerancia y cómo
utilizar esta función.
Temas
• CómoLoRaEl roaming WAN funciona (p. 1345)
1344
AWS IoT Core Guía para desarrolladores
Gestione el tráfico de roaming desdeLoRaDispositivos
WAN fuera de la red doméstica
AWS IoT Core para LoRaWANno admite el roaming de transferencia. En el caso del roaming
de transferencia, el dispositivo cambiará a un operador diferente cuando viaje fuera de la red
doméstica.
AWS IoT Core para LoRaWANsolo admite la función apátrida de la itinerancia pasiva. Con la itinerancia
pasiva apátrida,AWS IoT Core para LoRaWANno almacena ninguna sesión del dispositivo y reenvía el
tráfico de datos sin realizar la comprobación de integridad del mensaje (MIC).
Temas
• LoRaConceptos de roaming WAN (p. 1345)
• LoRaArquitectura de roaming WAN (p. 1346)
Un LNS es un servidor privado independiente que puede ejecutarse en sus instalaciones o puede ser
un servicio basado en la nube.AWS IoT Core para LoRaWANes un LNS que ofrece servicios en la
nube.
Servidor de red doméstica (HnS)
La red doméstica es la red a la que pertenece el dispositivo. El servidor de red doméstica (HnS) es un
LNS dondeAWS IoT Core para LoRaWANalmacena los datos de aprovisionamiento del dispositivo,
comoDevEUI,AppEUIy claves de sesión.
Servidor de red (VNs) visitado
La red visitada es la red de la que el dispositivo obtiene cobertura cuando sale de la red doméstica.
El servidor de red (VPN) visitado es un LNS que tiene un acuerdo comercial y técnico con el HN para
poder prestar servicio al dispositivo final. En esta versión beta, roaming partnerEveryNet, actúa como
la red visitada para brindar cobertura.
Servidor de red (SNS) de servicio
El servidor de red (SNS) de servicio es un LNS que gestiona los comandos MAC del dispositivo. Solo
puede haber un SNs para unoLoRasesión.
Servidor de red de reenvío (fNs)
El servidor de red de reenvío (fNs) es un LNS que administra las puertas de enlace de radio. Puede
haber cero o más FN involucrados en unaLoRasesión. Este servidor de red administra el reenvío de
los paquetes de datos que se reciben del dispositivo a la red doméstica.
1345
AWS IoT Core Guía para desarrolladores
Gestione el tráfico de roaming desdeLoRaDispositivos
WAN fuera de la red doméstica
Para comprobar la cobertura de Everynet, visitaSitio web de Everynety filtra por tu país preferido
en elCoberturamenú desplegable. También puedes ponerte en contacto con el equipo de soporte
de la versión beta para obtener información sobre cómo solicitar una nueva cobertura.
1346
AWS IoT Core Guía para desarrolladores
Gestione el tráfico de roaming desdeLoRaDispositivos
WAN fuera de la red doméstica
AWS IoT Core para LoRaWANutiliza una funcionalidad de centro de itinerancia, de acuerdo con
laLoRaAlianzaLoRaRecomendación técnica de WAN Roaming Hub. El centro de roaming proporciona un
punto final paraEveryNetpara enrutar el tráfico recibido del dispositivo final. En este caso,EveryNetactúa
como un servidor de red de reenvío (fNs) para reenviar el tráfico recibido del dispositivo. Utiliza una API
RESTful de HTTP, tal como se define enLoRaEspecificación de la alianza.
Note
En un escenario de itinerancia, los HN y el servidor de red de servicio (SNs) están separados. Los
paquetes de enlace ascendente y descendente se intercambian entonces entre los SNs y los HN.
Puede habilitar el roaming solo al crear un nuevo perfil de servicio. No puedes actualizar un perfil
existente para habilitar la itinerancia con estos parámetros.
Temas
• Parámetros de roaming (p. 1347)
• Habilitar el roaming para dispositivos (p. 1347)
Parámetros de roaming
Especifique los siguientes parámetros al crear un perfil de servicio para el dispositivo. Especifique estos
parámetros al añadir un perfil de servicio desde elPerfileseje delAWS IoTconsola o mediante laAWS IoT
WirelessFuncionamiento de la API,CreateServiceProfile, o elAWS CLIcomando,create-service-
profile.
Note
AWS IoT Core para LoRaWANno admite la itinerancia de transferencia en esta versión preliminar.
Al crear el perfil de servicio, no puede habilitar elHrAllowedparámetro que especifica si se debe
utilizar la itinerancia de transferencia.
El siguiente procedimiento se aplica a los dispositivos OTAA. Si utiliza dispositivos ABP, póngase
en contacto conAWSSoportepara obtener instrucciones.
1347
AWS IoT Core Guía para desarrolladores
Gestione el tráfico de roaming desdeLoRaDispositivos
WAN fuera de la red doméstica
La ejecución de este comando devuelve el ARN y el ID del perfil de servicio como salida.
{
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:ServiceProfile/12345678-
a1b2-3c45-67d8-e90fa1b2c34d",
"Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d"
}
Para comprobar los parámetros de roaming que especificó, puede ver el perfil de servicio en la
consola o utilizar laget-service-profileComando CLI, como se muestra en el ejemplo siguiente.
Para ver los parámetros de roaming que ha activado, utilice laGetServiceProfileoperación de la API
oget-service-profileComando CLI, como se muestra en el ejemplo siguiente.
La ejecución de este comando devuelve los detalles del perfil de servicio como salida, incluidos los
valores de los parámetros de itinerancia,RaAllowedyPrAllowed.
{
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:ServiceProfile/12345678-
a1b2-3c45-67d8-e90fa1b2c34d",
"Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d",
"Name": "roamingprofile1"
"LoRaWAN": {
"UlRate": 60,
"UlBucketSize": 4096,
"DlRate": 60,
"DlBucketSize": 4096,
"AddGwMetadata": true,
"DevStatusReqFreq": 24,
1348
AWS IoT Core Guía para desarrolladores
Gestione el tráfico de roaming desdeLoRaDispositivos
WAN fuera de la red doméstica
"ReportDevStatusBattery": false,
"ReportDevStatusMargin": false,
"DrMin": 0,
"DrMax": 15,
"PrAllowed": true,
"RaAllowed": true,
"NwkGeoLoc": false,
"TargetPer": 5,
"MinGwDiversity": 1
}
}
Adjunte el perfil de servicio que creó con los parámetros de roaming a sus dispositivos finales.
También puede crear un perfil de dispositivo y añadir un destino para sus dispositivos inalámbricos.
Usarás este destino para enrutar los mensajes de enlace ascendente que se envíen desde
tu dispositivo. Para obtener más información sobre la creación de perfiles de dispositivos y
un destino, consulteAgregar perfiles de dispositivos (p. 1291)yAñadir destinos aAWS IoT
CoreporLoRaMENDIGO (p. 1293).
Si aún no ha incorporado sus dispositivos, especifique este perfil de servicio que se utilizará al
añadir su dispositivo aAWS IoT Core para LoRaWAN. El siguiente comando muestra cómo puede
utilizar elcreate-wireless-deviceComando de CLI para agregar un dispositivo mediante el ID
del perfil de servicio que creó. Para obtener información sobre cómo agregar el perfil de servicio
mediante la consola, consulteAñada la especificación de su dispositivo inalámbrico aAWS IoT Core
para LoRaWANuso de la consola (p. 1289).
Contenido de createdevice.json
{
"Name": "DeviceA",
"Type": LoRaWAN,
"DestinationName": "RoamingDestination1",
"LoRaWAN": {
"DeviceProfileId": "ab0c23d3-b001-45ef-6a01-2bc3de4f5333",
"ServiceProfileId": "12345678-a1b2-3c45-67d8-e90fa1b2c34d",
"OtaaV1_1": {
"AppKey": "3f4ca100e2fc675ea123f4eb12c4a012",
"JoinEui": "b4c231a359bc2e3d",
"NwkKey": "01c3f004a2d6efffe32c4eda14bcd2b4"
},
"DevEui": "ac12efc654d23fc2"
},
}
{
"Arn": "arn:aws:iotwireless:us-
east-1:123456789012:WirelessDevice/1ffd32c8-8130-4194-96df-622f072a315f",
"Id": "1ffd32c8-8130-4194-96df-622f072a315f"
1349
AWS IoT Core Guía para desarrolladores
Gestione el tráfico de roaming desdeLoRaDispositivos
WAN fuera de la red doméstica
Como la roaming está habilitada, tu dispositivo ahora debe realizar una unión para obtener una
nuevaDevAddr. Si usa OTAA, suLoRaEl dispositivo WAN envía una solicitud de unión y el servidor
de red puede permitir la solicitud. A continuación, se puede conectar alNube de AWSutilizando la
cobertura de red proporcionada porEveryNet. Para obtener instrucciones sobre cómo realizar el
procedimiento de activación o unirse para su dispositivo, consulte la documentación del dispositivo.
5. Intercambiar mensajes de enlace ascendente y descendente
Después de que tu dispositivo se haya unido aAWS IoT Core para LoRaWAN, puedes empezar a
intercambiar mensajes entre tu dispositivo y la nube.
Cuando envías mensajes de enlace ascendente desde tus dispositivos,AWS IoT Core para
LoRaWANenvía estos mensajes a suCuenta de AWSutilizando el destino que configuró
anteriormente. Estos mensajes se enviarán desde su dispositivo a la nube a través deEveryNetde la
red.
Puede utilizar o bien ver los mensajes mediante laAWS IoTnombre de regla o utilice el cliente
MQTT para suscribirse al tema de MQTT que se especificó al crear el destino. Para obtener más
información sobre el nombre de la regla y otros detalles de destino que especifique, consulteAñadir
un destino mediante la consola (p. 1293).
Para obtener más información sobre la visualización del mensaje de enlace ascendente
y el formato, consulteVer el formato de los mensajes de enlace ascendente enviados
desdeLoRaDispositivos WAN (p. 1338).
• Enviar mensajes de enlace descendente
Puede poner en cola y enviar mensajes de enlace descendente a sus dispositivos desde la consola
o mediante laAWS IoT Wirelesscomando de API,SendDataToWirelessDevice, o elAWS
CLIcomando,send-data-to-wireless-device. Para obtener información sobre cómo poner
en cola y enviar mensajes de enlace descendente, consultePoner en cola los mensajes de enlace
descendente para enviarlos aLoRaDispositivos WAN (p. 1340).
El código siguiente muestra un ejemplo de cómo puede enviar un mensaje de enlace descendente
mediante elsend-data-to-wireless-deviceComando CLI. Usted especifica el ID del
dispositivo inalámbrico para recibir los datos, la carga útil, si se va a utilizar el modo de confirmación
y los metadatos inalámbricos.
1350
AWS IoT Core Guía para desarrolladores
Cree grupos de multidifusión para enviar una
carga de enlace descendente a varios dispositivos
--transmit-mode "1" \
--payload-data "SGVsbG8gVG8gRGV2c2lt" \
--wireless-metadata LoRaWAN={FPort=1}
{
MessageId: "6011dd36-0043d6eb-0072-0008"
}
Los dispositivos de un grupo de multidifusión comparten la misma dirección de multidifusión, las mismas
claves de sesión y el contador de fotogramas. Al utilizar las mismas claves de sesión, los dispositivos
de un grupo de multidifusión pueden descifrar el mensaje cuando se inicia una transmisión de enlace
descendente. Un grupo de multidifusión solo admite enlaces descendentes. No confirma si los dispositivos
han recibido la carga útil del enlace descendente.
• Filtre la lista de dispositivos mediante el perfil del dispositivo, la región o la clase de dispositivo y, a
continuación, añada estos dispositivos a un grupo de multidifusión.
• Programe y envíe uno o más mensajes de carga de enlace descendente a los dispositivos de un grupo
de multidifusión, dentro de un período de distribución de 48 horas.
• Haga que los dispositivos cambien temporalmente al modo de clase B o clase C al inicio de la sesión de
multidifusión para recibir el mensaje de enlace descendente.
• Supervise la configuración del grupo de multidifusión y el estado de sus dispositivos, y también solucione
cualquier problema.
• Utilice las actualizaciones de firmware por vía inalámbrica (FUOTA) para implementar de forma segura
las actualizaciones de firmware en los dispositivos de un grupo de multidifusión.
AWS IoT Core para LoRaWANEl soporte de FUOTA y los grupos de multidifusión se basa en
elLoRaAlianzassiguientes especificaciones:
1351
AWS IoT Core Guía para desarrolladores
Cree grupos de multidifusión para enviar una
carga de enlace descendente a varios dispositivos
Note
AWS IoT Core para LoRaWANrealiza automáticamente la sincronización del reloj del dispositivo
de acuerdo conLoRaEspecificación de la alianza. Uso de la funciónAppTimeReq, responde la
hora del lado del servidor a los dispositivos que la solicitan medianteClockSyncseñalización.
Temas
• Prepare los dispositivos para la configuración de multidifusión y FUOTA (p. 1352)
• Cree grupos de multidifusión y añada dispositivos al grupo (p. 1354)
• Supervise y solucione el estado de su grupo de multidifusión y de los dispositivos del grupo (p. 1358)
• Programe un mensaje de enlace descendente para enviarlo a los dispositivos de su grupo de
multidifusión (p. 1360)
GenAppKeyy FPorts
Al agregar su dispositivo inalámbrico, antes de poder agregar sus dispositivos a grupos de multidifusión
o realizar actualizaciones de FUOTA, configure los siguientes parámetros. Antes de configurar estos
parámetros, asegúrese de que sus dispositivos sean compatibles con FUOTA y multidifusión y que la
especificación de su dispositivo inalámbrico sea:OTAA v1.1oOTAAv1.0.x.
• GenAppKey: Para dispositivos compatibles conLoRaWAN versión 1.0.x y para usar grupos de
multidifusión, elGenAppKeyes la clave raíz específica del dispositivo de la que se derivan las claves de
sesión del grupo de multidifusión.
Note
Para configurar los parámetros para iniciar la transferencia de datos,AWS IoT Core para
LoRaWANdistribuye las claves de sesión con los dispositivos finales. Para obtener más información
sobreLoRaVersiones de WAN, consulteLoRaVersión WAN (p. 1337).
Note
1352
AWS IoT Core Guía para desarrolladores
Cree grupos de multidifusión para enviar una
carga de enlace descendente a varios dispositivos
• FUOTA: 201
Para obtener información sobre los perfiles de dispositivos, consulteAgregar perfiles aAWS IoT Core para
LoRaWAN (p. 1291).
Note
Para especificar los parámetros de configuración de FUOTA, debe utilizar elCentro de dispositivos
delAWS IoTconsola. Estos parámetros no aparecen si incorporas tus dispositivos mediante
elIntroducciónpágina delAWS IoTconsola.
Para obtener más información sobre la especificación del dispositivo inalámbrico y la incorporación del
dispositivo, consulteAgregue su dispositivo inalámbrico aAWS IoT Core para LoRaWAN (p. 1289).
Note
Puede especificar estos parámetros solo al crear el dispositivo inalámbrico. No puedes cambiar ni
especificar parámetros al actualizar un dispositivo existente.
1353
AWS IoT Core Guía para desarrolladores
Cree grupos de multidifusión para enviar una
carga de enlace descendente a varios dispositivos
Además de especificar la clave de la aplicación y los parámetros de fPorts, asegúrate de que el perfil del
dispositivo que está vinculado al dispositivo sea compatible con uno o ambos modos de clase B o clase C.
donde:
Contenido de input.json
{
"Description": "My LoRaWAN wireless device"
"DestinationName": "IoTWirelessDestination"
"LoRaWAN": {
"DeviceProfileId": "ab0c23d3-b001-45ef-6a01-2bc3de4f5333",
"ServiceProfileId": "fe98dc76-cd12-001e-2d34-5550432da100",
"FPorts": {
"ClockSync": 202,
"Fuota": 201,
"Multicast": 200
},
"OtaaV1_0_x": {
"AppKey": "3f4ca100e2fc675ea123f4eb12c4a012",
"AppEui": "b4c231a359bc2e3d",
"GenAppKey": "01c3f004a2d6efffe32c4eda14bcd2b4"
},
"DevEui": "ac12efc654d23fc2"
},
"Name": "SampleIoTWirelessThing"
"Type": LoRaWAN
}
Para obtener información sobre los comandos de CLI que puede utilizar, consulteAWS CLIreferencia.
Note
Para obtener información sobre los valores especificados para estos parámetros, puede utilizar
laGetWirelessDeviceoperación de la API oget-wireless-deviceComando CLI.
Pasos siguientes
Una vez configurados los parámetros, puede crear grupos de multidifusión y tareas de FUOTA para enviar
una carga de enlace descendente o actualizar el firmware de suLoRaDispositivos WAN.
1354
AWS IoT Core Guía para desarrolladores
Cree grupos de multidifusión para enviar una
carga de enlace descendente a varios dispositivos
Tras intercambiar la señalización con los dispositivos finales que ha añadido,AWS IoT Core para
LoRaWANestablece las claves compartidas con los dispositivos finales y configura los parámetros para la
transferencia de datos.
Requisitos previos
Antes de poder crear grupos de multidifusión y añadir dispositivos al grupo:
• Prepare sus dispositivos para la configuración de multidifusión y FUOTA especificando los parámetros
de configuración de FUOTAGenAppKeyyFPorts. Para obtener más información, consulte Prepare los
dispositivos para la configuración de multidifusión y FUOTA (p. 1352).
• Compruebe si los dispositivos admiten los modos de funcionamiento de clase B o clase C. Según
la clase de dispositivo que admita su dispositivo, elija un perfil de dispositivo que tenga uno o
ambosSoporta clase BoSoporta clase Cmodos habilitados. Para obtener información sobre los perfiles
de dispositivos, consulteAgregar perfiles aAWS IoT Core para LoRaWAN (p. 1291).
Al inicio de la sesión de multidifusión, se utiliza una ventana de distribución de clase B o clase C para
enviar mensajes de enlace descendente a los dispositivos del grupo.
Para crear un grupo de multidifusión, especifique las propiedades y etiquetas de multidifusión del
grupo.
Para especificar las propiedades de multidifusión, introduzca la siguiente información para su grupo
de multidifusión.
• Nombre: introduzca un nombre único para su grupo de multidifusión. El nombre debe contener
solo letras, números, guiones y guiones bajos. No puede contener espacios.
• Descripción: Puede proporcionar una descripción opcional para su grupo de multidifusión. La
longitud de la descripción puede ser de hasta 2048 caracteres.
2. Etiquetas para grupo de multidifusión
1. Especificar región
Especifique elRegión RFo banda de frecuencia para su grupo de multidifusión. ElRegión RFpara
su grupo de multidifusión debe coincidir conRegión RFde los dispositivos que añada al grupo de
multidifusión. Para obtener más información sobre laRegión RF, consulteConsidere la selección
deLoRabandas de frecuencia para sus puertas de enlace y conexión de dispositivos (p. 1280).
2. Seleccione una clase de dispositivo de multidifusión
1355
AWS IoT Core Guía para desarrolladores
Cree grupos de multidifusión para enviar una
carga de enlace descendente a varios dispositivos
Elija si desea que los dispositivos del grupo de multidifusión cambien al modo de clase B o clase
C al inicio de la sesión de multidifusión. Una sesión de clase B puede recibir mensajes de enlace
descendente en ranuras de enlace descendente normales y una sesión de clase C puede recibir
mensajes de enlace descendente en cualquier momento.
3. Elige los dispositivos que quieres añadir al grupo
Los detalles del grupo de multidifusión y los dispositivos que ha agregado aparecen en el
grupo. Para obtener información sobre el estado del grupo de multidifusión y sus dispositivos
y para solucionar cualquier problema, consulteSupervise y solucione el estado de su grupo de
multidifusión y de los dispositivos del grupo (p. 1358).
Tras crear un grupo de multidifusión, puede elegirAcciónpara editar, eliminar o añadir dispositivos al grupo
de multidifusión. Después de añadir los dispositivos, puede programar una sesión para que la carga de
enlace descendente se envíe a los dispositivos de su grupo.
donde:
Contenido de input.json
{
"Description": "Multicast group to send downlink payload and perform FUOTA
updates.",
"LoRaWAN": {
"DlClass": "ClassB",
"RfRegion": "US915"
},
"Name": "MC_group_FUOTA"
}
Tras crear el grupo de multidifusión, puede utilizar las siguientes operaciones de API o comandos de
CLI para actualizar, eliminar u obtener información sobre los grupos de multidifusión.
• UpdateMulticastGroup o update-multicast-group
• GetMulticastGroup o get-multicast-group
1356
AWS IoT Core Guía para desarrolladores
Cree grupos de multidifusión para enviar una
carga de enlace descendente a varios dispositivos
• ListMulticastGroups o list-multicast-groups
• DeleteMulticastGroup o delete-multicast-group
2. Agregar dispositivos a un grupo de multidifusión
donde:
Contenido de input.json
{
"QueryString": "DeviceProfileName: MyWirelessDevice AND DeviceProfileId:
d6d8ef8e-7045-496d-b3f4-ebcaa1d564bf",
"Tags": [
{
"Key": "Multicast",
"Value": "ClassB"
}
]
}
Tras crear el grupo de multidifusión, puede utilizar las siguientes operaciones de API o comandos de
CLI para obtener información sobre su grupo de multidifusión o para desasociar dispositivos.
• DisassociateWirelessDeviceFromMulticastGroup o disassociate-wireless-
device-from-multicast-group
• StartBulkDisassociateWirelessDeviceFromMulticastGroup o start-bulk-
disassociate-wireless-device-from-multicast-group
• ListWirelessDevices o list-wireless-devices
1357
AWS IoT Core Guía para desarrolladores
Cree grupos de multidifusión para enviar una
carga de enlace descendente a varios dispositivos
Note
Pasos siguientes
Después de crear un grupo de multidifusión y añadir dispositivos, puede seguir añadiendo dispositivos
y supervisar el estado del grupo de multidifusión y de sus dispositivos. Si sus dispositivos se han
agregado correctamente al grupo, puede configurar y programar un mensaje de enlace descendente
para que se envíe a los dispositivos. Para poder enviar un mensaje de enlace descendente, el estado
de los dispositivos debe serListo para la configuración de multidifusión. Después de programar un
mensaje de enlace descendente, el estado cambia aIntento de sesión. Para obtener más información,
consulte Programe un mensaje de enlace descendente para enviarlo a los dispositivos de su grupo de
multidifusión (p. 1360).
Si desea actualizar el firmware de los dispositivos del grupo de multidifusión, puede realizar
actualizaciones de firmware inalámbricas (FUOTA) conAWS IoT Core para LoRaWAN. Para obtener
más información, consulte Actualizaciones de firmware inalámbricas (FUOTA) paraAWS IoT Core para
LoRaWANdispositivos (p. 1362).
• Pendiente
Este estado indica que ha creado un grupo de multidifusión, pero que aún no tiene una sesión de
multidifusión. Verás este mensaje de estado cuando se haya creado el grupo. Durante este tiempo,
puede actualizar su grupo de multidifusión y asociar o desasociar dispositivos a su grupo. Después de
que el estado cambie dePendiente, no se pueden añadir dispositivos adicionales al grupo.
• Intento de sesión
1358
AWS IoT Core Guía para desarrolladores
Cree grupos de multidifusión para enviar una
carga de enlace descendente a varios dispositivos
Cuando los dispositivos se hayan agregado correctamente al grupo de multidifusión, cuando el grupo
tenga una sesión de multidifusión programada, aparecerá este mensaje de estado. Durante este
tiempo, no podrá actualizar ni añadir dispositivos a su grupo de multidifusión. Si cancela la sesión de
multidifusión, el estado del grupo cambia aPendiente.
• En sesión
Cuando sea la primera hora de la sesión de multidifusión, aparecerá este mensaje de estado. Un grupo
de multidifusión también sigue en este estado cuando está asociado a una tarea de FUOTA que tiene
una sesión de actualización del firmware en curso.
Si elimina el grupo de multidifusión, su estado de grupo cambia aEliminar espera. Las eliminaciones
son permanentes y no se pueden deshacer. Esta acción puede llevar tiempo y el estado del grupo
seráEliminar_Esperandohasta que se haya eliminado el grupo de multidifusión. Una vez que el grupo de
multidifusión entre en este estado, no podrá pasar a ninguno de los otros estados.
• Paquete en intento
Una vez que los dispositivos se hayan asociado al grupo de multidifusión, el estado del dispositivo
esPaquete en intento. Este estado indica queAWS IoT Core para LoRaWANaún no ha confirmado si el
dispositivo admite la configuración y el funcionamiento de la multidifusión.
• Paquete no compatible
Una vez que los dispositivos se hayan asociado al grupo de multidifusión,AWS IoT Core para
LoRaWANcomprueba si el firmware del dispositivo es compatible con la configuración y el
funcionamiento de la multidifusión. Si el dispositivo no tiene el paquete de multidifusión compatible, su
estado esPaquete no compatible. Para resolver el error, compruebe si el firmware del dispositivo es
compatible con la configuración y el funcionamiento de la multidifusión.
• Intento de configuración de multidifusión
1359
AWS IoT Core Guía para desarrolladores
Cree grupos de multidifusión para enviar una
carga de enlace descendente a varios dispositivos
sesión. Si el tiempo necesario para configurar la sesión de multidifusión supera el tiempo de espera o si
cancela la sesión de multidifusión, el estado cambia aConfiguración de multidifusión finalizada.
• En sesión
Este estado indica que se ha iniciado una ventana de distribución de clase B o clase C y que el
dispositivo tiene una sesión de multidifusión en curso. Durante este tiempo, los mensajes de enlace
descendente se pueden enviar desdeAWS IoT Core para LoRaWANa los dispositivos del grupo de
multidifusión. Si actualizas la hora de la sesión, se anula la sesión actual y el estado cambia aIntento de
sesión. Cuando finaliza la sesión o si se cancela la sesión de multidifusión, el estado cambia aListo para
la configuración de multidifusión.
Pasos siguientes
Ahora que ha aprendido los diferentes estados de su grupo de multidifusión y de los dispositivos
de su grupo, y cómo puede solucionar cualquier problema, por ejemplo, cuando un dispositivo no
puede configurar la multidifusión, puede programar el envío de un mensaje de enlace descendente
a los dispositivos y su grupo de multidifusión estará enEn sesión. Para obtener información sobre
la programación de un mensaje de enlace descendente, consultePrograme un mensaje de enlace
descendente para enviarlo a los dispositivos de su grupo de multidifusión (p. 1360).
Requisitos previos
Para poder enviar un mensaje de enlace descendente, debe haber creado un grupo de multidifusión
y haber agregado correctamente los dispositivos al grupo al que desea enviar un mensaje de enlace
descendente. No puede añadir más dispositivos después de programar una hora de inicio para la sesión
de multidifusión. Para obtener más información, consulte Cree grupos de multidifusión y añada dispositivos
al grupo (p. 1354).
Puede configurar un intervalo de tiempo para enviar un mensaje de enlace descendente a los
dispositivos de su grupo de multidifusión. El mensaje de enlace descendente debe programarse en un
plazo de 48 horas.
1360
AWS IoT Core Guía para desarrolladores
Cree grupos de multidifusión para enviar una
carga de enlace descendente a varios dispositivos
• Fecha de inicioyHora de inicio:La fecha y la hora de inicio deben ser al menos 30 minutos después y
48 horas antes de la hora actual.
Note
La hora que especifique está en UTC, así que considere comprobar la diferencia horaria
con su zona horaria al programar la ventana de enlace descendente.
• Tiempo de espera de la sesión: tiempo transcurrido el cual desea que se agote el tiempo de espera
de la sesión de multidifusión si no se ha recibido ningún mensaje de enlace descendente. El tiempo
de espera mínimo permitido es de 60 segundos. El valor máximo del tiempo de espera es de 2 días
para los grupos de multidifusión de clase B y de 18 horas para los grupos de multidifusión de clase
C.
2. Configura tu mensaje de enlace descendente
• Velocidad de datos: elija una velocidad de datos para su mensaje de enlace descendente. La
velocidad de datos depende de la región de RF y del tamaño de la carga útil. La velocidad de datos
predeterminada es 8 para la región US915 y 0 para la región EU868.
• Frecuencia: elija una frecuencia para enviar el mensaje de enlace descendente. Para evitar
conflictos de mensajería, elija una frecuencia disponible en función de la región de RF.
• Puerto F: elija un puerto de frecuencia disponible para enviar el mensaje de enlace descendente a
sus dispositivos.
• Carga útil: especifique el tamaño máximo de la carga útil en función de la velocidad de datos. Con
la velocidad de datos predeterminada, puede tener un tamaño máximo de carga útil de 33 bytes en
el US915RfRegiony 51 bytes en la EU868RfRegion. Con velocidades de datos más altas, puede
transferir hasta un tamaño máximo de carga útil de 242 bytes.
Pasos siguientes
Después de configurar un mensaje de enlace descendente para que se envíe a los dispositivos, el
mensaje se envía al inicio de la sesión. Los dispositivos de un grupo de multidifusión no pueden confirmar
si se ha recibido el mensaje.
También puede configurar mensajes de enlace descendente adicionales para enviarlos a los dispositivos
de su grupo de multidifusión:
1361
AWS IoT Core Guía para desarrolladores
Actualizaciones de firmware inalámbricas (FUOTA)
paraAWS IoT Core para LoRaWANdispositivos
También puede actualizar la programación de la sesión para utilizar una nueva fecha y hora de inicio para
la sesión de multidifusión. El nuevo calendario de sesiones anulará la sesión previamente programada.
Note
Actualice la sesión de multidifusión solo cuando sea necesario. Estas actualizaciones pueden
provocar que un grupo de dispositivos se active durante un período prolongado y agote la batería.
AWS IoT Core para LoRaWANEl soporte de FUOTA y los grupos de multidifusión se basa en
elLoRaAlianzassiguientes especificaciones:
1362
AWS IoT Core Guía para desarrolladores
Actualizaciones de firmware inalámbricas (FUOTA)
paraAWS IoT Core para LoRaWANdispositivos
Note
AWS IoT Core para LoRaWANrealiza automáticamente la sincronización del reloj de acuerdo con
laLoRaEspecificación de la alianza. Utiliza la funciónAppTimeReqpara responder la hora del lado
del servidor a los dispositivos que la solicitan medianteClockSyncseñalización.
Para realizar actualizaciones de FUOTA para sus dispositivos, primero cree su imagen de firmware
firmada digitalmente y configure los dispositivos y los grupos de multidifusión que desea añadir a su tarea
de FUOTA. Tras iniciar una sesión de FUOTA, sus dispositivos finales recopilan todos los fragmentos,
reconstruyen la imagen a partir de los fragmentos e informan del estado aAWS IoT Core para LoRaWANy,
a continuación, aplique la nueva imagen del firmware.
1363
AWS IoT Core Guía para desarrolladores
Actualizaciones de firmware inalámbricas (FUOTA)
paraAWS IoT Core para LoRaWANdispositivos
1. Cree una imagen de firmware o una imagen delta con una firma digital
ParaAWS IoT Core para LoRaWANpara realizar actualizaciones de FUOTA para suLoRaPara
dispositivos WAN, le recomendamos que firme digitalmente la imagen del firmware o la imagen delta
al enviar actualizaciones de firmware por vía inalámbrica. Los dispositivos que reciben las imágenes
pueden verificar entonces que provienen de la fuente correcta.
La imagen del firmware no debe tener un tamaño superior a 1 megabyte. Cuanto mayor sea el tamaño
del firmware, más tardará el proceso de actualización en completarse. Para una transferencia de datos
más rápida o si la nueva imagen mide más de 1 megabyte, utilice una imagen delta, que es la parte de
la nueva imagen que es el delta entre la nueva imagen del firmware y la imagen anterior.
Note
AWS IoT Core para LoRaWANno incluye la herramienta de generación de firmas digitales
ni el sistema de gestión de versiones del firmware. Puede utilizar cualquier herramienta de
terceros para generar la firma digital de la imagen del firmware. Le recomendamos que utilice
una herramienta de firma digital, como la que se incluye enInserción ARMGitHubrepositorio,
que también incluye herramientas para generar la imagen delta y para que los dispositivos
utilicen esa imagen.
2. Identificar y configurar los dispositivos para FUOTA
Después de identificar los dispositivos de FUOTA, envíe las actualizaciones de firmware a dispositivos
individuales o múltiples.
• Para enviar las actualizaciones de firmware a varios dispositivos, cree un grupo de multidifusión
y configure el grupo de multidifusión con los dispositivos finales. Para obtener más información,
consulte Cree grupos de multidifusión para enviar una carga de enlace descendente a varios
dispositivos (p. 1351).
• Para enviar actualizaciones de firmware a dispositivos individuales, añada esos dispositivos a su
sesión de FUOTA y, a continuación, realice la actualización del firmware.
3. Programe una ventana de distribución y configure una sesión de fragmentación
Tras configurar una sesión de fragmentación, sus dispositivos finales yAWS IoT Core para
LoRaWANrealice los siguientes pasos para actualizar el firmware de sus dispositivos.
1. PorqueLoRaLos dispositivos WAN tienen una velocidad de datos baja, para iniciar el proceso
FUOTA,AWS IoT Core para LoRaWANconfigura una sesión de fragmentación para fragmentar la
imagen del firmware. Luego envía estos fragmentos a los dispositivos finales.
2. DespuésAWS IoT Core para LoRaWANenvía los fragmentos de la imagen, tuLoRaLos dispositivos
finales WAN realizan las siguientes tareas.
a. Recoja los fragmentos y, a continuación, reconstruya la imagen binaria a partir de estos
fragmentos.
b. Compruebe la firma digital de la imagen reconstruida para autenticar la imagen y comprobar que
proviene de la fuente correcta.
1364
AWS IoT Core Guía para desarrolladores
Actualizaciones de firmware inalámbricas (FUOTA)
paraAWS IoT Core para LoRaWANdispositivos
c. Compare la versión de firmware deAWS IoT Core para LoRaWANa la versión actual.
d. Informa del estado de las imágenes fragmentadas que se transfirieron aAWS IoT Core para
LoRaWANy, a continuación, aplique la nueva imagen del firmware.
Note
En algunos casos, los dispositivos finales informan del estado de las imágenes
fragmentadas que se transfirieron aAWS IoT Core para LoRaWANantes de comprobar
la firma digital de la imagen del firmware.
Ahora que ha aprendido el proceso de FUOTA, puede crear su tarea de FUOTA y añadir dispositivos a
la tarea para actualizar su firmware. Para obtener más información, consulte Cree una tarea FUOTA y
proporcione una imagen de firmware (p. 1365).
A continuación se muestra cómo puedes crear una tarea de FUOTA y cargar la imagen del firmware o la
imagen delta que almacenarás en un bucket de S3.
Requisitos previos
Antes de poder realizar las actualizaciones de FUOTA, la imagen del firmware debe estar firmada
digitalmente para que los dispositivos finales puedan comprobar la autenticidad de la imagen al aplicarla.
Puede utilizar cualquier herramienta de terceros para generar la firma digital de la imagen del firmware.
Le recomendamos que utilice una herramienta de firma digital, como la que se incluye enInserción
ARMGitHubrepositorio, que también incluye herramientas para generar la imagen delta y para que los
dispositivos utilicen esa imagen.
Cree una tarea FUOTA y cargue la imagen del firmware mediante la consola
Para crear una tarea de FUOTA y cargar la imagen del firmware mediante la consola, vaya aTareas de
FUOTApestaña de la consola y, a continuación, elijaCrear tarea FUOTA.
Para especificar las propiedades de la tarea de FUOTA, introduzca la siguiente información para su
tarea de FUOTA.
• Nombre: Introduzca un nombre único para su tarea de FUOTA. El nombre debe contener solo
letras, números, guiones y guiones bajos. No puede contener espacios.
• Descripción: Puede proporcionar una descripción opcional para su grupo de multidifusión. El
campo de descripción puede tener hasta 2.048 caracteres.
• Región RF: Establece la banda de frecuencia para tu tarea de FUOTA. La banda de frecuencia
debe coincidir con la que utilizó para aprovisionar sus dispositivos inalámbricos o grupos de
multidifusión.
1365
AWS IoT Core Guía para desarrolladores
Actualizaciones de firmware inalámbricas (FUOTA)
paraAWS IoT Core para LoRaWANdispositivos
Elija el archivo de imagen del firmware que desee utilizar para actualizar el firmware de los dispositivos
que añada a la tarea FUOTA. El archivo de imagen del firmware se almacena en un bucket de S3.
Puede proporcionarAWS IoT Core para LoRaWANlos permisos para acceder a la imagen del firmware
en su nombre. Le recomendamos que firme digitalmente las imágenes del firmware para comprobar su
autenticidad cuando se realice la actualización del firmware.
Puede cargar un nuevo archivo de imagen de firmware a un bucket de S3 o elegir una imagen
existente que ya se haya subido a un bucket de S3.
Note
AWS IoT Core para LoRaWANrellena la URL de S3, que es la ruta al archivo de imagen del
firmware en el bucket de S3. El formato de la ruta ess3://bucket_name/file_name. Para ver
el archivo en elServicio Amazon Simple Storageconsola, eligeVer.
• Para cargar una nueva imagen de firmware.
a. EscojaCargue una nueva imagen de firmwareunY sube la imagen del firmware. El archivo de
imagen no debe superar 1 megabyte.
b. Para crear un bucket de S3 e introducir unNombre del bucketpara almacenar el archivo de
imagen del firmware, elijaCrear un bucket de S3.
2. Permisos para acceder al bucket
Puede crear una nueva función de servicio o elegir una función existente para permitirAWS IoT
Core para LoRaWANpara acceder al archivo de imagen del firmware del bucket de S3 en su
nombre. Elija Siguiente.
Para crear un rol nuevo, puede introducir un nombre de rol o dejarlo en blanco para que se genere
automáticamente un nombre aleatorio. Para ver los permisos de política que otorgan acceso al
bucket de S3, elijaVer los permisos de la política.
Note
Para obtener más información sobre el uso de un bucket de S3 para almacenar la imagen y la
concesiónAWS IoT Core para LoRaWANpermisos para acceder a él, consulteCargue el archivo de
firmware a un bucket de S3 y agregue un rol de IAM (p. 1328).
3. Revisar y crear
Para crear su tarea de FUOTA, revise la tarea de FUOTA y los detalles de configuración que
especificó y, a continuación, elijaCrear tarea.
1366
AWS IoT Core Guía para desarrolladores
Actualizaciones de firmware inalámbricas (FUOTA)
paraAWS IoT Core para LoRaWANdispositivos
Cree una tarea FUOTA y cargue la imagen del firmware mediante la API
Para crear una tarea FUOTA y especificar el archivo de imagen del firmware mediante la API, utilice
laCreateFuotaTaskoperación de la API ocreate-fuota-taskComando CLI. Puede proporcionar
uninput.jsonarchivo como entrada alcreate-fuota-taskcomando. Al utilizar la API o la CLI, el
archivo de imagen del firmware que proporciona como entrada ya debe estar cargado en un bucket de S3.
También especifica la función de IAM que proporcionaAWS IoT Core para LoRaWANacceso a la imagen
del firmware en el bucket de S3.
donde:
Contenido de input.json
{
"Description": "FUOTA task to update firmware of devices in multicast group.",
"FirmwareUpdateImage": "S3:/firmware_bucket/firmware_image
"FirmwareUpdateRole": "arn:aws:iam::123456789012:role/service-role/ACF1zBEI"
"LoRaWAN": {
"RfRegion": "US915"
},
"Name": "FUOTA_Task_MC"
}
Tras crear la tarea de FUOTA, puede utilizar las siguientes operaciones de API o comandos de CLI para
actualizar, eliminar u obtener información sobre su tarea de FUOTA.
• UpdateFuotaTask o update-fuota-task
• GetFuotaTask o get-fuota-task
• ListFuotaTasks o list-fuota-tasks
• DeleteFuotaTask o delete-fuota-task
Pasos siguientes
Ahora que ha creado una tarea de FUOTA y ha proporcionado la imagen del firmware, puede añadir
dispositivos a la tarea para actualizar su firmware. Puede añadir dispositivos individuales o grupos
de multidifusión a la tarea. Para obtener más información, consulte Agregue dispositivos y grupos de
multidifusión a una tarea de FUOTA y programe una sesión de FUOTA (p. 1367).
• Si solo tienes una pequeña cantidad de dispositivos, puedes agregarlos directamente a tu tarea de
FUOTA.
• Si tiene una gran cantidad de dispositivos para los que desea actualizar el firmware, puede agregarlos a
sus grupos de multidifusión y, a continuación, agregar los grupos de multidifusión a su tarea de FUOTA.
Para obtener información sobre la creación y el uso de grupos de multidifusión, consulteCree grupos de
multidifusión para enviar una carga de enlace descendente a varios dispositivos (p. 1351).
1367
AWS IoT Core Guía para desarrolladores
Actualizaciones de firmware inalámbricas (FUOTA)
paraAWS IoT Core para LoRaWANdispositivos
Note
Después de añadir los dispositivos o grupos de multidifusión, puede iniciar una sesión de actualización
del firmware.AWS IoT Core para LoRaWANrecopila la imagen del firmware, fragmenta las imágenes y,
a continuación, almacena los fragmentos en un formato cifrado. Sus dispositivos finales recopilan los
fragmentos y aplican la nueva imagen del firmware. El tiempo que tarda la actualización del firmware
depende del tamaño de la imagen y de la forma en que se hayan fragmentado las imágenes. Una vez
completada la actualización del firmware, los fragmentos cifrados de la imagen del firmware almacenados
porAWS IoT Core para LoRaWANse elimina. Todavía puedes encontrar la imagen del firmware en el
bucket de S3.
Requisitos previos
Antes de añadir dispositivos o grupos de multidifusión a su tarea de FUOTA, haga lo siguiente.
• Ya debe haber creado la tarea FUOTA y haber proporcionado la imagen del firmware. Para obtener más
información, consulte Cree una tarea FUOTA y proporcione una imagen de firmware (p. 1365).
• Aprovisione los dispositivos inalámbricos para los que desea actualizar el firmware del dispositivo. Para
obtener más información sobre cómo incorporar el dispositivo, consulteIntegra tus dispositivos paraAWS
IoT Core para LoRaWAN (p. 1288).
• Para actualizar el firmware de varios dispositivos, puede agregarlos a un grupo de multidifusión. Para
obtener más información, consulte Cree grupos de multidifusión para enviar una carga de enlace
descendente a varios dispositivos (p. 1351).
• Cuando incorporas los dispositivos aAWS IoT Core para LoRaWAN, especifique el parámetro de
configuración FUOTAFPorts. Si estás usando unLoRaDispositivo WAN v1.0.x, también debe
especificar elGenAppKey. Para obtener más información sobre los parámetros de configuración de
FUOTA, consultePrepare los dispositivos para la configuración de multidifusión y FUOTA (p. 1352).
1. Puede añadir dispositivos individuales o grupos de multidifusión a su tarea de FUOTA. Sin embargo,
no puedes añadir dispositivos individuales ni grupos de multidifusión a la misma tarea de FUOTA.
Para añadir dispositivos mediante la consola por, haga lo siguiente.
1368
AWS IoT Core Guía para desarrolladores
Actualizaciones de firmware inalámbricas (FUOTA)
paraAWS IoT Core para LoRaWANdispositivos
Una vez que sus dispositivos o grupos de multidifusión se hayan agregado correctamente, puede
programar una sesión de FUOTA. Para programar una sesión, haga lo siguiente.
1. Elija la tarea FUOTA para la que desea actualizar el firmware del dispositivo y, a continuación,
elijaProgramar sesión de FUOTA.
2. Especifique unFecha de inicioyHora de iniciopara tu sesión de FUOTA. Asegúrese de que la hora
de inicio sea de 30 minutos o más tarde de la hora actual.
Una vez que haya asociado sus dispositivos inalámbricos o su grupo de multidifusión a su tarea de
FUOTA, utilice las siguientes operaciones de API o comandos de CLI para enumerar sus dispositivos
o grupos de multidifusión o para desasociarlos de su tarea.
• DisassociateWirelessDeviceFromFuotaTask o disassociate-wireless-device-
from-fuota-task
• DisassociateMulticastGroupFromFuotaTask o disassociate-multicast-group-
from-fuota-task
• ListWirelessDevices o list-wireless-devices
• ListMulticastGroups o list-multicast-groups-by-fuota-task
Note
La API:
• ListWirelessDevicespuede enumerar los dispositivos inalámbricos en general y
los dispositivos asociados a un grupo de multidifusión, cuandoMulticastGroupIDse
utiliza como filtro. La API muestra los dispositivos inalámbricos asociados a una tarea de
FUOTA cuandoFuotaTaskIDse utiliza como filtro.
1369
AWS IoT Core Guía para desarrolladores
Actualizaciones de firmware inalámbricas (FUOTA)
paraAWS IoT Core para LoRaWANdispositivos
Una vez que sus dispositivos o grupos de multidifusión se hayan agregado correctamente a la
tarea de FUOTA, puede iniciar una sesión de FUOTA para actualizar el firmware del dispositivo. La
hora de inicio debe ser de 30 minutos o más tarde de la hora actual. Para programar una sesión de
FUOTA mediante la API o la CLI, utilice laStartFuotaTaskoperación de la API o elstart-fuota-
taskComando CLI.
Después de iniciar una sesión de FUOTA, ya no podrá añadir dispositivos ni grupos de multidifusión
a la tarea. Puede obtener información sobre el estado de su sesión de FUOTA utilizando
elGetFuotaTaskoperación de la API o elget-fuota-taskComando CLI.
• Pendiente
Este estado indica que has creado una tarea de FUOTA, pero que aún no tiene una sesión de
actualización del firmware. Verás este mensaje de estado cuando se haya creado la tarea. Durante
este tiempo, puede actualizar su tarea de FUOTA y asociar o desasociar dispositivos o grupos
de multidifusión a su tarea. Después de que el estado cambie dePendiente, no se pueden añadir
dispositivos adicionales a la tarea.
• Sesión de FUOTA en espera
Cuando tus dispositivos se hayan agregado correctamente a la tarea de FUOTA, cuando tu tarea tenga
una sesión de actualización de firmware programada, aparecerá este mensaje de estado. Durante este
tiempo, no puedes actualizar ni añadir dispositivos a tu sesión de FUOTA. Si cancela su sesión de
FUOTA, el estado del grupo cambia aPendiente.
• En la sesión de FUOTA
Cuando comience tu sesión de FUOTA, verás este mensaje de estado. Se inicia la sesión de
fragmentación y los dispositivos finales recopilan los fragmentos, reconstruyen la imagen del firmware,
comparan la nueva versión del firmware con la versión original y aplican la nueva imagen.
• FUOTA hecho
Después de que sus dispositivos finales informen aAWS IoT Core para LoRaWANque se ha aplicado la
nueva imagen del firmware o, cuando se agote el tiempo de espera de la sesión, la sesión de FUOTA se
marca como finalizada y verás este estado en pantalla.
También verás este estado en cualquiera de los siguientes casos, así que asegúrate de comprobar si la
actualización del firmware se aplicó correctamente a los dispositivos.
• Cuando el estado de la tarea de FUOTA eraSesión de FUOTA en espera, y hay un error en el bucket
de S3, por ejemplo, el enlace al archivo de imagen del bucket de S3 es incorrecto oAWS IoT Core
para LoRaWANno tiene permisos suficientes para acceder al archivo del bucket.
1370
AWS IoT Core Guía para desarrolladores
Actualizaciones de firmware inalámbricas (FUOTA)
paraAWS IoT Core para LoRaWANdispositivos
• Cuando el estado de la tarea de FUOTA eraSesión de FUOTA en espera, y hay una solicitud para
iniciar una sesión de FUOTA, pero no se recibe ninguna respuesta de los dispositivos o grupos de
multidifusión de tu tarea de FUOTA.
• Cuando el estado de la tarea de FUOTA eraEn la sesión de FUOTA, y los dispositivos o grupos de
multidifusión no han enviado ningún fragmento durante un período de tiempo determinado, lo que
hace que se agote el tiempo de espera de la sesión.
• Eliminar espera
Si eliminas la tarea de FUOTA que se encuentra en cualquiera de los otros estados, verás este estado
en pantalla. Una acción de eliminación es permanente y no se puede deshacer. Esta acción puede llevar
tiempo y el estado de la tarea seráEliminar esperahasta que se haya eliminado la tarea FUOTA. Una vez
que la tarea de FUOTA entre en este estado, no podrá pasar a ninguno de los otros estados.
• Inicial
Cuando sea la hora de inicio de tu sesión de FUOTA,AWS IoT Core para LoRaWANcomprueba si el
dispositivo tiene el paquete compatible para la actualización del firmware. Si su dispositivo tiene el
paquete compatible, se inicia la sesión FUOTA del dispositivo. La imagen del firmware está fragmentada
y los fragmentos se envían al dispositivo. Cuando aparezca este estado, indica que la sesión de FUOTA
para el dispositivo aún no se ha iniciado.
• Paquete no compatible
DespuésAWS IoT Core para LoRaWANenvía los fragmentos de imagen, sus dispositivos finales
recopilan los fragmentos de la imagen y reconstruyen la imagen binaria a partir de estos fragmentos.
Este estado aparece cuando el dispositivo no tiene memoria suficiente para ensamblar los fragmentos
entrantes de la imagen del firmware, lo que puede provocar que la sesión de actualización del firmware
finalice prematuramente. Para resolver el error, comprueba si el hardware del dispositivo puede recibir
esta actualización. Si el dispositivo no puede recibir esta actualización, utilice una imagen delta para
actualizar el firmware.
• No se admite el índice de fragmentación
1371
AWS IoT Core Guía para desarrolladores
Monitoree su flota de recursos inalámbricos en
tiempo real mediante el analizador de redes
Este estado indica que el dispositivo ha experimentado un error de memoria al recibir los fragmentos
entrantes deAWS IoT Core para LoRaWAN. Si se produce este error, es posible que el dispositivo
no pueda recibir esta actualización. Para resolver el error, comprueba si el hardware del dispositivo
puede recibir esta actualización. Si es necesario, utilice una imagen delta para actualizar el firmware del
dispositivo.
• Descriptor incorrecto
El dispositivo no admite el descriptor indicado. El descriptor es un campo que describe el archivo que
se transportará durante la sesión de fragmentación. Si ves este error, ponte en contacto conAWS
SupportCentro.
• Repetición del recuento de sesiones
Este estado indica que el dispositivo ha utilizado anteriormente este recuento de sesiones. Para resolver
el error, inicie una nueva tarea de FUOTA para el dispositivo.
• Fragmentos faltantes
A medida que su dispositivo recopila los fragmentos de imagen deAWS IoT Core para LoRaWAN,
reconstruye la nueva imagen del firmware a partir de los fragmentos codificados e independientes. Si tu
dispositivo no ha recibido todos los fragmentos, la nueva imagen no se podrá reconstruir y verás este
estado. Para resolver el error, inicie una nueva tarea de FUOTA para el dispositivo.
• Error de MIC
Cuando el dispositivo reconstruye la nueva imagen del firmware a partir de los fragmentos recopilados,
realiza una comprobación de integridad de los mensajes (MIC) para comprobar la autenticidad de la
imagen y si proviene de la fuente correcta. Si el dispositivo detecta una discordancia en el micrófono
después de volver a ensamblar los fragmentos, se muestra este estado. Para resolver el error, inicie una
nueva tarea de FUOTA para el dispositivo.
• Successful
Si bien este mensaje de estado indica que los dispositivos han reconstruido la imagen a
partir de los fragmentos y la han verificado, es posible que el firmware del dispositivo no se
haya actualizado cuando el dispositivo informe del estado aAWS IoT Core para LoRaWAN.
Compruebe si se ha actualizado el firmware del dispositivo.
Pasos siguientes
Has aprendido los diferentes estados de la tarea de FUOTA y sus dispositivos y cómo puedes
solucionar cualquier problema. Para obtener más información sobre cada uno de estos estados,
consulteLoRaEspecificación de transporte de bloques de datos fragmentados de WAN, TS004-1.0.0.
1372
AWS IoT Core Guía para desarrolladores
Monitoree su flota de recursos inalámbricos en
tiempo real mediante el analizador de redes
redes, puede agregar los recursos que desea monitorear, activar una sesión de mensajería de rastreo y
comenzar a recibir mensajes de rastreo en tiempo real.
Note
Para supervisar tus recursos, también puedes usar AmazonCloudWatch. Para usarloCloudWatch,
configure un rol de IAM para configurar el registro y, a continuación, espere a que las entradas
del registro se muestren en la consola. Para obtener más información, consulte Monitorización y
registro para elAWS IoT Wireless uso de Amazon CloudWatch (p. 1449).
El analizador de redes reduce significativamente el tiempo necesario para configurar una conexión y
empezar a recibir mensajes de rastreo, ya que le proporciona información de just-in-time registro para su
flota de recursos. Al reducir el tiempo de configuración y utilizar la información de los mensajes de rastreo,
puede supervisar sus recursos de manera más eficaz, obtener información significativa y solucionar
errores. Los recursos inalámbricos que puede monitorear incluyen dispositivos LoRa WAN, puertas de
enlace LoRa WAN y grupos de multidifusión. Por ejemplo, puede identificar rápidamente un error de unión
al incorporar uno de sus dispositivos LoRa WAN. Para depurar el error, utilice la información del registro de
mensajes de seguimiento proporcionado.
Los recursos inalámbricos que puede monitorear incluyen dispositivos LoRa WAN, puertas de enlace
LoRa WAN y grupos de multidifusión. También puedes usar el analizador de red para depurar y solucionar
cualquier problema relacionado con tu tarea de FUOTA. Por ejemplo, considere una tarea de FUOTA que
tiene un grupo de multidifusión, el grupo de multidifusión A, y tiene los dispositivos, el dispositivo A y el
dispositivo B agregados a ese grupo. A continuación, puede añadir el grupo de multidifusión, el grupo de
multidifusión A y los dispositivos A y B a la configuración de su analizador de red para monitorearlos y
depurar su tarea de FUOTA.
Para supervisar su flota de recursos y empezar a recibir mensajes de rastreo, lleve a cabo los siguientes
pasos.
Antes de poder activar la mensajería de rastreo, cree una configuración de analizador de red y añada
recursos a la configuración. Primero, especifique los ajustes de configuración, que incluyen los niveles
de registro y la información sobre el dispositivo inalámbrico y el marco de multidifusión. A continuación,
añada los recursos inalámbricos que desee supervisar mediante los identificadores de puerta de enlace
inalámbrica, dispositivo inalámbrico y grupo de multidifusión.
2. Transmita mensajes de rastreo con WebSockets
Puede generar una URL de solicitud prefirmada con las credenciales de su rol de IAM para transmitir los
mensajes de rastreo del analizador de redes mediante el protocolo. WebSocket
3. Active la sesión de mensajería de rastreo y supervise los mensajes de rastreo
Para empezar a recibir mensajes de rastreo, active la sesión de mensajería de rastreo. Para evitar
incurrir en costes adicionales, puede desactivar o cerrar la sesión de mensajería de rastreo del
analizador de redes.
A continuación se muestra cómo crear la configuración, agregar recursos y activar la sesión de mensajería
de rastreo.
Temas
• Agregue la función de IAM necesaria para el analizador de redes (p. 1374)
• Cree una configuración de analizador de red y añada recursos (p. 1375)
• Transmita mensajes de rastreo del analizador de redes con WebSockets (p. 1381)
1373
AWS IoT Core Guía para desarrolladores
Agregue la función de IAM necesaria
para el analizador de redes
• Vea y supervise los registros de mensajes de rastreo del analizador de redes en tiempo real (p. 1390)
• Defina y solucione los problemas de sus grupos de multidifusión y tareas de FUOTA mediante el
analizador de red (p. 1393)
AWS IoT CoreOtorgue a la LoRa WAN la política de acceso completo adjuntando la política
AWSIoTWirelessFullAccessa su rol. Para obtener más información, consulte el resumen
AWSIoTWirelessFullAccess de la política.
• Política de IAM específica para la API de obtención y actualización
Cree la siguiente política de IAM en la página Crear política de la consola de IAM y en la pestaña Editor
visual:
1. Elija IoTWireless para el servicio.
2. En Nivel de acceso, expanda Leer y elegir y GetNetworkAnalyzerConfiguration, a continuación,
expanda Escribir y elegir UpdateNetworkAnalyzerConfiguration.
3. Elija Siguiente: Etiquetas e introduzca un nombre para la política, como IoT.
WirelessNetworkAnalyzerPolicy Elija Create Policy (Crear política).
A continuación se muestra la política de IoT WirelessNetworkAnalyzerPolicy que creó. Para obtener más
información sobre la creación de políticas, consulte Crear políticas de IAM.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"iotwireless:GetNetworkAnalyzerConfiguration",
"iotwireless:UpdateNetworkAnalyzerConfiguration"
],
"Resource": "*"
}
]
}
Para configurar un control de acceso más detallado, debe agregar las puertas de enlace inalámbricas,
los dispositivos y cualquier grupo de multidifusión al campo Recurso. La siguiente política utiliza
el ARN comodín para conceder acceso a todas las puertas de enlace, dispositivos y grupos de
multidifusión. Puede controlar el acceso a puertas de enlace y dispositivos específicos mediante
WirelessGatewayIdWirelessDeviceId, y. MulticastGroupId
1374
AWS IoT Core Guía para desarrolladores
Cree una configuración de
analizador de red y añada recursos
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"iotwireless:GetNetworkAnalyzerConfiguration",
"iotwireless:UpdateNetworkAnalyzerConfiguration"
],
"Resource": [
"arn:aws:iotwireless:*:{accountId}:WirelessDevice/*",
"arn:aws:iotwireless:*:{accountId}:WirelessGateway/*",
"arn:aws:iotwireless:*:{accountId}:MulticastGroup/*",
"arn:aws:iotwireless:*:{accountId}:NetworkAnalyzerConfiguration/*"
]
}
]
}
Para conceder permiso a un usuario para usar el analizador de red, pero no para usar ningún recurso
inalámbrico ni grupos de multidifusión, utilice la siguiente política. A menos que se especifique, los
permisos para usar los recursos se deniegan implícitamente.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"iotwireless:GetNetworkAnalyzerConfiguration",
"iotwireless:UpdateNetworkAnalyzerConfiguration"
],
"Resource": [
"arn:aws:iotwireless:*:{accountId}:NetworkAnalyzerConfiguration/*"
]
}
]
}
Pasos siguientes
Ahora que ha creado la política, puede agregar recursos a la configuración de su analizador de red y recibir
información de mensajería de seguimiento para esos recursos. Para obtener más información, consulte
Cree una configuración de analizador de red y añada recursos (p. 1375).
1375
AWS IoT Core Guía para desarrolladores
Cree una configuración de
analizador de red y añada recursos
Temas
• Crear una configuración de analizador de red (p. 1376)
• Agregue recursos y actualice la configuración del analizador de red (p. 1379)
Según los recursos que desee supervisar y el nivel de información que desee recibir sobre ellos, es posible
que desee crear varias configuraciones. Por ejemplo, puede crear una configuración que muestre solo la
información de error de un conjunto de puertas de enlace de suCuenta de AWS. También puede crear una
configuración que muestre toda la información sobre un dispositivo inalámbrico que desee supervisar.
En las siguientes secciones se muestran los distintos ajustes de configuración y cómo crear la
configuración.
Ajustes de configuración
Al crear o actualizar la configuración del analizador de red, también puede personalizar los siguientes
parámetros para filtrar la información del flujo de registro.
Esta configuración es la información de marco de los recursos del dispositivo inalámbrico para los
mensajes de rastreo. La información del marco se puede utilizar para depurar la comunicación entre el
servidor de red y los dispositivos finales. Está habilitado de forma predeterminada.
• Niveles de registro
Los registros con un nivel de registro de información son más detallados y contienen flujos de registro
de errores y flujos de registro informativos. Los registros informativos se pueden utilizar para ver los
cambios en el estado de un dispositivo o puerta de enlace.
Note
La recopilación de flujos de registro más detallados puede generar costos adicionales. Para
obtener más información acerca de los precios, consulte Precios de AWS IoT Core.
• Error
Los registros con un nivel de error de registro son menos detallados y solo muestran información de
error. Puede utilizar estos registros cuando una aplicación tenga un error, como un error de conexión
del dispositivo. Al utilizar la información del flujo de registro, puede identificar y solucionar los errores
de los recursos de su flota.
• Información sobre el marco de multidifusión
1376
AWS IoT Core Guía para desarrolladores
Cree una configuración de
analizador de red y añada recursos
Si tiene grupos de multidifusión que desee supervisar, puede utilizar la información del marco de
multidifusión para solucionar los problemas de los dispositivos que intentan unirse al grupo.
1. Abra el hub de Network Analyzer de la AWS IoT consola y seleccione Crear configuración.
2. Especifique los ajustes de configuración.
• Nombre, descripción y etiquetas
Especifique un nombre de configuración único, una descripción opcional y etiquetas para añadir pares
de metadatos clave-valor sobre la configuración. Para obtener más información sobre cómo nombrar
y describir sus recursos, consulte Describa suAWS IoT CoreporLoRaRecursos de WAN (p. 1277)
• Ajustes de configuración
Elija si desea deshabilitar la información del marco y utilice Seleccionar niveles de registro para elegir
los niveles de registro que desea utilizar para los registros de mensajes de seguimiento. Si tiene
grupos de multidifusión que desee supervisar, seleccione Mensaje de datos de multidifusión (solo
grupos de multidifusión). Elija Siguiente.
3. Añada recursos a la configuración. Puede agregar sus recursos ahora o elegir Crear y luego agregar
sus recursos más adelante. Para añadir recursos más adelante, selecciona Crear.
En la página central de Network Analyzer, verá la configuración que creó junto con sus ajustes. Para ver
los detalles de la nueva configuración, elija el nombre de la configuración.
Puede crear varias configuraciones de analizadores de redes en función de los recursos que desee
supervisar y del nivel de información de mensajería de rastreo que desee recibir sobre ellos.
1. Vaya al hub de Network Analyzer de la AWS IoT consola y seleccione la configuración que desee
eliminar.
2. Elija Actions (Acciones) y, a continuación, elija Delete (Eliminar).
Al crear la configuración, solo tiene que especificar un nombre de configuración. También puede
utilizar esta operación de API para especificar los ajustes de configuración y añadir recursos al crear la
configuración.
Note
1377
AWS IoT Core Guía para desarrolladores
Cree una configuración de
analizador de red y añada recursos
de API. Una única configuración de analizador de red puede tener hasta 250 dispositivos
inalámbricos y 250 puertas de enlace inalámbricas combinadas. Para añadir recursos adicionales,
utilice la AWS IoT consola, tal y como se describe en la sección anterior.
Al crear la configuración, debe especificar un nombre. Por ejemplo, el siguiente comando crea una
configuración proporcionando solo un nombre y una descripción opcional. De forma predeterminada, la
configuración tiene activada la información del marco y utiliza un nivel de registro deINFO.
{
"Arn": "arn:aws:iotwireless:us-
east-1:123456789012:NetworkAnalyzerConfiguration/12345678-a1b2-3c45-67d8-e90fa1b2c34d",
"Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d"
}
Para personalizar los ajustes de configuración, utilice el trace-content parámetro. Para agregar
recursos, utilice los MulticastGroups parámetros WirelessDevicesWirelessGateways, y para
especificar las puertas de enlace, los dispositivos y los grupos de multidifusión que desea agregar a la
configuración. Por ejemplo, el siguiente comando personaliza los ajustes de configuración y añade a la
configuración los recursos inalámbricos.
{
"Arn": "arn:aws:iotwireless:us-
east-1:123456789012:NetworkAnalyzerConfiguration/12345678-a1b2-3c45-67d8-e90fa1b2c34d",
"Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d"
}
Puede crear varias configuraciones de analizadores de red en función de los recursos que
desee supervisar y del nivel de detalle de la información de mensajería de rastreo que desee
recibir de los recursos. Después de crear estas configuraciones, puede usar la operación de
ListNetworkAnalyzerConfigurationsAPI o el comando list-network-analyzer-configurationCLI para obtener
una lista de estas configuraciones.
1378
AWS IoT Core Guía para desarrolladores
Cree una configuración de
analizador de red y añada recursos
Al ejecutar este comando, se muestran todas las configuraciones del analizador de red en suCuenta de
AWS. También puede utilizar el max-results parámetro para especificar el número de configuraciones
que desea mostrar. A continuación se muestra el resultado de la ejecución de este comando.
{
"NetworkAnalyzerConfigurationList": [
{
"Arn": "arn:aws:iotwireless:us-
east-1:123456789012:NetworkAnalyzerConfiguration/12345678-a1b2-3c45-67d8-e90fa1b2c34d",
"Name": "My_Network_Analyzer_Config1"
},
{
"Arn": "arn:aws:iotwireless:us-
east-1:123456789012:NetworkAnalyzerConfiguration/90123456-a1a2-9a87-65b4-c12bf3c2d09a",
"Name": "My_Network_Analyzer_Config2"
}
]
}
La ejecución de este comando no produce ningún resultado. Para ver las configuraciones disponibles,
puede utilizar la operación ListNetworkAnalyzerConfigurations de API.
Pasos siguientes
Ahora que ha creado una configuración de analizador de red, puede añadir recursos a la configuración
o actualizar los ajustes de configuración. Para obtener más información, consulte Agregue recursos y
actualice la configuración del analizador de red (p. 1379).
Requisitos previos
Antes de poder añadir recursos:
1. Debe haber incorporado las puertas de enlace y los dispositivos y haber agregado cualquier grupo de
multidifusión que desee monitorear para la WAN. AWS IoT Core LoRa Para obtener más información,
consulte Conexión de puertas de enlace y dispositivos aAWS IoT Core para LoRaWAN (p. 1276).
2. Debe haber creado una configuración de analizador de red para la que agregará recursos. Para obtener
más información, consulte Crear una configuración de analizador de red (p. 1376).
1379
AWS IoT Core Guía para desarrolladores
Cree una configuración de
analizador de red y añada recursos
1. Abra el hub de Network Analyzer de la AWS IoT consola y elija la configuración para la que desee
añadir recursos.
2. Elija Acciones y, a continuación, elija Agregar recursos.
3. Agregue los recursos que desee monitorear mediante la puerta de enlace inalámbrica y los
identificadores de dispositivos inalámbricos. Puede elegir varios recursos y añadir hasta 250 puertas
de enlace inalámbricas o dispositivos inalámbricos.
4. Después de añadir todos los recursos, selecciona Agregar.
Verás la cantidad de puertas de enlace y dispositivos que agregaste en la página central de Network
Analyzer. Puede seguir añadiendo y quitando recursos hasta que active la sesión de mensajería de
rastreo. Una vez activada la sesión, para añadir recursos, tendrás que desactivarla.
1. Abra el hub de Network Analyzer de la AWS IoT consola y elija la configuración para la que desea
actualizar la configuración.
2. Elija Actions (Acciones) y, a continuación, elija Edit (Editar).
3. Elija si desea deshabilitar la información del marco y utilice Seleccionar niveles de registro para elegir
los niveles de registro que desea utilizar para los registros de mensajes de seguimiento. Seleccione
Guardar.
Verás los ajustes de configuración que especificaste en la página de detalles de la configuración del
analizador de red.
Para actualizar los ajustes de configuración, utilice el TraceContent parámetro para especificar el nivel
de registro y si desea habilitar la información del marco. Por ejemplo, el siguiente comando actualiza los
parámetros de configuración al deshabilitar la información del marco y establecer el nivel de registro en.
ERROR
• Agregar recursos
1380
AWS IoT Core Guía para desarrolladores
Transmita mensajes de rastreo del
analizador de redes con WebSockets
comando actualiza los ajustes de configuración y agrega a la configuración los recursos inalámbricos,
especificados por sus WirelessGatewayIdWirelessDeviceId, yMulticastGroupId.
{
"TraceContent": {
"WirelessDeviceFrameInfo": "DISABLED",
"LogLevel": "ERROR"
},
"WirelessDevices": [],
"WirelessGateways": [
"a0dd70e5-8f15-41a5-89cf-310284e691a1",
"41682155-de4f-4f8f-84bf-bb5557221fc8"
]
}
Pasos siguientes
Ahora que ha agregado recursos y especificado los ajustes de configuración opcionales para su
configuración, puede usar el WebSocket protocolo para establecer una conexión con la LoRa WAN
AWS IoT Core para usar el analizador de redes. A continuación, puede activar la mensajería de rastreo
y empezar a recibir mensajes de rastreo para sus recursos. Para obtener más información, consulte
Transmita mensajes de rastreo del analizador de redes con WebSockets (p. 1381).
A continuación se muestra cómo transmitir los mensajes de rastreo del analizador de red conWebSockets.
1381
AWS IoT Core Guía para desarrolladores
Transmita mensajes de rastreo del
analizador de redes con WebSockets
Temas
• Genera una solicitud prefirmada con la biblioteca WebSocket (p. 1382)
• Ejemplo de código Python para generar una URL prefirmada (p. 1386)
• WebSocketmensajes y códigos de estado (p. 1389)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iotwireless:StartNetworkAnalyzerStream",
"Resource": "*"
}
]
}
El siguiente ejemplo muestra cómo utilizar esta URL de solicitud con el nombre de la
configuraciónNaConfig:
wss://api.iotwireless.<region>.amazonaws.com/start-network-analyzer-stream?configuration-
name=NaConfig
&X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Date=20220427T001057Z&X-Amz-SignedHeaders=host
&X-Amz-Expires=300
&X-Amz-Credential=credential_number/account/region/iotwireless/aws4_request
&X-Amz-Signature=c123456789098765a012c3a45d6789dd01234af5678bba9bbc0dbc112a3334d
Note
Si su URL no incluye el nombre de la configuración, AWS IoT Core para LoRa WAN
incluirá el nombre predeterminado para la configuración del analizador de red.
NetworkAnalyzerConfig_Default
1382
AWS IoT Core Guía para desarrolladores
Transmita mensajes de rastreo del
analizador de redes con WebSockets
GET wss://api.iotwireless.<region>.amazonaws.com/start-network-analyzer-stream?X-Amz-
Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=Signature Version 4 credential scope
&X-Amz-Date=date
&X-Amz-Expires=time in seconds until expiration
&X-Amz-Security-Token=security-token
&X-Amz-Signature=Signature Version 4 signature
&X-Amz-SignedHeaders=host
• Algoritmo X-Amz: el algoritmo que utilizas en el proceso de firma. El único valor válido es AWS4-HMAC-
SHA256.
• Credencial X-Amz: cadena separada por barras oblicuas («/») que se forma al concatenar el ID de la
clave de acceso y los componentes del ámbito de las credenciales. El ámbito de las credenciales incluye
la fecha en formato YYYYMMDD, la AWS región, el nombre del servicio y una cadena de terminación
(aws4_request).
• X-Amz-Date: fecha y hora en que se creó la firma. Genere la fecha y la hora siguiendo las instrucciones
de la sección Gestión de fechas en la versión 4 de la Referencia general de Amazon Web Services.
• X-Amz-Expires: el tiempo en segundos que transcurre hasta que caduquen las credenciales. El valor
máximo es de 300 segundos (5 minutos).
• X-Amz-Security-Token: (opcional) Un token Signature de la versión 4 para credenciales temporales. Si
especifica este parámetro, inclúyalo en la solicitud canónica. Para obtener más información, consulte
Solicitud de credenciales de seguridad temporales en la Guía del usuario de administración de AWS
identidades y accesos.
• X-Amz-Signature: la firma Signature de la versión 4 que generaste para la solicitud.
• X-Amz SignedHeaders -: los encabezados que se firman al crear la firma de la solicitud. El único valor
válido es host.
# HTTP verb
method = "GET"
# Service name
service = "iotwireless"
# Región de AWS
region = "Región de AWS"
1383
AWS IoT Core Guía para desarrolladores
Transmita mensajes de rastreo del
analizador de redes con WebSockets
endpoint = "wss://api.iotwireless.region.amazonaws.com"
# Host
host = "api.iotwireless.<region>.amazonaws.com"
2. Cree un URI canónico (identificador uniforme de recursos). El URI canónico es la parte del URI entre
el dominio y la cadena de consulta.
canonical_uri = "/start-network-analyzer-stream"
3. Cree los encabezados canónicos y los encabezados firmados. Tenga en cuenta la \n final en los
encabezados canónicos.
algorithm = "AWS4-HMAC-SHA256"
5. Cree el ámbito de credenciales, que abarca la clave derivada de la fecha, la región y el servicio para el
que se realiza la solicitud.
6. Cree la cadena de consulta canónica. Los valores de las cadenas de consulta deben estar codificados
en URI y ordenados por nombre.
• Ordene los nombres de los parámetros en orden ascendente según el punto del código de
caracteres. Los parámetros con nombres duplicados deben ordenarse por valor. Por ejemplo, un
nombre de parámetro que comienza por la letra mayúscula F precede a un nombre de parámetro
que empieza por la letra minúscula b.
• No codifique en URI ninguno de los caracteres sin reservas que define el RFC 3986: A-Z, a—z, 0—
9, guión (-), subrayado (_), punto (.) y tilde (~).
• Codifique con signos de porcentaje el resto de los caracteres con %XY, donde X e Y son caracteres
hexadecimales (0-9 y A-F mayúsculas). Por ejemplo, el carácter de espacio debe codificarse
como %20 (sin usar '+', como hacen algunos esquemas de codificación) y los caracteres UTF-8
extendidos deben tener el formato %XY%ZA%BC.
• Codifique dos veces los caracteres de equivalencia (=) en los valores de los parámetros.
1384
AWS IoT Core Guía para desarrolladores
Transmita mensajes de rastreo del
analizador de redes con WebSockets
7. Cree un hash de la carga. Para una solicitud GET, la carga es una cadena vacía.
payload_hash = HashSHA256(("").Encode("utf-8")).HexDigest()
string_to_sign=algorithm + "\n"
+ amz_date + "\n"
+ credential_scope + "\n"
+ HashSHA256(canonical_request.Encode("utf-8")).HexDigest()
El código se supone que ha implementado la función GetSignatureKey para generar una clave de firma.
Para obtener más información y funciones de ejemplo, consulte Ejemplos de cómo derivar una clave de
firma para la versión 4 de la firma en la Referencia general de Amazon Web Services.
La función HMAC(key, data) representa una función HMAC-SHA256 que devuelve los resultados en
formato binario.
A continuación, puede utilizar una WebSocket biblioteca para solicitar la URL prefirmada. Para ver un
ejemplo de WebSocket cliente para usar con Python, consulte websocket-client 1.4.1.
1385
AWS IoT Core Guía para desarrolladores
Transmita mensajes de rastreo del
analizador de redes con WebSockets
Pasos siguientes
Ahora puede usar la URL de solicitud con su WebSocket biblioteca para realizar la solicitud al servicio
y observar los mensajes. Para ver un ejemplo de código Python que muestra cómo generar la URL
prefirmada, consulteEjemplo de código Python para generar una URL prefirmada (p. 1386).
Requisitos previos
Para usar el lenguaje de programación Python para generar solicitudes, debe tener:
• Clave de acceso que consiste en el ID de la clave de acceso y la clave de acceso secreta en las
variables de entorno denominadas AWS_ACCESS_KEY_ID yAWS_SECRET_ACCESS_KEY. Si lo prefiere,
puede conservar estos valores en un archivo de credenciales y leerlos a partir de ese archivo.
Note
$ export AWS_ACCESS_KEY_ID=My_Access_Key
$ export AWS_SECRET_ACCESS_KEY=My_Secret_Key
# Session token is required only if you use temporary access key starting with "ASIA"
$ export AWS_SESSION_TOKEN=My_Session_token
• Una configuración de analizador de redes creada en su cuenta. Para ejecutar el script, especifique el
nombre de la configuración del analizador de red como variable. En este ejemplo, se hace referencia a
una configuración con el nombre My_Network_Analyzer_Config.
Note
1386
AWS IoT Core Guía para desarrolladores
Transmita mensajes de rastreo del
analizador de redes con WebSockets
python generate_presigned_url.py
Contenido de generate_presigned_url.py
"""
Sample Python code to generate the pre-signed URL. You can
change the parameters in this code to your own values, such
as the variables that are required for the request URL, the
network analyzer configuration name, and Region.
"""
# ------------------------------------------------------------------
# Step 1. Import the required libraries and define the functions
# sign and getSignatureKey that will be used to derive a signing key.
# ------------------------------------------------------------------
import sys, os, base64, datetime, hashlib, hmac, urllib.pars
import requests # pip install requests
# ------------------------------------------------------------------
# Step 2. Define the variables required for the request URL. Replace
# values for the variables, such as region, with your own values.
# ------------------------------------------------------------------
method = "GET"
service = "iotwireless"
region = "us-east-1"
# For date stamp, the date without time is used in credential scope.
datestamp = t.strftime("%Y%m%d")
# -----------------------------------------------------------------------
# Step 3. Create the canonical URI and canonical headers for the request.
# -----------------------------------------------------------------------
canonical_uri = "/start-network-analyzer-stream"
configuration_name = "My_Network_Analyzer_Config"
1387
AWS IoT Core Guía para desarrolladores
Transmita mensajes de rastreo del
analizador de redes con WebSockets
signed_headers = "host"
algorithm = "AWS4-HMAC-SHA256"
credential_scope = datestamp + "/" + region + "/" + service + "/" + "aws4_request"
# -----------------------------------------------------------------------
# Step 4. Read the credentials that are required for the request
# from environment variables or configuration file.
# -----------------------------------------------------------------------
access_key = os.environ.get("AWS_ACCESS_KEY_ID")
secret_key = os.environ.get("AWS_SECRET_ACCESS_KEY")
token = os.environ.get("AWS_SESSION_TOKEN")
# ----------------------------------------------------------------------
# Step 5. Create the canonical query string. Query string values must be
# URI-encoded and sorted by name. Query headers must in alphabetical order.
# ----------------------------------------------------------------------
canonical_querystring = "X-Amz-Algorithm=" + algorithm
canonical_querystring += "&X-Amz-Credential=" + \
urllib.parse.quote(access_key + "/" + credential_scope, safe="-_.~")
if access_key.startswith("ASIA"):
# percent encode the token and double encode "="
canonical_querystring += "&X-Amz-Security-Token=" + \
urllib.parse.quote(token, safe="-_.~").replace("=", "%253D")
# ----------------------------------------------------------------------
# Step 6. Create a hash of the payload.
# ----------------------------------------------------------------------
payload_hash = hashlib.sha256(("").encode("utf-8")).hexdigest()
# ------------------------------------------------------------------
# Step 7. Combine the elements, which includes the query string, the
# headers, and the payload hash, to form the canonical request.
# ------------------------------------------------------------------
canonical_request = method + "\n" + canonical_uri + "\n" + canonical_querystring \
+ "\n" + canonical_headers + "\n" + signed_headers + "\n" + payload_hash
# ----------------------------------------------------------------------
# Step 8. Create the metadata string to store the information required to
# calculate the signature in the following step.
# ----------------------------------------------------------------------
string_to_sign = algorithm + "\n" + amz_date + "\n" + \
credential_scope + "\n" + hashlib.sha256(canonical_request.encode("utf-8")).hexdigest()
# ----------------------------------------------------------------------
# Step 9. Calculate the signature by using a signing key that"s obtained
# from your secret key.
# ----------------------------------------------------------------------
1388
AWS IoT Core Guía para desarrolladores
Transmita mensajes de rastreo del
analizador de redes con WebSockets
# ----------------------------------------------------------------------
# Step 10. Create the request URL using the calculated signature and by
# combining it with the canonical URI and the query string.
# ----------------------------------------------------------------------
canonical_querystring += "&X-Amz-Signature=" + signature
print("\n-----------PRESIGNED URL-----------")
print(request_url)
Pasos siguientes
Ahora puede usar la URL de solicitud con su WebSocket biblioteca para realizar la solicitud al servicio y
observar los mensajes.
Para instalar una WebSocket biblioteca para usarla con Python, ejecute el siguiente comando. Para
obtener información sobre cómo puede usar un WebSocket cliente con Python, consulte WebSocketCliente
para Python con opciones de API de bajo nivel.
Tras instalar el cliente y realizar la solicitud, verás mensajes y códigos de estado que indican el estado de
la solicitud. Para obtener más información, consulte WebSocketmensajes y códigos de estado (p. 1389).
WebSocketmensajes
El WebSocket protocolo se puede utilizar para establecer una conexión bidireccional. Los mensajes se
pueden transmitir de cliente a servidor y de servidor a cliente. Sin embargo, el analizador de red solo
admite los mensajes que se envían del servidor al cliente. Cualquier mensaje recibido del cliente es
inesperado y el servidor cerrará automáticamente la WebSocket conexión si se recibe un mensaje del
cliente.
Cuando se recibe la solicitud y se inicia una sesión de mensajería de rastreo, el servidor responde con
una estructura JSON, que es la carga útil. Para obtener más información sobre la carga útil y cómo puede
activar la mensajería de rastreo desdeAWS Management Console, consulteVea y supervise los registros
de mensajes de rastreo del analizador de redes en tiempo real (p. 1390).
WebSocketcódigos de estado
A continuación se muestran los códigos de WebSocket estado de la comunicación del servidor al cliente.
Los códigos WebSocket de estado siguen el estándar RFC de cierre normal de conexiones.
• 1 000
1389
AWS IoT Core Guía para desarrolladores
Vea y supervise los registros de mensajes de
rastreo del analizador de redes en tiempo real
Este código de estado indica un cierre normal, lo que significa que se ha establecido la WebSocket
conexión y se ha cumplido la solicitud. Este estado se puede observar cuando una sesión está inactiva,
lo que hace que se agote el tiempo de espera de la conexión.
• 1002
Este código de estado indica que el punto final está finalizando la conexión debido a un error de
protocolo.
• 1003
Este código de estado indica un estado de error en el que el punto final finalizó la conexión porque
recibió datos en un formato que no puede aceptar. El terminal solo admite datos de texto y puede
mostrar este código de estado si recibe un mensaje binario o un mensaje del cliente que utilice un
formato no compatible.
• 1008
Este código de estado indica un estado de error en el que el punto final finalizó la conexión porque
recibió un mensaje que infringe su política. Este estado es genérico y se muestra cuando los demás
códigos de estado, como 1003 o 1009, no son aplicables. También verás este estado si es necesario
ocultar la política o si se produce un error de autorización, como una firma caducada.
• 1011
Este código de estado indica un estado de error en el que el servidor termina la conexión porque se
encontró con una condición inesperada o un error interno que le impidió cumplir con la solicitud.
Pasos siguientes
Ahora que ha aprendido a generar una solicitud prefirmada y a observar los mensajes del servidor
mediante la WebSocket conexión, puede activar la mensajería de rastreo y empezar a recibir los registros
de mensajes de la puerta de enlace inalámbrica y los recursos del dispositivo inalámbrico. Para obtener
más información, consulte Vea y supervise los registros de mensajes de rastreo del analizador de redes en
tiempo real (p. 1390).
Requisitos previos
Antes de poder activar la mensajería de rastreo mediante el analizador de red, debe tener:
• Se agregaron los recursos que desea monitorear a la configuración predeterminada del analizador de
red. Para obtener más información, consulte Agregue recursos y actualice la configuración del analizador
de red (p. 1379).
• Se generó una solicitud prefirmada mediante la URL de la StartNetworkAnalyzerStream solicitud.
La solicitud se firmará con las credenciales del AWS Identity and Access Management rol que realiza
esta solicitud. Para obtener más información, consulte Cree una URL prefirmada (p. 1382)
1390
AWS IoT Core Guía para desarrolladores
Vea y supervise los registros de mensajes de
rastreo del analizador de redes en tiempo real
1. Abra el hub de Network Analyzer de la AWS IoT consola y elija la configuración del analizador de red,
NetworkAnalyzerConfig _Default.
2. En la página de detalles de la configuración del analizador de red, elija Activar la mensajería de rastreo
y, a continuación, seleccione Activar.
Empezarás a recibir mensajes de rastreo cuando el mensaje de rastreo más reciente aparezca primero
en la consola.
Note
Una vez iniciada la sesión de mensajería, recibir mensajes de rastreo puede generar costes
adicionales hasta que desactive la sesión o la abandone. Para obtener más información acerca
de los precios, consulte Precios de AWS IoT Core.
• Número de mensaje: número único que muestra primero el último mensaje recibido.
• ID de recurso: la puerta de enlace inalámbrica o el ID del dispositivo inalámbrico del recurso.
• Marca de tiempo: la hora en que se recibió el mensaje.
• ID del mensaje: identificador que AWS IoT Core para LoRa WAN asigna a cada mensaje recibido.
• fPort: el puerto de frecuencia para comunicarse con el dispositivo mediante la WebSocket conexión.
• DevEui: el identificador único extendido (EUI) de su dispositivo inalámbrico.
• Recurso: si el recurso monitoreado es un dispositivo inalámbrico o una puerta de enlace inalámbrica.
• Evento : el evento de un mensaje de registro de un dispositivo inalámbrico, que puede ser Join, Rejoin,
Uplink_Data, Downlink_Data o Registration.
• Nivel de registro: información o INFO registro de las ERROR transmisiones de su dispositivo.
CustomerLog
La CustomerLogparte del JSON muestra el tipo y el identificador del recurso que recibió el mensaje, el
nivel de registro y el contenido del mensaje. En el siguiente ejemplo se muestra un mensaje de registro
CustomerLog. Puede utilizar el message campo del JSON para obtener más información sobre el error y
sobre cómo resolverlo.
LoRaFrame
La LoRaFrameparte del JSON tiene un identificador de mensaje y contiene información sobre la carga
física del dispositivo y los metadatos inalámbricos.
1391
AWS IoT Core Guía para desarrolladores
Vea y supervise los registros de mensajes de
rastreo del analizador de redes en tiempo real
Note
Si sus dispositivos envían un mensaje de enlace ascendente sin un valor AWS IoT Core
paraFport, el analizador de redes LoRa WAN mostrará un fPort valor de 225 en el mensaje de
rastreo recibido.
Para evitar incurrir en costes adicionales, puede desactivar la sesión de mensajería de rastreo. Al
desactivar la sesión, se desconecta la WebSocket conexión para que no reciba ningún mensaje de
rastreo adicional. Puede seguir viendo los mensajes existentes en la consola.
• Edite la información del marco para su configuración
Puede editar la configuración del analizador de red y elegir si desea desactivar la información del marco
y elegir los niveles de registro de sus mensajes. Antes de actualizar la configuración, considere la
posibilidad de desactivar la sesión de mensajería de rastreo. Para realizar estas modificaciones, abra
la página de detalles de Network Analyzer en la AWS IoT consola y seleccione Editar. A continuación,
puede actualizar la configuración con los nuevos ajustes de configuración y activar la mensajería de
rastreo para ver los mensajes actualizados.
• Añada recursos a su configuración
1392
AWS IoT Core Guía para desarrolladores
Depure sus grupos de multidifusión y sus
tareas de FUOTA con el analizador de red
Para obtener más información sobre cómo actualizar la configuración del analizador de red mediante la
edición de los ajustes de configuración y la adición de recursos, consulteAgregue recursos y actualice la
configuración del analizador de red (p. 1379).
Para monitorear su tarea de FUOTA, si la tarea contiene grupos de multidifusión, debe agregar tanto el
grupo de multidifusión como los dispositivos del grupo a la configuración del analizador de red. También
debe activar la información de fotogramas y la información de fotogramas de multidifusión. Esto le permite
rastrear los mensajes de unidifusión y multidifusión que se intercambian con el grupo de multidifusión y los
dispositivos mientras la tarea de FUOTA está en curso.
Para supervisar los grupos de multidifusión, puede agregarlos a la configuración del analizador de red.
Puede utilizar la información del marco de multidifusión para solucionar problemas con los mensajes
de enlace descendente de multidifusión que se envían a estos grupos. Para solucionar problemas de
dispositivos que intentan unirse a un grupo en el que se utiliza la comunicación de unidifusión, también
debe incluir estos dispositivos en la configuración del analizador de red. Para supervisar únicamente
la comunicación de unidifusión con los dispositivos del grupo, active la información del marco para sus
dispositivos inalámbricos. Este enfoque garantiza una supervisión y un diagnóstico exhaustivos tanto para
los grupos de multidifusión como para los dispositivos que se unen al grupo.
En las siguientes secciones se describe cómo depurar y solucionar problemas en los grupos de
multidifusión y las tareas de FUOTA mediante el analizador de red.
Temas
• Depura las tareas de FUOTA que solo contienen dispositivos (p. 1393)
• Depura las tareas de FUOTA con grupos de multidifusión (p. 1394)
• Depura los dispositivos que intentan unirse a un grupo de multidifusión (p. 1394)
• Depurar una sesión de grupo de multidifusión (p. 1395)
1. Cree una configuración de analizador de red activando la información de marco para los dispositivos
inalámbricos. Esto le permite monitorear los mensajes de enlace ascendente y descendente de
FUOTA que se intercambian con los dispositivos mientras la tarea está en curso.
2. Añada los dispositivos de su tarea de FUOTA a la configuración del analizador de red mediante sus
identificadores de dispositivos inalámbricos.
3. Active la mensajería de rastreo para empezar a recibir mensajes de rastreo para los dispositivos de la
configuración de su analizador de red.
1393
AWS IoT Core Guía para desarrolladores
Depure sus grupos de multidifusión y sus
tareas de FUOTA con el analizador de red
1. Cree una configuración de analizador de red activando la información de marco para los dispositivos
inalámbricos.
2. Agregue los dispositivos que desea monitorear a la configuración del analizador de red mediante sus
identificadores de dispositivos inalámbricos.
3. Active la mensajería de rastreo para empezar a recibir mensajes de rastreo para los dispositivos de la
configuración de su analizador de red.
4. Comience a asociar los dispositivos al grupo de multidifusión una vez que se haya activado la
mensajería de rastreo para los dispositivos del grupo.
1394
AWS IoT Core Guía para desarrolladores
Seguridad de datos con AWS IoT Core para LoRa WAN
1. Cree una configuración de analizador de red activando la información del marco de multidifusión para
el grupo de multidifusión.
2. Añada el grupo de multidifusión que desea supervisar a la configuración del analizador de red
mediante su identificador de grupo de multidifusión.
3. Antes de que comience la sesión de multidifusión, active la mensajería de rastreo para empezar a
recibir mensajes de rastreo para la sesión grupal de multidifusión.
4. Inicie la sesión grupal de multidifusión y supervise el estado consultando los mensajes que se
muestran en la tabla de mensajes de seguimiento y en el mensaje de registro JSON.
• La seguridad que utilizan los dispositivos inalámbricos para comunicarse con las puertas de enlace.
Los dispositivos LoRa WAN siguen las prácticas de seguridad descritas en LoRaWAN™ SECURITY: un
documento técnico preparado para la LoRa Alianza™ por Gemalto, Actility y Semtech para comunicarse
con las puertas de enlace.
• La seguridad que se AWS IoT Core utiliza para conectar las puertas de enlace a AWS IoT Core la LoRa
WAN y enviar los datos a otros AWS servicios.
AWS IoT Corela seguridad se describe enProtección de los datos en AWS IoT Core (p. 401).
1395
AWS IoT Core Guía para desarrolladores
LoRaSeguridad de transporte de
dispositivos WAN y puertas de enlace
1. El dispositivo inalámbrico LoRa WAN cifra sus mensajes binarios mediante el modo CTR AES128 antes
de transmitirlos.
2. Las conexiones de gateway a AWS IoT Core para LoRa WAN están protegidas por TLS, tal como se
describe enSeguridad de transporte en AWS IoT Core (p. 402). AWS IoT Corefor LoRa WAN descifra el
mensaje binario y codifica la carga útil del mensaje binario descifrado como una cadena de base64.
3. El mensaje codificado en base64 resultante se envía como carga útil del mensaje a la AWS IoT regla
descrita en el destino asignado al dispositivo. Los datos que AWS contiene se cifran mediante claves
AWS propias.
4. La AWS IoT regla dirige los datos del mensaje a los servicios descritos en la configuración de la regla.
Los datos que AWS contiene se cifran mediante claves AWS propias.
La práctica de seguridad de LoRa las puertas de enlace se describe en las especificaciones de la LoRa
WAN. LoRalas puertas de enlace se conectan a AWS IoT Core la LoRa WAN a través de un socket web
mediante un Basics Station. AWS IoT Corepara LoRa WAN solo admite Basics Station la versión
2.0.4 y versiones posteriores.
Antes de establecer la conexión con el socket web, AWS IoT Core la LoRa WAN utiliza el modo de
autenticación TLS de servidor y cliente (p. 402) para autenticar la puerta de enlace. AWS IoT Corefor LoRa
WAN también mantiene un servidor de configuración y actualización (CUPS) que configura y actualiza los
certificados y las claves utilizados para la autenticación TLS.
1396
AWS IoT Core Guía para desarrolladores
Cómo utilizar lasAWS IoT Core para Amazon Sidewalk?
Amazon Sidewalk es una red segura y compartida que permite que los dispositivos de su comunidad se
conecten y permanezcan conectados. Amazon Sidewalk transfiere datos entre los dispositivos terminales
de Sidewalk y las puertas de enlace de Sidewalk, y entre las puertas de enlace de Sidewalk y la nube de
Sidewalk.
Con la consola
Para incorporar tus dispositivos Sidewalk End, inicia sesión enAWS Management Consoley navega hasta
laDispositivospágina en elAWS IoTconsola. Una vez que tus dispositivos estén integrados, podrás verlos y
gestionarlos en esta página de la consola de IoT.
Puede embarcar tanto en Sidewalk como LoRaDispositivos WAN mediante elAWS IoTOperaciones de
API inalámbrica. ElAWS IoTAPI inalámbrica queAWS IoT Coreestá construida sobre la que es compatible
conAWSSDK. Para obtener más información, consulteAWSSDK y kits de herramientas.
Puede utilizar elAWS CLIpara ejecutar comandos para incorporar y administrar sus dispositivos terminales
de Sidewalk. Para obtener más información, consulteAWS IoTReferencia de CLI inalámbrica.
AWS IoT Core para Amazon Sidewalktiene cuotas que se aplican a los datos del dispositivo que se
transmiten entre el dispositivo y elNube de AWS, y el TPS máximo paraAWS IoTOperaciones de
API inalámbrica. Para obtener más información, consulteAWS IoTCuotas de conexión inalámbricaen
elAWSReferencia general.
1397
AWS IoT Core Guía para desarrolladores
Precios de AWS IoT Core para Amazon Sidewalk
Para obtener más información sobre la descripción general de los productos y los precios, consulteAWS
IoT Coreprecios.
• Integre sus dispositivos finales de Sidewalk paraAWS IoT usar laAWS IoT consola, las operaciones de
laAWS IoT Core para Amazon Sidewalk API oAWS CLI los comandos.
• Aproveche las capacidades que ofreceNube de AWS.
• Cree un destino que utiliceAWS IoT reglas para procesar los mensajes de carga entrantes e interactuar
con otrosServicios de AWS.
• Habilite las notificaciones de eventos para recibir mensajes sobre eventos, por ejemplo, cuando se
aprovisionó o registró su dispositivo final de Sidewalk, o si un mensaje de enlace descendente se envió
correctamente a su dispositivo.
• Registre y supervise sus dispositivos finales de Sidewalk en tiempo real, obtenga información útil e
identifique y solucione errores.
• Asocie sus dispositivos finales de Sidewalk conAWS IoT cualquier cosa, lo que le ayudará a almacenar
una representación de su dispositivo en la nube. Las funciones incluidasAWS IoT facilitan la búsqueda y
la administración de tus funciones, así como el acceso a otrasAWS IoT Core funciones.
Temas
• ¿Qué es Amazon Sidewalk? (p. 1398)
• Cómo funciona AWS IoT Core para Amazon Sidewalk (p. 1399)
Cuando Amazon Sidewalk está habilitado, esta red puede admitir otros dispositivos finales de Sidewalk
de su comunidad y puede usarse para aplicaciones como la detección de su entorno. Amazon Sidewalk
ayuda a que sus dispositivos estén conectados y permanezcan conectados.
1398
AWS IoT Core Guía para desarrolladores
Cómo funciona AWS IoT Core para Amazon Sidewalk
• Amazon Sidewalk crea una red de bajo ancho de banda mediante pasarelas Sidewalk que incluyen
dispositivos Ring y algunos dispositivos Echo. Con las puertas de enlace, puede compartir una parte del
ancho de banda de Internet, que luego se utiliza para conectar sus dispositivos finales a la red.
• Amazon Sidewalk ofrece un mecanismo de red seguro con múltiples capas de cifrado y seguridad.
• Amazon Sidewalk ofrece un mecanismo sencillo para habilitar o deshabilitar la participación en Sidewalk.
Sidewalk Gateways, o Amazon Sidewalk bridges, enrutan los datos entre los dispositivos finales de
Sidewalk y la nube. Las puertas de enlace son dispositivos de Amazon, como el dispositivo Echo o
la Ring Floodlight Cam, que admiten SubG-CSS (asincrónico, LDR), SubG-FSK (sincrónico, HDR) o
Bluetooth LE para la comunicación en Sidewalk. Las puertas de enlace de Sidewalk comparten una
parte del ancho de banda de Internet con la comunidad de Sidewalk para proporcionar conectividad a
un grupo de dispositivos compatibles con Sidewalk.
Dispositivos terminales para aceras
Los dispositivos finales de Sidewalk deambulan por Amazon Sidewalk conectándose a las puertas de
enlace de Sidewalk. Los dispositivos finales son productos inteligentes de bajo ancho de banda y bajo
consumo, como luces compatibles con Sidewalk o cerraduras de puertas.
Note
Ciertas pasarelas Sidewalk también pueden actuar como dispositivos finales.
Servidor de red Sidewalk
El servidor de red Sidewalk, operado por Amazon, verifica los paquetes entrantes y encamina
los mensajes de enlace ascendente y descendente al destino deseado, a la vez que mantiene
sincronizada la hora de la red de Sidewalk.
• Amazon Sidewalk
• Documentación de Amazon Sidewalk
• AWS IoT Core para Amazon Sidewalk
AWS IoT Core para Amazon Sidewalkproporciona los servicios en la nube que puede utilizar para conectar
sus dispositivos finales de Sidewalk aNube de AWS y utilizar otrosServicio de AWS s. También puede
utilizarlosAWS IoT Core para Amazon Sidewalk para administrar sus dispositivos Sidewalk y monitorear y
crear aplicaciones en ellos.
1399
AWS IoT Core Guía para desarrolladores
Cómo funciona AWS IoT Core para Amazon Sidewalk
Los dispositivos terminales de las aceras se comunicanAWS IoT Core a través de las puertas de enlace
de Sidewalk. AWS IoT Core para Amazon Sidewalkadministra las políticas de servicios y dispositivos
necesariasAWS IoT Core para administrar y comunicarse con los dispositivos finales y puertas de enlace
de Sidewalk. También administra los destinos que envían datos del dispositivo a otrosServicio de AWS.
En este tema se describen los requisitos previos para incorporar los dispositivos finales de Sidewalk,
se ilustra el flujo de trabajo mediante una aplicación de monitoreo de sensores y se proporciona una
descripción general de cómo integrar el dispositivo medianteAWS CLI comandos.
• Conexión de dispositivos de acera aAWS IoT Core para Amazon Sidewalk (p. 1408)
En esta sección se describen los diferentes pasos de la introducción al flujo de trabajo de incorporación
y se explica cómo incorporar los dispositivos finales mediante la consola y las operaciones de la API.
También conectarás tu dispositivo y verás los mensajes que se intercambian entre tu dispositivo yAWS
IoT Core para Amazon Sidewalk.
• Dispositivos de aprovisionamiento masivo con AWS IoT Core para Amazon Sidewalk (p. 1422)
Esta sección proporciona un step-by-step tutorial detallado para el aprovisionamiento masivo de sus
dispositivos finales de Sidewalk medianteAWS IoT Core para Amazon Sidewalk. Aprenderás el flujo de
trabajo de aprovisionamiento masivo y cómo incorporar una gran cantidad de dispositivos Sidewalk.
1400
AWS IoT Core Guía para desarrolladores
Introducción a AWS IoT Core para Amazon Sidewalk
• Amazon Sidewalk
• Documentación de Amazon Sidewalk
• AWS IoT Core para Amazon Sidewalk
El siguiente diagrama muestra los pasos necesarios para ejecutar la aplicación de ejemplo y conectar el
dispositivo final de Sidewalk a la aplicación. Para obtener instrucciones detalladas, incluidos los requisitos
previos y la configuración de este tutorial, consulte el documento README en GitHub.
1401
AWS IoT Core Guía para desarrolladores
Configuración
Temas
• Configuración para usarAWS IoT Core para Amazon Sidewalk (p. 1402)
• Describir sus recursos de Sidewalk (p. 1403)
• Introducción a la incorporación de sus dispositivos Sidewalk (p. 1405)
Para realizar todo el flujo de trabajo de incorporación para aprovisionar y registrar su dispositivo
final de Sidewalk, también debe configurar su Sidewalk Gateway y el HDK. Para obtener
instrucciones, consulte Configuración del kit de desarrollo de hardware (HDK) y Configuración de
una puerta de enlace de Sidewalk en la documentación de Amazon Sidewalk.
Temas
• Instalar Python y Python3-PIP (p. 1402)
• Configurar tu cuenta yAWS CLI (p. 1403)
python3 -V
pip3 --version
Si este comando devuelve un error, puede deberse a que Python no está instalado o a que el
sistema operativo llama al ejecutable Python v3.x como Python3. En ese caso, sustituya todas las
instanciaspython de porpython3 cuando ejecute los comandos. Si sigue apareciendo un error, descarga
y ejecuta el instalador de Python o instala Python según tu sistema operativo, tal y como se describe a
continuación.
Windows
En su equipo Windows, descargue Python del sitio web de Python y, a continuación, ejecute el
instalador para instalar Python en su equipo.
Linux
1402
AWS IoT Core Guía para desarrolladores
Describir sus recursos de Sidewalk
macOS
En tu máquina Mac, usa Homebrew para instalar Python. Homebrew también instala pip, que luego
apunta a la versión de Python3 instalada.
Para utilizarAWS IoT Core para Amazon Sidewalk, regístrese para obtener unaCuenta de AWS y cree
un usuario administrativo. Para obtener instrucciones, consulte Configura tuCuenta de AWS (p. 19).
2. Instalación y configuración de AWS CLI
Puede utilizar elAWS CLI para integrar programáticamente sus dispositivos finales de Sidewalk
paraAWS IoT Core para Amazon Sidewalk. Si desea incorporar los dispositivos mediante laAWS IoT
consola, puede omitir esta sección. Abre la AWS IoT Coreconsola y, a continuación, continúa con la
siguiente sección para empezar a conectar tus dispositivos aAWS IoT Core para Amazon Sidewalk.
Para obtener instrucciones sobre la configuración delAWS CLI, consulte Instalación y configuración
delAWS CLI.
3. Instalar boto3 (AWSSDK para Python)
Los siguientes comandos muestran cómo instalar boto3 (AWSSDK para Python) y elAWS CLI.
También instalarás botocore, que es necesario para ejecutar boto3. Para obtener instrucciones
detalladas, consulte Instalación de Boto3 en la Guía de documentación de Boto3.
Note
1403
AWS IoT Core Guía para desarrolladores
Describir sus recursos de Sidewalk
En las secciones siguientes se muestran los diversos recursos de Sidewalk y sus restricciones de longitud.
Temas
• Nombres y su descripción de los recursos (p. 1404)
• Etiquetas de recursos (p. 1404)
En laAWS IoT consola, el campo de nombre aparece en la lista de recursos del centro de recursos. Al
seleccionar los nombres de los recursos, tenga en cuenta cómo desea que se identifiquen y se muestren
en la consola. Como el espacio es limitado en la consola, es posible que solo estén visibles los primeros 15
a 30 caracteres.
Dispositivo terminal para El nombre es un descriptor opcional y se puede cambiar después de haber
aceras creado el recurso.
Perfil del dispositivo El nombre es un descriptor opcional y se puede cambiar después de haber
creado el recurso.
Los destinos, los dispositivos finales y los perfiles también admiten un campo de descripción, que puede
tener hasta 2048 caracteres. Si bien el campo de descripción puede contener mucha información, solo
aparece en la página de detalles del recurso en laAWS IoT consola y puede que no sea práctico para
escanear en el contexto de varios recursos. Para ayudarlo a identificar y administrar sus recursos, le
recomendamos que proporcione una descripción breve y significativa. Por ejemplo, si su destino vuelve a
publicar los datos de los sensores en un tema de IoT, puede especificar una descripción como Sidewalk
destination to republish sensor data.
Etiquetas de recursos
Las etiquetas son palabras o frases que actúan como metadatos que puede utilizar para identificar y
organizarAWS los recursos. Las etiquetas pueden ayudarle a clasificar los recursos. Usted elige las claves
de etiqueta y sus valores correspondientes.
Los destinos y los perfiles pueden tener hasta 50AWS etiquetas adjuntas. Los dispositivos Sidewalk no
admiten etiquetas. Por ejemplo, podría definir un conjunto de etiquetas para un grupo de perfiles que
estén asociados a un conjunto determinado de dispositivos finales de Sidewalk. Para administrar más
fácilmente los recursos, le recomendamos que cree un conjunto de claves de etiqueta de la conformidad
de las necesidades de cada tipo de recurso. En la siguiente tabla se muestran las etiquetas admitidas para
los recursos de Sidewalk.
1404
AWS IoT Core Guía para desarrolladores
Introducción a la incorporación de sus dispositivos Sidewalk
Perfil del dispositivo Se pueden añadir hasta 50AWS etiquetas a cada recurso.
Puede pensar en la clave de etiqueta como una categoría de información y en el valor de la etiqueta
como un valor específico de esa categoría. Por ejemplo, puede tener un valor de etiqueta decolor y, a
continuación, asignar a algunos recursos un valor de bluepara esa etiqueta y a otros un valor de red. Con
eso, puede usar el Editor de etiquetas delAWS Management Console para encontrar los recursos con un
valor de etiqueta de color de blue.
Para obtener más información sobre el etiquetado y las estrategias de el etiquetado, consulte Editor de
etiquetas.
En los siguientes pasos, se muestra cómo incorporar y conectar sus dispositivos finales de Sidewalk
aAWS IoT Core para Amazon Sidewalk. Si desea incorporar dispositivos mediante elAWS CLI, puede
consultar los comandos de ejemplo que se proporcionan en esta sección. Para obtener información sobre
la incorporación de dispositivos mediante laAWS IoT consola, consulteConexión de dispositivos de acera
aAWS IoT Core para Amazon Sidewalk (p. 1408).
Important
Para realizar todo el flujo de trabajo de incorporación, también debes aprovisionar y registrar tu
dispositivo final y conectar tu kit de desarrollo de hardware (HDK). Para obtener más información,
consulte Aprovisionamiento y registro del dispositivo final en la documentación de Amazon
Sidewalk.
Temas
• Paso 1: agregar su dispositivo de Sidewalk aAWS IoT Core para Amazon Sidewalk (p. 1405)
• Paso 2: cree un destino para su dispositivo de enlace de Sidewalk (p. 1406)
• Paso 3: aprovisionar y registrar el dispositivo final (p. 1406)
• Paso 4: Connect al dispositivo final de Sidewalk e intercambiar mensajes (p. 1407)
1405
AWS IoT Core Guía para desarrolladores
Introducción a la incorporación de sus dispositivos Sidewalk
Cree un perfil de dispositivo que contenga las configuraciones compartidas de sus dispositivos
Sidewalk. Al crear el perfil, especifique unname para el perfil como cadena alfanumérica. Para crear un
perfil, vaya a la pestaña Sidewalk del hub de perfiles de laAWS IoT consola y elija Crear perfil, o utilice
la operación de CreateDeviceProfileAPI o el comando create-device-profileCLI, como se
muestra en este ejemplo.
// Add your device profile using a name and the sidewalk object.
aws iotwireless create-device-profile --name sidewalk_profile --sidewalk {}
Cree su dispositivo final Sidewalk conAWS IoT Core para Amazon Sidewalk. Especifique un nombre
de destino y el ID del perfil del dispositivo obtenido en el paso anterior. Para añadir un dispositivo,
vaya a la pestaña Sidewalk del hub de dispositivos de laAWS IoT consola y elija Aprovisionar
dispositivo, o utilice la operación de la CreateWirelessDeviceAPI o el comando create-
wireless-deviceCLI, como se muestra en este ejemplo.
Note
Especifica un nombre para tu destino que sea exclusivo de tuCuenta de AWS regiónRegión
de AWS. Usarás el mismo nombre de destino cuando agregues tu destino aAWS IoT Core
para Amazon Sidewalk.
• Si utilizas laAWS IoT consola, puedes usar la pestaña Sidewalk del hub de dispositivos para
descargar un archivo JSON combinado para tu dispositivo terminal de Sidewalk.
• Si utilizas las operaciones de la API, almacena las respuestas obtenidas de las operaciones de
la API GetDeviceProfiley GetWirelessDevicecomo archivos JSON independientes, como
device_profile.jsonywireless_device.json.
1406
AWS IoT Core Guía para desarrolladores
Introducción a la incorporación de sus dispositivos Sidewalk
Cree un rol de IAM que otorgueAWS IoT Core para Amazon Sidewalk permiso para enviar datos a
laAWS IoT regla. Para crear el rol, utilice la operación CreateRolede API o el comando create-
roleCLI. Puede asignar al rol un nombre como SidewalkRole.
Cree unaAWS IoT regla que procese los datos del dispositivo y especifique el tema en el que
se publican los mensajes. Observará los mensajes sobre este tema después de conectarse a la
plataforma de hardware. Utilice la operación deAWS IoT Core API CreateTopicRule, o elAWS CLI
comando create-topic-rule, para crear una regla para el destino.
3. Creación de un destino
Cree un destino que asocie su dispositivo Sidewalk a la regla de IoT que lo procesa para usarlo con
otrosServicios de AWS. Puede añadir un destino mediante el hub de destinos de laAWS IoT consola,
la operación de la CreateDestinationAPI o el comando create-destinationCLI.
Al registrar su dispositivo final de Sidewalk, su puerta de enlace debe estar habilitada en Amazon
Sidewalk y la puerta de enlace y el dispositivo deben estar dentro del alcance uno del otro.
1407
AWS IoT Core Guía para desarrolladores
Conexión de dispositivos de acera
aAWS IoT Core para Amazon Sidewalk
Utilice el cliente MQTT para suscribirse al tema especificado en la regla y ver el mensaje recibido.
También puede utilizar la operación de la SendDataToWirelessDeviceAPI o el comando send-
data-to-wireless-deviceCLI para enviar un mensaje de enlace descendente a su dispositivo y
verificar el estado de la conectividad.
(Opcional) Puede habilitar el evento de estado de entrega del mensaje para comprobar si el mensaje
de enlace descendente se recibió correctamente.
Requisitos previos
Para añadir el dispositivo final y el destino aAWS IoT Core para Amazon Sidewalk, puede utilizarCuenta
de AWS. Para realizar estas operaciones mediante elAWS IoTLa API inalámbrica o elAWS CLIcomandos,
también debe configurar elAWS CLI. Si tiene más información sobre los requisitos previos y la
configuración, consulteConfiguración para usarAWS IoT Core para Amazon Sidewalk (p. 1402).
Note
Para realizar todo el flujo de trabajo de incorporación para aprovisionar y registrar su dispositivo
final y conectarlo al kit de desarrollo de hardware (HDK), también debe configurar su Sidewalk
Gateway y su HDK. Para obtener más información, consulteConfiguración del kit de desarrollo
de hardware (HDK)yConfiguración de una puerta de entrada a la aceraen elDocumentación de
Amazon Sidewalk.
Para obtener más información, consulte Describir sus recursos de Sidewalk (p. 1403).
Los siguientes temas le muestran cómo incorporar su dispositivo Sidewalk paraAWS IoT Core para
Amazon Sidewalk
1408
AWS IoT Core Guía para desarrolladores
Agrega tu dispositivo Sidewalk
Temas
• Agrega tu dispositivo aAWS IoT Core para Amazon Sidewalk (p. 1409)
• Añade un destino para tu dispositivo Sidewalk (p. 1415)
• Conecta tu dispositivo Sidewalk y visualiza el formato de metadatos de enlace ascendente (p. 1420)
Tras crear un perfil de dispositivo, al recuperar información sobre el perfil, devuelve unDeviceTypeId.
Cuando aprovisione su dispositivo final, utilizará este identificador, los certificados del dispositivo, la clave
pública del servidor de aplicaciones y el número de serie del fabricante (SMSN) de Sidewalk. El SMSN es
un número de serie único para cada dispositivo Sidewalk.
1409
AWS IoT Core Guía para desarrolladores
Agrega tu dispositivo Sidewalk
a. Por ejemplo, puede utilizar el siguiente nombre y, si lo desea, puede utilizar. La descripción puede
utilizar un máximo de 2.048 caracteres. Estos campos se pueden editar después de crear el
dispositivo.
b. Elige un perfil de dispositivo para asociarlo a tu dispositivo Sidewalk. Si ya tienes algún perfil de
dispositivo, puedes elegir tu perfil. Para utilizar un nuevo perfil, puede utilizarCrear nuevo perfily, a
continuación, puede utilizar un nombre para el perfil.
Note
Si lo desea, puede asociar su dispositivo Sidewalk a unAWS IoTcosa. Los objetos de IoT son
entradas del registro de dispositivos de AWS IoT. Las cosas facilitan la búsqueda y la administración
de tus dispositivos. Si asocias un objeto a tu dispositivo, este podrá acceder a otrosAWS IoT
Corecaracterísticas.
1410
AWS IoT Core Guía para desarrolladores
Agrega tu dispositivo Sidewalk
a. Introduce un nombre único para el elemento de IoT al que quieres asociar a tu dispositivo
Sidewalk. Los nombres de las cosas distinguen entre mayúsculas y minúsculasCuenta de
AWSyRegión de AWS.
b. Proporcione cualquier configuración adicional para su IoT, como usar un tipo de cosa o atributos
de búsqueda que se puedan usar para filtrar de una lista de cosas.
c. EligeSiguientey verifica la información sobre tu dispositivo Sidewalk y, a continuación,
seleccionaCrear.
Temas
• Paso 1: crear un perfil de dispositivo (p. 1411)
• Paso 2: puede utilizar su dispositivo Sidewalk (p. 1411)
Por ejemplo, el siguiente comando crea un perfil de dispositivo para sus dispositivos de Sidewalk:
Si ejecuta este comando devuelve el nombre de recurso de Amazon (ARN) y el ID del perfil del dispositivo,
que será similar a lo siguiente.
{
"DeviceProfileArn": "arn:aws:iotwireless:us-east-1:123456789012:DeviceProfile/12345678-
a1b2-3c45-67d8-e90fa1b2c34d",
"DeviceProfileId": "12345678-a1b2-3c45-67d8-e90fa1b2c34d"
}
Para añadir tu dispositivo Sidewalk a tu cuenta deAWS IoT Core para Amazon Sidewalk, usa
elCreateWirelessDeviceEl funcionamiento de la API ocreate-wireless-deviceComando CLI.
Al crear el dispositivo, especifique los siguientes parámetros, además de un nombre y una descripción
opcionales para el dispositivo Sidewalk.
Note
1411
AWS IoT Core Guía para desarrolladores
Agrega tu dispositivo Sidewalk
Contenido de device.json
{
"Type": "Sidewalk",
"Name": "SidewalkDevice",
"DestinationName": "SidewalkDestination",
"Sidewalk": {
"DeviceProfileId": "12345678-a1b2-3c45-67d8-e90fa1b2c34d"
}
}
Si ejecuta este comando devuelve el nombre de recurso de Amazon (ARN) del dispositivo y el nombre de
recurso de Amazon (ARN) del alojamiento.
{
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:WirelessDevice/23456789-abcd-0123-
bcde-fabc012345678",
"Id": "23456789-abcd-0123-bcde-fabc012345678"
}
{
"p256R1": "grg8izXoVvQ86cPVm0GMyWuZYHEBbbH ... DANKkOKoNT3bUGz+/f/pyTE
+xMRdIUBZ1Bw==",
"eD25519": "grg8izXoVvQ86cPVm0GMyWuZYHEBbbHD ... UiZmntHiUr1GfkTOFMYqRB+Aw==",
"metadata": {
"devicetypeid": "fe98",
"applicationDeviceArn": "arn:aws:iotwireless:us-
east-1:123456789012:WirelessDevice/897ce68e-3ca2-4ed0-85a2-30b0666c4052",
"applicationDeviceId": "897ce68e-3ca2-4ed0-85a2-30b0666c4052",
1412
AWS IoT Core Guía para desarrolladores
Agrega tu dispositivo Sidewalk
"smsn": "82B83C8B35E856F43CE9C3D59B418CC96B996071016DB1C3BE5901F0F3071A4A",
"devicePrivKeyP256R1":
"3e704bf8d319b3a475179f1d68c60737b28c708f845d0198f2d00d00c88ee018",
"devicePrivKeyEd25519":
"17dacb3a46ad9a42d5c520ca5f47f0167f59ce54d740aa13918465faf533b8d0"
},
"applicationServerPublicKey":
"5ce29b89c2e3ce6183b41e75fe54e45f61b8bb320efbdd2abd7aefa5957a316b"
}
• El ID del dispositivo, su nombre de recurso de Amazon (ARN) y los detalles de cualquierAWS IoTcosa a
la que está asociado el dispositivo.
• El perfil del dispositivo y los detalles del destino.
• La hora a la que se recibió el último mensaje de enlace ascendente del dispositivo.
• El estado que indica si el dispositivo se ha aprovisionado o registrado.
Temas
• Paso 1: Obtenga la información del perfil del dispositivo como un archivo JSON (p. 1413)
• Paso 2: Obtenga la información del dispositivo Sidewalk como un archivo JSON (p. 1414)
Paso 1: Obtenga la información del perfil del dispositivo como un archivo JSON
Usa elGetDeviceProfileEl funcionamiento de la API oget-device-profileComando de CLI
para obtener la información sobre la información sobre el perfil de su dispositivo, que será similar a
lo siguienteAWS IoT Core para Amazon Sidewalk. Para recuperar información sobre el perfil de su
dispositivo, especifique el ID del perfil.
A continuación, la API devolverá información sobre el perfil del dispositivo que coincida con el identificador
especificado y el ID del dispositivo. Guardas esta información de respuesta en un archivo y le das un
nombre comodevice_profile.json.
Al ejecutar este comando, se devuelven los parámetros del perfil del dispositivo, la clave pública del
servidor de aplicaciones y elDeviceTypeID. A continuación, se muestra un archivo JSON que contiene
un ejemplo de información de respuesta de la API. Si tiene más información sobre los parámetros de la
respuesta de la API, consulteGetDeviceProfile.
1413
AWS IoT Core Guía para desarrolladores
Agrega tu dispositivo Sidewalk
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:DeviceProfile/12345678-
a1b2-3c45-67d8-e90fa1b2c34d",
"Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d",
"Name": "Sidewalk_profile",
"LoRaWAN": null,
"Sidewalk":
{
"ApplicationServerPublicKey":
"a123b45c6d78e9f012a34cd5e6a7890b12c3d45e6f78a1b234c56d7e890a1234",
"DAKCertificateMetadata": [
{
"DeviceTypeId: "fe98",
"CertificateId": "43564A6D2D50524F544F54595045",
"FactorySupport": false,
"MaxAllowedSignature": 1000
}
],
"QualificationStatus": false
}
}
A continuación, la API devolverá información sobre el dispositivo que coincida con el identificador
especificado y el ID del dispositivo. Guarde la siguiente información de respuesta en un archivo JSON.
Asigne al archivo un nombre significativo, por ejemplowireless_device.json.
Al ejecutar este comando, se obtienen los detalles del dispositivo, los certificados del dispositivo, las
claves privadas y el número de serie de fabricación de Sidewalk (SMSN). A lo siguiente, se muestra un
ejemplo del resultado de la ejecución de este comando. Si tiene más información sobre los parámetros de
la respuesta de la API, consulteGetWirelessDevice.
{
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:WirelessDevice/23456789-abcd-0123-
bcde-fabc012345678",
"Id": "23456789-abcd-0123-bcde-fabc012345678",
"DestinationName": "SidewalkDestination",
"Type": "Sidewalk",
"Sidewalk": {
"CertificateId": "4C7438772D50524F544F54595045",
"DeviceCertificates": [
{
"SigningAlg": "Ed25519",
"Value": "hDdkJw9L2uMCORjImjMHqzNR6nYYh6QKncSl5GthQNl7NKe4ounb5UMQtLjnm7zOUPYOqghCeVOLCBUiQe2ZiMBEW18J
F+GeltcafZcFKhS+O5NPcVNR/fHYaf/cn5iUbRwlz/T
+ODXvGdwkBkgDyFgoUJgn7JdzFjaneE5qzTWXUbL79i1sXToGGjP8hiD9jJhidPWhIswleydAWgO1OZGA4CjzIaSGVM1VtaLB0VDphA
uMMBfgAeL8Tdv5LkFIPIB3ZX9zt8zzmAuFRzI4MuNjWfIDnOF6AKu37WWU6/
QYhZoQrW9D/wndiCcsRGl+ANn367r/HE02Re4DOiCfs9f2rjc4LT1LKt7g/KW2ii+W
+9HYvvY0bBAI+AHx6Cx4j+djabTsvrgW2k6NU2zUSM7bdDP3z2a2+Z4WzBji/jYwt/
1414
AWS IoT Core Guía para desarrolladores
Agrega un destino para el dispositivo Sidewalk
OP8rpsy5Ee4ywXUfCsfQ0rKOr0zay6yh27p3I3MZle2oCO4JIlqK0VbIQqsXzSSyp6XXS0lhmuGugZ1AAADGz
+gFBeX/ZNN8VJwnsNfgzj4me1HgVJdUo4W9kvx9cr2jHWkC3Oj/bdBTh1+yBjOC53yHlQK/
l1GHrEWiWPPnE434LRxnWkwr8EHD4oieJxC8fkIxkQfj+gHhU79Z
+oAAYAAAzsnf9SDIZPoDXF0TdC9POqTgld0oXDl2XPaVD4CvvLearrOSlFv+lsNbC4rgZn23MtIBM/7YQmJwmQ
+FXRup6Tkubg1hpz04J/09dxg8UiZmntHiUr1GfkTOFMYqRB+Aw=="
},
{
"SigningAlg": "P256r1",
"Value": "hDdkJw9L2uMCORjImjMHqzNR6nYYh6QKncSl5GthQNmHmGU8a
+SOqDXWwDNt3VSntpbTTQl7cMIusqweQo+JPXXWElbGh7eaxPGz4ZeF5yM2cqVNUrQr1lX/6lZ
+OLuycrFrLzzB9APi0NIMLqV/Rt7XJssHQs2RPcT1ul/2XVpa6ztULJeQi2JwhTb/k48wbh/EvafG/ibrIBIx9v7/
dwGRAPKHq7Uwb9hHnhpa8qNOUtjeUdIwJNh9vCBFX9s22t4PdortoFxbXo9C149PDDD4wqUHJGYlCsVX/
Sqqjf7Aug3h5dwdYN6cDgsuuiOm0+aBcXBGpkh7OxVxlwXkIP
+11dt23TkrSUKd0B01sc9Mc/0yEBCzx5RutKBwsefzyOl4vQX3AHgV7oD/XV73THMgGiDxQ55CPaaxN/
pm791VkQ76BSZaBeF+Su6tg0k/
eQneklt8Du5uqkyBHVxy8MvxsBIMZ73vIFwUrLHjDeq3+nOOyQqSBMnrHKU2mAwN3zb2LolwjPkKNOh1+NNnv99L2pBcNCnhnoBULWm
+BgewzYNdWrXyKkp4O3ZDa4f+5SVWvbY5eyDDXcohvz/
OcCtuRjAkzKBCvIjBDnCv1McjVdCO3+utizGntfhAo1RZstnOoRkgVF2WuMT9IrUmzYximuTXUmWtjyFSTqgNBZwHWUTlMmjlpLCVzZ
csC4HPTKr3dazdvEkhwGAAAIFByCjSp/5WHc4AhsyjMvKCsZQiKgiI8ECwjfXBaSZdY4zYsRlO3FC428H1atrFChFCZT0Bqt5LPXD38
+vAUJiP8XqiEdXeqf2mYMJ5ykoDpwkve/cUQfPpjzFQlQfvwjBwiJDANKkOKoNT3bUGz+/f/pyTE+xMRdIUBZ1Bw=="
}
],
"DeviceProfileId": "0ff5b0c6-f149-4498-af34-21993acd52a7",
"PrivateKeys": [
{
"SigningAlg": "Ed25519",
"Value": "2c24d4572327f23b9bef38097137c29224a9e979081b3d90124ac9dfa477934e"
},
{
"SigningAlg": "P256r1",
"Value": "38d526f29cfaf142f596deca187bd809ef71bc13435eedc885b63bb825d63def"
}
],
"SidewalkManufacturingSn": "843764270F4BDAE3023918C89A3307AB3351EA761887A40A9DC4A5E46B6140D9",
"Status": "PROVISIONED"
},
...
Pasos siguientes
Guarde los archivos JSON,wireless_device.jsonydevice_profile.jsontemporalmente, ya
que los utilizará en el siguiente paso para aprovisionar y registrar su dispositivo final para conectarlo
a la plataforma de hardware. Para obtener más información, consulteAprovisionamiento y registro del
dispositivo finalen elDocumentación de Amazon Sidewalk.
1415
AWS IoT Core Guía para desarrolladores
Agrega un destino para el dispositivo Sidewalk
A continuación, puede utilizar para utilizar un destinoAWS IoTregla y función de IAM para el destino.
Temas
• Cree un destino para su dispositivo Sidewalk (p. 1416)
• Cree un rol de IAM y una regla de IoT para su destino (p. 1417)
Si ya agregaste tu dispositivo con un nombre de destino, debes usar ese nombre al crear
tu destino. Para obtener más información, consulte Paso 2: puede utilizar su dispositivo
Sidewalk (p. 1411).
• El nombre delAWS IoTregla que procesará los datos del dispositivo y el tema en el que se publicarán los
mensajes.
• Una función de IAM que concede el permiso de los datos del dispositivo para acceder a la regla.
En las siguientes secciones, puede utilizarAWS IoTregla y función de IAM para su destino.
Para procesar los datos de un dispositivo, especifique los siguientes campos al crear un destino y, a
continuación, elijaAgregar destino.
ElAWS IoTregla que está configurada para evaluar los mensajes enviados por el dispositivo y procesar
los datos del dispositivo. El nombre de la regla se asignará a su destino. El destino requiere que la regla
procese los mensajes que recibe. Puede elegir que los mensajes se procesen invocando unaAWS IoTo
publicándolos en elAWS IoTagente de mensajes.
• Si eligeIntroduzca un nombre de regla, introduzca un nombre y, a continuación,Copiarpara copiar el
nombre de la regla que introducirás al crear elAWS IoTregla. Puede elegirCrear reglapara crear la
regla ahora o ir alReglasCentro delAWS IoTconsola y crea una regla con ese nombre.
1416
AWS IoT Core Guía para desarrolladores
Agrega un destino para el dispositivo Sidewalk
Para obtener más información sobreAWS IoTnormas para los destinos, consulteCree reglas para
procesar LoRaMensajes de dispositivos WAN.
• Role name (Nombre de rol)
La función de IAM que concede el permiso de los datos del dispositivo para acceder a la regla
nombrada enNombre de la regla. En la consola, puede crear un nuevo rol de servicio o seleccionar
un rol de servicio existente. Si va a crear un nuevo rol de servicio, puede introducir el nombre del rol
(por ejemplo,SidewalkDestinationRole), o puede utilizar la siguiente funciónAWS IoT Corepor
LoRaWAN para generar un nuevo nombre de rol.AWS IoT Corepor LoRaA continuación, WAN creará
automáticamente la función de IAM con los permisos correspondientes en su nombre.
Si se ejecuta este comando devuelve los detalles del destino, que será similar a lo siguiente.
{
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:Destination/SidewalkDestination",
"Name": "SidewalkDestination"
}
Para obtener más información sobre la creación de un destinoCree reglas para procesar LoRaMensajes de
dispositivos WAN.
1417
AWS IoT Core Guía para desarrolladores
Agrega un destino para el dispositivo Sidewalk
También puede definir la política de confianza para el rol con un archivo JSON.
Contenido de trust-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
En los pasos siguientes se muestra cómo se crea la función Lambda y, a continuación, una regla temática
que envía un mensaje a esta función.
Cree un rol de IAM que conceda a su función el permiso de accesoAWSrecursos. También puede
definir la política de confianza para el rol con un archivo JSON.
Contenido de lambda-trust-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
1418
AWS IoT Core Guía para desarrolladores
Agrega un destino para el dispositivo Sidewalk
},
"Action": "sts:AssumeRole"
}
]
}
Por favor, puede utilizar los siguientes pasos.AWS Lambdafunción en la que base64 decodifica los
datos de la carga útil.
a. Escribe el código para decodificar los datos de la carga útil. Por ejemplo, puede
utilizar el siguiente ejemplo de código Python. Especifique un nombre para el script,
comobase64_decode.py.
Contenido de base64_decode.py
// -----------------------------------------------------------
// ----- Python script to decode incoming binary payload -----
// -----------------------------------------------------------
import json
import base64
message = json.dumps(event)
print (message)
payload_data = base64.b64decode(event["PayloadData"])
print(payload_data)
print(int(payload_data,16))
b. Cree un paquete de despliegue como un archivo zip que contenga el archivo Python y
asígnele el nombrebase64_decode.zip. Puede elegirCreateFunctionAPI o elcreate-
functioncomando de la CLI para crear una función de Lambda para el código de
ejemplo,base64_decode.py.
c.
aws lambda create-function --function-name my-function \
--zip-file fileb://base64_decode.zip --handler index.handler \
--runtime python3.9 --role arn:aws:iam::123456789012:role/lambda-ex
Debería ver los siguientes datos de salida. Utilizará el valor del nombre de recurso de Amazon
(ARN) de la salida,FunctionArn, al crear la regla temática.
{
"FunctionName": "my-function",
"FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
"Runtime": "python3.9",
"Role": "arn:aws:iam::123456789012:role/lambda-ex",
"Handler": "index.handler",
"CodeSha256": "FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff",
...
}
d. Para obtener los registros de una invocación desde la línea de comandos, utilice la--log-
typeopción con lainvokecomando. La respuesta incluye LogResult campo que contiene hasta 4
KB de registros de la invocación, que será codificado en base64.
1419
AWS IoT Core Guía para desarrolladores
Conecta tu dispositivo Sidewalk
Debería utilizar una respuestaStatusCodede 200. Si desea más información sobre la creación y
el uso de funciones de Lambda en laAWS CLI, consulteUso de Lambda conAWS CLI.
3. Crear una regla de tema
Puede utilizar elmyrule.jsonarchivo para especificar más detalles sobre la regla. Por ejemplo, el
siguiente archivo JSON muestra cómo volver a publicar en unAWS IoTtema y envíe un mensaje a una
función Lambda.
{
"sql": "SELECT * ",
"actions": [
{
// You obtained this functionArn when creating the Lambda function using
the
// create-function command.
"lambda": {
"functionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-
function"
}
},
{
// This topic can be used to observe messages exchanged between the device
and
// AWS IoT Core para Amazon Sidewalk after the device is connected.
"republish": {
"roleArn": "arn:aws:iam::123456789012:role/service-
role/SidewalkRepublishRole",
"topic": "project/sensor/observed"
}
}
],
}
1420
AWS IoT Core Guía para desarrolladores
Conecta tu dispositivo Sidewalk
Note
{
MessageId: "6011dd36-0043d6eb-0072-0008"
}
Note
Si especificó un nombre de tema al crear su destino, puede suscribirse al tema para supervisar los
mensajes de enlace ascendente desde su dispositivo terminal. Puede elegirCliente de pruebas MQTTen
elPruebapágina delAWS IoTconsola, puede utilizar el nombre del tema (por ejemplo,project/sensor/
observed) y, a continuación, elegirSuscríbase.
En el siguiente ejemplo, se muestra el formato de los mensajes de enlace superior que se envían desde
los dispositivos de Sidewalk aAWS IoT. ElWirelessMetadatacontiene metadatos sobre la solicitud de
mensaje.
{
"MessageId": "6011dd36-0043d6eb-0072-0008",
"PayloadData": "ZjRlNjY1ZWNlNw==",
"WirelessDeviceId": "wireless_device_id",
"WirelessMetadata": {
"Sidewalk": {
1421
AWS IoT Core Guía para desarrolladores
Dispositivos de aprovisionamiento masivo
con AWS IoT Core para Amazon Sidewalk
"CmdExStatus": "Cmd",
"SidewalkId": "device_id",
"Seq": 0,
"MessageType": "messageType"
}
}
}
La siguiente tabla muestra una definición de los distintos parámetros de los metadatos del enlace superior.
Eldevice-ides la ID del dispositivo inalámbrico, por ejemploABCDEF1234y elmessageTypees el tipo de
mensaje de enlace ascendente que se recibe del dispositivo.
En este tema se muestran algunos conceptos clave del aprovisionamiento masivo y su funcionamiento.
También muestra los pasos que se deben realizar para poder importar los dispositivos Sidewalk. AWS
IoT Core para Amazon Sidewalk
• Creación de perfiles de dispositivos con soporte de fábrica (p. 1426)
En este tema se explica cómo crear un perfil de dispositivo y obtener soporte de fábrica para él. También
aprenderá a recuperar la clave YubiHSM y enviarla al fabricante para obtener el registro de control una
vez fabricados los dispositivos.
• Aprovisionamiento de dispositivos Sidewalk mediante tareas de importación (p. 1429)
1422
AWS IoT Core Guía para desarrolladores
Flujo de trabajo de aprovisionamiento
masivo de Amazon Sidewalk
En este tema se muestra cómo aprovisionar de forma masiva los dispositivos Sidewalk mediante la
creación y el uso de tareas de importación. También aprenderás a actualizar o eliminar las tareas de
importación y a ver el estado de la tarea de importación y los dispositivos de la tarea.
Temas
• Flujo de trabajo de aprovisionamiento masivo de Amazon Sidewalk (p. 1423)
• Creación de perfiles de dispositivos con soporte de fábrica (p. 1426)
• Aprovisionamiento de dispositivos Sidewalk mediante tareas de importación (p. 1429)
Clave YubiHSM
Amazon crea uno o más HSM (módulos de seguridad de hardware) para cada uno de sus productos de
Sidewalk. Cada HSM tiene un número de serie único, denominado clave YubiHSM, que está impreso en el
módulo de hardware. Esta clave se puede comprar en la página web de Yubico.
La clave es exclusiva de cada HSM y está vinculada a cada perfil de dispositivo con AWS IoT Core para
Amazon Sidewalk el que cree. Para obtener la clave YubiHSM, póngase en contacto con el equipo de
Amazon Sidewalk. Si envía la clave YubiHSM al fabricante, después de que los dispositivos Sidewalk se
hayan fabricado en fábrica, AWS IoT Core para Amazon Sidewalk recibirá un archivo de registro de control
con los números de serie de los dispositivos. A continuación, compara esta información con el archivo CSV
de entrada para incorporar los dispositivos. AWS IoT
A continuación se muestra un archivo JSON de ejemplo que contiene los certificados del dispositivo y las
claves privadas. Para obtener más información, consulte Obtenga los archivos JSON del dispositivo para el
aprovisionamiento (p. 1412).
1423
AWS IoT Core Guía para desarrolladores
Flujo de trabajo de aprovisionamiento
masivo de Amazon Sidewalk
{
"p256R1": "grg8izXoVvQ86cPVm0GMyWuZYHEBbbH ... DANKkOKoNT3bUGz+/f/pyTE+xMRdIUBZ1Bw==",
"eD25519": "grg8izXoVvQ86cPVm0GMyWuZYHEBbbHD ... UiZmntHiUr1GfkTOFMYqRB+Aw==",
"metadata": {
"devicetypeid": "fe98",
...
"devicePrivKeyP256R1":
"3e704bf8d319b3a475179f1d68c60737b28c708f845d0198f2d00d00c88ee018",
"devicePrivKeyEd25519":
"17dacb3a46ad9a42d5c520ca5f47f0167f59ce54d740aa13918465faf533b8d0"
},
"applicationServerPublicKey":
"5ce29b89c2e3ce6183b41e75fe54e45f61b8bb320efbdd2abd7aefa5957a316b"
}
La clave de certificación del dispositivo (DAK) es una clave privada que se obtiene al crear el perfil del
dispositivo. Corresponde al certificado de producto, que es un certificado único que se emite para cada
producto de Sidewalk. Cuando contactes con el equipo de Amazon Sidewalk, recibirás la cadena de
certificados de Sidewalk, la clave YubiHSM y un HSM aprovisionado con la clave de certificación del
dispositivo (DAK) del producto.
El perfil del dispositivo también se actualiza con la nueva clave de certificación del dispositivo (DAK) y con
el soporte de fábrica activado. La información de metadatos del DAK del perfil del dispositivo proporciona
detalles como el nombre del DAK, el ID del certificado, el ApId (ID del producto anunciado), si el soporte de
fábrica está habilitado y el número máximo de firmas que el DAK puede firmar.
Para obtenerloApId, después de recuperar la información sobre el perfil del dispositivo que creó, póngase
en contacto con el equipo de soporte de Amazon Sidewalk. Puede obtener la información del perfil del
dispositivo desde la AWS IoT consola, mediante la operación de la GetDeviceProfileAPI o el comando
get-device-profileCLI.
1424
AWS IoT Core Guía para desarrolladores
Flujo de trabajo de aprovisionamiento
masivo de Amazon Sidewalk
El siguiente procedimiento ilustra los diferentes pasos del proceso de aprovisionamiento masivo.
Antes de llevar el dispositivo final a la fábrica, cree primero un perfil de dispositivo. Puede utilizar
este perfil para aprovisionar dispositivos individuales tal y como se describe enAñada el perfil de su
dispositivo y el dispositivo final de Sidewalk (p. 1410).
2. Solicita soporte de fábrica para tu perfil
Cuando esté listo para llevar su dispositivo final a la fábrica, solicite al equipo de Amazon Sidewalk la
clave YubiHSM y el soporte de fábrica para su perfil de dispositivo.
3. Obtenga el DAK y el perfil compatibles de fábrica
A continuación, el equipo de soporte de Amazon Sidewalk actualizará el perfil del dispositivo con la
clave de certificación del dispositivo (DAK) del producto y el soporte de fábrica. El perfil del dispositivo
se actualizará automáticamente con un identificador de producto (APId) anunciado y una nueva
información sobre el DAK y el certificado, como el ID del certificado. Los dispositivos Sidewalk que
utilizan este perfil cumplen los requisitos para su uso con aprovisionamiento masivo.
4. Enviar la clave YubiHSM al fabricante (CM)
Su dispositivo final ya cumple los requisitos, por lo que puede enviar su clave YubiHSM al fabricante
contratado (CM) para iniciar el proceso de fabricación. Para obtener más información, consulte
Fabricación de dispositivos Amazon Sidewalk en la documentación de Amazon Sidewalk.
5. Fabrique dispositivos y envíe registros de control y números de serie
{
"controlLogs": [
{
"version": "4-0-1",
"device":
1425
AWS IoT Core Guía para desarrolladores
Creación de perfiles de dispositivos con soporte de fábrica
{
"serialNumber": "device1",
"productIdentifier": {
"advertisedProductId": "abCD"
},
"sidewalkData": {
"SidewalkED25519CertificateChain": "...",
"SidewalkP256R1CertificateChain": "..."
}
}
}
]
}
6. Pase la información del registro de control a AWS IoT Core para Amazon Sidewalk
La nube de Amazon Sidewalk recupera la información del registro de control del fabricante y se la
pasa a. AWS IoT Core para Amazon Sidewalk A continuación, se pueden crear los dispositivos junto
con sus números de serie.
7. Compruebe la coincidencia del número de serie e inicie el aprovisionamiento masivo
Al utilizar la AWS IoT consola o la operación de la AWS IoT Core para Amazon Sidewalk
APIStartWirelessDeviceImportTask, AWS IoT Core para Amazon Sidewalk compara el número
de serie de fabricación de Sidewalk (SMSN) de cada dispositivo obtenido de Amazon Sidewalk con
los números de serie correspondientes de su archivo CSV. Si esta información coincide, se inicia el
proceso de aprovisionamiento masivo y se crean los dispositivos a los que se van a AWS IoT Core
para Amazon Sidewalk importar.
Los pasos siguientes muestran cómo crear un perfil de dispositivo compatible de fábrica.
Primero cree un perfil de dispositivo. Al crear un perfil, especifique un nombre y etiquetas opcionales
como pares nombre-valor. Para obtener más información sobre los parámetros necesarios y sobre la
creación y el uso de perfiles, consulte¿Cómo crear y añadir tu dispositivo (p. 1409).
2. Obtenga soporte de fábrica para el perfil
A continuación, obtenga soporte de fábrica para su perfil de dispositivo, de modo que los dispositivos
que utilizan este perfil puedan cumplir con los requisitos. Para calificar, crea un ticket con el equipo
de Amazon Sidewalk. Cuando el equipo lo confirme, recibirás un ApId (identificador de producto
anunciado) y tu perfil se actualizará con un DAK emitido de fábrica. Los dispositivos terminales para
aceras que utilicen este perfil cumplirán los requisitos.
Puede crear un perfil de dispositivo mediante la AWS IoT consola, las operaciones AWS IoT Core para
Amazon Sidewalk de la API o elAWS CLI.
Temas
1426
AWS IoT Core Guía para desarrolladores
Creación de perfiles de dispositivos con soporte de fábrica
Para crear un perfil, especifique los siguientes campos y, a continuación, elija Enviar.
• Nombre
Introduce etiquetas opcionales como pares de nombre-valor para ayudarte a identificar tu perfil con
mayor facilidad. Las etiquetas también facilitan el seguimiento de los cargos de facturación.
Verás el perfil que creaste en el centro de perfiles. Elige el perfil para ver sus detalles. Verás información
sobre:
• El nombre del perfil del dispositivo y el identificador único, así como cualquier etiqueta opcional que haya
especificado como pares de nombre-valor.
• La clave pública del servidor de aplicaciones y el ID del tipo de dispositivo del perfil.
• El estado de calificación, que indica que está utilizando un perfil de dispositivo que no es compatible de
fábrica. Para calificar tu perfil de dispositivo para que sea compatible de fábrica, ponte en contacto con el
servicio de asistencia de Amazon Sidewalk.
• La información de la clave de certificación del dispositivo (DAK). Una vez que el perfil de su dispositivo
esté calificado, se emitirá un nuevo DAK y su perfil se actualizará automáticamente con la nueva
información del DAK.
1427
AWS IoT Core Guía para desarrolladores
Creación de perfiles de dispositivos con soporte de fábrica
La ejecución de este comando devuelve los detalles del perfil, que incluyen el nombre del recurso de
Amazon (ARN) y el ID del perfil.
{
"DeviceProfileArn": "arn:aws:iotwireless:us-east-1:123456789012:DeviceProfile/12345678-
a1b2-3c45-67d8-e90fa1b2c34d",
"DeviceProfileId": "12345678-a1b2-3c45-67d8-e90fa1b2c34d"
}
La ejecución de este comando devuelve los parámetros del perfil del dispositivo, la clave pública
del servidor de aplicaciones DeviceTypeIdApId, el estado de calificación y la DAKCertificate
información.
En este ejemplo, el estado de calificación y la información de DAK indican que el perfil del dispositivo no
cumple los requisitos. Para calificar tu perfil, ponte en contacto con el servicio de asistencia de Amazon
Sidewalk y se le emitirá un nuevo DAK sin límite de dispositivos.
{
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:DeviceProfile/12345678-
a1b2-3c45-67d8-e90fa1b2c34d",
"Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d",
"Name": "Sidewalk_profile",
"LoRaWAN": null,
"Sidewalk":
{
"ApplicationServerPublicKey":
"a123b45c6d78e9f012a34cd5e6a7890b12c3d45e6f78a1b234c56d7e890a1234",
"DAKCertificateMetadata": [
{
"DeviceTypeId": "fe98",
"CertificateId": "43564A6D2D50524F544F54595045",
"FactorySupport": false,
"MaxAllowedSignature": 1000
}
],
"QualificationStatus": false
}
}
Una vez que el equipo de soporte de Amazon Sidewalk confirme esta información, recibirás el APID y un
DAK compatible de fábrica, como se muestra en el siguiente ejemplo.
Note
1428
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de dispositivos
Sidewalk mediante tareas de importación
{
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:DeviceProfile/12345678-
a1b2-3c45-67d8-e90fa1b2c34d",
"Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d",
"Name": "Sidewalk_profile",
"LoRaWAN": null,
"Sidewalk":
{
"ApplicationServerPublicKey":
"a123b45c6d78e9f012a34cd5e6a7890b12c3d45e6f78a1b234c56d7e890a1234",
"DAKCertificateMetadata": [
{
"ApId": "GZBd",
"CertificateId": "43564A6D2D50524F544F54595045",
"FactorySupport": true,
"MaxAllowedSignature": -1
}
],
"QualificationStatus": true
}
}
Pasos siguientes
Ahora que ha creado un perfil de dispositivo con un DAK compatible de fábrica, proporcione al fabricante
la clave YubiHSM que ha obtenido del equipo. A continuación, los dispositivos se fabricarán en fábrica y
se enviará la información del registro de control a Amazon Sidewalk, que contiene los números de serie
(SMSN) de los dispositivos. Para obtener más información sobre este flujo de trabajo, consulte Fabricación
de dispositivos Amazon Sidewalk en la documentación de Amazon Sidewalk.
A continuación, puede aprovisionar de forma masiva sus dispositivos Sidewalk proporcionando AWS IoT
Core para Amazon Sidewalk los números de serie de los dispositivos que se van a incorporar. Cuando
AWS IoT Core para Amazon Sidewalk recibe el registro de control, compara los números de serie del
registro de control con los números de serie que usted proporcionó. Si los números de serie coinciden,
la tarea de importación comenzará a incorporar sus dispositivos aAWS IoT Core para Amazon Sidewalk.
Para obtener más información, consulte Aprovisionamiento de dispositivos Sidewalk mediante tareas de
importación (p. 1429).
Temas
• Cómo funciona el aprovisionamiento masivo de Sidewalk (p. 1430)
• Consideraciones clave para el aprovisionamiento masivo de Sidewalk (p. 1430)
• Formato de archivo CSV (p. 1431)
• Cómo utilizar el aprovisionamiento masivo de Sidewalk (p. 1431)
• Suministro de dispositivos Sidewalk a granel (p. 1432)
• Ver el estado de incorporación de tareas y dispositivos de importación (p. 1436)
1429
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de dispositivos
Sidewalk mediante tareas de importación
Para aprovisionar dispositivos Sidewalk de forma masiva, debe crear una tarea de importación y
proporcionar el número de serie de fabricación de Sidewalk (SMSN) de los dispositivos a los que se
van a incorporar. AWS IoT Core para Amazon Sidewalk Recibió el número de serie de fabricación de
Sidewalk (SMSN) de los dispositivos como archivo CSV en su correo electrónico después de que el
fabricante subiera los registros de control a Amazon Sidewalk. Para obtener más información sobre
el flujo de trabajo y sobre cómo obtener el registro de control, consulte Fabricación de dispositivos
Amazon Sidewalk en la documentación de Amazon Sidewalk.
2. Ejecución del proceso de importación en segundo plano
Cuando AWS IoT Core para Amazon Sidewalk recibe la solicitud de tarea de importación, comienza a
configurar las cosas e inicia un proceso en segundo plano que sondea el sistema con frecuencia. Una
vez que el proceso en segundo plano recibe la instrucción de la tarea de importación, comienza a leer
el archivo CSV. AWS IoT Core para Amazon Sidewalkcomprueba simultáneamente si los registros de
control se han recibido de Amazon Sidewalk.
3. Creación de registros de dispositivos inalámbricos
Cuando se recibe el registro de control de Amazon Sidewalk, AWS IoT Core para Amazon Sidewalk
comprueba si los números de serie del registro de control coinciden con los valores de SMSN del
archivo CSV. Si los números de serie coinciden, AWS IoT Core para Amazon Sidewalk comenzará a
crear registros de dispositivos inalámbricos para los dispositivos Sidewalk que correspondan a estos
números de serie. Una vez que se hayan incorporado todos los dispositivos, la tarea de importación se
marca como Finalizada.
• Debe realizar el aprovisionamiento masivo mediante la AWS IoT consola o las operaciones de la AWS
IoT Core para Amazon Sidewalk API en el mismo Cuenta de AWS lugar en el que creó el perfil del
dispositivo.
• Antes de aprovisionar de forma masiva los dispositivos Sidewalk, el perfil del dispositivo ya
debe contener información de DAK que indique la compatibilidad de fábrica. De lo contrario,
el aprovisionamiento masivo mediante la AWS IoT consola o las operaciones de la API de
aprovisionamiento masivo pueden fallar.
• Tras iniciar una tarea de importación, procesar el archivo CSV, importar los dispositivos inalámbricos e
incorporarlos puede tardar al menos 10 minutos o másAWS IoT Core para Amazon Sidewalk.
• La tarea de importación de dispositivos inalámbricos se ejecutará durante 90 días, una vez iniciada.
Durante este tiempo, comprueba si los registros de control se han recibido de Amazon Sidewalk.
Si no recibe el registro de control de Amazon Sidewalk antes de 90 días, la tarea se marcará como
completada con un mensaje que indicará que ha caducado cuando vea los detalles de la tarea. El
estado de incorporación de los dispositivos de la tarea de importación que estaban esperando el registro
de control se marcará como Fallo.
• Cuando intentas actualizar una tarea de importación que ya has creado, solo puedes añadir dispositivos
adicionales a la tarea. Puede añadir nuevos dispositivos en cualquier momento después de crear
una tarea de importación y antes de que la tarea haya comenzado en los dispositivos que ya se
1430
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de dispositivos
Sidewalk mediante tareas de importación
• La fila 1 debe usar la palabra clavesmsn, que indica que el archivo CSV que se está importando
contiene el SMSN de los dispositivos que se van a importar.
• Las filas 2 y siguientes deben contener el SMSN de los dispositivos que se van a incorporar. El SMSN
del dispositivo debe estar en formato de 64 caracteres hexadecimales.
smsn
1c1a10b0ac0a200c012bbac2cbb1b21cb12c0ca2ac1c1bb22caa01c1b0b01122
b122c2b1121baca2221001ac1b22012aac11112c11c2a100c1c2b012a1100c10
02b222c110b0a210b0a0c2c112cccac21c1c0b0aa1221ab1022a2cc11b1b1122
c2c021ca1c111ccab1221c0021c1c2aaa0aa1a2a01abc10cbaacca2a0121022a
0cb22c01bbc2ca2c0b11001121acb2abb0bb0121c2ba101c012cc2b20c011ac0
Para aprovisionar sus dispositivos Sidewalk, debe proporcionar los números de serie de los
dispositivos que se van a incorporar. Puede aprovisionar sus dispositivos mediante uno de los
métodos siguientes.
Para cada tarea de importación que cree, puede recuperar información sobre el estado de
incorporación de la tarea y el estado de incorporación de los dispositivos añadidos a la tarea. También
puedes ver información de estado adicional, como el motivo por el que no se pudo incorporar una
tarea o un dispositivo. Para obtener más información, consulte
1431
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de dispositivos
Sidewalk mediante tareas de importación
• Puede actualizar una tarea de importación y añadir dispositivos adicionales a la tarea en cualquier
momento antes de que la tarea se inicie en los dispositivos que ya se han agregado. AWS IoT Core
para Amazon Sidewalkasume la misma función de IAM que utilizó al crear la tarea de importación.
Al crear la tarea, especifique el nuevo archivo CSV que contiene los números de serie de los
dispositivos que desea añadir a la tarea.
Note
Cuando actualizas una tarea de importación existente, solo puedes añadir dispositivos a
la tarea. AWS IoT Core para Amazon Sidewalkrealiza una operación de unión entre los
dispositivos que ya están en la tarea de importación y los dispositivos que está intentando
añadir a la tarea. Si el nuevo archivo contiene números de serie de dispositivos que ya
existen en la tarea de importación, estos números de serie se ignorarán.
• Puede eliminar una tarea de importación que ya se haya completado correctamente o una tarea de
importación que no se haya actualizado en casos como cuando la información del rol de IAM sea
incorrecta o cuando no haya un archivo de bucket de S3 disponible al crear o actualizar una tarea.
Temas
• Suministro de dispositivos Sidewalk a granel (p. 1432)
• Ver el estado de incorporación de tareas y dispositivos de importación (p. 1436)
1432
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de dispositivos
Sidewalk mediante tareas de importación
Especifica cómo quieres importar los dispositivos a los que se van a incorporar de forma masiva. AWS
IoT Core para Amazon Sidewalk
Según el método que haya elegido para incorporar los dispositivos, añada la información del
dispositivo y sus números de serie.
i. Un nombre para cada dispositivo que se va a incorporar. El nombre debe ser único en su
Cuenta de AWS manoRegión de AWS.
ii. Su número de serie de fabricación en Sidewalk (SMSN) en el campo Introduzca SMSN.
iii. Un destino que describe la regla de IoT para enrutar los mensajes del dispositivo a
otroServicios de AWS.
b. Si eliges Usar un bucket S3:
1433
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de dispositivos
Sidewalk mediante tareas de importación
Para crear un rol nuevo, puede proporcionar un nombre de rol o dejarlo en blanco para
generar un nombre aleatorio automáticamente.
iii. Proporcione un destino que describa la regla de IoT para enrutar los mensajes del dispositivo
a otrosServicios de AWS.
3. Iniciar tarea de importación
Proporcione las etiquetas opcionales como pares de nombre-valor y elija Enviar para iniciar la tarea de
importación de dispositivos inalámbricos.
Para cargar dispositivos de forma masiva proporcionando el archivo CSV en un bucket de S3, utilice la
operación de StartWirelessDeviceImportTaskAPI o el start-wireless-device-import-
taskAWS CLIcomando. Al crear la tarea, especifique la ruta al archivo CSV en el bucket de Amazon S3
y el rol de IAM que otorga AWS IoT Core para Amazon Sidewalk los permisos para acceder al archivo
CSV.
Una vez que la tarea comience a ejecutarse, AWS IoT Core para Amazon Sidewalk empezará a leer el
archivo CSV y comparará los números de serie (SMSN) del archivo con la información correspondiente
del registro de control recibido de Amazon Sidewalk. Cuando los números de serie coincidan, comenzará
a crear registros de dispositivos inalámbricos correspondientes a estos números de serie.
Contenido de task.json
{
"DestinationName": "Sidewalk_Destination",
"Sidewalk": {
"DeviceCreationFile": "s3://import_task_bucket/import_file1",
"Role": "arn:aws:iam::123456789012:role/service-role/ACF1zBEI"
}
}
{
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:ImportTask/a1b234c5-67ef-21a2-
a1b2-3cd4e5f6789a"
"Id": "a1b234c5-67ef-21a2-a1b2-3cd4e5f6789a"
1434
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de dispositivos
Sidewalk mediante tareas de importación
Cuando el número de serie coincida con la información correspondiente del registro de control recibido
de Amazon Sidewalk, la tarea se ejecutará y creará el registro del dispositivo inalámbrico.
{
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:ImportTask/e2a5995e-743b-41f2-
a1e4-3ca6a5c5249f"
"Id": "e2a5995e-743b-41f2-a1e4-3ca6a5c5249f"
}
Las acciones de eliminación son permanentes y no se pueden deshacer. Al eliminar una tarea de
importación que ya se haya completado correctamente, no se eliminarán los dispositivos finales
que ya se hayan incorporado mediante la tarea.
En los siguientes pasos se explica cómo actualizar o eliminar las tareas de importación mediante la AWS
IoT consola.
1435
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de dispositivos
Sidewalk mediante tareas de importación
Utilice las siguientes operaciones de API AWS IoT inalámbrica o comandos de CLI para actualizar o
eliminar la tarea de importación.
• UpdateWirelessDeviceImportTaskAPI o update-wireless-device-import-taskCLI
Esta operación de API añade el contenido de un archivo CSV de Amazon S3 a una tarea de
importación existente. Solo puede añadir números de serie de dispositivos que no estaban incluidos
anteriormente en la tarea. Para obtener más información, consulte Añadir dispositivos a la tarea de
importación (p. 1444).
• DeleteWirelessDeviceImportTaskAPI o delete-wireless-device-import-taskCLI
Esta operación de API elimina la tarea de importación que se marcó para su eliminación mediante
el ID de la tarea de importación. Para obtener más información, consulte Elimine las tareas de
importación de suCuenta de AWS (p. 1445).
Cuando se acaba de crear una tarea de importación, el recuento pendiente mostrará un valor que
corresponde a la cantidad de dispositivos que se agregaron. Una vez que se inicie la tarea y se lea el
archivo CSV para crear los registros de los dispositivos inalámbricos, el recuento de pendientes disminuirá
y el recuento de éxitos aumentará a medida que los dispositivos se incorporen correctamente. Si algún
dispositivo no se incorpora, el recuento de errores aumentará.
En el centro de dispositivos Sidewalk de la AWS IoT consola, puedes ver las tareas de importación
que has creado y un recuento del resumen de la información sobre el estado de incorporación de tus
dispositivos. Si ves los detalles de alguna de las tareas de importación que has creado, puedes ver
información adicional sobre el estado de incorporación del dispositivo.
• Mediante la API AWS IoT inalámbrica o AWS CLI
Para ver el estado de incorporación del dispositivo, utilice cualquiera de las siguientes operaciones de
la API AWS IoT inalámbrica o el AWS CLI comando correspondiente. Para obtener más información y
ejemplos que muestren cómo utilizarlos, consulteAWS IoT Core para Amazon SidewalkOperaciones de
API para aprovisionamiento masivo (p. 1443).
• ListWirelessDeviceImportTasksAPI o list-wireless-device-import-tasksCLI
Esta operación de API devuelve información sobre todas las tareas de importación que se han
agregado a tu cuenta de AWS IoT Wireless y su estado. También muestra un recuento del resumen
del estado de incorporación de los dispositivos Sidewalk en estas tareas.
1436
AWS IoT Core Guía para desarrolladores
Aprovisionamiento de dispositivos
Sidewalk mediante tareas de importación
• ListDevicesForWirelessDeviceImportTaskAPI o list-devices-for-wireless-device-
import-taskCLI
Esta operación de API devuelve información sobre la tarea de importación especificada y su estado,
así como información sobre todos los dispositivos Sidewalk que se han agregado a la tarea de
importación y su información sobre su estado de incorporación.
• GetWirelessDeviceImportTaskAPI o get-wireless-device-import-taskCLI
Esta operación de la API devuelve información sobre la tarea de importación especificada y su estado,
así como un recuento del resumen del estado de incorporación de los dispositivos Sidewalk en esa
tarea.
• INICIALIZACIÓN
AWS IoT Core para Amazon Sidewalkha recibido la solicitud de tarea de importación de dispositivos
inalámbricos y está configurando la tarea.
• INICIALIZADO
AWS IoT Core para Amazon Sidewalkha completado la configuración de la tarea de importación y está
esperando a que llegue el registro de control para poder importar los dispositivos con sus números de
serie (SMSN) y seguir procesando la tarea.
• PENDING
La tarea de importación está esperando en la cola para ser procesada. AWS IoT Core para Amazon
Sidewalkestá evaluando otras tareas que se encuentran en la cola de procesamiento.
• COMPLETAR
Falló la tarea de importación o la tarea del dispositivo. Puede usar el StatusReason parámetro para
identificar por qué falló la tarea de importación, como una excepción de validación.
• DELETING
• INICIALIZADO
1437
AWS IoT Core Guía para desarrolladores
Operaciones de la API de AWS
IoT Core para Amazon Sidewalk
AWS IoT Core para Amazon Sidewalkha completado la configuración de la tarea de importación y está
esperando a que llegue el registro de control para poder importar los dispositivos con sus números de
serie (SMSN) y seguir procesando la tarea.
• PENDING
La tarea de importación está esperando en la cola para procesarse y empezar a incorporar los
dispositivos a la tarea. AWS IoT Core para Amazon Sidewalkestá evaluando otras tareas que se
encuentran en la cola de procesamiento.
• INCORPORADO
Falló la tarea de importación o la tarea del dispositivo y el dispositivo Sidewalk no pudo incorporarse a la
tarea. Puede utilizar el OnboardingStatusReason parámetro para obtener detalles adicionales sobre
el motivo del error de incorporación del dispositivo.
Las siguientes secciones contienen información adicional sobre estas operaciones de la API.
Temas
• AWS IoT Core para Amazon SidewalkOperaciones de API para perfiles de dispositivos (p. 1438)
• AWS IoT Core para Amazon SidewalkOperaciones de API para dispositivos finales de
Sidewalk (p. 1439)
• AWS IoT Core para Amazon SidewalkOperaciones de API para destinos para dispositivos finales de
Sidewalk (p. 1441)
• AWS IoT Core para Amazon SidewalkOperaciones de API para aprovisionamiento masivo (p. 1443)
• CreateDeviceProfileAPI o create-device-profileCLI
• GetDeviceProfileAPI o get-device-profileCLI
• ListDeviceProfilesAPI o list-device-profilesCLI
• DeleteDeviceProfileAPI o delete-device-profileCLI
En las secciones siguientes se muestra cómo enumerar y eliminar perfiles. Para obtener información
sobre la creación y recuperación de perfiles de dispositivos, consultePaso 1: crear un perfil de
dispositivo (p. 1411).
1438
AWS IoT Core Guía para desarrolladores
Operaciones de API para dispositivos finales de Sidewalk
Para filtrar la lista para mostrar solo los perfiles de dispositivos de Sidewalk,Type configúrela enSidewalk
cuando ejecute la API. A continuación se muestra un ejemplo de comando CLI:
La ejecución de este comando devuelve una lista de los perfiles de dispositivos que ha agregado, incluidos
su identificador de perfil y el nombre de recurso de Amazon (ARN). Para obtener detalles adicionales sobre
un perfil específico, usa laGetDeviceProfile API.
{
"DeviceProfileList": [
{
"Name": "SidewalkDeviceProfile1",
"Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d",
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:DeviceProfile/12345678-
a1b2-3c45-67d8-e90fa1b2c34d"
},
{
"Name": "SidewalkDeviceProfile2",
"Id": "a1b2c3d4-5678-90ab-cdef-12ab345c67de",
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:DeviceProfile/
a1b2c3d4-5678-90ab-cdef-12ab345c67de"
}
]
}
Este comando no produce ningún resultado. Puedes usar laGetDeviceProfile API o la operación de
laListDeviceProfiles API para comprobar que el perfil se ha eliminado de tu cuenta.
• CreateWirelessDeviceAPI o create-wireless-deviceCLI
• GetWirelessDeviceAPI o get-wireless-deviceCLI
• ListWirelessDevicesAPI o list-wireless-devicesCLI
1439
AWS IoT Core Guía para desarrolladores
Operaciones de API para dispositivos finales de Sidewalk
• DeleteWirelessDeviceAPI o delete-wireless-deviceCLI
• UpdateWirelessDeviceAPI o update-wireless-deviceCLI
• AssociateWirelessDeviceWithThingAPI o associate-wireless-device-with-thingCLI
• DisassociateWirelessDeviceFromThingAPI o disassociate-wireless-device-from-
thingCLI
En las secciones siguientes se muestra cómo enumerar y eliminar dispositivos. Para obtener información
sobre la creación de dispositivos finales de Sidewalk y la recuperación de la información de los
dispositivos, consultePaso 2: puede utilizar su dispositivo Sidewalk (p. 1411)
Las funcionesAWS IoT incluidas facilitan la búsqueda y la administración de tus dispositivos. Asociar un
elemento al dispositivo permite que el dispositivo acceda a otrasAWS IoT Core funciones. Para obtener
más información sobre cómo usar esta API, consulte la documentación de la API.
A continuación se muestra un ejemplo de cómo se ejecuta este comando. La ejecución de este comando
no produce ningún resultado.
La ejecución de este comando devuelve una lista de los dispositivos que ha agregado, incluido su
identificador de perfil y el nombre del recurso de Amazon (ARN). Para recuperar detalles adicionales sobre
un dispositivo específico, utilice la operación GetWirelessDevicede API.
{
"WirelessDeviceList": [
{
"Name": "mySidewalkDevice",
"DestinationName": "SidewalkDestination",
"Id": "1ffd32c8-8130-4194-96df-622f072a315f",
"Type": "Sidewalk",
1440
AWS IoT Core Guía para desarrolladores
Operaciones de API para destinos
para dispositivos Sidewalk
"Sidewalk": {
"SidewalkId": "1234567890123456"
},
"Arn": "arn:aws:iotwireless:us-
east-1:123456789012:WirelessDevice/1ffd32c8-8130-4194-96df-622f072a315f"
}
]
}
Este comando no produce ningún resultado. Puedes usar laGetWirelessDevice API o la operación de
laListWirelessDevices API para comprobar que el dispositivo se ha eliminado de tu cuenta.
• CreateDestinationAPI o create-destinationCLI
• GetDestinationAPI o get-destinationCLI
• UpdateDestinationAPI o update-destinationCLI
• ListDestinationsAPI o list-destinationsCLI
• DeleteDestinationAPI o delete-destinationCLI
En las secciones siguientes se muestra cómo obtener, enumerar, actualizar y eliminar destinos.
Para obtener información sobre cómo crear destinos, consulteAñade un destino para tu dispositivo
Sidewalk (p. 1415).
{
"Arn": "arn:aws:iotwireless:us-east-1:123456789012:Destination/IoTWirelessDestination",
1441
AWS IoT Core Guía para desarrolladores
Operaciones de API para destinos
para dispositivos Sidewalk
"Name": "SidewalkDestination",
"Expression": "IoTWirelessRule",
"ExpressionType": "RuleName",
"RoleArn": "arn:aws:iam::123456789012:role/IoTWirelessDestinationRole"
}
La ejecución de este comando devuelve una lista de destinos que ha agregado, incluido su nombre
de recurso de Amazon (ARN). Para obtener detalles adicionales sobre un destino específico, usa
laGetDestination API.
{
"DestinationList": [
{
"Arn": "arn:aws:iotwireless:us-
east-1:123456789012:Destination/IoTWirelessDestination",
"Name": "IoTWirelessDestination",
"Expression": "IoTWirelessRule",
"Description": "Destination for messages processed using IoTWirelessRule",
"RoleArn": "arn:aws:iam::123456789012:role/IoTWirelessDestinationRole"
},
{
"Arn": "arn:aws:iotwireless:us-
east-1:123456789012:Destination/IoTWirelessDestination2",
"Name": "IoTWirelessDestination2",
"Expression": "IoTWirelessRule2",
"RoleArn": "arn:aws:iam::123456789012:role/IoTWirelessDestinationRole"
}
]
}
1442
AWS IoT Core Guía para desarrolladores
Operaciones de API para aprovisionamiento masivo
Este comando no produce ningún resultado. Puedes usar laGetDestination API o la operación de
laListDestinations API para comprobar que el destino se ha eliminado de tu cuenta.
• StartWirelessDeviceImportTaskAPI o start-wireless-device-import-taskCLI
• StartSingleWirelessDeviceImportTaskAPI o start-single-wireless-device-import-
taskCLI
• ListWirelessDeviceImportTasksAPI o list-wireless-device-import-tasksCLI
• ListDevicesForWirelessDeviceImportTaskAPI o list-devices-for-wireless-device-
import-taskCLI
• GetWirelessDeviceImportTaskAPI o get-wireless-device-import-taskCLI
• UpdateWirelessDeviceImportTaskAPI o update-wireless-device-import-taskCLI
• DeleteWirelessDeviceImportTaskAPI o delete-wireless-device-import-taskCLI
En las secciones siguientes se muestra cómo obtener, enumerar, actualizar y eliminar tareas de
importación. Para obtener información sobre cómo crear tareas de importación, consulteAWS IoT Core
para Amazon SidewalkOperaciones de API para aprovisionamiento masivo (p. 1443).
{
"DestinationName": "SidewalkDestination",
"ImportedWirelessDeviceList": [
{
"Sidewalk": {
"OnboardingStatus": "ONBOARDED",
"LastUpdateTime": "2023-02021T06:11:09.151Z",
"SidewalkManufacturingSn":
"82B83C8B35E856F43CE9C3D59B418CC96B996071016DB1C3BE5901F0F3071A4A"
},
"Sidewalk": {
1443
AWS IoT Core Guía para desarrolladores
Operaciones de API para aprovisionamiento masivo
"OnboardingStatus": "PENDING",
"LastUpdateTime": "2023-02021T06:22:12.061Z",
"SidewalkManufacturingSn":
"12345ABCDE6789FABDESBDEF123456789012345FEABC0123679AFEBC01234EF"
},
}
]
}
{
"NumberOfFailedImportedDevices": 2,
"NumberOfOnboardedImportedDevices": 4,
"NumberOfPendingImportedDevices": 1
}
Para añadir dispositivos a la tarea de importación, como parte de la solicitud de API, especifique un nuevo
archivo CSV en un bucket de Amazon S3 que contenga los números de serie de los dispositivos que se
van a añadir. La solicitud solo se aceptará si el proceso de incorporación aún no se ha iniciado para los
dispositivos que se encuentran actualmente en la tarea de importación. Si el proceso de incorporación ya
ha comenzado, se producirá un error en la solicitud deUpdateWirelessDeviceImportTask API.
1444
AWS IoT Core Guía para desarrolladores
Operaciones de API para aprovisionamiento masivo
La ejecución de este comando devuelve una lista de tareas de importación que ha creado. La lista incluye
sus archivos CSV de Amazon S3 y el rol de IAM que se especificó, el ID de la tarea de importación y la
información resumida del estado de incorporación del dispositivo.
{
"ImportWirelessDeviceTaskList": [
{
"FileForCreateDevices": "s3://import_task_bucket/import_file1",
"ImportTaskId": "e2a5995e-743b-41f2-a1e4-3ca6a5c5249f",
"NumberOfFailedImportedDevices": 1,
"NumberOfOnboardedImportedDevices": 3,
"NumberOfPendingImportedDevices": 2,
"Role": "arn:aws:iam::123456789012:role/service-role/ACF1zBEI",
"TimeStamp": "1012202218:23:55"
},
{
"FileForCreateDevices": "s3://import_task_bucket/import_file2",
"ImportTaskId": "a1b234c5-67ef-21a2-a1b2-3cd4e5f6789a",
"NumberOfFailedImportedDevices": 2,
"NumberOfOnboardedImportedDevices": 4,
"NumberOfPendingImportedDevices": 1,
"Role": "arn:aws:iam::123456789012:role/service-role/CDEFaBC1",
"TimeStamp": "1201202210:12:20"
}
]
}
Si una tarea de importación aún contiene dispositivos que están esperando ser incorporados, la solicitud
deDeleteWirelessDeviceImportTask API solo se procesará después de que todos los dispositivos
de la tarea de importación se hayan incorporado o no se hayan incorporado. Una tarea de importación
caduca a los 90 días y, una vez que la tarea haya caducado, se puede eliminar de tu cuenta. Sin embargo,
los dispositivos que se incorporaron correctamente mediante la tarea de importación no se eliminarán.
1445
AWS IoT Core Guía para desarrolladores
Monitorización y eventos paraAWS
IoT Core para Amazon Sidewalk
Note
Si intentas crear otra tarea de importación que incluya el número de serie de un dispositivo
pendiente de eliminación mediante la solicitud deDeleteWirelessDeviceImportTask API, la
operación deStartWirelessDeviceImportTask API devolverá un error.
Este comando no produce ningún resultado. Después de eliminar la tarea, para comprobar que la tarea de
importación se ha eliminado de su cuenta, puede utilizar la operaciónGetWirelessDeviceImportTask
API o la operación deListWirelessDeviceImportTasks API.
Estos eventos publican notificaciones cuando se produce un cambio en el estado de registro del
dispositivo, por ejemplo, cuando se ha aprovisionado o registrado un dispositivo Sidewalk.
• Eventos de proximidad
Estos eventos publican notificaciones cuando se recibe una baliza desde tu dispositivo Sidewalk. Las
balizas se envían a intervalos regulares cuando el dispositivo Sidewalk se acerca a Amazon Sidewalk.
• Eventos de estado de entrega de mensajes
Estos eventos publican notificaciones sobre el estado de los mensajes que se intercambian entreAWS
IoT Core para Amazon Sidewalky el dispositivo Sidewalk. Por ejemplo, publicará un evento para indicar
cuándo no se pudo entregar un mensaje a pesar de queSendDataToWirelessDeviceLa API muestra
un ID de mensaje.
1446
AWS IoT Core Guía para desarrolladores
Monitorización de dispositivos de acera
"Version":"2012-10-17",
"Statement":[{
"Effect":"Allow",
"Action":[
"iot:Subscribe",
"iot:Receive"
],
"Resource":[
"arn:aws:iotwireless:region:account:/$aws/iotwireless/events/join/*",
"arn:aws:iotwireless:region:account:/$aws/iotwireless/events/connection_status/
*",
"arn:aws:iotwireless:region:account:/$aws/iotwireless/events/
device_registration_state/*",
"arn:aws:iotwireless:region:account:/$aws/iotwireless/events/proximity/*",
"arn:aws:iotwireless:region:account:/$aws/iotwireless/events/
message_delivery_status/*"
]
}]
}
Puede activar los eventos mediante elAWS IoT Core para Amazon SidewalkAPI,AWS CLI, o elAWS
Management Console. Para configurar eventos para todos los dispositivos de Sidewalk, utilice
laUpdateEventConfigurationByResourceTypesAPI oupdate-event-configuration-by-
resource-typesComando CLI.
¿Cuándo usas Amazon CloudWatch, primero configure una función de registro y, a continuación, utilice las
métricas de registro o CloudWatch Información para monitorear sus dispositivos. Cualquier error que se
produzca se registrará y se enviará a su CloudWatch grupo de registro. A continuación, podrá obtener más
información sobre el error y solucionar los problemas para resolverlos.
En los siguientes pasos, se muestra cómo registrar y monitorear sus dispositivos de Sidewalk:
1. Cree una función de registro para registrar sus dispositivos de Sidewalk, como se muestra en el
siguiente ejemplo de política. Para obtener más información, consulteCree una política y una función de
registro paraAWS IoTConexión inalámbrica.
{
"Version": "2012-10-17",
1447
AWS IoT Core Guía para desarrolladores
Monitorización de dispositivos de acera
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "iotwireless.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
2. Para obtener registros menos detallados, por ejemplo, para ver solo la información de errores, configure
el registro en los registros. Para obtener más información, consulteConfigurar el registro paraAWS
IoTRecursos inalámbricos.
3. Supervise sus dispositivos Sidewalk viendo los registros en el CloudWatch Consola de registros y
crea filtros sencillos y visualiza las entradas de registro en los grupos de registros. Para obtener más
información, consulteVer CloudWatch AWS IoTEntradas de registro inalámbricas.
4. Cree expresiones de filtro avanzadas en función de la información de registro que desee obtener y
vaya a CloudWatch Información para filtrar las consultas de registro y obtener información adicional.
Para obtener más información, consulteVer CloudWatch Información para filtrar los registrosAWS
IoTConexión inalámbrica.
1448
AWS IoT Core Guía para desarrolladores
Puede utilizar CloudWatch para recopilar y hacer un seguimiento de métricas, que son las variables que
puede medir en los recursos y aplicaciones. Para obtener más información acerca de los beneficios de
utilizar la supervisión, consulteMonitorización de AWS IoT (p. 458).
Si desea obtener más información de registro en tiempo real de sus dispositivos LoRa WAN, utilice el
analizador de red. Para obtener más información, consulte Monitoree su flota de recursos inalámbricos en
tiempo real mediante el analizador de redes (p. 1372).
Para registrar y hacer un seguimiento de los recursos Wireless, realice los siguientes pasos.
1. Cree una función de registro para registrar susAWS IoT Wireless recursos, tal como se describe enCree
una función y una política de registro paraAWS IoT Wireless (p. 1450).
2. Los mensajes de registro de la consola de CloudWatch registros tienen un nivel de registro
predeterminado deERROR, que es menos detallado y solo contiene información de error. Si desea ver
mensajes más detallados, le recomendamos que utilice primero la CLI para configurar el registro, tal
como se describe enConfigurar el registro deAWS IoT Wireless recursos (p. 1452).
3. A continuación, puede supervisar sus recursos consultando las entradas de registro en la consola de
CloudWatch registros. Para obtener más información, consulte Ver entradas CloudWatch AWS IoT
Wireless de registro (p. 1461).
4. Puede crear expresiones de filtro mediante grupos de registros, pero le recomendamos que primero
cree filtros simples y vea las entradas de registro en los grupos de registro y, a continuación, vaya a
CloudWatch Insights para crear consultas a fin de filtrar las entradas de registro en función del recurso
o el evento que esté supervisando. Para obtener más información, consulte Utilice CloudWatch Insights
para filtrar los registros deAWS IoT Wireless (p. 1466).
En los siguientes temas se muestra cómo configurarAWS IoT Wireless y recopilar métricas CloudWatch.
Además de los dispositivos LoRa WAN, puede utilizar estos temas para configurar el registro de cualquier
dispositivo Sidewalk que haya agregado a su cuenta y supervisarlos. Para obtener información acerca de
cómo agregar estos dispositivos, consulteAWS IoT Core para Amazon Sidewalk (p. 1397).
Temas
• Configuración del registro para AWS IoT Wireless (p. 1450)
• SupervisarAWS IoT Wireless mediante CloudWatch registros (p. 1460)
1449
AWS IoT Core Guía para desarrolladores
Configuración del registro para AWS IoT Wireless
Al considerar cómo configurar elAWS IoT Wireless registro, la configuración de registro predeterminada
determina cómo se registraráAWS IoT la actividad, a menos que especifique lo contrario. Para empezar, es
posible que desee obtener registros detallados con un nivel de registro predeterminado deINFO.
Tras revisar los registros iniciales, puede cambiar el nivel de registro predeterminado aERROR, que es
menos detallado, y establecer un nivel de registro más detallado y específico para los recursos que puedan
necesitar más atención. Los niveles de registro se pueden cambiar cuando lo desee.
En los siguientes temas se muestra cómo configurar el registro deAWS IoT Wireless recursos.
Temas
• Cree una función y una política de registro paraAWS IoT Wireless (p. 1450)
• Configurar el registro deAWS IoT Wireless recursos (p. 1452)
Para crear un rol de registroAWS IoT Wireless, abra el hub de roles de la consola de IAM y seleccione
Crear rol.
En el mensaje de confirmación que aparece después de ejecutar el paso anterior, elija el nombre del
rol que creó, IoTWirelessLogsRole. A continuación, editará el rol para añadir la siguiente relación de
confianza.
1450
AWS IoT Core Guía para desarrolladores
Cree una función y una política
de registro paraAWS IoT Wireless
"Principal": {
"Service": "iotwireless.amazonaws.com"
},
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "iotwireless.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
Política de roles
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:log-group:/aws/iotwireless*"
}
]
}
A continuación se muestra la política de confianza para registrar únicamenteAWS IoT Wireless la actividad.
{
"Version": "2012-10-17",
1451
AWS IoT Core Guía para desarrolladores
Configurar el registro deAWS IoT Wireless recursos
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": [
"iotwireless.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
Si creó la función de IAM para registrar también laAWS IoT Core actividad, los documentos de política
le permiten registrar ambas actividades. Para obtener información sobre la creación de una función de
registro paraAWS IoT Core, consulteCreación de un rol de registro (p. 459).
Pasos siguientes
Has aprendido a crear un rol de registro para registrar tusAWS IoT Wireless recursos. De forma
predeterminada, los registros tienen un nivel de registro deERROR, por lo que si solo desea ver la
información de error, vayaVer entradas CloudWatch AWS IoT Wireless de registro (p. 1461) a supervisar
sus recursos inalámbricos consultando las entradas de registro.
Si desea obtener más información en las entradas de registro, puede configurar el nivel de registro
predeterminado para sus recursos o para diferentes tipos de eventos, por ejemplo, establecer el nivel
de registro enINFO. Para obtener información acerca de la configuración del registro de los recursos,
consulteConfigurar el registro deAWS IoT Wireless recursos (p. 1452).
Después de empezar a monitorear los registros, puede usar la CLI para cambiar los niveles de registro
a una opción más detallada, como proporcionarERROR informaciónINFO y habilitar el registro para más
recursos.
Para obtener información sobre el aspecto CloudWatch de un registro de ejemplo y cómo puede utilizar
estos parámetros para registrar información útil sobre losAWS IoT Wireless recursos, consulteVer entradas
CloudWatch AWS IoT Wireless de registro (p. 1461).
logLevel INFO, ERROR o DISABLED • ERROR: muestra cualquier error que provoque
un error en una operación. Los registros solo
incluyenERROR información.
1452
AWS IoT Core Guía para desarrolladores
Configurar el registro deAWS IoT Wireless recursos
wirelessGatewayType
LoRaWAN El tipo de puerta de enlace inalámbrica,
cuandoresource esWirelessGateway, que
siempre es LoRa WAN.
LoRaWAN o Sidewalk
wirelessDeviceType El tipo de dispositivo inalámbrico, cuandoresource
esWirelessDevice, que puede serLoRaWAN
oSidewalk.
GetLogLevelsByResourceTypes
Devuelve los niveles de registro
{
predeterminados actuales o los "Version": "2012-10-17",
niveles de registro por tipos de
recursos, que pueden incluir "Statement": [
opciones de registro para dispositivos {
inalámbricos o puertas de enlace "Effect":
inalámbricas. "Allow",
"Action": [
"iotwireless:GetLogLevelsByResourceTypes
],
"Resource": [
"*"
1453
AWS IoT Core Guía para desarrolladores
Configurar el registro deAWS IoT Wireless recursos
"iotwireless:GetResourceLogLevel"
],
"Resource": [
"arn:aws:iotwireless:us-
east-1:123456789012:WirelessDevice/012bc5
ab12-cd3a-
d00e-1f0e20c1204a",
]
}
]
}
"arn:aws:iotwireless:us-
east-1:123456789012:WirelessDevice/012bc5
ab12-cd3a-
d00e-1f0e20c1204a",
]
}
]
}
1454
AWS IoT Core Guía para desarrolladores
Configurar el registro deAWS IoT Wireless recursos
"arn:aws:iotwireless:us-
east-1:123456789012:WirelessDevice/
*",
"arn:aws:iotwireless:us-
east-1:123456789012:WirelessGateway/
*
]
}
]
}
"iotwireless:ResetResourceLogLevel"
],
"Resource": [
"arn:aws:iotwireless:us-
east-1:123456789012:WirelessDevice/012bc5
ab12-cd3a-
d00e-1f0e20c1204a",
]
}
]
}
1455
AWS IoT Core Guía para desarrolladores
Configurar el registro deAWS IoT Wireless recursos
UpdateLogLevelsByResourceTypes
Establece el nivel de registro
{
predeterminado o los niveles de "Version": "2012-10-17",
registro por tipos de recursos. Puede
utilizar esta API para las opciones de "Statement": [
registro de dispositivos inalámbricos {
o puertas de enlace inalámbricas y "Effect":
controlar los mensajes de registro que "Allow",
"Action": [
se mostrarán en CloudWatch.
Note
"iotwireless:UpdateLogLevelsByResourceTy
Los eventos son opcionales
],
y el tipo de evento está "Resource": [
vinculado al tipo de
recurso. Para obtener "*"
más información, consulte
Tipos de eventos y ]
recursos (p. 1461). }
]
}
• Asegúrese de haber creado la política de IAM para la API para la que desea ejecutar el comando CLI, tal
como se describió anteriormente.
• Necesita el nombre de recurso de Amazon (ARN) del rol que desea utilizar. Si necesita crear un
rol para usarlo en el registro, consulteCree una función y una política de registro paraAWS IoT
Wireless (p. 1450).
De forma predeterminada, si crea el rol de IAMIoTWirelessLogsRole, tal como se describe enCree una
función y una política de registro paraAWS IoT Wireless (p. 1450), verá CloudWatch los registrosAWS
Management Console que tienen un nivel de registro predeterminado deERROR. Para cambiar el nivel de
registro predeterminado para todos sus recursos o para recursos específicos, utilice la API deAWS IoT
Wireless registro o la CLI.
Las acciones de la API se pueden clasificar en los siguientes tipos en función de si desea configurar los
niveles de registro para todos los recursos o para recursos específicos:
1456
AWS IoT Core Guía para desarrolladores
Configurar el registro deAWS IoT Wireless recursos
Para usar la CLI para configurar el registro específico de recursos para AWS IoT
Note
También puede realizar este procedimiento con la API utilizando los métodos de la API de AWS
que corresponden a los comandos CLI que se muestran aquí.
1. De forma predeterminada, todos los recursos tienen el nivel de registro establecido enERROR. Para
establecer los niveles de registro predeterminados o los niveles de registro por tipos de recursos para
todos los recursos de la cuenta, utilice el update-log-levels-by-resource-typescomando. El siguiente
ejemplo muestra cómo crear un archivo JSON y proporcionarlo como entrada para el comando
CLI.Input.json Puede usar este comando para deshabilitar el registro de forma selectiva o anular el
nivel de registro predeterminado para tipos específicos de recursos y eventos.
{
"DefaultLogLevel": "INFO",
"WirelessDeviceLogOptions":
[
{
"Type": "Sidewalk",
"LogLevel": "INFO",
"Events":
[
{
"Event": "Registration",
"LogLevel": "DISABLED"
}
]
},
{
"Type": "LoRaWAN",
"LogLevel": "INFO",
"Events":
[
{
"Event": "Join",
"LogLevel": "DISABLED"
},
{
"Event": "Rejoin",
"LogLevel": "ERROR"
}
]
}
],
"WirelessGatewayLogOptions":
[
{
"Type": "LoRaWAN",
"LogLevel": "INFO",
"Events":
[
{
"Event": "CUPS_Request",
"LogLevel": "DISABLED"
},
{
"Event": "Certificate",
"LogLevel": "ERROR"
1457
AWS IoT Core Guía para desarrolladores
Configurar el registro deAWS IoT Wireless recursos
}
]
}
]
}
donde:
WirelessDeviceLogOptions
La lista de opciones de registro de una puerta de enlace inalámbrica. Cada opción de registro
incluye el tipo de puerta de enlace inalámbrica (LoRaWAN) y una lista de opciones de registro
de eventos de puerta de enlace inalámbrica. Cada opción de registro de eventos de la puerta de
enlace inalámbrica puede incluir opcionalmente el tipo de evento y su nivel de registro.
DefaultLogLevel
El nivel de registro utilizado en todos los recursos. Los valores válidos son ERROR, INFO y
DISABLED. El valor predeterminado es INFO.
LogLevel
El nivel de registro que desea usar para eventos y tipos de recursos individuales. Estos niveles de
registro anulan el nivel de registro predeterminado, como el nivel de registroINFO de la puerta de
enlace LoRa WANDISABLED y los niveles de registro deERROR los dos tipos de eventos.
Ejecute el siguiente comando para proporcionar elInput.json archivo como entrada al comando.
Este comando no produce ningún resultado.
Si desea eliminar las opciones de registro tanto para los dispositivos inalámbricos como para las
puertas de enlace inalámbricas, ejecute el siguiente comando.
{
"DefaultLogLevel":"DISABLED",
"WirelessDeviceLogOptions": [],
"WirelessGatewayLogOptions":[]
}
1458
AWS IoT Core Guía para desarrolladores
Configurar el registro deAWS IoT Wireless recursos
{
"DefaultLogLevel": "INFO",
"WirelessDeviceLogOptions": null,
"WirelessGatewayLogOptions":
[
{
"Type": "LoRaWAN",
"LogLevel": "INFO",
"Events":
[
{
"Event": "CUPS_Request",
"LogLevel": "DISABLED"
},
{
"Event": "Certificate",
"LogLevel": "ERROR"
}
]
}
]
}
3. Para controlar los niveles de registro de puertas de enlace inalámbricas individuales o recursos de
dispositivos inalámbricos, utilice los siguientes comandos de CLI:
• put-resource-log-level
• get-resource-log-level
• reset-resource-log-level
Como ejemplo de cuándo usar estas CLI, supongamos que tiene una gran cantidad de dispositivos
inalámbricos o puertas de enlace en su cuenta que se están registrando. Si solo desea solucionar
errores en algunos de sus dispositivos inalámbricos, puede deshabilitar el registro en todos los
dispositivos inalámbricos configurando elDefaultLogLevel como y usar elput-resource-log-level
para configurarlo soloLogLevelERROR para los dispositivos de su cuenta.DISABLED
En este ejemplo, el comando establece el nivel de registro enERROR solo para el recurso de dispositivo
inalámbrico especificado y los registros de todos los demás recursos están deshabilitados. Este
comando no produce ningún resultado. Para recuperar esta información y comprobar que se han
establecido los niveles de registro, utilice elget-resource-log-level comando.
4. En el paso anterior, después de depurar el problema y resolver el error, puedes ejecutar elreset-
resource-log-level comando para restablecer el nivel de registro de ese recursonull. Si utilizó elput-
resource-log-level comando para configurar la anulación a nivel de registro para más de un
dispositivo inalámbrico o recurso de puerta de enlace, por ejemplo, para solucionar errores en varios
1459
AWS IoT Core Guía para desarrolladores
SupervisarAWS IoT Wireless
mediante CloudWatch registros
dispositivos, puede restablecer las anulaciones a nivel de registronull para todos esos recursos
mediante el reset-all-resource-log-levelscomando.
Este comando no produce ningún resultado. Para recuperar la información de registro de los recursos,
ejecute elget-resource-log-level comando.
Pasos siguientes
Has aprendido a crear el rol de registro y a usar laAWS IoT Wireless API para configurar el registro de
tusAWS IoT Wireless recursos. A continuación, para obtener más información sobre cómo supervisar las
entradas de registro, vaya aSupervisarAWS IoT Wireless mediante CloudWatch registros (p. 1460).
Cuando el registro está activadoAWS IoT Wireless,AWS IoT Wireless envía eventos de progreso sobre
cada mensaje a medida que pasa de sus dispositivos de idaAWS IoT y vuelta. De forma predeterminada,
las entradas deAWS IoT Wireless registro tienen un nivel de error de registro predeterminado. Cuando
habilites el registro tal y como se describe enCree una función y una política de registro paraAWS
IoT Wireless (p. 1450), verás mensajes en la CloudWatch consola que tienen un nivel de registro
predeterminado deERROR. Al usar este nivel de registro, los mensajes solo mostrarán la información de
error de todos los dispositivos inalámbricos y los recursos de puerta de enlace que esté utilizando.
Si quieres que los registros muestren información adicional, como los que tienen un nivel de registro
deINFO, o deshabilitar los registros de algunos de tus dispositivos y mostrar los mensajes de registro
solo para algunos de tus dispositivos, puedes usar la API deAWS IoT Wireless registro. Para obtener más
información, consulte Configure los niveles de registro de los recursos mediante la CLI (p. 1456).
También puede crear expresiones de filtro para mostrar solo los mensajes necesarios.
Para que el grupo de registros /aws/iotwireless aparezca en la CloudWatch consola, debe haber hecho lo
siguiente.
• Inicio de sesión habilitadoAWS IoT Wireless. Para obtener más información acerca de cómo habilitar el
inicio de sesiónAWS IoT Wireless, consulteConfiguración del registro para AWS IoT Wireless (p. 1450).
• Escribió algunas entradas de registro realizandoAWS IoT Wireless operaciones.
Para crear y utilizar expresiones de filtro de forma más eficaz, le recomendamos que intente utilizar la
CloudWatch información tal y como se describe en los siguientes temas. También te recomendamos
que sigas los temas en el orden en que aparecen aquí. Esto le ayudará a utilizar primero los grupos de
CloudWatch registros para obtener información sobre los diferentes tipos de recursos, sus tipos de eventos
y los niveles de registro que puede utilizar para ver las entradas de registro en la consola. A continuación,
puede aprender a crear expresiones de filtro mediante CloudWatch Insights para obtener más información
útil de sus recursos.
1460
AWS IoT Core Guía para desarrolladores
Ver entradas CloudWatch AWS IoT Wireless de registro
Temas
• Ver entradas CloudWatch AWS IoT Wireless de registro (p. 1461)
• Utilice CloudWatch Insights para filtrar los registros deAWS IoT Wireless (p. 1466)
• { $.logLevel = "ERROR" }
Utilice este filtro para buscar todos los registros que tengan un nivel de registro deERROR y puede
ampliar los flujos de errores individuales para leer los mensajes de error, lo que le ayudará a
resolverlos.
• { $.resource = "WirelessGateway" }
Busque todos los registros delWirelessGateway recurso independientemente del nivel de registro.
• { $.event = "CUPS_Request" && $.logLevel = "ERROR" }
Busque todos los registros que tengan un tipo de eventoCUPS_Request y un nivel de registro
deERROR.
1461
AWS IoT Core Guía para desarrolladores
Ver entradas CloudWatch AWS IoT Wireless de registro
El tema siguiente contiene más información sobre estos tipos de eventos y las entradas de registro de las
puertas de enlace inalámbricas y los dispositivos inalámbricos.
Temas
• Entradas de registro para puertas de enlace inalámbricas y recursos de dispositivos
inalámbricos (p. 1462)
Las entradas de registro del recurso de puerta de enlace inalámbrica se pueden clasificar en función de los
siguientes tipos de eventos:
• Solicitud de tazas
La estación LoRa básica que se ejecuta en su puerta de enlace envía periódicamente una solicitud
al servidor de configuración y actualización (CUPS) para obtener actualizaciones. Para este tipo de
evento, si establece el nivel de registro enINFO al configurar la CLI para su recurso de puerta de enlace
inalámbrica, en los registros:
• Si el evento se realiza correctamente, verás los mensajes de registro con un valorlogLevel deINFO.
Los mensajes incluirán detalles sobre la respuesta CUPS enviada a su puerta de enlace y los
detalles de la puerta de enlace. A continuación se muestra un ejemplo de esta entrada de registro.
Para obtener más información acerca delogLevel estos y otros campos de la entrada de registro,
consulteAWS IoT Wirelessrecursos y niveles de registro (p. 1452).
{
"timestamp": "2021-05-13T16:56:08.853Z",
"resource": "WirelessGateway",
"wirelessGatewayId": "5da85cc8-3361-4c79-8be3-3360fb87abda",
1462
AWS IoT Core Guía para desarrolladores
Ver entradas CloudWatch AWS IoT Wireless de registro
"wirelessGatewayType": "LoRaWAN",
"gatewayEui": "feffff00000000e2",
"event": "CUPS_Request",
"logLevel": "INFO",
"message": "Sending CUPS response of total length 3213 to GatewayEui:
feffff00000000e2 with TC Credentials,"
}
• Si se produce un error, verás las entradas de registro con unlogLevel valor deERROR y los
mensajes incluirán detalles sobre el error. Algunos ejemplos de cuándo se puede producir
un error durante elCUPS_Request evento incluyen: falta el CRC de CUPS, no coincide en el
Uri de TC de la puerta de enlace con el registro de la puerta de enlace inalámbricaAWS IoT
WirelessIoTWirelessGatewayCertManagerRole, falta o no se puede obtener el registro de la
puerta de enlace inalámbrica. El siguiente ejemplo muestra una entrada de registro CRC faltante.
Para resolver el error, compruebe la configuración de la puerta de enlace para comprobar que ha
introducido el CRC CUPS correcto.
{
"timestamp": "2021-05-13T16:56:08.853Z",
"resource": "WirelessGateway",
"wirelessGatewayId": "5da85cc8-3361-4c79-8be3-3360fb87abda",
"wirelessGatewayType": "LoRaWAN",
"gatewayEui": "feffff00000000e2",
"event": "CUPS_Request",
"logLevel": "ERROR",
"message": "The CUPS CRC is missing from the request. Check your gateway setup and
enter the CUPS CRC,"
}
• Certificate
{
"resource": "WirelessGateway",
"wirelessGatewayId": "5da85cc8-3361-4c79-8be3-3360fb87abda",
"wirelessGatewayType": "LoRaWAN",
"event": "Certificate",
"logLevel": "INFO",
"message": "Gateway connection authenticated.
(CertificateId: b5942a7aee973eda24314e416889227a5e0aa5ed87e6eb89239a83f515dea17c,
WirelessGatewayId: 5da85cc8-3361-4c79-8be3-3360fb87abda)"
}
• Si se produce un error, verás las entradas de registro con unlogLevel valor deERROR y los mensajes
incluirán detalles sobre el error. Algunos ejemplos de casos en los que se puede producir un error
durante elCertificate evento incluyen un ID de certificado no válido, un identificador de puerta
de enlace inalámbrica o una falta de coincidencia entre el identificador de la puerta de enlace
inalámbrica y el ID del certificado. El siguiente ejemplo muestra un identificador de puerta de enlace
inalámbricaERROR debido a que no es válido. Para resolver el error, compruebe los identificadores de
puerta de enlace.
1463
AWS IoT Core Guía para desarrolladores
Ver entradas CloudWatch AWS IoT Wireless de registro
"resource": "WirelessGateway",
"wirelessGatewayId": "5da85cc8-3361-4c79-8be3-3360fb87abda",
"wirelessGatewayType": "LoRaWAN",
"event": "Certificate",
"logLevel": "INFO",
"message": "The gateway connection couldn't be authenticated because a provisioned
gateway associated with the certificate couldn't be found.
(CertificateId: 729828e264810f6fc7134daf68056e8fd848afc32bfe8082beeb44116d709d9e)"
}
• Join y Rejoin
Al añadir un dispositivo LoRa WAN y conectarlo a élAWS IoT Wireless, antes de que el dispositivo
pueda enviar datos de enlace ascendente, debe completar un proceso denominadoactivation ojoin
procedure. Para obtener más información, consulte Agregue su dispositivo inalámbrico aAWS IoT
Core para LoRaWAN (p. 1289).
Para este tipo de evento, si establece el nivel de registro enINFO al configurar la CLI para su recurso de
puerta de enlace inalámbrica, en los registros:
• Si el evento se realiza correctamente, verás los mensajes de registro con un valorlogLevel deINFO.
Los mensajes incluirán detalles sobre el estado de tu solicitud de adhesión o reincorporación. A
continuación se muestra un ejemplo de esta entrada de registro. Para obtener más información acerca
delogLevel estos y otros campos de la entrada de registro, consulteAWS IoT Wirelessrecursos y
niveles de registro (p. 1452).
{
"timestamp": "2021-05-13T16:56:08.853Z",
"resource": "WirelessDevice",
"wirelessDeviceType": "LoRaWAN",
"WirelessDeviceId": "5da85cc8-3361-4c79-8be3-3360fb87abda",
"devEui": "feffff00000000e2",
"event": "Rejoin",
"logLevel": "INFO",
"message": "Rejoin succeeded"
}
• Si se produce un error, verás las entradas de registro con unlogLevel valor deERROR y los mensajes
incluirán detalles sobre el error. Algunos ejemplos de cuándo puede producirse un error en losRejoin
eventosJoin y incluyen una configuración de región LoRa WAN no válida o una verificación del
código de integridad del mensaje (MIC) no válida. El siguiente ejemplo muestra un error de unión
debido a la comprobación del MIC. Para resolver el error, compruebe si ha introducido las claves raíz
correctas.
1464
AWS IoT Core Guía para desarrolladores
Ver entradas CloudWatch AWS IoT Wireless de registro
{
"timestamp": "2020-11-24T01:46:50.883481989Z",
"resource": "WirelessDevice",
"wirelessDeviceType": "LoRaWAN",
"WirelessDeviceId": "cb4c087c-1be5-4990-8654-ccf543ee9fff",
"devEui": "58a0cb000020255c",
"event": "Join",
"logLevel": "ERROR",
"message": "invalid MIC. It's most likely caused by wrong root keys."
}
• Uplink_Data y Downlink_Data
El tipo de eventoUplink_Data se utiliza para los mensajes que se generanAWS IoT Wireless cuando
se envía la carga desde el dispositivo inalámbrico aAWS IoT. El tipo de eventoDownlink_Data
se utiliza para los mensajes relacionados con los mensajes de enlace descendente que se envían
desdeAWS IoT el dispositivo inalámbrico.
Note
Para este tipo de evento, si establece el nivel de registro enINFO al configurar la CLI para sus
dispositivos inalámbricos, verá lo siguiente en los registros:
• Si el evento se realiza correctamente, verás los mensajes de registro con un valorlogLevel deINFO.
Los mensajes incluirán detalles sobre el estado del mensaje de enlace ascendente o descendente que
se envió y el identificador del dispositivo inalámbrico. A continuación se muestra un ejemplo de esta
entrada de registro para un dispositivo Sidewalk. Para obtener más información acerca delogLevel
estos y otros campos de la entrada de registro, consulteAWS IoT Wirelessrecursos y niveles de
registro (p. 1452).
{
"resource": "WirelessDevice",
"wirelessDeviceId": "5371db88-d63d-481a-868a-e54b6431845d",
"wirelessDeviceType": "Sidewalk",
"event": "Downlink_Data",
"logLevel": "INFO",
"messageId": "8da04fa8-037d-4ae9-bf67-35c4bb33da71",
"message": "Message delivery succeeded. MessageId: 8da04fa8-037d-4ae9-
bf67-35c4bb33da71. AWS IoT Core: {\"message\":\"OK\",\"traceId\":\"038b5b05-a340-
d18a-150d-d5a578233b09\"}"
}
• Si se produce un error, verás las entradas de registro con un valorlogLevel deERROR y los mensajes
incluirán detalles sobre el error, lo que te ayudará a resolverlo. Algunos ejemplos de casos en los que
se puede producir un error durante elRegistration evento incluyen: problemas de autenticación,
solicitudes no válidas o demasiadas, incapacidad para cifrar o descifrar la carga o no encontrar el
dispositivo inalámbrico con el ID especificado. El siguiente ejemplo muestra un error de permiso que
se ha producido al procesar un mensaje.
{
"resource": "WirelessDevice",
"wirelessDeviceId": "cb4c087c-1be5-4990-8654-ccf543ee9fff",
"wirelessDeviceType": "LoRaWAN",
"event": "Uplink_Data",
"logLevel": "ERROR",
"message": "Cannot assume role MessageId: ef38877f-3454-4c99-96ed-5088c1cd8dee.
Access denied: User: arn:aws:sts::005196538709:assumed-role/
DataRoutingServiceRole/6368b35fd48c445c9a14781b5d5890ed is not authorized to perform:
1465
AWS IoT Core Guía para desarrolladores
Utilice CloudWatch Insights para filtrar
los registros deAWS IoT Wireless
Las entradas de registro de su dispositivo Sidewalk se pueden clasificar según los siguientes tipos de
eventos:
• Registration
A continuación se muestra un ejemplo de un mensaje de registro con un nivel de registro deINFO. Para
obtener más información sobre estoslogLevel y otros campos de la entrada de registro, consulteAWS
IoT Wirelessrecursos y niveles de registro (p. 1452).
{
"resource": "WirelessDevice",
"wirelessDeviceId": "8d0b2775-e19b-4b2a-a351-cb8a2734a504",
"wirelessDeviceType": "Sidewalk",
"event": "Registration",
"logLevel": "INFO",
"message": "Successfully completed device registration. Amazon SidewalkId =
2000000002"
}
• Uplink_Data y Downlink_Data
Los tipos de eventosUplink_Data yDownlink_Data para los dispositivos Sidewalk son similares a
los tipos de eventos correspondientes para los dispositivos LoRa WAN. Para obtener más información,
consulte las secciones Uplink_Data y Downlink_Data descritas anteriormente para ver las entradas de
registro de dispositivos LoRa WAN.
Pasos siguientes
Ha aprendido a ver las entradas de registro de sus recursos y las diferentes entradas de registro que
puede ver en la CloudWatch consola después de habilitar el registroAWS IoT Wireless. Si bien puedes
crear flujos de filtros mediante grupos de registros, te recomendamos que utilices CloudWatch Insights
para crear y usar flujos de filtros. Para obtener más información, consulte Utilice CloudWatch Insights para
filtrar los registros deAWS IoT Wireless (p. 1466).
Le recomendamos que utilice primero los grupos de CloudWatch registro para obtener información sobre
los diferentes tipos de recursos, sus tipos de eventos y los niveles de registro que puede utilizar para ver
1466
AWS IoT Core Guía para desarrolladores
Utilice CloudWatch Insights para filtrar
los registros deAWS IoT Wireless
las entradas de registro en la consola. A continuación, puede utilizar los ejemplos de algunas expresiones
de filtro de esta página como referencia para crear sus propios filtros para susAWS IoT Wireless recursos.
Ahora puede empezar a introducir consultas para filtrar los grupos de registro. Las siguientes secciones
contienen algunas consultas útiles que te ayudarán a obtener información sobre las métricas de tus
recursos.
fields @message
| filter @message like /Sidewalk/
Cuando se ejecute la consulta, verás los resultados en la pestaña Registros, que muestra las marcas de
tiempo de los registros relacionados con los dispositivos Sidewalk de tu cuenta. También verás un gráfico
de barras en el que se mostrará la hora a la que se produjeron los eventos, si ya se produjeron eventos de
este tipo relacionados con tu dispositivo Sidewalk. A continuación se muestra un ejemplo si expande uno
de los resultados de la pestaña Registros. Como alternativa, si desea solucionar errores relacionados con
los dispositivos Sidewalk, puede añadir otro filtro que establezca el nivel de registro enERROR y muestre
únicamente la información sobre los errores.
Field Value
@ingestionTime 1623894967640
@log 954314929104:/aws/iotwireless
@logStream WirelessDevice-
Downlink_Data-715adccfb34170214ec2f6667ddfa13cb5af2c3ddfc52fbeee0e554a2e780bed
@message {
"resource": "WirelessDevice",
"wirelessDeviceId": "3b058d05-4e84-4e1a-b026-4932bddf978d",
"wirelessDeviceType": "Sidewalk",
"devEui": "feffff000000011a",
1467
AWS IoT Core Guía para desarrolladores
Utilice CloudWatch Insights para filtrar
los registros deAWS IoT Wireless
"event": "Downlink_Data",
"logLevel": "INFO",
"messageId": "7e752a10-28f5-45a5-923f-6fa7133fedda",
"message": "Successfully sent downlink message. Amazon SidewalkId =
2000000006, Sequence number = 0"
}
@timestamp 1623894967640
devEui feffff000000011a
event Downlink_Data
logLevel INFO
message Successfully sent downlink message. Amazon SidewalkId = 2000000006,
Sequence number = 0
messageId 7e752a10-28f5-45a5-923f-6fa7133fedda
resource WirelessDevice
wirelessDeviceId 3b058d05-4e84-4e1a-b026-4932bddf978d
wirelessDeviceType Sidewalk
Una vez ejecutada la consulta, verás los resultados en la pestaña Registros, que muestra las marcas de
tiempo en las que el mensaje de enlace descendente se envió correctamente a tu dispositivo inalámbrico.
También verás un gráfico de barras que mostrará la hora a la que se envió un mensaje de enlace
descendente, si anteriormente se enviaron mensajes de enlace descendente a tu dispositivo inalámbrico.
A continuación se muestra un ejemplo si expande uno de los resultados de la pestaña Registros. Como
alternativa, si no se envió un mensaje de enlace descendente, puedes modificar la consulta para que
muestre solo los resultados de cuando no se envió el mensaje, de modo que puedas depurar el problema.
Field Value
@ingestionTime 1623884043676
@log 954314929104:/aws/iotwireless
@logStream WirelessDevice-
Downlink_Data-42d0e6d09ba4d7015f4e9756fcdc616d401cd85fe3ac19854d9fbd866153c872
@message {
"timestamp": "2021-06-16T22:54:00.770493863Z",
"resource": "WirelessDevice",
"wirelessDeviceId": "3b058d05-4e84-4e1a-b026-4932bddf978d",
"wirelessDeviceType": "LoRaWAN",
"devEui": "feffff000000011a",
"event": "Downlink_Data",
"logLevel": "INFO",
"messageId": "7e752a10-28f5-45a5-923f-6fa7133fedda",
"message": "Downlink message sent. MessageId:
7e752a10-28f5-45a5-923f-6fa7133fedda"
}
@timestamp 1623884040858
devEui feffff000000011a
event Downlink_Data
logLevel INFO
message Downlink message sent. MessageId: 7e752a10-28f5-45a5-923f-6fa7133fedda
messageId 7e752a10-28f5-45a5-923f-6fa7133fedda
resource WirelessDevice
timestamp 2021-06-16T22:54:00.770493863Z
wirelessDeviceId 3b058d05-4e84-4e1a-b026-4932bddf978d
wirelessDeviceType LoRaWAN
1468
AWS IoT Core Guía para desarrolladores
Utilice CloudWatch Insights para filtrar
los registros deAWS IoT Wireless
Pasos siguientes
Has aprendido a usar CloudWatch Insights para obtener más información útil mediante la creación
de consultas para filtrar los mensajes de registro. Puedes combinar algunos de los filtros descritos
anteriormente y diseñar tus propios filtros en función del recurso que estés supervisando. Para obtener
más información sobre el uso de CloudWatch Insights, consulte Análisis de datos de registro con
CloudWatch Insights.
Una vez que haya creado consultas con CloudWatch Insights, si las ha guardado, puede cargarlas y
ejecutarlas según sea necesario. Como alternativa, si hace clic en el botón Historial de la consola de
CloudWatch Logs Insights, puede ver las consultas ejecutadas anteriormente y volver a ejecutarlas según
sea necesario, o modificarlas aún más creando consultas adicionales.
1469
AWS IoT Core Guía para desarrolladores
Cómo se pueden notificar los eventos a sus recursos
Las notificaciones de eventos se publican al menos una vez. Es posible que se publiquen más de
una vez. No se garantiza el orden de las notificaciones de eventos.
1470
AWS IoT Core Guía para desarrolladores
Política para recibir notificaciones de eventos inalámbricos
El siguiente es un ejemplo de la política requerida para recibir notificaciones de los distintos eventos
inalámbricos.
{
"Version":"2012-10-17",
"Statement":[{
"Effect":"Allow",
"Action":[
"iot:Subscribe",
"iot:Receive"
],
"Resource":[
"arn:aws:iotwireless:region:account:topicfilter/$aws/iotwireless/events/join/
*",
"arn:aws:iotwireless:region:account:topicfilter/$aws/iotwireless/events/
connection_status/*",
"arn:aws:iotwireless:region:account:topicfilter/$aws/iotwireless/events/
device_registration_state/*",
"arn:aws:iotwireless:region:account:topicfilter/$aws/iotwireless/events/
proximity/*",
"arn:aws:iotwireless:region:account:topicfilter/$aws/iotwireless/events/
message_delivery_status/*"
]
}]
}
Los temas de MQTT reservados para dispositivos inalámbricos utilizan el siguiente formato:
Estos temas se aplican a todos los recursos de un tipo determinado de suCuenta de AWSa los que te
has incorporadoAWS IoT Wireless.
$aws/iotwireless/events/{eventName}/{eventType}/{resourceType}/resources
• Temas a nivel de identificador
Estos temas se aplican a algunos recursos de un tipo determinado en suCuenta de AWSa los que te has
incorporadoAWS IoT Wireless, especificado por el identificador del recurso.
1471
AWS IoT Core Guía para desarrolladores
Formato de temas de MQTT para eventos inalámbricos
$aws/iotwireless/events/{eventName}/{eventType}/{resourceType}/
{resourceIdentifierType}/{resourceID}/{id}
Para obtener más información sobre los temas a nivel de recursos e identificadores,
consulteConfiguraciones de eventos (p. 1474).
La siguiente tabla muestra ejemplos de temas de MQTT para los distintos eventos:
$aws/iotwireless/
events/
device_registration_state/
{eventType}/
sidewalk/
{resourceType}/
{resourceID}/{id}
$aws/iotwireless/
events/proximity/
{eventType}/
sidewalk/
{resourceType}/
{resourceID}/{id}
1472
AWS IoT Core Guía para desarrolladores
Precios para eventos inalámbricos
$aws/iotwireless/
events/
message_delivery_status/
{eventType}/
sidewalk/
{resourceType}/
{resourceID}/{id}
$aws/iotwireless/
events/join/
{eventType}/lorawan/
wireless_devices/
{resourceID}/{id}
$aws/iotwireless/
events/join/
{eventType}/lorawan/
wireless_gateways/
{resourceID}/{id}
Para obtener más información sobre los diferentes eventos, consulteNotificaciones de eventos
paraLoRaRecursos de WAN (p. 1477)yNotificaciones de eventos para los recursos de Sidewalk (p. 1481).
Si te has suscrito a estos temas, recibirás una notificación cuando se publique un mensaje en uno de los
temas de notificación de eventos. Para obtener más información, consulte Temas reservados (p. 115).
1473
AWS IoT Core Guía para desarrolladores
Habilitar eventos para recursos inalámbricos
Configuraciones de eventos
Puede configurar los eventos para enviar notificaciones a todos los recursos que pertenecen a un
tipo determinado o a recursos inalámbricos individuales. El tipo de recurso puede ser una puerta de
enlace inalámbrica, una cuenta de socio de Sidewalk o un dispositivo inalámbrico, que puede ser
unLoRaDispositivo WAN o Sidewalk. Para obtener información sobre el tipo de eventos que puede habilitar
para sus dispositivos inalámbricos, consulteTipos de eventos paraLoRaRecursos de WAN (p. 1477)yTipos
de eventos para Sidewalk Resources (p. 1481).
Puede habilitar eventos de manera que todos los recursos de suCuenta de AWSque pertenecen a un
tipo de recurso concreto recibe notificaciones. Por ejemplo, puede habilitar un evento que le notifique
los cambios en el estado de la conexión para todosLoRaPuertas de enlace WAN con las que se ha
incorporadoAWS IoT Core para LoRaWAN. Monitorear estos eventos le ayudará a recibir notificaciones
en casos como, por ejemplo, cuando ciertosLoRaLas puertas de enlace WAN de su flota de recursos se
desconectan o si se pierde una baliza para varios dispositivos Sidewalk de suCuenta de AWS.
Recursos individuales
También puedes añadir una personaLoRaRecursos de WAN y Sidewalk para configurar su evento y
habilitar las notificaciones para ellos. Esto le ayudará a supervisar los recursos individuales de un tipo
determinado. Por ejemplo, puede añadir seleccionarLoRaLos dispositivos WAN y Sidewalk se ajustan a su
configuración y reciben notificaciones para unirse o registrar dispositivos estatales para estos recursos.
Requisitos previos
TuLoRaEl recurso WAN o Sidewalk debe tener una política adecuada que le permita recibir notificaciones
de eventos. Para obtener más información, consulte Política para recibir notificaciones de eventos
inalámbricos (p. 1471).
Puede habilitar las notificaciones para todos los recursos de suCuenta de AWSque pertenecen a un tipo de
recurso concreto y los monitorea.
1474
AWS IoT Core Guía para desarrolladores
Habilite las notificaciones mediante elAWS CLI
También puede habilitar las notificaciones para recursos individuales en suCuenta de AWSque pertenecen
a un tipo de recurso concreto y los monitorea.
Los recursos que añada aparecerán con sus temas de MQTT en la pestaña correspondiente a su tipo de
recurso de laLoRaNotificación de eventos de WAN y Sidewalksección de la consola.
• LoRaUnirse a WANlos eventos y eventos para tus dispositivos Sidewalk aparecerán en laDispositivos
inalámbricossección de la consola.
• Estado de conexióneventos para tuLoRaLas puertas de enlace WAN aparecerán enPuertas de enlace
inalámbricassección.
• Estado de registro del dispositivoyproximidadlos eventos de sus cuentas de Sidewalk aparecerán en
laCuentas de Sidewalkpestaña.
Dependiendo de si ha activado los eventos para todos los recursos o para los tipos de recursos
individuales, los eventos que haya activado aparecerán en la consola con sus temas de MQTT enTodos
los recursospestaña o la pestaña del tipo de recurso especificado.
• Si elige uno de los temas de MQTT, puede ir al cliente de MQTT para suscribirse a estos temas y recibir
mensajes.
• Si has añadido varios eventos, puedes suscribirte a varios temas de eventos y recibir notificaciones
sobre ellos. Para suscribirse a varios temas, elige tus temas y eligeAccióny luego eligeSuscríbete.
1475
AWS IoT Core Guía para desarrolladores
Habilite las notificaciones mediante elAWS CLI
Puede habilitar las notificaciones para todos los recursos de suCuenta de AWSque pertenecen a un tipo de
recurso concreto y los monitorea mediante elUpdateEventConfigurationByResourceTypesAPI oupdate-
event-configuration-by-resource-typesComando CLI. Por ejemplo:
Contenido de input.json
{
"DeviceRegistrationState": {
"Sidewalk": {
"AmazonIdEventTopic": "Enabled"
}
},
"ConnectionStatus": {
"LoRaWAN": {
"WirelessGatewayEventTopic": "Enabled"
}
}
}
Note
Todas las comillas (") van precedidas de barras diagonales invertidas (\).
Para añadir recursos individuales a la configuración de eventos y controlar qué eventos se publican
mediante la API o la CLI, llame alUpdateResourceEventConfigurationAPI o utilice laupdate-resource-
event-configurationComando CLI. Por ejemplo:
Contenido de input.json
{
"Join": {
"LoRaWAN": {
"DevEuiEventTopic": "Disabled"
},
"WirelessDeviceIdEventTopic": "Enabled"
}
}
Note
Todas las comillas (") van precedidas de barras diagonales invertidas (\).
1476
AWS IoT Core Guía para desarrolladores
Notificaciones de eventos paraLoRaRecursos de WAN
También puede utilizar elAWS IoT WirelessAPI oAWS CLIpara enumerar las configuraciones de
eventos en las que se ha habilitado al menos un tema de eventos. Para enumerar las configuraciones,
utiliceListEventConfigurationsoperación de la API o mediante ellist-event-configurationsComando
CLI. Por ejemplo:
• Únase a los eventos que le notifiquen la posibilidad de unirse a los eventos de suLoRaDispositivo WAN.
Recibirás notificaciones cuando un dispositivo se una aAWS IoT Core para LoRaWAN, o cuando se
reciba una solicitud de reincorporación de tipo 0 o 2.
• Eventos de estado de conexión que le notifican cuándo el estado de conexión de suLoRaLa puerta de
enlace WAN cambia a conectada o desconectada.
Las siguientes secciones contienen más información sobre los eventos de suLoRaRecursos de WAN:
Temas
• LoRaEventos de unión de WAN (p. 1477)
• Eventos de estado de conexión (p. 1480)
1477
AWS IoT Core Guía para desarrolladores
LoRaEventos de unión de WAN
enlace ascendente y descendente entre su dispositivo yAWS IoT Core para LoRaWAN. Para obtener más
información sobre cómo incorporar el dispositivo, consulteIntegra tus dispositivos paraAWS IoT Core para
LoRaWAN (p. 1288).
Puedes habilitar los eventos para que te notifiquen cuando tu dispositivo se haya unido aAWS IoT Core
para LoRaWAN. También se te notificará si se produce un error en el evento de unión y cuando se reciba
una solicitud de reincorporación de tipo 0 o tipo 2 y cuando se acepte.
$aws/iotwireless/events/{eventName}/{eventType}/lorawan/wireless_devices
• Temas de identificadores
$aws/iotwireless/events/{eventName}/{eventType}/lorawan/wireless_devices/
{resourceID}/{id}
Donde:
Por ejemplo, puede suscribirse a los siguientes temas para recibir una notificación de evento cuandoAWS
IoT Core para LoRaWANha aceptado una solicitud de unión desde tus dispositivos.
$aws/iotwireless/events/join/join_accepted/lorawan/wireless_devices/
wireless_device_id/{id}
También puede utilizar el+carácter comodín para suscribirse a varios temas al mismo tiempo. El+el
carácter comodín coincide con cualquier cadena del nivel que contenga el carácter, como el tema
siguiente:
1478
AWS IoT Core Guía para desarrolladores
LoRaEventos de unión de WAN
$aws/iotwireless/events/join/join_req_received/lorawan/wireless_devices/
wireless_device_id/+
Note
No puedes usar el carácter comodín#para suscribirse a los temas reservados. Para obtener más
información sobre los filtros de temas, consulteFiltros de temas (p. 114).
Para obtener más información sobre el uso del+comodín al suscribirse a temas, consulteFiltros de
temas (p. 114).
{
// General fields
"eventId": "string",
"eventType": "join_req_received|rejoin_req_0_received|rejoin_req_2_received|
join_accepted",
"WirelessDeviceId": "string",
"timestamp": "timestamp",
// Event-specific fields
"LoRaWAN": {
"DevEui": "string",
// The fields below are optional indicating that it can be a null value.
"DevAddr": "string",
"JoinEui": "string",
"AppEui": "string",
}
}
ID de evento
El tipo de evento que se produjo. Puede ser uno de los siguientes valores:
• join_req_received: En este campo se mostrarán los parámetros de la EUIJoinEuioAppEui
• rejoin_req_0_received
• rejoin_req_2_received
• join_accepted: En este campo se mostrará elNetIdyDevAddr.
wirelessDeviceId
El ID delLoRaDispositivo WAN.
timestamp
Estos campos son la dirección opcional del dispositivo y los parámetros EUI.JoinEUIoAppEUI.
1479
AWS IoT Core Guía para desarrolladores
Eventos de estado de conexión
$aws/iotwireless/events/{eventName}/{eventType}/lorawan/wireless_gateways
• Para temas relacionados con identificadores:
$aws/iotwireless/events/{eventName}/{eventType}/lorawan/wireless_gateways/
{resourceID}/{id}
Donde:
Por ejemplo, puedes suscribirte a los siguientes temas para recibir una notificación de evento cuando todas
tus puertas de enlace se hayan conectado aAWS IoT Core para LoRaWAN:
$aws/iotwireless/events/connection_status/connected/lorawan/wireless_gateways/
wireless_gateway_id/{id}
También puede utilizar el+carácter comodín para suscribirse a varios temas al mismo tiempo. El+el
carácter comodín coincide con cualquier cadena del nivel que contenga el carácter, como el tema
siguiente:
$aws/iotwireless/events/connection_status/connected/lorawan/wireless_gateways/
wireless_gateway_id/+
1480
AWS IoT Core Guía para desarrolladores
Notificaciones de eventos para los recursos de Sidewalk
Note
No puedes usar el carácter comodín#para suscribirse a los temas reservados. Para obtener más
información sobre los filtros de temas, consulteFiltros de temas (p. 114).
Para obtener más información sobre el uso del+comodín al suscribirse a temas, consulteFiltros de
temas (p. 114).
{
// General fields
"eventId": "string",
"eventType": "connected|disconnected",
"WirelessGatewayId": "string",
"timestamp": "timestamp",
// Event-specific fields
"LoRaWAN": {
"GatewayEui": "string"
}
}
ID de evento
1481
AWS IoT Core Guía para desarrolladores
Eventos de estado de registro del dispositivo
• Eventos del dispositivo que le notifican los cambios en el estado de su dispositivo Sidewalk, por ejemplo,
cuando el dispositivo se ha registrado y está listo para usarse.
• Eventos de proximidad que le notifican cuandoAWS IoT Wirelessrecibe una notificación de Amazon
Sidewalk en la que se indica que se ha descubierto o perdido una baliza.
Las siguientes secciones contienen más información sobre los eventos de sus recursos de Sidewalk:
Temas
• Eventos de estado de registro del dispositivo (p. 1482)
• Eventos de proximidad (p. 1484)
• Eventos de estado de entrega de mensajes (p. 1486)
Después de que el dispositivo haya sidoregistered, Sidewalk puede enviar una solicitud
aderegistertu dispositivo.AWS IoT Wirelessluego cumple con la solicitud y vuelve a cambiar el
estado del dispositivo aprovisioned. Para obtener más información sobre los estados del dispositivo,
consulteDeviceState.
1482
AWS IoT Core Guía para desarrolladores
Eventos de estado de registro del dispositivo
Los temas de MQTT reservados para los eventos estatales de registro de dispositivos de Sidewalk utilizan
el siguiente formato:
$aws/iotwireless/events/{eventName}/{eventType}/sidewalk/wireless_devices
• Para temas relacionados con identificadores:
$aws/iotwireless/events/{eventName}/{eventType}/sidewalk/{resourceType}/
{resourceID}/{id}
Donde:
También puede utilizar el+carácter comodín para suscribirse a varios temas al mismo tiempo. El+el
carácter comodín coincide con cualquier cadena del nivel que contenga el carácter. Por ejemplo, si desea
que se le notifiquen todos los tipos de eventos posibles (provisionedyregistered) y para todos los
dispositivos registrados con un Amazon ID concreto, puedes utilizar el siguiente filtro de temas:
$aws/iotwireless/events/device_registration_state/+/sidewalk/sidewalk_accounts/
amazon_id/+
Note
No puedes usar el carácter comodín#para suscribirse a los temas reservados. Para obtener más
información sobre los filtros de temas, consulteFiltros de temas (p. 114).
{
"eventId": "string",
"eventType": "provisioned|registered",
"WirelessDeviceId": "string",
"timestamp": "timestamp",
// Event-specific fields
"operation": "create|deregister|register",
"Sidewalk": {
"AmazonId": "string",
"SidewalkManufacturingSn": "string"
1483
AWS IoT Core Guía para desarrolladores
Eventos de proximidad
}
}
ID de evento
La operación en la que se activó el evento. Los valores válidos son create, register y
deregister.
acera
Eventos de proximidad
Los eventos de proximidad publican notificaciones de eventos cuandoAWS IoTrecibe una baliza
del dispositivo Sidewalk. Cuando tu dispositivo Sidewalk se acerca a Amazon Sidewalk, Amazon
Sidewalk filtra las balizas que se envían desde tu dispositivo a intervalos regulares y las recibeAWS IoT
Wireless.AWS IoT Wirelessluego le notifica estos eventos cuando recibe una baliza.
Los eventos de proximidad le notificarán cuando se descubra una baliza o cuando se pierda una baliza.
Puede configurar los intervalos en los que se le notificará el evento de proximidad.
1484
AWS IoT Core Guía para desarrolladores
Eventos de proximidad
Los temas de MQTT reservados para los eventos de proximidad de Sidewalk utilizan el formato:
$aws/iotwireless/events/{eventName}/{eventType}/sidewalk/wireless_devices
• Para temas relacionados con identificadores:
$aws/iotwireless/events/{eventName}/{eventType}/sidewalk/{resourceType}/
{resourceID}/{id}
Donde:
También puede utilizar el+carácter comodín para suscribirse a varios temas al mismo tiempo. El+el
carácter comodín coincide con cualquier cadena del nivel que contenga el carácter. Por ejemplo, si desea
que se le notifiquen todos los tipos de eventos posibles (beacon_discoveredybeacon_lost) y para
todos los dispositivos registrados con un Amazon ID concreto, puedes utilizar el siguiente filtro de temas:
$aws/iotwireless/events/proximity/+/sidewalk/sidewalk_accounts/amazon_id/+
Note
No puedes usar el carácter comodín#para suscribirse a los temas reservados. Para obtener más
información sobre los filtros de temas, consulteFiltros de temas (p. 114).
{
"eventId": "string",
"eventType": "beacon_discovered|beacon_lost",
"WirelessDeviceId": "string",
"timestamp": "1234567890123",
// Event-specific fields
"Sidewalk": {
"AmazonId": "string",
"SidewalkManufacturingSn": "string"
}
}
1485
AWS IoT Core Guía para desarrolladores
Eventos de estado de entrega de mensajes
ID de evento
Por ejemplo, si se recibe un mensaje de enlace ascendente desde el dispositivo con un indicador de
confirmación (ACK), se publica una notificación que indica que el mensaje se ha entregado correctamente.
Cuando envías mensajes de enlace descendente desdeAWS IoT Wirelessal dispositivo Sidewalk,
elSendDataToWirelessDeviceLa API devuelve unMessageIdpara el mensaje de enlace descendente,
incluso si los paquetes se han descartado o el mensaje no se ha entregado. En este caso, los eventos
del estado de entrega del mensaje devuelven un error que indica que el mensaje no se pudo entregar al
dispositivo.
Para obtener información sobre cómo habilitar estos eventos, consulteHabilite las notificaciones mediante
elAWS CLI (p. 1475).
1486
AWS IoT Core Guía para desarrolladores
Eventos de estado de entrega de mensajes
Los temas de MQTT reservados para los eventos de proximidad de Sidewalk utilizan el formato:
$aws/iotwireless/events/{eventName}/{eventType}/sidewalk/wireless_devices
• Para temas relacionados con identificadores:
$aws/iotwireless/events/{eventName}/{eventType}/sidewalk/{resourceType}/
{resourceID}/{id}
Donde:
También puede utilizar el+carácter comodín para suscribirse a varios temas al mismo tiempo. El+el
carácter comodín coincide con cualquier cadena del nivel que contenga el carácter. Por ejemplo, si desea
que se le notifiquen todos los tipos de eventos posibles (successyerror) y para todos los dispositivos
registrados con un Amazon ID concreto, puedes utilizar el siguiente filtro de temas:
$aws/iotwireless/events/message_delivery_status/+/sidewalk/sidewalk_accounts/
amazon_id/+
Note
No puedes usar el carácter comodín#para suscribirse a los temas reservados. Para obtener más
información sobre los filtros de temas, consulteFiltros de temas (p. 114).
Eventos de éxito
1487
AWS IoT Core Guía para desarrolladores
Eventos de estado de entrega de mensajes
{
"eventId": "string",
"eventType": "success",
"WirelessDeviceId": "string",
"timestamp": "timestamp",
"Sidewalk": {
"Seq": "Integer",
"MsgType": "CUSTOM_COMMAND_ID_RESP",
"CmdExStatus": "COMMAND_EXEC_STATUS_SUCCESS"
}
}
ID de evento
El tipo de evento que se produjo. Puede ser success o error. En este caso, eventType es error.
WirelessDeviceId
El contenedor de Sidewalk que contiene el código de estado de los mensajes satisfactorios, el número
de secuencia del mensaje y el tipo de mensaje.
Eventos de error
A continuación se muestra el formato de carga cuando el evento indica que se ha producido un error.
{
"eventId": "string",
"eventType": "error" ,
"WirelessDeviceId": "string",
"timestamp": "timestamp",
"Sidewalk": {
"Seq": "Integer",
"Status": "DeviceNotReachable" | "RADIO_TX_ERROR" | "MEMORY_ERROR"
}
}
Tipo de evento
El contenedor de Sidewalk que contiene el número de secuencia y el código de estado que indica por
qué el mensaje de enlace descendente no se envió correctamente.
1488
AWS IoT Core Guía para desarrolladores
SDK de dispositivos de AWS IoT
Estos SDK son para su uso en su dispositivo IoT. Si está desarrollando una aplicación de IoT para usarla
en un dispositivo móvil, consulte laAWS Mobile SDK (p. 1491). Si estás desarrollando una aplicación de
IoT o un programa del lado del servidor, consulta laSDK de AWS (p. 78).
Estos SDK le ayudan a conectar sus dispositivos de IoT aAWS IoTutilizando los protocolos MQTT y WSS.
C++
ElAWS IoTEl SDK para dispositivos de C++ permite a los desarrolladores crear aplicaciones
conectadas medianteAWSy elAWS IoTAPI. En concreto, este SDK se diseñó para los dispositivos
que no tienen limitación de recursos y requieren características avanzadas, como la puesta en cola
de mensajes, la compatibilidad con varios procesos y las características de idioma más actualizadas.
Para obtener más información, consulte lo siguiente:
Python
ElAWS IoTEl SDK de dispositivos para Python permite a los desarrolladores escribir scripts de Python
para usar sus dispositivos y acceder aAWS IoTplataforma a través de MQTT o MQTT a través del
WebSocket protocolo. Conectando sus dispositivos aAWS IoT, los usuarios pueden trabajar de
forma segura con el agente de mensajes, las reglas y las sombras que proporcionaAWS IoTy con
otrosAWSservicios comoAWS Lambda, Kinesis y Amazon S3, entre otros.
1489
AWS IoT Core Guía para desarrolladores
SDK de dispositivos de AWS IoT para Embedded C
JavaScript
Java
ElAWS IoTDevice SDK for Java permite a los desarrolladores de Java acceder aAWS IoTplataforma
a través de MQTT o MQTT a través del WebSocket protocolo. El SDK es compatible con las sombras.
Puede tener acceso a las sombras mediante los métodos GET, UPDATE y DELETE de HTTP. El
SDK es también compatible con un modelo de acceso a sombras simplificado, lo que permite a los
desarrolladores intercambiar datos con las sombras utilizando únicamente métodos getter y setter,
sin tener que serializar ni deserializar documentos JSON. Para obtener más información, consulte lo
siguiente:
Este SDK está diseñado para que lo utilicen desarrolladores de software embebido con
experiencia.
ElAWS IoT Device SDK para Embedded C(C-SDK) es una colección de archivos fuente C bajo la licencia
de código abierto del MIT que se puede usar en aplicaciones integradas para conectar de forma segura
dispositivos de IoT aAWS IoT Core. Incluye un cliente MQTT, un analizador JSON yAWS IoTDevice
Shadow,AWS IoTEmpleos,AWS IoTAprovisionamiento de flota yAWS IoT Device Defenderbibliotecas. Este
SDK se distribuye en formato fuente y se puede integrar en el firmware del cliente junto con el código de la
aplicación, otras bibliotecas y el sistema operativo (SO) que elija.
AWS IoT Device SDK para Embedded C generalmente se dirige a dispositivos con limitaciones de
recursos que requieren un tiempo de ejecución optimizado del lenguaje C. Puede usar el SDK en cualquier
sistema operativo y alojarlo en cualquier tipo de procesador (por ejemplo, MCU y MPU).
1490
AWS IoT Core Guía para desarrolladores
AnteriormenteAWS IoTVersiones de los SDK del dispositivo
Android
ElAWS Mobile SDK for Androidcontiene una biblioteca, ejemplos y documentación para que los
desarrolladores creen aplicaciones móviles conectadas medianteAWS. Este SDK también incluye
soporte para las comunicaciones entre dispositivos MQTT y para llamar a las API delAWS IoT
Coreservicios. Para obtener más información, consulte lo siguiente:
iOS
1491
AWS IoT Core Guía para desarrolladores
AWS IoTCliente de dispositivo
LaAWS Mobile SDK for iOSes un kit de desarrollo de software de código abierto, distribuido bajo una
licencia de código abierto de Apache. ElAWS Mobile SDK for iOSproporciona una biblioteca, ejemplos
de código y documentación para ayudar a los desarrolladores a crear aplicaciones móviles conectadas
medianteAWS. Este SDK también incluye soporte para las comunicaciones entre dispositivos MQTT y
para llamar a las API delAWS IoT Coreservicios. Para obtener más información, consulte lo siguiente:
ElAWS IoTDevice Client funciona con dispositivos IoT basados en microprocesadores con
procesadores x86_64 o ARM y sistemas operativos Linux comunes.
C++
Para obtener más información sobreAWS IoTDevice Client en C++, consulte lo siguiente:
1492
AWS IoT Core Guía para desarrolladores
Diagnóstico de problemas de conectividad
Tareas
• Diagnóstico de problemas de conectividad (p. 1493)
• Diagnóstico de problemas de las reglas (p. 1496)
• Diagnóstico de problemas relacionados con las sombras (p. 1497)
• Diagnosticar problemas con acciones del flujo de entrada de Salesforce IoT (p. 1498)
• Guía de solución de problemas de indexación de flotas (p. 1499)
• Solución de problemas «Se ha superado el límite de transmisión de tu AWS cuenta» (p. 1501)
• Guía para solucionar problemas de AWS IoT Device Defender (p. 1502)
• AWS IoTGuía de solución de problemas de Device Advisor (p. 1505)
• Solución de problemas de desconexiones de flotas de dispositivos (p. 1507)
• Errores de AWS IoT (p. 1508)
Conexión
¿Cómo puedo encontrar el punto final correcto?
• El valor de endpointAddress devuelto por aws iot describe-endpoint --endpoint-type
iot:Data-ATS
o bien
• El valor de domainName devuelto por aws iot describe-domain-configuration –-
domain-configuration-name "domain_configuration_name"
¿Cómo puedo encontrar el valor correcto de indicación del nombre del servidor (SNI)?
1493
AWS IoT Core Guía para desarrolladores
Autenticación
recomienda encarecidamente. Para utilizar funciones como el registro de varias cuentas, los dominios
personalizados y los puntos de conexión de VPC, debes usar la extensión SNI. Para obtener más
información, consulte Seguridad de transporte en AWS IoT.
¿Cómo soluciono un problema de conectividad que persiste?
Puede utilizar AWS Device Advisor para ayudar a solucionar problemas. Las pruebas prediseñadas
de Device Advisor le ayudan a validar el software de su dispositivo según las prácticas recomendadas
para el uso de TLS, MQTT, AWS IoTDevice Shadow y Jobs. AWS IoT
Autenticación
Los dispositivos deben estar autenticados (p. 313) para conectarse a los puntos AWS IoT finales. En el
caso de los dispositivos que se utilizan Certificados de cliente X.509 (p. 314) para la autenticación, los
certificados deben estar registrados AWS IoT y estar activos.
Ejecute el comando s_client de OpenSSL para probar una conexión con el punto de enlace de
AWS IoT:
Para obtener más información sobre el uso de openssl s_client, consulte Documentación de
OpenSSL s_client.
¿Cómo compruebo el estado de un certificado?
• Enumere los certificados
Si no conoce el identificador del certificado, puede ver el estado de todos sus certificados mediante
el aws iot list-certificates comando.
• Mostrar los detalles de un certificado
Si conoce el identificador del certificado, este comando le muestra información más detallada sobre
el certificado.
1494
AWS IoT Core Guía para desarrolladores
Autorización
Elija el certificado que va a utilizar para conectarse de la lista para abrir su página de detalles.
El estado del certificado se puede cambiar mediante el menú Acciones de la esquina superior
derecha de la página de detalles.
Autorización
AWS IoTlos recursos Políticas de AWS IoT Core (p. 351) se utilizan para autorizar a esos recursos a
realizar acciones (p. 352). Para que se autorice una acción, los AWS IoT recursos especificados deben
tener un documento de política adjunto que otorgue permiso para realizar esa acción.
He recibido una respuesta PUBNACK o SUBNACK del agente. ¿Qué tengo que hacer?
Asegúrese de que el certificado que utilice para llamar a AWS IoT tenga una política asociada. De
forma predeterminada, todas las operaciones de publicación o suscripción se deniegan.
Asegúrese de que la política adjunta autorice las acciones (p. 352) que intenta realizar.
Asegúrese de que la política adjunta autorice los recursos (p. 354) que intentan realizar las acciones
autorizadas.
Tengo una entrada AUTHORIZATION_FAILURE en mis registros.
Asegúrese de que el certificado que utilice para llamar a AWS IoT tenga una política asociada. De
forma predeterminada, todas las operaciones de publicación o suscripción se deniegan.
Asegúrese de que la política adjunta autorice las acciones (p. 352) que intenta realizar.
Asegúrese de que la política adjunta autorice los recursos (p. 354) que intentan realizar las acciones
autorizadas.
¿Cómo compruebo lo que autoriza la política?
Elija el certificado que va a utilizar para conectarse de la lista para abrir su página de detalles.
En el menú de la izquierda de la página de detalles del certificado, elija Políticas para ver las políticas
adjuntas al certificado.
En la página de detalles de la política, revise el documento de política de la política para ver qué
autoriza.
Seguridad e identidad
Al proporcionar los certificados de servidor para la configuración de dominio AWS IoT personalizada, los
certificados tienen un máximo de cuatro nombres de dominio.
1495
AWS IoT Core Guía para desarrolladores
Diagnóstico de problemas de las reglas
Para obtener más información, consulte Puntos de enlace y cuotas de AWS IoT Core.
En esta sección se describen algunas de las cosas que se deben comprobar cuando se produce un
problema con la regla.
El problema más habitual de las reglas es la autorización. Los registros muestran si su función no está
autorizada a desempeñarse AssumeRole en el recurso. A continuación hay un log de ejemplo generado
por el registro detallado (p. 464):
{
"timestamp": "2017-12-09 22:49:17.954",
"logLevel": "ERROR",
"traceId": "ff563525-6469-506a-e141-78d40375fc4e",
"accountId": "123456789012",
"status": "Failure",
"eventType": "RuleExecution",
"clientId": "iotconsole-123456789012-3",
"topicName": "test-topic",
"ruleName": "rule1",
"ruleAction": "DynamoAction",
"resources": {
"ItemHashKeyField": "id",
"Table": "trashbin",
"Operation": "Insert",
"ItemHashKeyValue": "id",
"IsPayloadJSON": "true"
},
"principalId": "ABCDEFG1234567ABCD890:outis",
"details": "User: arn:aws:sts::123456789012:assumed-role/dynamo-testbin/5aUMInJH
is not authorized to perform: dynamodb:PutItem on resource: arn:aws:dynamodb:us-
east-1:123456789012:table/testbin (Service: AmazonDynamoDBv2; Status Code: 400; Error Code:
AccessDeniedException; Request ID: AKQJ987654321AKQJ123456789AKQJ987654321AKQJ987654321)"
}
A continuación hay un log de ejemplo similar generado por el registro global (p. 462):
1496
AWS IoT Core Guía para desarrolladores
Diagnóstico de servicios externos
Para obtener más información, consulte the section called “VisualizaciónAWS IoTinicia sesión en
CloudWatch consola” (p. 482).
Revise los nombres de objetos y propiedades utilizados en la consulta con los utilizados en el
documento JSON de la carga de mensajes del tema. Para obtener más información sobre el formato
JSON en las consultas SQL, consulteExtensiones JSON (p. 672).
• Compruebe si los nombres de los objetos o propiedades JSON incluyen caracteres reservados o
numéricos.
Para obtener más información sobre los caracteres reservados en las referencias a objetos JSON en las
consultas SQL, consulteExtensiones JSON (p. 672).
Diagnóstico de sombras
1497
AWS IoT Core Guía para desarrolladores
Diagnosticar problemas con acciones de Salesforce
He recibido un error que indica que la sombra del La sombra del dispositivo admite únicamente
dispositivo supera el tamaño máximo permitido. 8 KB de datos. Intente acortar los nombres de los
campos que están dentro del documento JSON
o cree más sombras generando más objetos.
Un dispositivo puede tener asociado un número
ilimitado de objetos o sombras. El único requisito
es que cada nombre de objeto debe ser único en la
cuenta.
Cuando recibo la sombra de un dispositivo, esta En la recepción, el servicio de AWS IoT agrega
supera los 8 KB. ¿Por qué pasa esto? metadatos a la sombra del dispositivo. El servicio
incluye estos datos en su respuesta, pero no
cuentan para el límite de 8 KB. Para calcular el
límite, solo se tienen en cuenta los datos de estado
desired y reported del documento de estado
enviado a la sombra del dispositivo.
Mi solicitud se ha rechazado porque la versión es Realice una operación GET para sincronizarse con
incorrecta. ¿Qué tengo que hacer? la última versión del documento de estado. Al usar
MQTT, suscríbase al tema /update/accepted para
recibir notificaciones sobre cambios de estado y la
última versión del documento JSON.
La marca de tiempo está desajustada en varios El servicio AWS IoT actualiza la marca de tiempo
segundos. de algunos campos individuales y de todo el
documento JSON cuando los recibe; la marca de
tiempo también se actualiza cuando el documento
de estado se publica en el mensaje ./update/
accepted y ./update/delta. Los mensajes pueden
retrasarse en la red, lo que puede provocar una
demora de varios segundos en la marca de tiempo.
Mi dispositivo puede publicar en los temas de Asegúrese de haber creado políticas en IAM que
sombra correspondientes y suscribirse a ellos, permitan el acceso a estos temas y a la acción
pero cuando intento actualizar el documento de correspondiente (UPDATE/GET/DELETE) para las
sombra mediante la API de REST de HTTP, recibo credenciales que utilice. Las políticas de IAM y las
un mensaje HTTP 403. políticas de certificados son independientes.
1498
AWS IoT Core Guía para desarrolladores
Registro de seguimiento de ejecución
Consulte la sección SupervisarAWS IoTusando CloudWatch Registros (p. 482). Una vez que haya
activado los registros, podrá ver el seguimiento de la ejecución de la acción de Salesforce.
Vea los registros generados por la ejecución de la acción de Salesforce en CloudWatch Registros.
Si aparece Action executed successfully, eso significa que el motor de reglas de AWS IoT
recibió la confirmación de Salesforce IoT de que el mensaje se envió correctamente al flujo de entrada
de destino.
Si tiene problemas con la plataforma de Salesforce IoT, póngase en contacto con la ayuda de
Salesforce IoT.
¿Qué hago si los mensajes no se han enviado correctamente a un flujo de entrada de Salesforce IoT?
Vea los registros generados por la ejecución de la acción de Salesforce en CloudWatch Registros. En
función de la entrada de registro, puede realizar las siguientes operaciones:
Failed to locate the host
Compruebe que el parámetro url de la acción es correcto y que el flujo de entrada de Salesforce
IoT existe.
Received Internal Server Error from Salesforce
Salesforce IoT no admite una carga binaria en este momento. Compruebe que está enviando una
carga JSON.
Received Unauthorized Exception from Salesforce
Compruebe que el parámetro token de la acción es correcto y que su token sigue siendo válido.
Received Not Found Exception from Salesforce
Compruebe que el parámetro url de la acción es correcto y que el flujo de entrada de Salesforce
IoT existe.
Si recibes un error que no aparece aquí, ponte en contacto con el servicio de AWS IoT asistencia.
1499
AWS IoT Core Guía para desarrolladores
Solución de problemas de consultas de
agregación en el servicio de indexación de flotas
Para realizar consultas de agregación en campos no administrados, debe especificar un campo que
haya definido en el customFields argumento pasado a UpdateIndexingConfiguration o. update-
indexing-configuration Si el valor del campo no coincide con el tipo de datos del campo configurado, este
valor se omite al realizar una consulta de agregación.
Si un campo no se puede indexar porque un tipo no coincide, el servicio de indexación de flotas envía
un registro de errores a Logs. CloudWatch El registro de errores contiene el nombre del campo, el valor
que no se pudo convertir y el nombre de objeto del dispositivo. A continuación, se muestra un ejemplo de
registro de error.
{
"timestamp": "2017-02-20 20:31:22.932",
"logLevel": "ERROR",
"traceId": "79738924-1025-3a00-a669-7bec69f7f07a",
"accountId": "000000000000",
"status": "SucceededWithIssues",
"eventType": "IndexingCustomFieldFailed",
"thingName": "thing0",
"failedCustomFields": [
{
"Name": "attributeName1",
"Value": "apple",
"ExpectedType": "String"
},
{
"Name": "attributeName2",
"Value": "2",
"ExpectedType": "Boolean"
}
]
}
Si un dispositivo se ha desconectado durante aproximadamente una hora, el valor timestamp del estado
de conectividad podría no aparecer. En el caso de las sesiones persistentes, es posible que falte el valor
después de que un cliente haya estado desconectado durante más tiempo del configurado time-to-live
(TTL) para la sesión persistente. Los datos de estado de conectividad solo se indexan para las conexiones
donde el ID de cliente tiene un nombre de objeto coincidente. (El ID de cliente es el valor que se utiliza
para conectar un dispositivo a AWS IoT Core).
No se admite la rebaja de la configuración de indexación de flotas cuando se desean eliminar las fuentes
de datos asociadas a una métrica de flota o a un grupo dinámico.
Por ejemplo, si la configuración de indexación contiene datos de registro, datos ocultos y datos
de conectividad, y la consulta incluye una métrica de flotathingName:TempSensor* AND
1500
AWS IoT Core Guía para desarrolladores
Solución de problemas de métricas de flota
No se admite la modificación de los campos personalizados utilizados en las métricas de flota existentes.
Si puedes crear una métrica de flota pero no puedes ver los puntos de datos en ellaCloudWatch, es
probable que no tengas nada que cumpla con los criterios de la cadena de consulta.
Consulte este comando de ejemplo sobre cómo crear una métrica de flota:
• Con values=count ella, podrás crear una métrica de flota y habrá puntos de datos en los que
mostrarCloudWatch. Los puntos de datos del valor count son siempre 0.
• Si values no es count así, podrás crear una métrica de flota, pero no verás la métrica de flota
CloudWatch y no habrá puntos de datos en los que mostrarCloudWatch.
Si aparece "Error: You have exceeded the limit for the number of streams in your
AWS account.", puede limpiar las secuencias no utilizadas de su cuenta en lugar de solicitar un aumento
del límite.
Para limpiar una transmisión no utilizada que creaste con el SDK AWS CLI o el SDK, sigue estos pasos:
1501
AWS IoT Core Guía para desarrolladores
Guía para solucionar problemas
de AWS IoT Device Defender
General
P: ¿Hay algún requisito previo para usar AWS IoT Device Defender?
R: Si desea utilizar métricas registradas por el dispositivo, primero debe implementar un agente en
sus dispositivos AWS IoT conectados o en las gateways de dispositivos. Los dispositivos deben
proporcionar un identificador de cliente o nombre de objeto coherentes.
Auditoría
P: Permití una comprobación y mi auditoría ha estado mostrando "En curso" durante mucho tiempo. ¿Hay
algún problema? ¿Cuándo recibiré los resultados?
Detect
P: ¿Cómo puedo conocer los umbrales que se establecen en un comportamiento del perfil de seguridad de
AWS IoT Device Defender?
R: Comience por crear un comportamiento del perfil de seguridad con umbrales bajos y asócielo a un
grupo de objetos que conste de un conjunto representativo de dispositivos. Puede utilizar AWS IoT
Device Defender para ver las métricas actuales y después ajustar el comportamiento de los umbrales
para que coincidan con su caso de uso.
P: He creado un comportamiento, pero no activa una vulneración cuando la espero. ¿Cómo debo
solucionarlo?
{
"name": "Listening TCP Ports",
"metric": "aws:listening-tcp-ports",
"criteria": {
"comparisonOperator": "in-port-set",
"value": {
"ports": [ 8888 ]
}
}
}
Si la cámara realiza una conexión TCP en el puerto TCP 443, el comportamiento del dispositivo se
infringiría y se activaría una alerta.
1502
AWS IoT Core Guía para desarrolladores
Guía para solucionar problemas
de AWS IoT Device Defender
R: Las alarmas se desactivan después de que el dispositivo retoma un comportamiento esperado, tal
y como se define en los perfiles de comportamiento. Los perfiles de comportamiento se evalúan al
recibir los datos de las métricas de su dispositivo. Si el dispositivo no publica ninguna métrica durante
más de dos días, el evento de vulneración se establece en alarm-invalidated automáticamente.
P: Eliminé un comportamiento que generaba una vulneración; ¿cómo puedo detener las alertas?
Métricas de dispositivo
P: Estoy enviando informes de métricas que sé que vulneran mis comportamientos, pero no se activa
ninguna vulneración. ¿Por qué?
R: Verifique que sus informes de métricas se estén aceptando suscribiéndose a los siguientes temas
de MQTT:
$aws/things/THING_NAME/defender/metrics/FORMAT/rejected
$aws/things/THING_NAME/defender/metrics/FORMAT/accepted
THING_NAMEes el nombre del elemento que informa de la métrica y FORMAT es «JSON» o «CBOR»,
según el formato del informe de métricas enviado por el elemento.
Una vez que se haya suscrito, debe recibir mensajes sobre estos temas para cada informe de
métrica enviado. Un mensaje rejected indica que hubo un problema al analizar el informe de
métrica. Se incluye un mensaje de error en la carga del mensaje para ayudarle a corregir cualquier
error en su informe de métrica. Un accepted mensaje indica que el informe de métricas se analizó
correctamente.
P: ¿Qué sucede si envío una métrica vacía en mi informe de métrica?
R: Una lista vacía de puertos o direcciones IP se considera siempre que está en conformidad con el
comportamiento correspondiente. Si el comportamiento correspondiente supusiera una vulneración, la
vulneración se eliminaría.
P: ¿Por qué los informes de métricas de mi dispositivo contienen mensajes para dispositivos que no están
en el registro de AWS IoT?
Si tiene uno o varios perfiles de seguridad asociados a todos los objetos o a todos los objetos no
registrados, AWS IoT Device Defender incluye métricas de los objetos no registrados. Si desea excluir
las métricas de objetos no registrados, puede asociar los perfiles a todos los dispositivos registrados
en lugar de a todos los dispositivos.
P: No veo los mensajes de uno o varios dispositivos no registrados a pesar de que puedo aplicar un perfil
de seguridad a todos los dispositivos no registrados o a todos los dispositivos. ¿Cómo puedo solucionarlo?
Comprueba que estás enviando un informe de métricas bien redactado con uno de los formatos
admitidos. Para obtener información, consulte Especificación de documentos de métricas de
dispositivos (p. 1103). Compruebe que los dispositivos no registrados utilizan un identificador de
cliente o nombre de objeto coherentes. Si el nombre del elemento contiene caracteres de control o
tiene más de 128 bytes de caracteres codificados en UTF-8, se rechazan los mensajes notificados por
los dispositivos.
P: ¿Qué sucede si un dispositivo no registrado se añade al registro o si un dispositivo registrado deja de
estarlo?
1503
AWS IoT Core Guía para desarrolladores
Guía para solucionar problemas
de AWS IoT Device Defender
• Verá dos vulneraciones independientes para el dispositivo (una en su nombre de objeto registrado
y otra en su identidad no registrada) si se siguen publicando métricas para las vulneraciones. Las
vulneraciones activas de la identidad antigua dejan de aparecer al cabo de dos días, pero están
disponibles en el historial de vulneraciones durante un máximo de 14 días.
P: ¿Qué valor debo proporcionar en el campo de ID del informe de métricas de mi dispositivo?
R: Utilice un valor único para cada informe de métrica, expresado como un número entero positivo.
Una práctica común es utilizar una marca de tiempo Epoch de Unix.
P: ¿Debo crear una conexión con MQTT dedicada para las métricas de AWS IoT Device Defender?
Para dispositivos (objetos) que estén el registro de AWS IoT registro, utilice el nombre del objeto
registrado. Para los productos que no estén en el registro de AWS IoT, utilice un identificador
coherente al conectarse a AWS IoT. Esta práctica le permite crear una correspondencia entre las
vulneraciones y el nombre de objeto.
P: ¿Puedo publicar métricas para un dispositivo con un ID de cliente diferente?
Es posible publicar métricas en nombre de otro objeto. Para ello, publique las métricas en el tema de
AWS IoT Device Defender reservado para dicho dispositivo. Por ejemplo, Thing-1 desea publicar
métricas de sí mismo y también en nombre de Thing-2. Thing-1 recopila sus propias métricas y las
publica en el tema de MQTT:
$aws/things/Thing-1/defender/metrics/json
Thing-1 obtiene las métricas de Thing-2 y publica dichas métricas en el tema de MQTT:
$aws/things/Thing-2/defender/metrics/json
R: Un rol que permite a AWS IoT Device Defender publicar alertas en un destino de alerta (tema de
SNS) requiere dos cosas:
• Una relación de confianza que especifique iot.amazonaws.com como la entidad de confianza y
• Una política asociada que conceda a AWS IoT permiso para publicar en un tema de SNS
especificado. Por ejemplo:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "<sns-topic-arn>"
}
]
}
• Si el tema de SNS utilizado para publicar alertas es un tema cifrado, se le AWS IoT deben conceder
dos permisos más, además del permiso para publicar en el tema de SNS. Por ejemplo:
{
"Version": "2012-10-17",
1504
AWS IoT Core Guía para desarrolladores
AWS IoTGuía de solución de problemas de Device Advisor
"Statement": [
{
"Effect": "Allow",
"Action": [
"sns:Publish",
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "<sns-topic-arn>"
}
]
}
P: El envío de mi informe de métricas con un tipo de métrica personalizado number no funciona y aparece
el mensaje de errorMalformed metrics report. ¿Por qué?
R: El tipo number solo toma un único valor de métrica como entrada, pero al enviar el valor de la
métrica en el DeviceMetrics informe, debe pasarse como una matriz con un solo valor. Asegúrese de
enviar el valor de la métrica como una matriz.
{"header":{"report_id":12334567,"version":"1.0"},"metrics":{"network_stats":
{"bytes_in":30680,"bytes_out":10652,"packets_in":113,"packets_out":118}},"custom_metrics":
{"my_custom_metric":{"number":0}}}
Mensaje de error:
{"thingName":"myThing","status":"REJECTED","statusDetails":
{"ErrorCode":"InvalidPayload","ErrorMessage":"Malformed metrics
report"},"timestamp":1635802047699}
{"header":{"report_id":12334567,"version":"1.0"},"metrics":{"network_stats":
{"bytes_in":30680,"bytes_out":10652,"packets_in":113,"packets_out":118}},"custom_metrics":
{"my_custom_metric":[{"number":0}]}}
Response: (Respuesta:)
{"thingName":"myThing","12334567":1635800375,"status":"ACCEPTED","timestamp":1635801636023}
General
R: Sí. Device Advisor ahora admite la ejecución de varios conjuntos de pruebas en diferentes
dispositivos mediante un punto final a nivel de dispositivo. Si usa el punto de conexión a nivel de
1505
AWS IoT Core Guía para desarrolladores
AWS IoTGuía de solución de problemas de Device Advisor
cuenta, puede ejecutar un conjunto a la vez, ya que hay un punto de conexión de Device Advisor
disponible por cuenta. Para obtener más información, consulte Configurar el dispositivo.
P: He visto en mi dispositivo que Device Advisor ha denegado la conexión TLS. ¿Es lo que se espera?
R: Sí. Device Advisor niega la conexión TLS antes y después de cada ejecución de prueba.
Recomendamos que los usuarios implementen un mecanismo de reintento del dispositivo para tener
una experiencia de prueba totalmente automatizada con Device Advisor. Si ejecuta un conjunto de
pruebas con más de un caso de prueba, por ejemplo, TLS connect, MQTT connect y MQTT publish, le
recomendamos que cree un mecanismo para su dispositivo. El mecanismo puede intentar conectarse
a nuestro punto final de prueba cada 5 segundos durante uno o dos minutos. De esta forma, puede
ejecutar varios casos de prueba en secuencia de forma automática.
P: ¿Puedo obtener un historial de las llamadas a la API de Device Advisor realizadas en mi cuenta para
analizar la seguridad y solucionar problemas operativos?
R: Sí. Para recibir un historial de las llamadas a la API de Device Advisor realizadas CloudTrail
en su cuenta, solo tiene que activar la consola de AWS IoT administración y filtrar el origen del
eventoiotdeviceadvisor.amazonaws.com.
P: ¿Cómo puedo ver los inicios de sesión de Device AdvisorCloudWatch?
R: Device Advisor se interpone entre su dispositivo de prueba y AWS IoT Core para simular
escenarios de prueba. Acepta conexiones y mensajes de tus dispositivos de prueba y los reenvía
AWS IoT Core asumiendo la función de permiso de tu dispositivo e iniciando una conexión en tu
nombre. Es importante asegurarse de que los permisos de rol del dispositivo sean los mismos que
los del certificado que utilizas para ejecutar las pruebas. AWS IoTlas políticas de certificados no se
aplican cuando Device Advisor inicia una conexión AWS IoT Core en su nombre mediante la función
de permiso del dispositivo. Sin embargo, se aplican los permisos del rol de permisos de dispositivo
que haya establecido.
P: ¿En qué regiones se admite Device Advisor?
R: Device Advisor es compatible con las regiones us-east-1, us-west-2, ap-northeast-1 y eu-west-1.
P: ¿Por qué veo resultados inconsistentes?
R: Device Advisor admite la versión 3.1.1 de MQTT con certificados de cliente X509.
P: ¿Qué pasa si mi caso de prueba no funciona y aparece un mensaje de finalización de la ejecución a
pesar de haber intentado conectar mi dispositivo al terminal de prueba?
R: Valide todos los pasos indicados en Crear un rol de IAM para usarlo como rol de dispositivo. Si
la prueba sigue fallando, es posible que el dispositivo no esté enviando la extensión correcta de
indicación del nombre del servidor (SNI), necesaria para que Device Advisor funcione. El valor de
SNI correcto es la dirección del punto de conexión que se devuelve al seguir la sección Configurar
1506
AWS IoT Core Guía para desarrolladores
Solución de problemas de
desconexiones de flotas de dispositivos
el dispositivo. AWS IoTtambién requiere que los dispositivos envíen la extensión de indicación del
nombre del servidor (SNI) al protocolo Transport Layer Security (TLS). Para obtener más información,
consulte Seguridad del transporte en AWS IoT.
P: Mi conexión MQTT falla y se produce el error «libaws-c-mqtt:
AWS_ERROR_MQTT_UNEXPECTED_HANGUP» (o) la conexión MQTT de mi dispositivo se desconecta
automáticamente del terminal de Device Advisor. ¿Cómo se puede solucionar este error?
R: Este código de error concreto y las desconexiones inesperadas pueden deberse a muchos factores
diferentes, pero lo más probable es que estén relacionados con la función del dispositivo asociada al
dispositivo. Los siguientes puntos de control (en orden de prioridad) resolverán este problema.
• La función de dispositivo adjunta al dispositivo debe tener los permisos de IAM mínimos necesarios
para ejecutar las pruebas. Device Advisor utilizará la función de dispositivo adjunta para realizar
acciones de AWS IoT MQTT en nombre del dispositivo de prueba. Si no hay los permisos
necesarios, aparecerá el AWS_ERROR_MQTT_UNEXPECTED_HANGUP error o se producirán
desconexiones inesperadas mientras el dispositivo intenta conectarse al terminal de Device Advisor.
Por ejemplo, si ha seleccionado ejecutar el caso de prueba de publicación de MQTT, las acciones
de conexión y publicación deben incluirse en el rol con el correspondiente ClientId y el tema (puede
proporcionar varios valores mediante comas para separar los valores y puede proporcionar valores
de prefijo con un carácter comodín (*). Por ejemplo: para proporcionar permisos para publicar sobre
cualquier tema que comience porTestTopic, puede proporcionar «TestTopic*» como valor del
recurso. Estos son algunos ejemplos de políticas.
• No hay coincidencia entre los valores definidos en la función de dispositivo para los tipos de
recursos y los valores reales utilizados en el código. Por ejemplo: hay una discrepancia ClientId
definida en la función y la que ClientId se utiliza realmente en el código del dispositivo. Los valores
como ClientId Tema y TopicFilter deben ser idénticos en la función y el código del dispositivo.
• El certificado de dispositivo adjunto al dispositivo debe estar activo y tener una política adjunta con
los permisos de acción necesarios para los recursos. Tenga en cuenta que la política de certificados
de dispositivos otorga o deniega el acceso a AWS IoT los recursos y a las operaciones del plano de
AWS IoT Core datos. Device Advisor requiere que tengas un certificado de dispositivo activo adjunto
al dispositivo que otorgue los permisos de acción utilizados durante un caso de prueba.
AWS IoTlas desconexiones de la flota de dispositivos pueden ocurrir por varios motivos. En este artículo se
explica cómo diagnosticar un motivo de desconexión y cómo gestionar las desconexiones causadas por el
mantenimiento regular del AWS IoT servicio o por un límite de limitación.
También puede utilizar AWS IoT la función de eventos del ciclo de vida para identificar el motivo
de la desconexión. Si te has suscrito al evento de desconexión ($aws/events/presence/
disconnected/clientId) de lifecycle, recibirás una notificación AWS IoT cuando se produzca la
desconexión. Puede identificar el motivo de la desconexión en el disconnectReason campo de la
notificación.
Para obtener más información, consulte las entradas de CloudWatch AWS IoT registro y los eventos del
ciclo de vida.
1507
AWS IoT Core Guía para desarrolladores
Errores de AWS IoT
Para solucionar problemas de desconexiones debidas al AWS IoT mantenimiento del servicio
Las desconexiones causadas por AWS IoT el mantenimiento del servicio se registran como eventos
SERVER_INITIATED_DISCONNECT AWS IoT del ciclo de vida y. CloudWatch Para gestionar estas
desconexiones, ajusta la configuración del lado del cliente para asegurarte de que los dispositivos se
puedan volver a conectar automáticamente a la plataforma. AWS IoT
Las desconexiones causadas por un límite de limitación se registran como evento AWS IoT del ciclo
THROTTLED de vida y. CloudWatch Para gestionar estas desconexiones, puede solicitar que el límite del
agente de mensajes aumente a medida que aumente el número de dispositivos.
En esta sección se presentan los códigos de error que envía AWS IoT.
403 prohibido.
403 prohibido.
404 No encontrado.
409 Conflicto.
1508
AWS IoT Core Guía para desarrolladores
Errores de AWS IoT
1509
AWS IoT Core Guía para desarrolladores
AWS IoTCuotas de
Puede encontrar información acerca deAWS IoTCuotas en elAWSReferencia general de.
• ParaAWS IoT Coreinformación de cuotas, consulteAWS IoT CoreCuotas y puntos de enlace de.
• ParaAWS IoT Device Managementinformación de cuotas, consulteAWS IoT Device ManagementCuotas
y puntos de enlace de.
• ParaAWS IoT Device Defenderinformación de cuotas, consulteAWS IoT Device DefenderCuotas y
puntos de enlace de.
1510
AWS IoT Core Guía para desarrolladores
• Para consultar la información sobre AWS IoT Core precios, consulta AWS IoT CorePrecios.
• Para calcular el costo de su solución de arquitectura, consulte la Calculadora AWS de precios.
1511
AWS IoT Core Guía para desarrolladores
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.
mdxii