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.
Configuración y solución de problemas de AWS IoT Greengrass con dispositivos cliente
Creado por Marouane Sefiani y Akalanka De Silva (AWS)
Entorno: PoC o piloto | Tecnologías: IoT | Servicios de AWS: AWS IoT Greengrass; AWS IoT Core |
Resumen
AWS IoT Greengrass es un servicio en la nube y de tiempo de ejecución de periferia de código abierto que le ayuda a crear, implementar y administrar software de Internet de las Cosas (IoT) en los dispositivos periféricos. Los casos de uso de AWS IoT Greengrass incluyen:
Hogares inteligentes en los que se utiliza una puerta de enlace de AWS IoT Greengrass como centro de automatización del hogar
Fábricas inteligentes donde AWS IoT Greengrass puede facilitar la incorporación y el procesamiento local de datos desde el taller
AWS IoT Greengrass puede actuar como un punto de conexión MQTT seguro y autenticado para otros dispositivos periféricos (también conocidos como dispositivos cliente) que, de otro modo, normalmente se conectarían directamente a AWS IoT Core. Esta capacidad resulta útil cuando los dispositivos cliente no tienen acceso directo a la red del punto de conexión de AWS IoT Core.
Puede configurar AWS IoT Greengrass para su uso con dispositivos cliente en los siguientes casos de uso:
Para que los dispositivos cliente envíen datos a AWS IoT Greengrass
Para que AWS IoT Greengrass reenvíe datos a AWS IoT Core
Para aprovechar las características avanzadas del motor de reglas de AWS IoT Core
Estas capacidades requieren la instalación y configuración de los siguientes componentes en el dispositivo AWS IoT Greengrass:
Intermediario MQTT
Puente MQTT
Autenticación del dispositivo cliente
Detector de IP
Además, los mensajes publicados desde los dispositivos cliente deben estar en formato JSON o en formato Protocol Buffers (protobuf)
Este patrón describe cómo instalar y configurar estos componentes necesarios y proporciona consejos para la solución de problemas y las prácticas recomendadas.
Requisitos previos y limitaciones
Requisitos previos
Una cuenta de AWS activa
Dos dispositivos cliente con Python 3.7 o posterior
Un dispositivo central que ejecute Java Runtime Environment (JRE) versión 8 o posterior y Amazon Corretto 11
u OpenJDK 11
Limitaciones
Debe elegir una región de AWS en la que esté disponible AWS IoT Core. Para ver la lista actual de regiones de AWS IoT Core, consulte Servicios de AWS por región
. El dispositivo principal debe tener al menos 172 MB de RAM y 512 MB de espacio en disco.
Arquitectura
El siguiente diagrama muestra la arquitectura de soluciones para este patrón.
La arquitectura incluye:
Dos dispositivos cliente. Cada dispositivo contiene una clave privada, un certificado de dispositivo y un certificado de la entidad de certificación (CA) raíz. El SDK para dispositivos de AWS IoT, que contiene un cliente MQTT, también está instalado en cada dispositivo cliente.
Un dispositivo principal que haya implementado AWS IoT Greengrass con los siguientes componentes:
Intermediario MQTT
Puente MQTT
Autenticación del dispositivo cliente
Detector de IP
Esta arquitectura admite los siguientes escenarios:
Los dispositivos cliente pueden usar su cliente MQTT para comunicarse entre sí a través del intermediario MQTT del dispositivo principal.
Los dispositivos cliente también pueden comunicarse con AWS IoT Core en la nube a través del intermediario MQTT del dispositivo principal y el puente MQTT.
AWS IoT Core en la nube puede enviar mensajes a los dispositivos cliente a través del cliente de prueba MQTT y el puento MQTT y el intermediario MQTT del dispositivo principal.
Para obtener más información sobre las comunicaciones entre los dispositivos cliente y el dispositivo principal, consulte la sección información adicional.
Herramientas
Servicios de AWS
AWS IoT Greengrass es un servicio en la nube y de tiempo de ejecución de borde de Internet de las Cosas (IoT) de código abierto que le ayuda a crear, implementar y administrar aplicaciones de IoT en los dispositivos.
AWS IoT Core proporciona una comunicación bidireccional segura para que los dispositivos conectados a Internet se conecten a la nube de AWS.
Los SDK de dispositivos de AWS IoT
son un kit de desarrollo de software que contienen bibliotecas de código abierto, guías de desarrolladores con ejemplos y guías de migración para que pueda crear productos o soluciones de IoT innovadores en las plataformas de hardware deseadas. AWS Identity and Access Management (IAM) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.
Prácticas recomendadas
La carga útil de los mensajes de los dispositivos cliente debe estar en formato JSON o Protobuf para aprovechar las características avanzadas del motor de reglas de AWS IoT Core, como la transformación y las acciones condicionales.
Configure el puente MQTT para permitir la comunicación bidireccional.
Configure e implemente el componente detector de IP en AWS IoT Greengrass para garantizar que las direcciones IP del dispositivo principal se incluyan en el campo del nombre alternativo del asunto (SAN) del certificado de intermediario de MQTT.
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Configurar AWS IoT Greengrass en el dispositivo principal. | Instale el software AWS IoT Greengrass Core siguiendo las instrucciones de la guía para desarrolladores. | AWS IoT Greengrass |
Compruebe el estado de la instalación. | Utilice el siguiente comando para comprobar el estado del servicio AWS IoT Greengrass en su dispositivo principal:
El resultado esperado del comando es:
| AWS general |
Configure una política de IAM y asóciela al rol de servicio de Greengrass. |
| AWS general |
Configure e implemente los componentes necesarios en el dispositivo principal de AWS IoT Greengrass. | Configure e implemente los siguientes componentes:
| AWS IoT Greengrass |
Confirme que el puente MQTT permite la comunicación bidireccional. | Para retransmitir mensajes MQTT entre los dispositivos cliente y AWS IoT Core, configure e implemente el componente puente MQTT y especifique los temas que se van a retransmitir. A continuación se muestra un ejemplo:
| AWS IoT Greengrass |
Confirme que el componente de autenticación permite a los dispositivos cliente conectarse y publicar temas o suscribirse a ellos. | La siguiente configuración
| AWS IoT Greengrass |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Instalar el SDK para dispositivos con AWS IoT. | Instale el SDK para dispositivos con AWS IoT en los dispositivos cliente. Para obtener una lista completa de los idiomas compatibles y los SDK asociados, consulte la documentación de AWS IoT Core. Por ejemplo, el SDK de dispositivos de AWS IoT para Python se encuentra en GitHub
Como opción, puede instalar el SDK desde el repositorio de origen:
| AWS IoT general |
Cree un objeto. |
| AWS IoT Core |
Descargue el certificado de CA del dispositivo principal de Greengrass. | Si espera que el dispositivo principal de Greengrass funcione en entornos fuera de línea, debe poner el certificado de CA principal de Greengrass a disposición del dispositivo cliente para que pueda verificar el certificado del intermediario MQTT (emitido por la CA principal de Greengrass). Por lo tanto, es importante obtener una copia de este certificado. Utilice alguna de los siguientes opciones para descargar el certificado de CA:
| AWS general |
Copiar las credenciales en los dispositivos cliente. | Copiar el certificado de CA principal de Greengrass, el certificado del dispositivo y la clave privada en los dispositivos cliente. | AWS general |
Asociar los dispositivos cliente al dispositivo principal. | Asociar los dispositivos cliente a un dispositivo principal para que puedan detectar el dispositivo principal. A continuación, los dispositivos cliente pueden usar la API de descubrimiento de Greengrass para recuperar la información de conectividad y los certificados de sus dispositivos principales asociados. Para obtener más información, consulte Asociación de dispositivos cliente en la documentación de AWS IoT Greengrass.
Los dispositivos cliente que asoció ahora pueden usar la API de detección de Greengrass para detectar este dispositivo principal. | AWS IoT Greengrass |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Enviar datos de un dispositivo cliente a otro dispositivo cliente. | Utilice el cliente MQTT de su dispositivo para publicar un mensaje sobre el tema | AWS general |
Envíe datos desde el dispositivo cliente a AWS IoT Core. | Utilice el cliente MQTT de su dispositivo para publicar un mensaje sobre el tema En el cliente de prueba de MQTT, suscríbase al tema sobre el que el dispositivo está enviando mensajes o suscríbase a # para todos los temas (consulte los detalles). | AWS general |
Enviar mensajes desde AWS IoT Core a dispositivos cliente. | En la página del cliente de prueba de MQTT, en la pestaña Publish to a topic (Publicar en un tema), en el campo Topic name (Nombre del tema), introduzca el nombre del tema de su mensaje. En este ejemplo, utilice | AWS general |
Resolución de problemas
Problema | Solución |
---|---|
No se pudo verificar el error del certificado del servidor | Este error se produce cuando el cliente MQTT no puede verificar el certificado presentado por el intermediario MQTT durante el protocolo de enlace TLS. La razón más común es que el cliente MQTT no tiene el certificado de CA. Siga estos pasos para asegurarse de que el certificado de CA se proporciona al cliente MQTT.
|
No se pudo verificar el error del nombre del servidor | Este error se produce cuando el cliente MQTT no puede comprobar que se está conectando al servidor correcto. La razón más común es que la dirección IP del dispositivo Greengrass no aparece en el campo SAN del certificado. Siga las instrucciones de la solución anterior para obtener el certificado de intermediario MQTT y compruebe que el campo SAN contiene la dirección IP del dispositivo AWS IoT Greengrass, tal y como se explica en la sección Información adicional. Si no es así, confirme que el componente del detector de IP está instalado correctamente y reinicie el dispositivo principal. |
No se puede verificar el nombre del servidor solo cuando se conecta desde un dispositivo cliente integrado | Mbed TLS, que es una biblioteca TLS popular que se utiliza en los dispositivos integrados, actualmente solo admite la verificación de nombres DNS en el campo SAN del certificado, como se muestra en el código de la biblioteca Mbed TLS. Como el dispositivo principal no tiene su propio nombre de dominio y depende de la dirección IP, los clientes de TLS que utilizan Mbed TLS no pasarán la verificación del nombre del servidor durante el protocolo de enlace TLS, lo que provocará un fallo de conexión. Recomendamos que añada la verificación de la dirección IP de SAN a la biblioteca Mbed TLS en la función x509_crt_check_san |
Recursos relacionados
Implementación de dispositivos de clientes locales con AWS IoT Greengrass
(entrada del blog de AWS)
Información adicional
Esta sección ofrece información adicional sobre las comunicaciones entre los dispositivos cliente y el dispositivo principal.
El intermediario MQTT escucha en el puerto 8883 del dispositivo principal los intentos de conexión con un cliente TLS. En la siguiente ilustración se muestra un ejemplo de un certificado de servidor de intermediario MQTT.
El certificado de ejemplo muestra los siguientes detalles:
El certificado lo emite la CA principal de AWS IoT Greengrass, que es local y específica del dispositivo principal; es decir, actúa como una CA local.
El componente de autenticación del cliente rota automáticamente este certificado cada semana, como se muestra en la siguiente ilustración. Puede establecer este intervalo en la configuración del componente de autenticación del cliente.
El nombre alternativo del asunto (SAN) desempeña un papel fundamental en la verificación del nombre del servidor por parte del cliente TLS. Ayuda al cliente TLS a garantizar que se conecta al servidor correcto y ayuda a evitar man-in-the-middle ataques durante la configuración de la sesión TLS. En el certificado de ejemplo, el campo SAN indica que este servidor escucha en localhost (el conector de dominio Unix local) y que la interfaz de red tiene la dirección IP 192.168.1.12.
El cliente TLS utiliza el campo SAN del certificado para comprobar que se está conectando a un servidor legítimo durante la verificación del servidor. Por el contrario, durante un protocolo de enlace TLS típico entre un servidor HTTP y un navegador, el nombre de dominio del campo del nombre común (CN) o del campo SAN se utiliza para comprobar el dominio al que se está conectando realmente el navegador durante el proceso de verificación del servidor. Si el dispositivo principal no tiene un nombre de dominio, la dirección IP incluida en el campo SAN sirve para el mismo propósito. Para obtener más información, consulte la sección Nombre alternativo del asunto
El componente detector de IP de AWS IoT Greengrass garantiza que se incluyan las direcciones IP correctas en el campo SAN del certificado.
El certificado del ejemplo lo firma el dispositivo AWS IoT Greengrass que actúa como CA local. El cliente TLS (cliente MQTT) no conoce esta CA, por lo que debemos proporcionar un certificado de CA similar al siguiente.