IoT 中樞 裝置串流 (預覽)

Azure IoT 中樞 裝置串流有助於為各種雲端到裝置通訊案例建立安全的雙向 TCP 通道。 裝置串流是由 IoT 中樞 串流端點所調解,其可作為裝置和服務端點之間的 Proxy。 下圖描述的這項設定,在裝置位於網路防火牆後方或位於私人網路內時特別有用。 因此,IoT 中樞裝置串流可滿足客戶需要以防火牆易用的方式連線到 IoT 裝置,而不需要廣泛開啟傳入或傳出的網路防火牆連接埠。

使用 IoT 中樞裝置串流時,裝置會保持安全,且只需要透過連接埠 443 開啟 IoT 中樞串流端點的輸出 TCP 連線。 建立串流之後,服務端和裝置端應用程式會各自具有 WebSocket 用戶端物件的程式設計存取權,,以相互傳送和接收原始位元組。 此通道所提供的可靠性和排序保證與 TCP 相同。

福利

IoT 中樞裝置串流提供下列優點:

  • 防火牆友好的安全連線:您可以從服務端點連線到IoT裝置,而不需在裝置或網路周邊開啟輸入防火牆埠(只有埠 443 需要 IoT 中樞 的輸出連線)。

  • 驗證:通道的裝置和服務端都需要使用其對應的認證向 IoT 中樞 進行驗證。

  • 加密:根據預設,IoT 中樞 裝置串流使用已啟用 TLS 的連線。 這可確保無論應用程式是否使用加密,流量都會一律加密。

  • 線上的簡單性: 在許多情況下,使用裝置串流不需要複雜的虛擬專用網設定,以啟用IoT裝置的連線能力。

  • 與 TCP/IP 堆疊的相容性:IoT 中樞 裝置串流可以容納 TCP/IP 應用程式流量。 這表示各種專屬和標準型通訊協定都可以利用這項功能。

  • 在專用網設定中使用方便: 服務可以藉由參考裝置標識碼而不是裝置的IP位址來與裝置通訊。 在裝置位於專用網內且具有私人IP位址,或其IP位址動態指派給服務端的情況下,這非常有用。

裝置串流工作流程

當服務要求藉由提供裝置識別碼來連線到裝置時,就會起始裝置資料流程。 此工作流程特別適用於用戶端/伺服器通訊模型,包括 SSH 和 RDP,其中使用者想要使用 SSH 或 RDP 用戶端程式從遠端連線到在裝置上執行的 SSH 或 RDP 伺服器。

裝置串流建立流程牽涉到裝置、服務、IoT 中樞的主要和串流端點之間的交涉。 雖然 IoT 中樞的主要端點會協調裝置串流的建立,但串流端點會處理服務與裝置之間流動的流量。

裝置串流建立流程

使用 SDK 以程式設計方式建立裝置資料流牽涉到下列步驟,如下圖所示:

  1. 裝置應用程式會事先註冊回撥,以在裝置起始新的裝置串流時收到通知。 當裝置開機並連線到 IoT 中樞時,通常會執行此步驟。

  2. 服務端程式會視需要提供裝置標識碼(而非 IP位址)來起始裝置數據流。

  3. IoT 中樞會叫用步驟 1 中註冊的回撥,以通知裝置端程式。 裝置可以接受或拒絕串流起始要求。 此邏輯可以專屬於您的應用程式案例。 如果裝置拒絕串流要求,IoT 中樞會據以通知服務:否則,將遵循下列步驟。

  4. 裝置會透過連接埠 443 建立與串流端點的安全輸出 TCP 連線,並將連線升級至 WebSocket。 串流端點的 URL,以及用來驗證的認證,都是藉由 IoT 中樞 提供給裝置,做為步驟 3 中所傳送要求的一部分。

  5. 系統會通知服務接受串流的裝置結果,並繼續針對串流端點建立自己的 WebSocket 用戶端。 同樣地,它會從 IoT 中樞接收串流端點 URL 和驗證資訊。

在上述交握程式中:

  • 交握程序必須在 60 秒內完成(步驟 2 到 5),否則交握會因為逾時而失敗,並據以通知服務。

  • 在上述串流建立流程完成之後,串流端點會作為 Proxy,並透過各自的 WebSocket 在服務與裝置之間傳輸流量。

  • 裝置和服務都需要輸出連線到 IoT 中樞 的主要端點,以及透過埠 443 串流端點。 這些端點的 URL 可在 IoT 中樞 入口網站的 [概觀] 索引標籤上取得。

  • 已建立數據流的可靠性與排序保證與 TCP 相同。

  • IoT 中樞和串流端點的所有連線都會使用 TLS 並加密。

終止流程

當閘道的 TCP 連線中斷(由服務或裝置)中斷時,已建立的數據流就會終止。 這可以透過關閉裝置或服務程式上的 WebSocket,或非自願地在網路連線逾時或行程失敗時進行。 當裝置或服務與串流端點的連線終止時,其他 TCP 連線也會終止,而且服務與裝置會在必要時負責重新建立數據流。

連線需求

裝置串流的裝置端和服務端都必須能夠建立已啟用 TLS 的 IoT 中樞及其串流端點的連線。 這需要透過連接埠 443 與這些端點的輸出連線。 您可以在 IoT 中樞 的 [概觀] 索引標籤中找到與這些端點相關聯的主機名,如下圖所示:

或者,您可以使用中樞的 [屬性] 區段下的 Azure CLI 來擷取端點資訊, property.hostname 特別是和 property.deviceStreams 密鑰。

az iot hub devicestream show --name <YourIoTHubName>

輸出是中樞裝置和服務可能需要連線到之所有端點的 JSON 物件,才能建立裝置數據流。

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

注意

請確定您已安裝 Azure CLI 2.0.57 版或更新版本。 您可以從 [安裝 Azure CLI] 頁面下載最新版本

允許對裝置串流端點的輸出連線

如本文開頭所述,您的裝置會在裝置串流起始程序期間,建立 IoT 中樞 串流端點的輸出連線。 裝置或其網路上的防火牆必須允許透過埠 443 的串流網關進行輸出連線(請注意,通訊會透過使用 TLS 加密的 WebSocket 連線進行)。

您可以在 Azure IoT 中樞 入口網站的 [概觀] 索引標籤下找到裝置串流端點的主機名。

或者,您可以使用 Azure CLI 找到此資訊:

az iot hub devicestream show --name <YourIoTHubName>

注意

請確定您已安裝 Azure CLI 2.0.57 版或更新版本。 您可以從 [安裝 Azure CLI] 頁面下載最新版本

透過裝置串流資源記錄進行疑難解答

您可以設定 Azure 監視器,以收集 IoT 中樞 所發出的裝置串流資源記錄。 這在疑難解答案例中很有説明。

請遵循下列步驟來建立診斷設定,以將 IoT 中樞 的裝置串流記錄傳送至 Azure 監視器記錄:

  1. 在 Azure 入口網站 中,流覽至您的IoT中樞。 在左窗格的 [監視] 底下,選取 [診斷設定]。 然後選取 [ 新增診斷設定]。

  2. 提供診斷設定的名稱,並從記錄清單中選取 [DeviceStreams ]。 然後選取 [ 傳送至 Log Analytics]。 系統會引導您選擇現有的Log Analytics工作區,或建立新的工作區。

    Enable device streams logs

  3. 建立診斷設定以將裝置串流記錄傳送至 Log Analytics 工作區之後,您可以在 Azure 入口網站 的 IoT 中樞左窗格中選取 [監視] 底下的 [記錄] 來存取記錄。 裝置串流記錄會出現在資料表中 AzureDiagnostics ,並具有 Category=DeviceStreams。 請注意,在作業之後可能需要幾分鐘的時間,記錄才會出現在數據表中。

    如下所示,目標裝置的身分識別和作業結果也可在記錄中取得。

若要深入瞭解如何搭配 IoT 中樞 使用 Azure 監視器,請參閱監視 IoT 中樞。 如需所有可供 IoT 中樞 使用之資源記錄、計量和數據表的資訊,請參閱監視 Azure IoT 中樞 數據參考

區域可用性

在公開預覽期間,IoT 中樞 裝置串流可在美國中部、美國東部 EUAP、北歐和東南亞區域取得。 請確定您在下列其中一個區域中建立中樞。

SDK 可用性

每個數據流的兩端(在裝置和服務端)都使用 IoT 中樞 SDK 來建立通道。 在公開預覽期間,客戶可以選擇下列 SDK 語言:

  • C 和 C# SDK 在裝置端支援裝置串流。

  • NodeJS 和 C# SDK 支援服務端的裝置串流。

下一步

使用下列連結來深入瞭解裝置串流。