Configurar e solucionar problemas do AWS IoT Greengrass com dispositivos cliente - 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á.

Configurar e solucionar problemas do AWS IoT Greengrass com dispositivos cliente

Criado por Marouane Sefiani e Akalanka De Silva () AWS

Ambiente: PoC ou piloto

Tecnologias: IoT

AWSserviços: AWS IoT Greengrass; IoT Core AWS

Resumo

AWSO IoT Greengrass é um serviço de nuvem e tempo de execução 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 AWS do IoT Greengrass incluem:

  • Casas inteligentes onde um gateway 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

AWSO IoT Greengrass pode atuar como um ponto final de MQTT conexão seguro e autenticado para outros dispositivos periféricos (também conhecidos como dispositivos clientes), que, de outra forma, normalmente se conectariam diretamente ao IoT Core. AWS Esse recurso é útil quando os dispositivos cliente não têm acesso direto à rede ao endpoint 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 IoT Core AWS

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

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

  • MQTTcorretor

  • MQTTponte

  • Autenticação do dispositivo cliente

  • Detector IP

Além disso, as mensagens publicadas dos dispositivos clientes devem estar no JSON formato ou no formato Protobuf (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 AWS região em que o AWS IoT Core esteja disponível. Para ver a lista atual de regiões do AWS IoT Core, consulte AWSServiços por região.

  • O dispositivo principal deve ter pelo menos 172 MB 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 dispositivo AWS IoTSDK, que contém um MQTT cliente, também é instalado em cada dispositivo cliente.

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

    • MQTTcorretor

    • MQTTponte

    • Autenticação do dispositivo cliente

    • Detector IP

Essa arquitetura oferece suporte aos seguintes cenários:

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

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

  • AWSO IoT Core na nuvem pode enviar mensagens para dispositivos clientes por meio do cliente de MQTT teste e da MQTT ponte e MQTT agente 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

AWSserviços

  • AWSO IoT Greengrass é um serviço de nuvem e tempo de execução de ponta da Internet das Coisas (IoT) de código aberto que ajuda você a criar, implantar e gerenciar aplicativos de IoT em seus dispositivos.

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

  • AWSO IoT Device SDK é um kit de desenvolvimento de software que inclui bibliotecas de código aberto, guias para desenvolvedores com amostras e guias de portabilidade para que você possa criar produtos ou soluções de IoT inovadores nas plataformas de hardware de sua escolha.

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

Práticas recomendadas

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

  • Configure a MQTT ponte 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 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 comando a seguir para verificar o status do serviço AWS IoT Greengrass em seu dispositivo principal:

sudo systemctl status greengrass.service

A saída esperada do comando é:

Launched Nucleus successfully
Geral AWS

Configure uma IAM política e anexe-a à função de serviço do Greengrass.

  1. Crie uma IAM política para permitir comunicações de e para a MQTT ponte. 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 AWS região.

Geral AWS

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

Configure e implante os seguintes componentes:

AWS IoT Greengrass

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

Para retransmitir MQTT mensagens entre dispositivos cliente e o AWS IoT Core, configure e implante MQTT o componente bridge 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 AWS dispositivo IoT. SDK

Instale o dispositivo AWS IoT SDK nos dispositivos cliente. Para obter uma lista completa dos idiomas compatíveis e dos associadosSDKs, consulte a documentação do AWSIoT Core.

Por exemplo, o dispositivo AWS IoT para SDK Python SDK está localizado em. GitHub Para instalar issoSDK:

  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 a SDK partir 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
AWSIoT geral

Crie uma coisa.

  1. No console de AWS IoT, se um botão Começar for exibido, escolha-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 de AWS IoT (por exemplo,ClientDevicePolicy).

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

    { "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 de AWS IoT, no painel de navegação, escolha Gerenciar, Coisas.

  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 Criando coisas de AWS IoT, escolha 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 à AWS IoT.

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

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

AWSNúcleo de IoT

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 MQTT agente (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, entre https://<device IP>:8883 no seu navegador da web e visualize o certificado do MQTT agente e o certificado CA. Você também pode salvar o certificado CA no dispositivo cliente.

  • Como alternativa, você pode usar a linha de SSL comando Abrir:

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

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.

Geral AWS

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 descoberta do Greengrass API para recuperar informações de conectividade e certificados para seus dispositivos principais associados. Para obter mais informações, consulte Associar dispositivos cliente 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. Insira o nome da coisa de AWS IoT a ser associada como dispositivo cliente.

    2. Escolha Adicionar.

  6. Selecione Associar.

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

AWS IoT Greengrass
TarefaDescriçãoHabilidades necessárias

Envie dados de um dispositivo cliente para outro dispositivo cliente.

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

Geral AWS

Envie dados do dispositivo cliente para o AWS IoT Core.

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

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

Geral AWS

Envie mensagens do AWS IoT Core para dispositivos clientes.

Na página do cliente de MQTT teste, 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.

Geral AWS

Solução de problemas

ProblemaSolução

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

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

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

    Como alternativa, use a linha de SSL comando Abrir:

    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 Moquette CA deve mostrar o SAN campo 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 MQTT cliente 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 SAN campo do certificado.

Siga as instruções na solução anterior para obter o certificado do MQTT agente e verificar se o SAN campo 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

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

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 MQTT agente escuta na porta 8883 do dispositivo principal uma tentativa de conexão com TLS o cliente. A ilustração a seguir mostra um exemplo de certificado de servidor do MQTT broker.

Exemplo de certificado de servidor de MQTT corretora

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, ela 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 da MQTT corretora
  • O nome alternativo do assunto (SAN) desempenha um papel fundamental na verificação do nome do servidor no lado TLS do cliente. Isso ajuda o TLS cliente a garantir que ele se conecte ao servidor correto e ajuda a evitar ataques man-in-the intermediários durante a configuração TLS da sessão. No exemplo de certificado, o SAN campo 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 TLS cliente usa o SAN campo no certificado para verificar se está se conectando a um servidor legítimo durante a verificação do servidor. Por outro lado, durante um TLS aperto de mão típico entre um HTTP servidor e um navegador, o nome de domínio no campo ou SAN campo nome comum (CN) é 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 SAN campo tem a mesma finalidade. Para obter mais informações, consulte a seção Nome alternativo do assunto em RFC5280 — 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 SAN campo do certificado.

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

Exemplo de certificado CA