Configura e risolvi i problemi di IoT AWS Greengrass con i dispositivi client - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configura e risolvi i problemi di IoT AWS Greengrass con i dispositivi client

Creato da Marouane Sefiani e Akalanka De Silva () AWS

Ambiente: PoC o pilota

Tecnologie: IoT

AWSservizi: AWS IoT Greengrass; IoT Core AWS

Riepilogo

AWSIoT Greengrass è un servizio cloud e di runtime edge open source per la creazione, l'implementazione e la gestione di software Internet of Things (IoT) su dispositivi edge. I casi d'uso di AWS IoT Greengrass includono:

  • Case intelligenti in cui un gateway AWS IoT Greengrass viene utilizzato come hub per l'automazione domestica

  • Fabbriche intelligenti in cui AWS IoT Greengrass può facilitare l'acquisizione e l'elaborazione locale dei dati dall'officina

AWSIoT Greengrass può fungere da endpoint di MQTT connessione sicuro e autenticato per altri dispositivi edge (noti anche come dispositivi client), che altrimenti si connetterebbero direttamente a IoT Core. AWS Questa funzionalità è utile quando i dispositivi client non hanno accesso diretto alla rete all'endpoint AWS IoT Core.

È possibile configurare AWS IoT Greengrass per l'uso con i dispositivi client per i seguenti casi d'uso:

  • Per consentire ai dispositivi client di inviare dati a AWS IoT Greengrass

  • Per consentire a AWS IoT Greengrass di inoltrare i dati a IoT Core AWS

  • Per sfruttare le funzionalità avanzate del motore di regole AWS IoT Core

Queste funzionalità richiedono l'installazione e la configurazione dei seguenti componenti sul dispositivo AWS IoT Greengrass:

  • MQTTmediatore

  • MQTTponte

  • autenticazione del dispositivo client

  • Rilevatore IP

Inoltre, i messaggi pubblicati dai dispositivi client devono essere in JSON formato o in formato Protocol Buffers (protobuf).

Questo modello descrive come installare e configurare questi componenti richiesti e fornisce suggerimenti e best practice per la risoluzione dei problemi.

Prerequisiti e limitazioni

Prerequisiti

Limitazioni

  • Devi scegliere una AWS regione in cui è disponibile AWS IoT Core. Per l'elenco aggiornato delle regioni per AWS IoT Core, consulta AWSServizi per regione.

  • Il dispositivo principale deve avere almeno 172 MB RAM e 512 MB di spazio su disco.

Architettura

Il diagramma seguente mostra l'architettura della soluzione per questo modello.

Architettura della soluzione per configurare AWS IoT Greengrass con dispositivi client

L'architettura include:

  • Due dispositivi client. Ogni dispositivo contiene una chiave privata, un certificato del dispositivo e un certificato di autorità di certificazione (CA) principale. Il dispositivo AWS IoTSDK, che contiene un MQTT client, viene installato anche su ogni dispositivo client.

  • Un dispositivo principale su cui è installato AWS IoT Greengrass con i seguenti componenti:

    • MQTTmediatore

    • MQTTponte

    • autenticazione del dispositivo client

    • Rilevatore IP

Questa architettura supporta i seguenti scenari:

  • I dispositivi client possono utilizzare MQTT il proprio client per comunicare tra loro tramite il MQTT broker del dispositivo principale.

  • I dispositivi client possono anche comunicare con AWS IoT Core nel cloud tramite il MQTT broker del dispositivo principale e il MQTT bridge.

  • AWSIoT Core nel cloud può inviare messaggi ai dispositivi client tramite il client di MQTT test e il MQTT bridge and MQTT broker del dispositivo principale.

Per ulteriori informazioni sulle comunicazioni tra i dispositivi client e il dispositivo principale, consulta la sezione Informazioni aggiuntive.

Strumenti

AWSservizi

  • AWSIoT Greengrass è un servizio cloud e runtime edge open source per l'Internet of Things (IoT) che ti aiuta a creare, implementare e gestire applicazioni IoT sui tuoi dispositivi.

  • AWSIoT Core fornisce comunicazioni sicure e bidirezionali per i dispositivi connessi a Internet per connettersi al Cloud. AWS

  • AWSIoT Device SDK è un kit di sviluppo software che include librerie open source, guide per sviluppatori con esempi e guide al porting in modo da poter creare prodotti o soluzioni IoT innovativi su piattaforme hardware di tua scelta.

  • AWSIdentity and Access Management (IAM) consente di gestire in modo sicuro l'accesso alle AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.

Best practice

  • Il payload dei messaggi dai dispositivi client deve essere in formato Protobuf JSON o Protobuf per sfruttare le funzionalità avanzate del motore di regole AWS IoT Core, come la trasformazione e le azioni condizionali.

  • Configura il MQTT bridge per consentire la comunicazione bidirezionale.

  • Configura e implementa il componente del rilevatore IP in IoT AWS Greengrass per garantire che gli indirizzi IP del dispositivo principale siano inclusi nel campo subject alternative name (SAN) del certificato del broker. MQTT

Epiche

AttivitàDescrizioneCompetenze richieste

Configura AWS IoT Greengrass sul tuo dispositivo principale.

Installa il software AWS IoT Greengrass Core seguendo le istruzioni nella guida per sviluppatori.

AWS IoT Greengrass

Controlla lo stato dell'installazione.

Usa il seguente comando per verificare lo stato del servizio AWS IoT Greengrass sul tuo dispositivo principale:

sudo systemctl status greengrass.service

L'output previsto del comando è:

Launched Nucleus successfully
Generale AWS

Imposta una IAM policy e collegala al ruolo di servizio Greengrass.

  1. Crea una IAM politica per consentire le comunicazioni da e verso il MQTT bridge. Ecco un esempio di politica:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:*" ], "Resource": "*" }, { "Sid": "GreengrassActions", "Effect": "Allow", "Action": [ "greengrass:*" ], "Resource": "*" } ] }
  2. Associa la policy al ruolo di servizio Greengrass. Per ottenere il ruolo di servizio, usa il comando:

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

    dove <region> si riferisce alla tua AWS regione.

Generale AWS

Configura e distribuisci i componenti richiesti nel dispositivo principale AWS IoT Greengrass.

Configura e distribuisci i seguenti componenti:

AWS IoT Greengrass

Verificate che il MQTT bridge consenta la comunicazione bidirezionale.

Per inoltrare MQTT messaggi tra dispositivi client e AWS IoT Core, configura e implementa il componente MQTT bridge e specifica gli argomenti da inoltrare. Ecco un esempio:

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

Verifica che il componente di autenticazione consenta ai dispositivi client di connettersi e pubblicare o sottoscrivere argomenti.

La seguente aws.greengrass.clientdevices.Auth configurazione consente a tutti i dispositivi client di connettersi, pubblicare messaggi e iscriversi a tutti gli argomenti.

{ "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
AttivitàDescrizioneCompetenze richieste

Installa il dispositivo AWS IoTSDK.

Installa il dispositivo AWS IoT SDK sui dispositivi client. Per un elenco completo delle lingue supportate e relativeSDKs, consulta la documentazione di AWS IoT Core.

Ad esempio, il dispositivo AWS IoT SDK per Python si SDK trova su. GitHub Per installarloSDK:

  1. Verifica che Python 3.7 o versione successiva sia installato, come indicato nella pagina Prerequisiti del repository. GitHub

  2. Utilizzate il comando pip per installare. SDK

    Per macOS e Linux:

    python3 -m pip install awsiotsdk

    Per Windows:

    python -m pip install awsiotsdk

In alternativa, puoi installarlo SDK dal repository di origine:

# 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 generale

Crea una cosa.

  1. Nella console AWS IoT, se viene visualizzato il pulsante Inizia, selezionalo. Altrimenti, nel riquadro di navigazione, scegli Sicurezza, Politiche.

  2. Se viene visualizzata la finestra di dialogo Non hai ancora alcuna politica, scegli Crea una politica. In caso contrario, scegliere Create (Crea).

  3. Immettere un nome per la policy AWS IoT (ad esempio,ClientDevicePolicy).

  4. Nella sezione Aggiungi istruzioni, sostituisci la politica esistente con il JSON codice seguente. Sostituisci <region> e <account> con la tua AWS regione e il numero di AWS account.

    { "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. Scegli Create (Crea) .

  6. Nella console AWS IoT, nel riquadro di navigazione, scegli Gestisci, Cose.

  7. Se viene visualizzata la finestra di dialogo Non hai ancora nulla, scegli Registra un oggetto. In caso contrario, scegliere Create (Crea).

  8. Nella pagina Creazione di oggetti AWS IoT, scegli Crea una singola cosa.

  9. Nella pagina Add your device to the device registry (Aggiungi il tuo dispositivo al registro dei dispositivi), immettere un nome per l'oggetto IoT, ad esempio ClientDevice1, quindi scegliere Next (Avanti).

    Nota: non puoi cambiare il nome di un oggetto dopo averlo creato. Per cambiare il nome, devi creare un nuovo elemento, assegnargli il nuovo nome e quindi eliminare quello vecchio.

  10. Nella pagina Add a certificate for your thing (Aggiungi un certificato per l'oggetto), scegli Create certificate (Crea certificato).

  11. Scegliere i collegamenti Download (Scarica) per scaricare il certificato, la chiave privata e il certificato CA root.

    Importante: questa è l'unica opportunità per scaricare il certificato e la chiave privata.

  12. Scegli Activate (Attiva) per attivare il certificato. Il certificato deve essere attivo affinché un dispositivo possa connettersi all'AWSIoT.

  13. Scegliere Attach a policy (Collega policy).

  14. Per Aggiungi una politica per il tuo oggetto ClientDevicePolicy, scegli Registra oggetto.

AWSNucleo IoT

Scarica il certificato CA dal dispositivo principale Greengrass.

Se si prevede che il dispositivo core Greengrass funzioni in ambienti offline, è necessario rendere disponibile il certificato CA di base Greengrass al dispositivo client in modo che possa verificare il certificato del MQTT broker (rilasciato dalla CA principale di Greengrass). Pertanto, è importante ottenere una copia di questo certificato. Utilizza uno dei seguenti approcci per scaricare il certificato CA:

  • Se hai accesso di rete al dispositivo AWS IoT Greengrass dal tuo PC, accedi https://<device IP>:8883 al tuo browser web e visualizza il certificato del MQTT broker e il certificato CA. Puoi anche salvare il certificato CA sul dispositivo client.

  • In alternativa, puoi usare la riga di SSL comando Apri:

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

Copia le credenziali nei dispositivi client.

Copia il certificato CA di base Greengrass, il certificato del dispositivo e la chiave privata nei dispositivi client.

Generale AWS

Associa i dispositivi client al dispositivo principale.

Associa i dispositivi client a un dispositivo principale in modo che possano scoprire il dispositivo principale. I dispositivi client possono quindi utilizzare Greengrass discovery API per recuperare le informazioni di connettività e i certificati per i dispositivi principali associati. Per ulteriori informazioni, consulta Associare i dispositivi client nella documentazione di AWS IoT Greengrass.

  1. Sulla console AWS IoT Greengrass, scegli Dispositivi Core.

  2. Scegli il dispositivo principale da gestire.

  3. Nella pagina dei dettagli del dispositivo principale, scegli la scheda Dispositivi client.

  4. Nella sezione Dispositivi client associati, scegli Associa dispositivi client.

  5. Nella modalità Associa i dispositivi client al dispositivo principale, procedi come segue per ogni dispositivo client da associare:

    1. Immettere il nome dell'oggetto AWS IoT da associare come dispositivo client.

    2. Scegli Aggiungi.

  6. Selezionare Associate (Associa).

I dispositivi client che hai associato possono ora utilizzare Greengrass discovery API per scoprire questo dispositivo principale.

AWS IoT Greengrass
AttivitàDescrizioneCompetenze richieste

Invia dati da un dispositivo client a un altro dispositivo client.

Usa il MQTT client del tuo dispositivo per pubblicare un messaggio sull'dt/client1/sensorargomento.

Generale AWS

Invia dati dal dispositivo client a AWS IoT Core.

Usa il MQTT client sul tuo dispositivo per pubblicare un messaggio sull'dt/client1/sensorargomento.

Nel client di MQTT test, iscriviti all'argomento su cui il dispositivo invia i messaggi oppure iscriviti a # per tutti gli argomenti (vedi i dettagli).

Generale AWS

Invia messaggi da AWS IoT Core ai dispositivi client.

Nella pagina del client di MQTT test, nella scheda Pubblica su un argomento, nel campo Nome argomento, inserisci il nome dell'argomento del messaggio. In questo esempio, usa cmd/client1 per l'argomento.

Generale AWS

Risoluzione dei problemi

ProblemaSoluzione

Impossibile verificare l'errore del certificato del server

Questo errore si verifica quando il MQTT client non è in grado di verificare il certificato presentato dal MQTT broker durante l'TLShandshake. Il motivo più comune è che il MQTT client non dispone del certificato CA. Segui questi passaggi per assicurarti che il certificato CA venga fornito al MQTT client.

  1. Se hai accesso di rete al dispositivo AWS IoT Greengrass dal tuo PC, accedi https://<device IP>:8883 in una finestra del browser per visualizzare il certificato del MQTT broker e il certificato CA. Puoi anche salvare il certificato CA sul dispositivo client.

    In alternativa, usa la riga SSL di comando Open:

    openssl s_client -showcerts -connect <device IP>:8883
  2. Salva il contenuto dei certificati Moquette CA e Greengrass Core CA in file, quindi visualizza il contenuto decodificato utilizzando il comando:

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

    Il certificato Moquette CA dovrebbe mostrare il SAN campo come in questo esempio:

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

Impossibile verificare l'errore relativo al nome del server

Questo errore si verifica quando il MQTT client non è in grado di verificare che si stia connettendo al server corretto. Il motivo più comune è che l'indirizzo IP del dispositivo Greengrass non è elencato nel SAN campo del certificato.

Segui le istruzioni della soluzione precedente per ottenere il certificato del MQTT broker e verifica che il SAN campo contenga l'indirizzo IP del dispositivo AWS IoT Greengrass, come spiegato nella sezione Informazioni aggiuntive. In caso contrario, verifica che il componente del rilevatore IP sia installato correttamente e riavvia il dispositivo principale.

Impossibile verificare il nome del server solo durante la connessione da un dispositivo client integrato

MbedTLS, che è una TLS libreria popolare utilizzata nei dispositivi integrati, attualmente supporta la verifica del DNS nome solo nel SAN campo del certificato, come mostrato nel codice della TLS libreria Mbed. Poiché il dispositivo principale non ha un nome di dominio proprio e dipende dall'indirizzo IP, TLS i client che utilizzano Mbed TLS falliranno la verifica del nome del server durante l'TLShandshake, causando un errore di connessione. Ti consigliamo di aggiungere la verifica dell'indirizzo SAN IP alla tua TLS libreria Mbed nella funzione x509_crt_check_san.

Risorse correlate

Informazioni aggiuntive

Questa sezione fornisce informazioni aggiuntive sulle comunicazioni tra i dispositivi client e il dispositivo principale.

Il MQTT broker ascolta sulla porta 8883 del dispositivo principale un tentativo di connessione TLS del client. La figura seguente mostra un esempio di certificato server del MQTT broker.

Esempio di certificato del server del MQTT broker

Il certificato di esempio mostra i seguenti dettagli:

  • Il certificato è rilasciato dalla AWS IoT Greengrass Core CA, che è locale e specifica per il dispositivo principale; ovvero, funge da CA locale.

  • Questo certificato viene ruotato automaticamente ogni settimana dal componente di autenticazione del client, come mostrato nella figura seguente. È possibile impostare questo intervallo nella configurazione del componente client auth.

Rotazione del certificato del server del MQTT broker
  • Il nome alternativo del soggetto (SAN) svolge un ruolo fondamentale nella verifica del nome del server sul lato TLS client. Aiuta il TLS client a garantire la connessione al server corretto e aiuta a evitare attacchi man-in-the intermedi durante la configurazione TLS della sessione. Nel certificato di esempio, il SAN campo indica che questo server è in ascolto su localhost (il socket del dominio Unix locale) e l'interfaccia di rete ha l'indirizzo IP 192.168.1.12.

Il TLS client utilizza il SAN campo del certificato per verificare che si stia connettendo a un server legittimo durante la verifica del server. Al contrario, durante una tipica TLS stretta di mano tra un HTTP server e un browser, il nome di dominio nel campo o SAN nel campo Common Name (CN) viene utilizzato per verificare il dominio a cui il browser si connette effettivamente durante il processo di verifica del server. Se il dispositivo principale non ha un nome di dominio, l'indirizzo IP incluso nel SAN campo ha lo stesso scopo. Per ulteriori informazioni, consultate la sezione Subject Alternative Name di RFC5280 — Profilo dei certificati e dell'elenco di revoca dei certificati () dell'infrastruttura a chiave pubblica Internet X.509. CRL

Il componente di rilevamento IP di AWS IoT Greengrass assicura che gli indirizzi IP corretti siano inclusi nel campo SAN del certificato.

Il certificato nell'esempio è firmato dal dispositivo AWS IoT Greengrass che funge da CA locale. Il TLS client (MQTTclient) non è a conoscenza di questa CA, quindi dobbiamo fornire un certificato CA simile al seguente.

Esempio di certificato CA