Strumienie urządzenia usługi IoT Hub (wersja zapoznawcza)

Strumienie urządzeń usługi Azure IoT Hub ułatwiają tworzenie bezpiecznych tuneli TCP dwukierunkowych dla różnych scenariuszy komunikacji chmury-urządzenia. Strumień urządzenia jest pośredniczony przez punkt końcowy przesyłania strumieniowego usługi IoT Hub, który działa jako serwer proxy między urządzeniem a punktami końcowymi usługi. Ta konfiguracja, przedstawiona na poniższym diagramie, jest szczególnie przydatna, gdy urządzenia znajdują się za zaporą sieciową lub znajdują się w sieci prywatnej. W związku z tym strumienie urządzeń usługi IoT Hub ułatwiają klientom dotarcie do urządzeń IoT w sposób przyjazny dla zapory i bez konieczności szerokiego otwierania przychodzących lub wychodzących portów zapory sieciowej.

Korzystając ze strumieni urządzeń usługi IoT Hub, urządzenia pozostają bezpieczne i będą musiały otwierać wychodzące połączenia TCP z punktem końcowym przesyłania strumieniowego usługi IoT Hub za pośrednictwem portu 443. Po ustanowieniu strumienia aplikacje po stronie usługi i urządzenia będą miały dostęp programowy do obiektu klienta Protokołu WebSocket w celu wysyłania i odbierania nieprzetworzonych bajtów do siebie. Gwarancje niezawodności i kolejności udostępniane przez ten tunel są na równi z protokołem TCP.

Świadczenia

Strumienie urządzeń usługi IoT Hub zapewniają następujące korzyści:

  • Bezpieczna łączność przyjazna dla zapory: urządzenia IoT można uzyskać z punktów końcowych usługi bez otwierania portu zapory przychodzącej na urządzeniu lub obwodach sieci (wymagana jest tylko łączność wychodząca z usługą IoT Hub przez port 443).

  • Uwierzytelnianie: obie strony urządzenia i usługi tunelu muszą być uwierzytelniane w usłudze IoT Hub przy użyciu odpowiednich poświadczeń.

  • Szyfrowanie: domyślnie strumienie urządzeń usługi IoT Hub używają połączeń z obsługą protokołu TLS. Gwarantuje to, że ruch jest zawsze szyfrowany niezależnie od tego, czy aplikacja korzysta z szyfrowania, czy nie.

  • Prostota łączności: W wielu przypadkach użycie strumieni urządzeń eliminuje konieczność złożonej konfiguracji wirtualnych sieci prywatnych w celu umożliwienia łączności z urządzeniami IoT.

  • Zgodność ze stosem TCP/IP: strumienie urządzeń usługi IoT Hub mogą obsługiwać ruch aplikacji TCP/IP. Oznacza to, że wiele zastrzeżonych protokołów, a także protokołów opartych na standardach może korzystać z tej funkcji.

  • Łatwość użycia w konfiguracjach sieci prywatnej: usługa może komunikować się z urządzeniem, odwołując się do jego identyfikatora urządzenia, a nie adresu IP urządzenia. Jest to przydatne w sytuacjach, gdy urządzenie znajduje się w sieci prywatnej i ma prywatny adres IP lub jego adres IP jest przypisywany dynamicznie i jest nieznany po stronie usługi.

Przepływy pracy strumienia urządzenia

Strumień urządzenia jest inicjowany, gdy usługa żąda połączenia z urządzeniem, podając jego identyfikator urządzenia. Ten przepływ pracy szczególnie pasuje do modelu komunikacji klienta/serwera, w tym SSH i RDP, gdzie użytkownik zamierza zdalnie nawiązać połączenie z serwerem SSH lub RDP uruchomionym na urządzeniu przy użyciu programu klienta SSH lub RDP.

Proces tworzenia strumienia urządzenia obejmuje negocjacje między głównymi i głównymi punktami końcowymi centrum IoT Hub w ramach urządzenia, usługi i przesyłania strumieniowego. Podczas gdy główny punkt końcowy centrum IoT organizuje tworzenie strumienia urządzenia, punkt końcowy przesyłania strumieniowego obsługuje ruch przepływujący między usługą a urządzeniem.

Przepływ tworzenia strumienia urządzenia

Programowe tworzenie strumienia urządzenia przy użyciu zestawu SDK obejmuje następujące kroki, które przedstawiono również na poniższej ilustracji:

  1. Aplikacja urządzenia rejestruje wywołanie zwrotne z wyprzedzeniem, aby otrzymywać powiadomienia o zainicjowaniu nowego strumienia urządzenia na urządzeniu. Ten krok zwykle odbywa się, gdy urządzenie uruchamia się i nawiązuje połączenie z usługą IoT Hub.

  2. Program po stronie usługi inicjuje strumień urządzenia w razie potrzeby, podając identyfikator urządzenia (a nie adres IP).

  3. Usługa IoT Hub powiadamia program po stronie urządzenia, wywołując wywołanie zwrotne zarejestrowane w kroku 1. Urządzenie może zaakceptować lub odrzucić żądanie inicjowania strumienia. Ta logika może być specyficzna dla scenariusza aplikacji. Jeśli żądanie strumienia zostanie odrzucone przez urządzenie, usługa IoT Hub informuje odpowiednio usługę; w przeciwnym razie wykonaj poniższe kroki.

  4. Urządzenie tworzy bezpieczne wychodzące połączenie TCP z punktem końcowym przesyłania strumieniowego za pośrednictwem portu 443 i uaktualnia połączenie z protokołem WebSocket. Adres URL punktu końcowego przesyłania strumieniowego oraz poświadczenia używane do uwierzytelniania są udostępniane urządzeniu przez usługę IoT Hub w ramach żądania wysłanego w kroku 3.

  5. Usługa jest powiadamiana o wyniku akceptowania strumienia przez urządzenie i przechodzi do tworzenia własnego klienta protokołu WebSocket do punktu końcowego przesyłania strumieniowego. Podobnie otrzymuje on adres URL punktu końcowego przesyłania strumieniowego i informacje o uwierzytelnianiu z usługi IoT Hub.

W powyższym procesie uzgadniania:

  • Proces uzgadniania musi zostać ukończony w ciągu 60 sekund (krok od 2 do 5), w przeciwnym razie uzgadnianie zakończy się niepowodzeniem z przekroczeniem limitu czasu, a usługa zostanie odpowiednio powiadomiona.

  • Po zakończeniu powyższego przepływu tworzenia strumienia punkt końcowy przesyłania strumieniowego będzie działać jako serwer proxy i będzie transferować ruch między usługą a urządzeniem za pośrednictwem odpowiednich obiektów WebSocket.

  • Zarówno urządzenie, jak i usługa wymagają łączności wychodzącej z głównym punktem końcowym usługi IoT Hub, a także punktem końcowym przesyłania strumieniowego za pośrednictwem portu 443. Adres URL tych punktów końcowych jest dostępny na karcie Przegląd w portalu usługi IoT Hub.

  • Niezawodność i kolejność gwarancji ustalonego strumienia jest na równi z protokołem TCP.

  • Wszystkie połączenia z usługą IoT Hub i punktem końcowym przesyłania strumieniowego używają protokołu TLS i są szyfrowane.

Przepływ zakończenia

Ustalony strumień kończy się po rozłączeniu jednego z połączeń TCP z bramą (przez usługę lub urządzenie). Może się to odbywać dobrowolnie przez zamknięcie protokołu WebSocket na urządzeniu lub w programach usług albo mimowolnie w przypadku przekroczenia limitu czasu łączności sieciowej lub błędu procesu. Po zakończeniu połączenia urządzenia lub usługi z punktem końcowym przesyłania strumieniowego inne połączenie TCP będzie również (wymuszone) zakończone, a usługa i urządzenie są odpowiedzialne za ponowne utworzenie strumienia, jeśli jest to konieczne.

Wymagania dotyczące łączności

Zarówno urządzenie, jak i boki usługi strumienia urządzenia muszą być w stanie nawiązać połączenia z usługą IoT Hub i jego punktem końcowym przesyłania strumieniowego z obsługą protokołu TLS. Wymaga to łączności wychodzącej przez port 443 do tych punktów końcowych. Nazwa hosta skojarzona z tymi punktami końcowymi można znaleźć na karcie Przegląd usługi IoT Hub, jak pokazano na poniższej ilustracji:

Alternatywnie informacje o punktach końcowych można pobrać przy użyciu interfejsu wiersza polecenia platformy Azure w sekcji właściwości centrum, w szczególności property.hostname i property.deviceStreams kluczy.

az iot hub devicestream show --name <YourIoTHubName>

Dane wyjściowe to obiekt JSON wszystkich punktów końcowych, z którymi urządzenie centrum i usługa mogą wymagać połączenia w celu ustanowienia strumienia urządzenia.

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

Uwaga

Upewnij się, że zainstalowano interfejs wiersza polecenia platformy Azure w wersji 2.0.57 lub nowszej. Najnowszą wersję można pobrać ze strony Instalowanie interfejsu wiersza polecenia platformy Azure.

Zezwalaj na łączność wychodzącą z punktami końcowymi przesyłania strumieniowego urządzenia

Jak wspomniano na początku tego artykułu, urządzenie tworzy połączenie wychodzące z punktem końcowym przesyłania strumieniowego usługi IoT Hub podczas procesu inicjowania strumieni urządzeń. Zapory na urządzeniu lub jego sieci muszą zezwalać na łączność wychodzącą z bramą przesyłania strumieniowego za pośrednictwem portu 443 (należy pamiętać, że komunikacja odbywa się za pośrednictwem połączenia protokołu WebSocket szyfrowanego przy użyciu protokołu TLS).

Nazwę hosta punktu końcowego przesyłania strumieniowego urządzenia można znaleźć w portalu usługi Azure IoT Hub na karcie Przegląd.

Alternatywnie możesz znaleźć te informacje przy użyciu interfejsu wiersza polecenia platformy Azure:

az iot hub devicestream show --name <YourIoTHubName>

Uwaga

Upewnij się, że zainstalowano interfejs wiersza polecenia platformy Azure w wersji 2.0.57 lub nowszej. Najnowszą wersję można pobrać ze strony Instalowanie interfejsu wiersza polecenia platformy Azure.

Rozwiązywanie problemów za pośrednictwem dzienników zasobów Strumienie urządzenia

Usługę Azure Monitor można skonfigurować w celu zbierania dzienników zasobów dla strumieni urządzeń emitowanych przez usługę IoT Hub. Może to być bardzo przydatne w scenariuszach rozwiązywania problemów.

Wykonaj poniższe kroki, aby utworzyć ustawienie diagnostyczne służące do wysyłania dzienników strumieni urządzeń dla usługi IoT Hub do dzienników usługi Azure Monitor:

  1. W witrynie Azure Portal przejdź do centrum IoT Hub. W okienku po lewej stronie w obszarze Monitorowanie wybierz pozycję Ustawienia diagnostyczne. Następnie wybierz pozycję Dodaj ustawienie diagnostyczne.

  2. Podaj nazwę ustawienia diagnostyki i wybierz pozycję Urządzenie Strumienie z listy dzienników. Następnie wybierz pozycję Wyślij do usługi Log Analytics. Nastąpi przekierowanie w celu wybrania istniejącego obszaru roboczego usługi Log Analytics lub utworzenia nowego.

    Enable device streams logs

  3. Po utworzeniu ustawienia diagnostycznego służącego do wysyłania dzienników strumieni urządzenia do obszaru roboczego usługi Log Analytics możesz uzyskać dostęp do dzienników, wybierając pozycję Dzienniki w obszarze Monitorowanie w lewym okienku centrum IoT Hub w witrynie Azure Portal. Dzienniki strumieni urządzeń będą wyświetlane w AzureDiagnostics tabeli i mają wartość Category=DeviceStreams. Pamiętaj, że wyświetlenie dzienników w tabeli może potrwać kilka minut.

    Jak pokazano poniżej, tożsamość urządzenia docelowego i wynik operacji jest również dostępny w dziennikach.

Aby dowiedzieć się więcej na temat korzystania z usługi Azure Monitor z usługą IoT Hub, zobacz Monitorowanie usługi IoT Hub. Aby uzyskać informacje o wszystkich dziennikach zasobów, metrykach i tabelach dostępnych dla usługi IoT Hub, zobacz Monitoring Azure IoT Hub data reference (Monitorowanie danych usługi Azure IoT Hub).

Dostępność regionalna

W publicznej wersji zapoznawczej strumienie urządzeń usługi IoT Hub są dostępne w regionach Środkowe stany USA, Wschodnie stany USA EUAP, Europa Północna i Azja Południowo-Wschodnia. Upewnij się, że centrum jest tworzone w jednym z tych regionów.

Dostępność zestawu SDK

Dwie strony każdego strumienia (po stronie urządzenia i usługi) używają zestawu SDK usługi IoT Hub do ustanowienia tunelu. W publicznej wersji zapoznawczej klienci mogą wybierać spośród następujących języków zestawu SDK:

  • Strumienie urządzeń obsługiwane przez zestaw SDK języka C i C# po stronie urządzenia.

  • Zestaw NodeJS i zestaw SDK języka C# obsługują strumienie urządzeń po stronie usługi.

Następne kroki

Skorzystaj z poniższych linków, aby dowiedzieć się więcej o strumieniach urządzeń.