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 和驗證資訊。
在先前所述的交握程式中:
交握程序必須在 60 秒內完成(步驟 2 到 5),否則交握會因逾時而失敗,並據以通知服務。
在先前描述的串流建立流程完成之後,串流端點會作為 Proxy,並透過各自的 WebSocket 在服務與裝置之間傳輸流量。
裝置和服務都需要透過連接埠 443 與 IoT 中樞主要端點及串流端點進行輸出連線。 在「IoT 中樞」入口網站的 [概觀] 索引標籤上,即可取得這些端點的 URL。
已建立之串流的可靠性和排序皆等同於 TCP。
IoT 中樞及其串流端點的所有連線都會使用 TLS 並加密。
終止流程
當針對閘道的任一 TCP 連線 (由服務或裝置) 中斷時,已建立的串流就會終止。 此動作會透過關閉裝置或服務程式上的 WebSocket 來主動達成,或是因網路連線逾時或程序失敗而意外發生。 在裝置或服務針對串流端點的連線終止時,另一端的 TCP 連線也會被 (強制) 終止。如果需要,服務和裝置必須負責重新建立串流。
連線需求
裝置串流的裝置端和服務端都必須能夠建立已啟用 TLS 的 IoT 中樞及其串流端點的連線。 此狀況需要透過連接埠 443 與這些端點建立輸出連線。 您可以在 Azure 入口網站中 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
。 在作業之後可能需要幾分鐘的時間,記錄才會出現在資料表中。如此處所示,記錄中也會顯示目標裝置的身分識別,以及作業的結果。
若要深入瞭解如何搭配IoT中樞使用 Azure 監視器,請參閱 監視 Azure IoT 中樞。 如需IoT中樞可用之所有資源記錄、計量和數據表的相關信息,請參閱 Azure IoT 中樞監視數據參考。
區域可用性
在公開預覽期間,提供 IoT 中樞裝置串流的區域包括美國中部、美國東部 EUAP、北歐和東南亞。 請務必在這其中一個區域建立您的中樞。
SDK 可用性
每個串流的兩端 (裝置端和服務端) 都會使用 IoT 中樞 SDK 來建立通道。 在公開預覽期間,客戶可以選擇下列 SDK 語言:
C和 C# SDK 支援裝置端的裝置串流。
Node.js 和 C# SDK 支援服務端的裝置串流。