Configuración y solución de problemas de AWS IoT Greengrass con dispositivos cliente - Recomendaciones de AWS

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

AWSservicios: AWS IoT Greengrass; IoT Core AWS

Resumen

AWSIoT Greengrass es un servicio en la nube y de tiempo de ejecución perimetral de código abierto para crear, implementar y administrar software de Internet de las cosas (IoT) en dispositivos periféricos. Los casos de uso de AWS IoT Greengrass incluyen:

  • Hogares inteligentes donde se utiliza una puerta de enlace AWS IoT Greengrass como centro de automatización del hogar

  • Fábricas inteligentes donde el AWS IoT Greengrass puede facilitar la ingesta y el procesamiento local de los datos del taller

AWSIoT Greengrass puede actuar como un punto de MQTT conexión seguro y autenticado para otros dispositivos periféricos (también conocidos como dispositivos cliente) que, de otro modo, normalmente se conectarían directamente a IoT AWS Core. Esta capacidad resulta útil cuando los dispositivos cliente no tienen acceso directo a la red al punto final 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 IoT Core AWS

  • Para aprovechar las funciones avanzadas del motor de reglas de AWS IoT Core

Estas capacidades requieren la instalación y configuración de los siguientes componentes en el AWS dispositivo IoT Greengrass:

  • MQTTcorredor

  • MQTTpuente

  • Autenticación del dispositivo cliente

  • Detector de IP

Además, los mensajes publicados desde los dispositivos cliente deben estar en JSON 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 

Limitaciones

  • Debe elegir una AWS región en la que AWS IoT Core esté disponible. Para ver la lista actual de regiones de AWS IoT Core, consulte AWSServicios por región.

  • El dispositivo principal debe tener al menos 172 MB RAM y 512 MB de espacio en disco.

Arquitectura

El siguiente diagrama muestra la arquitectura de soluciones para este patrón.

Arquitectura de soluciones para configurar AWS IoT Greengrass con dispositivos cliente

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 dispositivo AWS IoTSDK, que contiene un MQTT cliente, también se instala en cada dispositivo cliente.

  • Un dispositivo central que ha implementado AWS IoT Greengrass con los siguientes componentes:

    • MQTTcorredor

    • MQTTpuente

    • Autenticación del dispositivo cliente

    • Detector de IP

Esta arquitectura admite los siguientes escenarios:

  • Los dispositivos cliente pueden usar su MQTT cliente para comunicarse entre sí a través del MQTT intermediario del dispositivo principal.

  • Los dispositivos cliente también pueden comunicarse con AWS IoT Core en la nube a través del MQTT intermediario del dispositivo principal y el MQTT puente.

  • AWSIoT Core en la nube puede enviar mensajes a los dispositivos del cliente a través del cliente de MQTT prueba y del MQTT puente y MQTT intermediario 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

AWSservicios

  • AWSIoT Greengrass es un servicio en la nube y de tiempo de ejecución perimetral del Internet de las Cosas (IoT) de código abierto que le ayuda a crear, implementar y administrar aplicaciones de IoT en sus dispositivos.

  • AWSIoT Core proporciona una comunicación bidireccional segura para que los dispositivos conectados a Internet se conecten a la nube. AWS

  • AWSIoT Device SDK es un kit de desarrollo de software que incluye bibliotecas de código abierto, guías para desarrolladores con ejemplos y guías de portabilidad para que pueda crear productos o soluciones de IoT innovadores en las plataformas de hardware que elija.

  • AWSIdentity and Access Management (IAM) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.

Prácticas recomendadas

  • La carga útil de los mensajes de los dispositivos cliente debe estar en formato Protobuf JSON o en formato Protobuf para aprovechar las funciones avanzadas del motor de reglas de AWS IoT Core, como la transformación y las acciones condicionales.

  • Configure el MQTT puente 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 del MQTT corredor.

Epics

TareaDescripciónHabilidades requeridas

Configura AWS IoT Greengrass en tu 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:

sudo systemctl status greengrass.service

El resultado esperado del comando es:

Launched Nucleus successfully
General AWS

Configure una IAM política y adjúntela al rol de servicio de Greengrass.

  1. Cree una IAM política que permita las comunicaciones hacia y desde el MQTT puente. A continuación se muestra un ejemplo de política:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:*" ], "Resource": "*" }, { "Sid": "GreengrassActions", "Effect": "Allow", "Action": [ "greengrass:*" ], "Resource": "*" } ] }
  2. Asocie la política al rol de servicio de Greengrass. Para obtener el rol de servicio, use el comando:

    aws greengrassv2 get-service-role-for-account --region <region>

    donde <region> se refiere a su AWS región.

General AWS

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 MQTT puente permita la comunicación bidireccional.

Para retransmitir MQTT mensajes entre los dispositivos cliente y AWS IoT Core, configure e implemente el componente MQTT puente y especifique los temas que se van a retransmitir. A continuación se muestra un ejemplo:

{ "mqttTopicMapping": { "ClientDevicesToCloud": { "topic": "dt/#", "source": "LocalMqtt", "target": "IotCore" }, "CloudToClientDevices": { "topic": "cmd/#", "source": "IotCore", "target": "LocalMqtt" } } }
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.greengrass.clientdevices.Auth permite que todos los dispositivos cliente se conecten, publiquen mensajes y se suscriban a todos los temas.

{ "deviceGroups": { "formatVersion": "2021-03-05", "definitions": { "MyPermissiveDeviceGroup": { "selectionRule": "thingName: *", "policyName": "MyPermissivePolicy" } }, "policies": { "MyPermissivePolicy": { "AllowAll": { "statementDescription": "Allow client devices to perform all actions.", "operations": [ "*" ], "resources": [ "*" ] } } } } }
AWS IoT Greengrass
TareaDescripciónHabilidades requeridas

Instale el dispositivo AWS IoTSDK.

Instale el dispositivo AWS IoT SDK en los dispositivos cliente. Para obtener una lista completa de los idiomas compatibles y los correspondientesSDKs, consulta la documentación básica de AWS IoT.

Por ejemplo, el dispositivo AWS IoT SDK para Python SDK está ubicado en GitHub. Para instalarloSDK:

  1. Confirme que Python 3.7 o posterior esté instalado, tal y como se indica en la página de requisitos previos del GitHub repositorio.

  2. Utilice el comando pip para instalar el. SDK

    Para macOS y Linux:

    python3 -m pip install awsiotsdk

    Para Windows:

    python -m pip install awsiotsdk

Como alternativa, puede instalarlo SDK desde el repositorio de origen:

# Create a workspace directory to hold all the SDK files mkdir sdk-workspace cd sdk-workspace # Clone the repository git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git # Install using Pip (use 'python' instead of 'python3' on Windows) python3 -m pip install ./aws-iot-device-sdk-python-v2
AWSIoT general

Cree un objeto.

  1. En la consola de AWS IoT, si aparece un botón Comenzar, elíjalo. De lo contrario, en el panel de navegación, seleccione Security Policies (Políticas de seguridad).

  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 (Crear).

  3. Introduzca un nombre para la política de AWS IoT (por ejemplo,ClientDevicePolicy).

  4. En la sección Añadir declaraciones, sustituya la política existente por el siguiente JSON código. Sustituya <region> y <account> por su AWS región y número de AWS cuenta.

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:region:account:client/*" }, { "Effect": "Allow", "Action": "iot:Publish", "Resource": "*" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": "*" }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": "arn:aws:iot:region:account:thing/*" } ] }
  5. Seleccione Crear.

  6. En la consola de AWS IoT, en el panel de navegación, selecciona Administrar, Cosas.

  7. Si aparece el cuadro de diálogo You don't have any things yet (Aún no tiene ningún objeto), elija Register a thing (Registrar un objeto). De lo contrario, seleccione Crear.

  8. En la página Crear cosas de AWS IoT, selecciona Crear una sola cosa.

  9. En la página Añadir su dispositivo al registro de dispositivos, escriba un nombre para el objeto de IoT (por ejemplo, ClientDevice1) y, a continuación, elija Siguiente.

    Nota: No puede modificar el nombre de un objeto una vez creado. Para cambiar el nombre,, debe crear otro objeto nuevo, asignarle el nuevo nombre y eliminar después el objeto anterior.

  10. En la página Add a certificate for your thing (Añadir un certificado para el objeto), elija Create certificate (Crear certificado).

  11. Elija los enlaces Descargar para descargar el certificado, la clave privada y el certificado de CA raíz.

    Importante: esta es su única oportunidad para descargar su certificado y su clave privada.

  12. Elija Activate (Activar) para activar su certificado. El certificado debe estar activo para que un dispositivo se conecte al AWS IoT.

  13. Elija Attach a policy (Asociar una política).

  14. En Añadir una política para lo tuyo ClientDevicePolicy, selecciona Registrar cosa.

AWSNúcleo de IoT

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 MQTT corredor (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:

  • Si tiene acceso a la red del dispositivo AWS IoT Greengrass desde su PC, entre https://<device IP>:8883 en su navegador web y consulte el certificado del MQTT corredor y el certificado de CA. También puede guardar el certificado de CA en el dispositivo cliente.

  • Como alternativa, puede usar la línea de SSL comandos Abrir:

    openssl s_client -showcerts -connect <device IP>:8883
General AWS

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.

General AWS

Asociar los dispositivos cliente al dispositivo principal.

Asociar los dispositivos cliente a un dispositivo principal para que puedan detectar el dispositivo principal. Luego, los dispositivos cliente pueden usar el descubrimiento de Greengrass API para recuperar la información de conectividad y los certificados de sus dispositivos principales asociados. Para obtener más información, consulte Asociar dispositivos cliente en la documentación de AWS IoT Greengrass.

  1. En la consola de AWS IoT Greengrass, selecciona Dispositivos principales.

  2. Elija el dispositivo principal que desee administrar.

  3. En la página de detalles del dispositivo principal, elija la pestaña Client devices (Dispositivos cliente).

  4. En la sección Associated client devices (Dispositivos cliente asociados), seleccione Associate client devices (Asociar dispositivos cliente).

  5. En el modal Associate client devices with core device (Asociar dispositivos cliente a dispositivos principales), haga lo siguiente para cada dispositivo cliente que desee asociar:

    1. Introduzca el nombre del elemento de AWS IoT que desee asociar como dispositivo cliente.

    2. Elija Add (Añadir).

  6. Elija Associate (Asociar).

Los dispositivos cliente que asoció ahora pueden usar el descubrimiento de Greengrass API para detectar este dispositivo principal.

AWS IoT Greengrass
TareaDescripciónHabilidades requeridas

Enviar datos de un dispositivo cliente a otro dispositivo cliente.

Utilice el MQTT cliente de su dispositivo para publicar un mensaje sobre el dt/client1/sensor tema.

General AWS

Envíe datos desde el dispositivo cliente a AWS IoT Core.

Utilice el MQTT cliente de su dispositivo para publicar un mensaje sobre el dt/client1/sensor tema.

En el cliente de MQTT prueba, suscríbete al tema sobre el que el dispositivo está enviando mensajes o suscríbete a # para todos los temas (consulta los detalles).

General AWS

Envíe mensajes desde AWS IoT Core a los dispositivos del cliente.

En la página del cliente de MQTT prueba, en la pestaña Publicar en un tema, en el campo Nombre del tema, introduzca el nombre del tema de su mensaje. En este ejemplo, utilice cmd/client1 para el tema.

General AWS

Resolución de problemas

ProblemaSolución

No se pudo verificar el error del certificado del servidor

Este error se produce cuando el MQTT cliente no puede verificar el certificado presentado por el MQTT bróker durante el TLS apretón de manos. La razón más común es que el MQTT cliente no tiene el certificado de CA. Siga estos pasos para asegurarse de que el certificado de CA se proporciona al MQTT cliente.

  1. Si tiene acceso a la red del dispositivo AWS IoT Greengrass desde su PC, entre https://<device IP>:8883 en una ventana del navegador para ver el certificado del MQTT corredor y el certificado de CA. También puede guardar el certificado de CA en el dispositivo cliente.

    También puede utilizar la línea de SSL comandos Abrir:

    openssl s_client -showcerts -connect <device IP>:8883
  2. Guardar el contenido de los certificados Moquette CA y Greengrass Core CA en archivos y, a continuación, visualizar el contenido decodificado mediante el comando:

    openssl x509 -in <Name of CA>.pem -text

    El certificado CA de Moquette debería mostrar el SAN campo como en este ejemplo:

    X509v3 Subject Alternative Name: IP Address:XXX.XXX.XXX.XXX, IP Address:127.0.0.1, DNS:localhost

No se pudo verificar el error del nombre del servidor

Este error se produce cuando el MQTT cliente 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 SAN campo del certificado.

Siga las instrucciones de la solución anterior para obtener el certificado de MQTT intermediario y compruebe que el SAN campo 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

MbedTLS, que es una TLS biblioteca popular que se utiliza en los dispositivos integrados, actualmente solo admite la verificación de DNS nombres en el SAN campo del certificado, como se muestra en el código de la biblioteca de MbedTLS. Como el dispositivo principal no tiene su propio nombre de dominio y depende de la dirección IP, los TLS clientes que utilicen Mbed no podrán comprobar el nombre del servidor durante el TLS apretón de manos, lo que TLS provocará un fallo de conexión. Le recomendamos que añada la verificación de la dirección SAN IP a su TLS biblioteca de Mbed en la función x509_crt_check_san.

Recursos relacionados

Información adicional

Esta sección ofrece información adicional sobre las comunicaciones entre los dispositivos cliente y el dispositivo principal.

El MQTT agente escucha en el puerto 8883 del dispositivo principal un intento de conexión con el cliente. TLS En la siguiente ilustración se muestra un ejemplo de certificado de servidor de un MQTT bróker.

Ejemplo de certificado de servidor MQTT intermediario

El certificado de ejemplo muestra los siguientes detalles:

  • El certificado lo emite la CA Core 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.

Rotación del certificado del servidor del MQTT bróker
  • El nombre alternativo del asunto (SAN) desempeña un papel fundamental en la verificación del nombre del servidor por parte del TLS cliente. Ayuda al TLS cliente a asegurarse de que se conecta al servidor correcto y ayuda a evitar ataques man-in-the intermedios durante la configuración de la TLS sesión. En el certificado de ejemplo, el SAN campo indica que este servidor escucha en localhost (el socket de dominio Unix local) y que la interfaz de red tiene la dirección IP 192.168.1.12.

El TLS cliente utiliza el SAN campo del certificado para comprobar que se está conectando a un servidor legítimo durante la verificación del servidor. Por el contrario, durante un TLS apretón de manos típico entre un HTTP servidor y un navegador, el nombre de dominio del campo o SAN campo del nombre común (CN) 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 SAN campo tiene el mismo propósito. Para obtener más información, consulte la sección Nombre alternativo del asunto del perfil RFC 5280: Certificado de infraestructura de clave pública X.509 de Internet y lista de revocación de certificados () CRL.

El componente detector de IP de AWS IoT Greengrass garantiza que se incluyan las direcciones IP correctas en el SAN campo del certificado.

El certificado del ejemplo lo firma el dispositivo AWS IoT Greengrass que actúa como CA local. El TLS cliente (MQTTcliente) no conoce esta CA, por lo que debemos proporcionar un certificado de CA similar al siguiente.

Ejemplo de certificado de CA