IoT Hub Device Flöden (förhandsversion)

Azure IoT Hub-enhetsströmmar underlättar skapandet av säkra dubbelriktade TCP-tunnlar för en mängd olika kommunikationsscenarier från moln till enhet. En enhetsström förmedlas av en IoT Hub-slutpunkt för direktuppspelning som fungerar som en proxy mellan enheten och tjänstslutpunkterna. Den här konfigurationen, som visas i diagrammet nedan, är särskilt användbar när enheter finns bakom en nätverksbrandvägg eller finns i ett privat nätverk. Därför hjälper IoT Hub-enhetsströmmar till att åtgärda kundernas behov av att nå IoT-enheter på ett brandväggsvänligt sätt och utan att behöva öppna inkommande eller utgående brandväggsportar för nätverket i stort.

Med IoT Hub-enhetsströmmar förblir enheterna säkra och behöver bara öppna utgående TCP-anslutningar till IoT Hubs slutpunkt för direktuppspelning via port 443. När en dataström har upprättats har programmen på tjänstsidan och enhetssidan programmatisk åtkomst till ett WebSocket-klientobjekt för att skicka och ta emot råa byte till varandra. De tillförlitlighets- och beställningsgarantier som tillhandahålls av den här tunneln är i nivå med TCP.

Förmåner

IoT Hub-enhetsströmmar ger följande fördelar:

  • Brandväggsvänlig säker anslutning: IoT-enheter kan nås från tjänstslutpunkter utan att öppna den inkommande brandväggsporten på enheten eller nätverksperimetern (endast utgående anslutning till IoT Hub behövs via port 443).

  • Autentisering: Både enhets- och tjänstsidan i tunneln måste autentiseras med IoT Hub med motsvarande autentiseringsuppgifter.

  • Kryptering: Som standard använder IoT Hub-enhetsströmmar TLS-aktiverade anslutningar. Detta säkerställer att trafiken alltid krypteras oavsett om programmet använder kryptering eller inte.

  • Enkelhet i anslutningen: I många fall eliminerar användningen av enhetsströmmar behovet av komplex konfiguration av virtuella privata nätverk för att möjliggöra anslutning till IoT-enheter.

  • Kompatibilitet med TCP/IP-stack: IoT Hub-enhetsströmmar kan hantera TCP/IP-programtrafik. Det innebär att ett brett utbud av patentskyddade och standardbaserade protokoll kan utnyttja den här funktionen.

  • Användarvänlighet i privata nätverksinstallationer: Tjänsten kan kommunicera med en enhet genom att referera till enhets-ID:t i stället för enhetens IP-adress. Detta är användbart i situationer där en enhet finns i ett privat nätverk och har en privat IP-adress, eller dess IP-adress tilldelas dynamiskt och är okänd för tjänstsidan.

Arbetsflöden för enhetsström

En enhetsström initieras när tjänsten begär att ansluta till en enhet genom att ange dess enhets-ID. Det här arbetsflödet passar särskilt in i en klient-/serverkommunikationsmodell, inklusive SSH och RDP, där en användare tänker fjärransluta till SSH- eller RDP-servern som körs på enheten med hjälp av ett SSH- eller RDP-klientprogram.

Processen för att skapa enhetsströmmen innebär en förhandling mellan enheten, tjänsten, IoT Hubs huvudslutpunkter och slutpunkter för direktuppspelning. Medan IoT Hubs huvudslutpunkt samordnar skapandet av en enhetsström, hanterar slutpunkten för direktuppspelning den trafik som flödar mellan tjänsten och enheten.

Skapandeflöde för enhetsström

Programmatiskt skapande av en enhetsström med hjälp av SDK omfattar följande steg, som också visas i bilden nedan:

  1. Enhetsappen registrerar ett återanrop i förväg för att meddelas om när en ny enhetsström initieras till enheten. Det här steget sker vanligtvis när enheten startar och ansluter till IoT Hub.

  2. Programmet på tjänstsidan initierar en enhetsström när det behövs genom att ange enhets-ID :t (inte IP-adressen).

  3. IoT Hub meddelar programmet på enhetssidan genom att anropa återanropet som registrerats i steg 1. Enheten kan godkänna eller avvisa begäran om initiering av dataströmmen. Den här logiken kan vara specifik för ditt programscenario. Om stream-begäran avvisas av enheten informerar IoT Hub tjänsten om detta. annars följer stegen nedan.

  4. Enheten skapar en säker utgående TCP-anslutning till slutpunkten för direktuppspelning via port 443 och uppgraderar anslutningen till en WebSocket. Url:en för slutpunkten för direktuppspelning samt de autentiseringsuppgifter som ska användas för att autentisera tillhandahålls båda till enheten av IoT Hub som en del av begäran som skickades i steg 3.

  5. Tjänsten meddelas om resultatet av att enheten accepterar strömmen och fortsätter att skapa en egen WebSocket-klient till slutpunkten för direktuppspelning. På samma sätt tar den emot strömningsslutpunktens URL och autentiseringsinformation från IoT Hub.

I handskakningsprocessen ovan:

  • Handskakningsprocessen måste slutföras inom 60 sekunder (steg 2 till 5), annars misslyckas handskakningen med en timeout och tjänsten meddelas därefter.

  • När flödet ovan har skapats fungerar slutpunkten för direktuppspelning som en proxy och överför trafik mellan tjänsten och enheten över respektive WebSockets.

  • Både enhet och tjänst behöver utgående anslutning till IoT Hubs huvudslutpunkt samt slutpunkten för direktuppspelning via port 443. URL:en för dessa slutpunkter finns på fliken Översikt på IoT Hub-portalen.

  • Tillförlitlighets- och beställningsgarantierna för en etablerad dataström är i nivå med TCP.

  • Alla anslutningar till IoT Hub och slutpunkten för direktuppspelning använder TLS och krypteras.

Avslutningsflöde

En etablerad ström avslutas när någon av TCP-anslutningarna till gatewayen kopplas från (av tjänsten eller enheten). Detta kan ske frivilligt genom att stänga WebSocket på antingen enheten eller tjänstprogrammen, eller ofrivilligt i händelse av en tidsgräns för nätverksanslutning eller processfel. När enhetens eller tjänstens anslutning till slutpunkten för direktuppspelning avslutas avslutas även den andra TCP-anslutningen (kraftfullt) och tjänsten och enheten ansvarar för att återskapa strömmen om det behövs.

Anslut ivitetskrav

Både enheten och tjänstsidan för en enhetsström måste kunna upprätta TLS-aktiverade anslutningar till IoT Hub och dess slutpunkt för direktuppspelning. Detta kräver utgående anslutning via port 443 till dessa slutpunkter. Värdnamnet som är associerat med dessa slutpunkter finns på fliken Översikt i IoT Hub, enligt bilden nedan:

Du kan också hämta slutpunktsinformationen med Hjälp av Azure CLI under hubbens egenskapsavsnitt, specifikt, property.hostname och property.deviceStreams nycklar.

az iot hub devicestream show --name <YourIoTHubName>

Utdata är ett JSON-objekt för alla slutpunkter som hubbens enhet och tjänst kan behöva ansluta till för att upprätta en enhetsström.

{
  "streamingEndpoints": [
    "https://<YourIoTHubName>.<region-stamp>.streams.azure-devices.net"
  ]
}

Kommentar

Kontrollera att du har installerat Azure CLI version 2.0.57 eller senare. Du kan ladda ned den senaste versionen från sidan Installera Azure CLI .

Tillåt utgående anslutning till enhetens slutpunkter för direktuppspelning

Som vi nämnde i början av den här artikeln skapar enheten en utgående anslutning till slutpunkten för IoT Hub-direktuppspelning under initieringsprocessen för enhetsströmmar. Dina brandväggar på enheten eller dess nätverk måste tillåta utgående anslutning till den strömmande gatewayen via port 443 (observera att kommunikationen sker via en WebSocket-anslutning som krypteras med hjälp av TLS).

Värdnamnet för slutpunkten för enhetsströmning finns på Azure IoT Hub-portalen under fliken Översikt.

Du kan också hitta den här informationen med hjälp av Azure CLI:

az iot hub devicestream show --name <YourIoTHubName>

Kommentar

Kontrollera att du har installerat Azure CLI version 2.0.57 eller senare. Du kan ladda ned den senaste versionen från sidan Installera Azure CLI .

Felsöka via resursloggar för Flöden enhet

Du kan konfigurera Azure Monitor för att samla in resursloggarna för enhetsströmmar som genereras av din IoT Hub. Detta kan vara till stor hjälp i felsökningsscenarier.

Följ stegen nedan för att skapa en diagnostikinställning för att skicka loggar för enhetsströmmar för din IoT Hub till Azure Monitor-loggar:

  1. Gå till din IoT-hubb i Azure-portalen. Välj Diagnostikinställningar under Övervakning i den vänstra rutan. Välj sedan Lägg till diagnostikinställning.

  2. Ange ett namn för diagnostikinställningen och välj Enhet Flöden i listan med loggar. Välj sedan Skicka till Log Analytics. Du får vägledning för att välja en befintlig Log Analytics-arbetsyta eller skapa en ny.

    Enable device streams logs

  3. När du har skapat en diagnostikinställning för att skicka loggar för enhetsströmmar till en Log Analytics-arbetsyta kan du komma åt loggarna genom att välja Loggar under Övervakning till vänster i IoT-hubben i Azure-portalen. Loggar för enhetsströmmar visas i AzureDiagnostics tabellen och har Category=DeviceStreams. Tänk på att det kan ta flera minuter att följa en åtgärd för att loggar ska visas i tabellen.

    Som du ser nedan är även målenhetens identitet och resultatet av åtgärden tillgänglig i loggarna.

Mer information om hur du använder Azure Monitor med IoT Hub finns i Övervaka IoT Hub. Information om alla resursloggar, mått och tabeller som är tillgängliga för IoT Hub finns i Övervaka Azure IoT Hub-datareferens.

Regional tillgänglighet

Under den offentliga förhandsversionen är IoT Hub-enhetsströmmar tillgängliga i regionerna USA, centrala, USA, östra EUAP, Europa, norra och Asien, sydöstra. Se till att du skapar din hubb i någon av dessa regioner.

SDK-tillgänglighet

Två sidor av varje ström (på enhets- och tjänstsidan) använder IoT Hub SDK för att upprätta tunneln. Under den offentliga förhandsversionen kan kunderna välja mellan följande SDK-språk:

  • C- och C#-SDK:n stöder enhetsströmmar på enhetssidan.

  • NodeJS och C# SDK stöder enhetsströmmar på tjänstsidan.

Nästa steg

Använd länkarna nedan om du vill veta mer om enhetsströmmar.