IoT 中樞裝置串流 (預覽)
Azure IoT 中樞「裝置串流」能協助建立適用於不同雲端到裝置通訊案例的安全雙向 TCP 通道。 裝置串流是由 IoT 中樞 *串流端點進行調解,其會作為您的裝置和服務端點之間的 Proxy。 當裝置位於網路防火牆後方或私人網路內時,此設定 (如圖所示) 特別有用。 因此,IoT 中樞裝置串流可滿足客戶需要以防火牆易用的方式連線到 IoT 裝置,而不需要廣泛開啟傳入或傳出的網路防火牆連接埠。
使用 IoT 中樞裝置串流時,裝置會保持安全,且只需要透過連接埠 443 開啟 IoT 中樞串流端點的輸出 TCP 連線。 建立串流之後,服務端和裝置端應用程式將能個別以程式設計方式存取 WebSocket 用戶端物件,以互相傳送及接收原始位元組。 此通道所提供的可靠性和排序保證與 TCP 相同。
IoT 中樞裝置串流提供下列優點:
防火牆適用的安全連線:可在不需要開啟裝置或網路周邊傳入防火牆連接埠的情況下 (只需要經由連接埠 443 針對 IoT 中樞的傳出連線能力),從服務端點連線到 IoT 裝置。
驗證:通道的裝置端和服務端都需要使用其對應的認證向 IoT 中樞驗證。
加密:依預設,IoT 中樞裝置串流會使用啟用 TLS 的連線。 此因素可確保不論應用程式是否使用加密,流量都一律會加密。
簡化連線:在許多情況下,使用裝置資料流都可讓您無須對「虛擬私人網路」進行複雜的設定,即可啟用對 IoT 裝置的連線能力。
TCP/IP 堆疊的相容性:IoT 中樞裝置串流可以容納 TCP/IP 應用程式流量。 此方法表示眾多的專屬與標準型的通訊協定都可以使用此功能。
在私人網路設定中輕鬆使用:此服務可藉由參考裝置識別碼 (而非裝置的 IP 位址) 來與裝置進行通訊。 這在裝置位於私人網路內且具有私人 IP 位址,或其 IP 位址為動態指派且無法由服務端得知的情況下非常有用。
當服務要求藉由提供裝置識別碼來連線到裝置時,就會起始裝置資料流程。 此工作流程特別適用於用戶端/伺服器通訊模型,包括 SSH 和 RDP,其中使用者想要使用 SSH 或 RDP 用戶端程式從遠端連線到在裝置上執行的 SSH 或 RDP 伺服器。
裝置串流建立流程牽涉到裝置、服務、IoT 中樞的主要和串流端點之間的交涉。 雖然 IoT 中樞的主要端點會協調裝置串流的建立,但串流端點會處理服務與裝置之間流動的流量。
使用 SDK 以程式設計方式建立裝置串流會涉及下列步驟,這些步驟也詳述於下圖之中:
裝置應用程式會事先註冊回撥,以在裝置起始新的裝置串流時收到通知。 當裝置開機並連線到 IoT 中樞時,通常會執行此步驟。
需要時,服務端程式會藉由提供裝置識別碼 (「不是」IP 位址) 來起始裝置串流。
IoT 中樞會叫用步驟 1 中註冊的回撥,以通知裝置端程式。 裝置可能會接受或拒絕串流初始化要求。 此邏輯可以專屬於您的應用程式案例。 如果裝置拒絕串流要求,IoT 中樞會據以通知服務;否則,便會採取以下步驟。
裝置會透過連接埠 443 建立與串流端點的安全輸出 TCP 連線,並將連線升級至 WebSocket。 IoT 中樞會將串流端點的 URL 及驗證用的認證作為步驟 3 中傳送的要求的一部分提供給裝置。
系統會通知服務接受串流的裝置結果,並繼續針對串流端點建立自己的 WebSocket 用戶端。 同樣地,它會從 IoT 中樞接收串流端點 URL 和驗證資訊。
在上述交握程序中:
交握程序 (步驟 2 至 5) 必須在 60 秒內完成,否則交握會因逾時而失敗,且系統會據以通知服務。
在上述串流建立流程完成之後,串流端點會作為 Proxy,並透過服務與裝置個別的 WebSocket 傳輸兩者之間流量。
裝置和服務都需要透過連接埠 443 與 IoT 中樞主要端點及串流端點進行輸出連線。 在「IoT 中樞」入口網站的 [概觀] 索引標籤上,即可取得這些端點的 URL。
已建立之串流的可靠性和排序皆等同於 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"
]
}
如本文開頭所述,您的裝置會在裝置串流初始化程序期間,建立針對 IoT 中樞串流端點的傳出連線。 您裝置或其網路上的防火牆必須允許透過連接埠 443 對串流閘道進行傳出連線 (請注意,通訊會透過以 TLS 加密的 WebSocket 連線進行)。
裝置串流端點的主機名稱可以在 Azure IoT 中樞入口網站上的 [概觀] 索引標籤下找到。
或者,您也可以使用 Azure CLI 找到此資訊:
az iot hub devicestream show --name <YourIoTHubName>
您可以設定 Azure 監視器,以收集 IoT 中樞所發出的裝置串流資源記錄。 此方法對於疑難排解案例來說會有幫助。
請遵循這些步驟來建立診斷設定,以將 IoT 中樞的裝置串流記錄傳送至 Azure 監視器記錄:
在 Azure 入口網站中,瀏覽至您的 IoT 中樞。 在左側窗格的 [監視] 下方,選取 [診斷設定]。 然後選取 [新增診斷設定]。
提供診斷設定的名稱,並從記錄清單中選取 [裝置串流]。 然後選取 [傳送至 Log Analytics]。 系統會引導您選擇現有 Log Analytics 工作區或建立新工作區。
建立診斷設定以將裝置串流記錄傳送至 Log Analytics 工作區之後,您可以在 Azure 入口網站內 ioT 中樞的左窗格上,選取 [監視] 下方的 [記錄] 來存取記錄。 裝置串流記錄會出現在
AzureDiagnostics
資料表中,並具有Category=DeviceStreams
。 在作業之後可能需要幾分鐘的時間,記錄才會出現在資料表中。如此處所示,記錄中也會顯示目標裝置的身分識別,以及作業的結果。
若要深入瞭解如何搭配使用 Azure 監視器與 IoT 中樞,請參閱監視 IoT 中樞。 如需可供 IoT 中樞使用的所有資源記錄、計量和資料表相關資訊,請參閱監視 Azure IoT 中樞資料參考。
在公開預覽期間,提供 IoT 中樞裝置串流的區域包括美國中部、美國東部 EUAP、北歐和東南亞。 請務必在這其中一個區域建立您的中樞。
每個串流的兩端 (裝置端和服務端) 都會使用 IoT 中樞 SDK 來建立通道。 在公開預覽期間,客戶可以選擇下列 SDK 語言:
C 和 C# SDK 支援裝置端上的裝置串流。
Node.js和 C# SDK 支援服務端的裝置串流。