Configure e solucione problemas do AWS IoT Greengrass com dispositivos clientes - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configure e solucione problemas do AWS IoT Greengrass com dispositivos clientes

Criado por Marouane Sefiani e Akalanka De Silva (AWS)

Ambiente: PoC ou piloto

Tecnologias: IoT

Serviços da AWS: AWS IoT Greengrass; AWS IoT Core

Resumo

O AWS IoT Greengrass é um serviço de nuvem e runtime de borda de código aberto para criar, implantar e gerenciar software de Internet das Coisas (IoT) em dispositivos periféricos. Os casos de uso do AWS IoT Greengrass incluem:

  • Casas inteligentes em que um gateway do AWS IoT Greengrass é usado como um hub para automação residencial

  • Fábricas inteligentes nas quais o AWS IoT Greengrass pode facilitar a ingestão e o processamento local de dados do chão de fábrica

O AWS IoT Greengrass pode atuar como um endpoint de conexão MQTT seguro e autenticado para outros dispositivos de borda (também conhecidos como dispositivos clientes) que, de outra forma, normalmente se conectariam diretamente ao AWS IoT Core. Esse recurso é útil quando os dispositivos do cliente não têm acesso direto à rede ao endpoint do AWS IoT Core.

Você pode configurar o AWS IoT Greengrass para uso com dispositivos clientes nos seguintes casos de uso:

  • Para dispositivos clientes enviarem dados para o AWS IoT Greengrass

  • Para que o AWS IoT Greengrass encaminhe dados para o AWS IoT Core

  • Para aproveitar os recursos avançados do mecanismo de regras do AWS IoT Core

Esses recursos exigem a instalação e a configuração dos seguintes componentes no dispositivo AWS IoT Greengrass:

  • Operador MQTT

  • Ponte MQTT

  • Autenticação do dispositivo cliente

  • Detector IP

Além disso, as mensagens publicadas pelos dispositivos clientes devem estar no formato JSON ou no formato Protocol Buffers (protobuf).

Esse padrão descreve como instalar e configurar esses componentes necessários e fornece dicas de solução de problemas e práticas recomendadas.

Pré-requisitos e limitações

Pré-requisitos

Limitações

  • Você deve escolher uma região da AWS onde o AWS IoT Core esteja disponível. Para ver a lista atual de regiões do AWS IoT Core, consulte Serviços da AWS por região.

  • O dispositivo principal deve ter pelo menos 172 MB de RAM e 512 MB de espaço em disco.

Arquitetura

O diagrama a seguir mostra a arquitetura da solução desse padrão.

Arquitetura da solução para configurar o AWS IoT Greengrass com dispositivos clientes

A arquitetura inclui:

  • Dois dispositivos clientes. Cada dispositivo contém uma chave privada, um certificado de dispositivo e um certificado de autoridade de certificação (CA - certificate authority) raiz. O AWS IoT Device SDK, que contém um cliente MQTT, também é instalado em cada dispositivo cliente.

  • Um dispositivo principal que tem o AWS IoT Greengrass implantado com os seguintes componentes:

    • Operador MQTT

    • Ponte MQTT

    • Autenticação do dispositivo cliente

    • Detector IP

Essa arquitetura oferece suporte aos seguintes cenários:

  • Os dispositivos clientes podem usar seu cliente MQTT para se comunicarem uns com os outros por meio do agente MQTT do dispositivo principal.

  • Os dispositivos clientes também podem se comunicar com o AWS IoT Core na nuvem por meio do agente MQTT do dispositivo principal e da ponte MQTT.

  • O AWS IoT Core na nuvem pode enviar mensagens para dispositivos clientes por meio do cliente de teste MQTT e da ponte MQTT e do agente MQTT do dispositivo principal.

Para obter mais informações sobre as comunicações entre dispositivos cliente e o dispositivo principal, consulte a seção Informações adicionais.

Ferramentas

Serviços da AWS

  • O AWS IoT Greengrass é um serviço de nuvem e de runtime de borda e de Internet das coisas (IoT) que ajuda você a criar, implantar e gerenciar aplicativos de IoT em seus dispositivos.

  • O AWS IoT Core fornece comunicação segura e bidirecional para dispositivos conectados à Internet se conectarem à Nuvem AWS.

  • O SDK de dispositivo da AWS IoT é um kit de desenvolvimento de software que inclui bibliotecas de código aberto, guias de desenvolvedor com amostras e guias de portabilidade para que você possa criar produtos ou soluções inovadoras da IoT nas plataformas de hardware de sua preferência.

  • O AWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus recursos da AWS, controlando quem está autenticado e autorizado a usá-los.

Práticas recomendadas

  • A carga útil das mensagens dos dispositivos do cliente deve estar no formato JSON ou Protobuf para aproveitar os recursos avançados do mecanismo de regras do AWS IoT Core, como transformação e ações condicionais.

  • Configure a ponte MQTT para permitir a comunicação bidirecional.

  • Configure e implante o componente detector de IP no AWS IoT Greengrass para garantir que os endereços IP do dispositivo principal sejam incluídos no campo de nome alternativo do assunto (SAN) do certificado do agente MQTT.

Épicos

TarefaDescriçãoHabilidades necessárias

Configure o AWS IoT Greengrass em seu dispositivo principal.

Instale o software AWS IoT Greengrass Core seguindo as instruções no guia do desenvolvedor.

AWS IoT Greengrass

Verifique o status da sua instalação.

Use o seguinte comando para conferir o estado do AWS IoT Greengrass no seu dispositivo principal:

sudo systemctl status greengrass.service

A saída esperada do comando é:

Launched Nucleus successfully
AWS geral

Configure uma política do IAM e a anexe ao perfil de serviço do Greengrass.

  1. Crie uma política do IAM para permitir comunicações de e para a ponte MQTT. Veja a seguir um exemplo de política do:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:*" ], "Resource": "*" }, { "Sid": "GreengrassActions", "Effect": "Allow", "Action": [ "greengrass:*" ], "Resource": "*" } ] }
  2. Anexe a política ao perfil de serviço do Greengrass. Para obter o perfil de serviço, use o comando:

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

    onde <region> se refere à sua região da AWS.

AWS geral

Configure e implante os componentes necessários no dispositivo principal do AWS IoT Greengrass.

Configure e implante os seguintes componentes:

AWS IoT Greengrass

Confirme se a ponte MQTT permite comunicação bidirecional.

Para retransmitir mensagens MQTT entre dispositivos clientes e o AWS IoT Core, configure e implante o componente de ponte MQTT e especifique os tópicos a serem retransmitidos. Veja um exemplo abaixo:

{ "mqttTopicMapping": { "ClientDevicesToCloud": { "topic": "dt/#", "source": "LocalMqtt", "target": "IotCore" }, "CloudToClientDevices": { "topic": "cmd/#", "source": "IotCore", "target": "LocalMqtt" } } }
AWS IoT Greengrass

Confirme se o componente de autenticação permite que os dispositivos cliente se conectem e publiquem ou assinem tópicos.

A aws.greengrass.clientdevices.Auth configuração a seguir permite que todos os dispositivos cliente se conectem, publiquem mensagens e assinem todos os tópicos.

{ "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
TarefaDescriçãoHabilidades necessárias

Instale o SDK de dispositivos do AWS IoT.

Instale o AWS IoT Device SDK nos dispositivos do cliente. Para obter uma lista completa das linguagens suportadas e dos SDKs associados, consulte a documentação do AWS IoT Core.

Por exemplo, o SDK do AWS IoT Device para Python está localizado em. GitHub Para instalar esse SDK:

  1. Confirme se o Python 3.7 ou posterior está instalado, conforme as instruções na página de pré-requisitos do repositório. GitHub

  2. Use o comando pip para instalar o SDK.

    Para macOS e Linux:

    python3 -m pip install awsiotsdk

    Para Windows:

    python -m pip install awsiotsdk

Como alternativa, você pode instalar o SDK do repositório de origem:

# 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
AWS IoT Geral

Crie uma coisa.

  1. No console do AWS IoT, se um botão Começar for exibido, selecione-o. Caso contrário, no painel de navegação, escolha Segurança, Políticas.

  2. Se a caixa de diálogo Você ainda não tem políticas, selecione Criar uma política. Caso contrário, escolha Criar.

  3. Insira um nome para a política do AWS IoT (por exemplo, ClientDevicePolicy).

  4. Na seção Adicionar instruções, substitua a política existente pelo código JSON a seguir. Substitua <region> e <account> por sua região da AWS e número da conta da AWS.

    { "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. Escolha Criar.

  6. No console do AWS IoT, no painel de navegação, escolha Gerenciar, Things.

  7. Se uma caixa de diálogo Você ainda não tem coisas for exibida, selecione Registrar uma coisa. Caso contrário, escolha Criar.

  8. Na página Creating AWS IoT things (Criar coisas para AWS IoT), selecione Create a single thing (Criar uma única coisa).

  9. Na página Adicionar o dispositivo ao registro do dispositivo, insira um nome para o objeto de IoT (por exemplo, ClientDevice1) e selecione Próximo.

    Observação: Você não pode alterar o nome de uma coisa depois de criá-la. Para alterar o nome, é necessário criar uma coisa nova, fornecer o novo nome e, depois, excluir a coisa antiga.

  10. Na página Adicionar um certificado ao objeto, escolha Criar certificado.

  11. Escolha os links Download para fazer download do certificado, da chave privada e do certificado CA raiz.

    Importante: essa será a única oportunidade de baixar seu certificado e chave privada.

  12. Selecione Ativar para ativar o certificado. O certificado deve estar ativo para que um dispositivo se conecte ao AWS IoT.

  13. Selecione a opção Anexar uma política.

  14. Em Adicionar uma política para sua coisa ClientDevicePolicy, escolha Registrar coisa.

AWS IoT Core

Baixe o certificado CA do dispositivo principal do Greengrass.

Se você espera que o dispositivo principal do Greengrass funcione em ambientes off-line, você precisa disponibilizar o certificado CA principal do Greengrass para que o dispositivo cliente possa verificar o certificado do agente MQTT (que é emitido pela CA principal do Greengrass). Portanto, é importante obter uma cópia desse certificado. Use uma das abordagens a seguir:

  • Se você tiver acesso à rede ao dispositivo AWS IoT Greengrass a partir do seu PC, insira https://<device IP>:8883 seu navegador da web e visualize o certificado do agente MQTT e o certificado CA. Você também pode salvar o certificado CA no dispositivo cliente.

  • Como alternativa, é possível usar a linha de comandos do OpenSSL:

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

Copie as credenciais nos dispositivos do cliente.

Copie o certificado CA principal do Greengrass, o certificado do dispositivo e a chave privada nos dispositivos do cliente.

AWS geral

Associe dispositivos cliente ao dispositivo principal.

Associe dispositivos clientes a um dispositivo principal para que eles possam descobrir o dispositivo principal. Os dispositivos cliente podem então usar a API de descoberta do Greengrass para recuperar informações de conectividade e certificados para seus dispositivos principais associados. Para obter mais informações, consulte Associar dispositivos clientes na documentação do AWS IoT Greengrass.

  1. No console do AWS IoT Greengrass, escolha dispositivos principais.

  2. Escolha o dispositivo principal a ser gerenciado.

  3. Na página de detalhes do dispositivo principal, escolha a guia Dispositivos clientes.

  4. Na seção Dispositivos cliente associados, escolha Associar dispositivos cliente.

  5. No modal Associar dispositivos cliente ao dispositivo principal, faça o seguinte para cada dispositivo cliente a ser associado:

    1. Para associar o dispositivo do AWS IoT, insira o nome do AWS IoT.

    2. Escolha Adicionar.

  6. Selecione Associar.

Os dispositivos cliente que você associou agora podem usar a API de descoberta do Greengrass para descobrir esse dispositivo principal.

AWS IoT Greengrass
TarefaDescriçãoHabilidades necessárias

Envie dados de um dispositivo cliente para outro dispositivo cliente.

Use o cliente MQTT em seu dispositivo para publicar uma mensagem sobre o tópico dt/client1/sensor.

AWS geral

Envie dados do dispositivo cliente para o AWS IoT Core.

Use o cliente MQTT em seu dispositivo para publicar uma mensagem sobre o tópico dt/client1/sensor.

No cliente de teste MQTT, inscreva-se no tópico para o qual o dispositivo está enviando mensagens ou inscreva-se em # para todos os tópicos (veja detalhes).

AWS geral

Envie mensagens do AWS IoT Core para dispositivos clientes.

Na página do cliente de teste do MQTT, na guia Publicar em um tópico, no campo Nome do tópico, insira o nome do tópico da sua mensagem. Neste exemplo, use cmd/client1 para o tópico.

AWS geral

Solução de problemas

ProblemaSolução

Não foi possível verificar o erro do certificado do servidor

Esse erro ocorre quando o cliente MQTT não consegue verificar o certificado apresentado pelo agente MQTT durante o handshake TLS. O motivo mais comum é que o cliente MQTT não tem o certificado CA. Siga estas etapas para garantir que o certificado CA seja fornecido ao cliente MQTT.

  1. Se você tiver acesso à rede ao dispositivo AWS IoT Greengrass a partir do seu PC, insira https://<device IP>:8883 na janela do navegador para ver o certificado do agente MQTT e o certificado CA. Você também pode salvar o certificado CA no dispositivo cliente.

    Como alternativa, use a linha de comando do OpenSSL:

    openssl s_client -showcerts -connect <device IP>:8883
  2. Salve o conteúdo dos certificados Moquette CA e Greengrass Core CA em arquivos e, em seguida, visualize o conteúdo decodificado usando o comando:

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

    O certificado CA do Moquette deve mostrar o campo SAN como neste exemplo:

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

Não foi possível verificar o erro do nome do servidor

Esses erros ocorrem quando o cliente MQTT não consegue verificar se está se conectando ao servidor correto. O motivo mais comum é que o endereço IP do dispositivo Greengrass não está listado no campo SAN do certificado.

Siga as instruções na solução anterior para obter o certificado do agente MQTT e verificar se o campo SAN contém o endereço IP do dispositivo AWS IoT Greengrass, conforme explicado na seção Informações adicionais. Caso contrário, confirme se o componente do detector de IP está instalado corretamente e reinicie o dispositivo principal.

Não é possível verificar o nome do servidor somente ao se conectar a partir de um dispositivo cliente incorporado

O Mbed TLS, que é uma biblioteca TLS popular usada em dispositivos incorporados, atualmente oferece suporte à verificação de nomes DNS somente no campo SAN do certificado, conforme mostrado no código da biblioteca Mbed TLS. Como o dispositivo principal não tem seu próprio nome de domínio e depende do endereço IP, os clientes TLS que usam o Mbed TLS falharão na verificação do nome do servidor durante o handshake TLS, causando uma falha na conexão. Recomendamos que você adicione a verificação do endereço IP da SAN à sua biblioteca Mbed TLS na função x509_crt_check_san function.

Recursos relacionados

Mais informações

Esta seção fornece informações adicionais sobre as comunicações entre os dispositivos clientes e o dispositivo principal.

O agente MQTT escuta na porta 8883 do dispositivo principal uma tentativa de conexão com o cliente TLS. A ilustração a seguir mostra um exemplo de certificado de servidor do agente MQTT.

Exemplo de certificado de servidor do corretor MQTT

O exemplo de certificado exibe os seguintes detalhes:

  • O certificado é emitido pela CA do AWS IoT Greengrass Core, que é local e específica para o dispositivo principal; ou seja, ele atua como uma CA local.

  • Esse certificado é alternado automaticamente toda semana pelo componente de autenticação do cliente, conforme mostrado na ilustração a seguir. Você pode definir esse intervalo na configuração do componente de autenticação do cliente.

Rotação do certificado do servidor do broker MQTT
  • O nome alternativo do assunto (SAN) desempenha um papel fundamental na verificação do nome do servidor na extremidade do cliente TLS. Isso ajuda o cliente TLS a garantir que ele se conecte ao servidor correto e ajuda a evitar man-in-the-middle ataques durante a configuração da sessão TLS. No exemplo de certificado, o campo SAN indica que esse servidor está escutando no localhost (o soquete de domínio Unix local) e que a interface de rede tem o endereço IP 192.168.1.12.

O cliente TLS usa o campo SAN no certificado para verificar se está se conectando a um servidor legítimo durante a verificação do servidor. Por outro lado, durante um handshake TLS típico entre um servidor HTTP e um navegador, o nome de domínio no campo nome comum (CN - common name) ou no campo SAN é usado para verificar o domínio ao qual o navegador está realmente se conectando durante o processo de verificação do servidor. Se o dispositivo principal não tiver um nome de domínio, o endereço IP incluído no campo SAN tem a mesma finalidade. Para obter mais informações, consulte a seção Nome alternativo do assunto da RFC 5280 – Certificado de infraestrutura de chave pública X.509 da Internet e perfil da Lista de Revogação de Certificados(CRL).

O componente detector de IP no AWS IoT Greengrass garante que os endereços IP corretos sejam incluídos no campo SAN do certificado.

O certificado no exemplo é assinado pelo dispositivo AWS IoT Greengrass que atua como uma CA local. O cliente TLS (cliente MQTT) não conhece essa CA, portanto, devemos fornecer um certificado de CA semelhante ao seguinte.

Exemplo de certificado CA