Device Streams di Hub IoT (anteprima)
I flussi dispositivo dell'hub IoT di Azure facilitano la creazione di tunnel TCP bidirezionali sicuri per un'ampia gamma di scenari di comunicazione da cloud a dispositivo. Un flusso di dispositivo viene filtrato da un endpoint di streaming dell'hub IoT che funge da proxy tra gli endpoint del servizio e del dispositivo. Questa configurazione, illustrata nel diagramma, è particolarmente utile quando i dispositivi sono protetti da un firewall di rete o si trovano all'interno di una rete privata. Di conseguenza, i flussi dispositivo dell'hub IoT rispondono alla necessità dei clienti di raggiungere i dispositivi IoT in modo adatto al firewall e senza la necessità di aprire ampiamente le porte del firewall di rete in ingresso o in uscita.
Usando i flussi dispositivo dell'hub IoT, i dispositivi rimarranno protetti e sarà sufficiente aprire le connessioni TCP in uscita per l'endpoint di streaming dell'hub IoT tramite la porta 443. Dopo aver stabilito un flusso, le applicazioni di lato servizio e di lato dispositivo hanno ognuna accesso a livello di codice a un oggetto client di WebSocket per inviare e ricevere byte non elaborati tra di loro. Le garanzie di affidabilità e ordinamento fornite da questo tunnel sono paragonabili a TCP.
Vantaggi
I flussi dispositivo dell'hub IoT offrono i vantaggi seguenti:
I dispositivi IoT con connettività sicura adatta ai firewall possono essere raggiunti dagli endpoint di servizio senza l'apertura della porta in entrata del firewall nel perimetro della rete o del dispositivo (è richiesta solo la connettività in uscita all'hub IoT tramite la porta 443).
Autenticazione: sia il lato dispositivo che il lato servizio del tunnel devono essere autenticati con l'hub IoT usando le credenziali corrispondenti.
Crittografia: per impostazione predefinita, i flussi dispositivo dell'hub IoT usano connessioni abilitate per TLS. Questo fattore garantisce che il traffico sia sempre crittografato indipendentemente dal fatto che l'applicazione usi o no la crittografia.
Semplicità della connettività: in molti casi, grazie all'uso dei flussi dispositivo non è necessaria una configurazione complessa di reti private virtuali per abilitare la connettività ai dispositivi IoT.
Compatibilità con lo stack TCP/IP: i flussi dispositivo dell'hub IoT possono supportare il traffico di applicazione TCP/IP. Questo approccio significa che un'ampia gamma di protocolli proprietari e basati su standard può usare questa funzionalità.
Facilità d'uso nelle configurazioni di rete privata: il servizio può comunicare con un dispositivo facendo riferimento all'ID dispositivo anziché all'indirizzo IP del dispositivo. Questo fatto è utile quando un dispositivo si trova all'interno di una rete privata e dispone di un indirizzo IP privato oppure quando l'indirizzo IP del dispositivo viene assegnato in modo dinamico e non è noto al lato servizio.
Flussi di lavoro del flusso del dispositivo
Un flusso dispositivo viene avviato quando il servizio richiede la connessione a un dispositivo fornendo il relativo ID dispositivo. Questo flusso di lavoro è adatto a un modello di comunicazione client/server, tra cui RDP e SSH in cui un utente vuole connettersi in remoto al server SSH o RDP in esecuzione nel dispositivo usando un programma client SSH o RDP.
Il processo di creazione del flusso dispositivo comporta una negoziazione tra il dispositivo, il servizio e gli endpoint principali e di streaming dell'hub IoT. Mentre l'endpoint principale dell'hub IoT gestisce la creazione di un flusso dispositivo, l'endpoint di streaming gestisce i flussi di traffico tra il servizio e il dispositivo.
Flusso di creazione del flusso dispositivo
La creazione a livello di codice di un flusso dispositivo tramite SDK include i passaggi seguenti, illustrati anche nella figura riportata:
L'applicazione del dispositivo registra anticipatamente un callback di cui ricevere notifica quando viene avviato un nuovo flusso dispositivo nel dispositivo. In genere questo passaggio si verifica quando il dispositivo viene avviato e si connette all'hub IoT.
Il programma del lato servizio avvia un flusso dispositivo quando necessario fornendo l'ID dispositivo (non l'indirizzo IP).
L'hub IoT informa il programma del lato dispositivo richiamando il callback registrato nel passaggio 1. Il dispositivo può accettare o rifiutare la richiesta di avvio flusso. Questa logica può essere specifica per lo scenario dell'applicazione. Se il dispositivo rifiuta la richiesta di flusso, l'hub IoT informa il servizio di conseguenza; in caso contrario, eseguire i passaggi seguenti.
Il dispositivo crea una connessione TCP in uscita sicura per l'endpoint di streaming tramite la porta 443 e consente di aggiornare la connessione a un WebSocket. L'URL dell'endpoint di streaming e le credenziali da usare per l'autenticazione, vengono entrambe fornite dall'hub IoT al dispositivo come parte della richiesta inviata nel passaggio 3.
Il servizio riceve una notifica dell'accettazione del flusso da parte del dispositivo e procede alla creazione di un proprio client WebSocket per l'endpoint di streaming. In modo analogo riceve le informazioni sull'URL dell'endpoint di streaming e sull'autenticazione dall'hub IoT.
Nel processo di handshake precedente:
Il processo di handshake deve essere completato entro 60 secondi (passaggi da 2 a 5); in caso contrario l'handshake avrà esito negativo con un timeout e il servizio verrà informato di conseguenza.
Dopo il completamento del flusso di creazione di flusso precedente, l'endpoint di streaming funge da proxy e trasferisce il traffico tra il servizio e il dispositivo tramite i rispettivi WebSocket.
Il dispositivo e il servizio necessitano entrambi di connettività in uscita per l'endpoint principale dell'hub IoT e per l'endpoint di streaming tramite la porta 443. L'URL di questi endpoint è disponibile nella scheda Panoramica del portale dell'hub IoT.
Le garanzie di affidabilità e ordinamento di un flusso stabilito sono paragonabili a TCP.
Tutte le connessioni all'hub IoT e agli endpoint di streaming usano TLS e sono crittografate.
Flusso di terminazione
Un flusso stabilito termina quando una delle connessioni TCP al gateway viene disconnessa (dal servizio o dal dispositivo). Questa azione può avvenire volontariamente chiudendo il WebSocket nei programmi del servizio o del dispositivo oppure involontariamente in caso di errore di processo o di timeout della connettività di rete. Al termine della connessione del dispositivo o del servizio all'endpoint di streaming, anche l'altra connessione TCP viene terminata (in modo forzato) e il servizio e il dispositivo saranno responsabili di ricreare il flusso, se necessario.
Requisiti di connettività
Sia il lato dispositivo che il lato servizio di un flusso dispositivo devono essere in grado di stabilire connessioni abilitate per TLS con l'hub IoT e il relativo endpoint di streaming. Questa situazione richiede la connettività in uscita sulla porta 443 con questi endpoint. Il nome host associato a questi endpoint si può trovare nella scheda Panoramica dell'hub IoT, come illustrato nella figura:
In alternativa, è possibile recuperare le informazioni sugli endpoint usando l'interfaccia della riga di comando di Azure nella sezione delle proprietà dell'hub, in particolare chiavi property.hostname
e property.deviceStreams
.
az iot hub devicestream show --name <YourIoTHubName>
L'output è un oggetto JSON di tutti gli endpoint a cui il servizio e il dispositivo dell'hub potrebbero dover connettersi per stabilire un flusso di dispositivo.
{
"streamingEndpoints": [
"https://<YourIoTHubName>.<region-stamp>.streams.azure-devices.net"
]
}
Nota
Verificare che sia installata l'interfaccia della riga di comando di Azure versione 2.0.57 o successiva. È possibile scaricare la versione più recente dalla pagina della interfaccia della riga di comando di Azure.
Consentire la connettività in uscita agli endpoint di streaming dei dispositivi
Come accennato all’inizio di questo articolo, il dispositivo crea una connessione in uscita all'endpoint di streaming dell'hub IoT durante il processo di avvio dei flussi dispositivo. I firewall nel dispositivo o nella relativa rete devono consentire la connettività in uscita al gateway di streaming tramite la porta 443 (la comunicazione avviene su una connessione WebSocket crittografata con TLS).
Il nome host dell'endpoint di streaming del dispositivo è reperibile nel portale dell'hub IoT nella scheda Panoramica.
In alternativa, è possibile trovare queste informazioni tramite l'interfaccia della riga di comando di Azure:
az iot hub devicestream show --name <YourIoTHubName>
Nota
Verificare che sia installata l'interfaccia della riga di comando di Azure versione 2.0.57 o successiva. È possibile scaricare la versione più recente dalla pagina della interfaccia della riga di comando di Azure.
Risolvere i problemi tramite i log delle risorse di Device Streams
È possibile configurare Monitoraggio di Azure per raccogliere i log delle risorse per i flussi dei dispositivi generati dall'hub IoT. Questo approccio può essere utile negli scenari di risoluzione dei problemi.
Seguire questa procedura per creare un'impostazione di diagnostica per inviare i log dei flussi dei dispositivi per l'hub IoT ai log di Monitoraggio di Azure:
Nel portale di Azure passare all'hub IoT. Selezionare Impostazioni di diagnostica in Monitoraggio nel riquadro sinistro. Quindi selezionare Aggiungi impostazione di diagnostica.
Specificare un nome per l'impostazione di diagnostica e selezionare DeviceStreams nell'elenco dei log. Quindi selezionare Invia a Log Analytics. Si potrà scegliere un’area di lavoro Log Analytics esistente o crearne una nuova.
Dopo aver creato un'impostazione di diagnostica per inviare i log dei flussi del dispositivo a un'area di lavoro Log Analytics, è possibile accedere ai log selezionando Log in Monitoraggio nel riquadro sinistro dell'hub IoT nel portale di Azure. I log dei flussi del dispositivo vengono visualizzati nella tabella
AzureDiagnostics
e hannoCategory=DeviceStreams
. Potrebbero essere necessari alcuni minuti dopo un'operazione perché i log vengano mostrati nella tabella.Come illustrato qui, l'identità del dispositivo di destinazione e il risultato dell'operazione sono disponibili anche nei log.
Per altre informazioni sull'uso di Monitoraggio di Azure con l'hub IoT, vedere Monitorare l'hub IoT. Per informazioni su tutti i log delle risorse, le metriche e le tabelle disponibili per l'hub IoT, vedere Monitoraggio del riferimento dati dell'hub IoT di Azure.
Disponibilità a livello di area
Durante l'anteprima pubblica, i flussi dei dispositivi dell'hub IoT sono disponibili nelle aree Stati Uniti centrali, Stati Uniti orientali EUAP, Europa settentrionale e Asia sud-orientale. Assicurarsi quindi che l'hub venga creato in una di queste aree.
Disponibilità SDK
I due lati di ogni flusso (lato servizio e lato dispositivo) usano l'SDK dell'hub IoT per stabilire il tunnel. Durante l'anteprima pubblica, i clienti possono scegliere i linguaggi SDK seguenti:
i linguaggi SDK C e C# supportano i flussi dispositivo sul lato dispositivo.
L'SDK C# e Node.js supportano i flussi dispositivo sul lato servizio.