Strumienie urządzeń 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 między chmurą a urządzeniem. Strumień urządzenia jest pośredniczony przez punkt końcowy usługi IoT Hub *streaming, który działa jako serwer proxy między urządzeniem a punktami końcowymi usługi. Ta konfiguracja, przedstawiona na 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 mają 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. Ten czynnik gwarantuje, ż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. Takie podejście oznacza, że ta funkcja może korzystać z szerokiej gamy protokołów zastrzeżonych i opartych na standardach.

  • Ł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. Ten fakt jest przydatny 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 są również przedstawione na rysunku:

  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 urządzenie odrzuci żądanie strumienia, usługa IoT Hub informuje odpowiednio usługę; w przeciwnym razie należy wykonać następujące czynności.

  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 i 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.

  • Oba urządzenia i usługi wymagają łączności wychodzącej z głównym punktem końcowym usługi IoT Hub i punktem końcowym przesyłania strumieniowego przez port 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). Ta akcja może odbywać się dobrowolnie przez zamknięcie protokołu WebSocket na urządzeniu lub w programach usług albo mimowolnie w przypadku przekroczenia limitu czasu lub błędu procesu łączności sieciowej. Po zakończeniu połączenia urządzenia lub usługi z punktem końcowym przesyłania strumieniowego inne połączenie TCP jest 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. Taka sytuacja wymaga łą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 rysunku:

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 i usługa centrum 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 strumieni urządzeń

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

Wykonaj następujące kroki, aby utworzyć ustawienie diagnostyczne w celu 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ę DeviceStreams 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.

    Włączanie dzienników strumieni urządzeń

  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ń są wyświetlane w AzureDiagnostics tabeli i mają wartość Category=DeviceStreams. Wyświetlenie dzienników w tabeli może potrwać kilka minut.

    Jak pokazano tutaj, 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ść w regionach

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