Azure 的混合式連線(Hybrid Connections)是一項讓位於 Azure 的雲端服務(如 App Service 或 Azure Functions)可以安全地存取位於內部網路(On-premises)資源的技術。
這些內部資源通常是在公司防火牆後面的資料庫(例如 SQL Server、MySQL)或具備 TCP 連線能力的 HTTP 服務。
運作原理
混合式連線不要求你在防火牆上開啟任何對外的通訊埠(Inbound Port),也不需要建立複雜的 VPN 或 ExpressRoute。它的運作基礎是 Azure Relay。
當你安裝了混合式連線管理員(Hybrid Connection Manager, HCM)在內部網路的伺服器上後,HCM 會透過 443 埠(HTTPS/WebSockets)向 Azure 發起「對外」的連線。雲端的應用程式與內網的 HCM 之間會建立一條雙向的安全隧道,藉此傳輸資料。
選取與建立的區別
在 Azure 控制台看到的那兩段文字,分別代表不同的操作情境:
- 新增選取的混合式連線:如果你之前已經在同一個服務匯流排(Service Bus)命名空間中建立過連線,你可以直接從清單中挑選現有的定義,並套用到目前的應用程式。這適合多個 App 需要存取同一個後端資源時使用。
- 建立新混合式連線:這表示要從頭開始定義一個新的存取路徑。你需要填寫後端資源的主機名稱(如 db-server-01)以及對應的通訊埠(如 1433)。建立完成後,系統會提供一段金鑰,讓你安裝在內網的 HCM 程式使用,完成配對連線。
優點
跨平台:只要後端資源支援 TCP 協議(例如資料庫、網頁服務),基本上都能透過這種方式連通。
安全性高:不需要開啟防火牆進入點,大幅降低被攻擊的風險。
設定簡單:不需要變更網路架構或申請靜態 IP。
針對混合式連線管理員(HCM)與服務匯流排(Service Bus)命名空間,若結合 Microsoft 雲端導入框架(Cloud Adoption Framework, CAF)的規範與實務建議,可以從架構、命名、以及資源管理三個層面來理解。
資源與命名空間的關係
混合式連線本質上是建立在 Azure Relay 服務之上的功能。在設定時,系統會要求你選擇或建立一個服務匯流排(Service Bus)命名空間來存放這些連線實體。
- 隸屬關係:每一個混合式連線(Hybrid Connection)都必須隸屬於一個 Service Bus 命名空間。
- 延遲考量:CAF 建議將 Service Bus 命名空間部署在與你的 App Service(雲端應用程式)相同的 Azure 區域,以減少網路傳遞的延遲。
CAF 命名建議與規範
根據 CAF 的資源命名慣例,命名應具備可讀性與組織性,建議格式如下:
sb-<應用程式名稱>-<環境>-<地區>-<編號>
- sb (Service Bus Prefix):資源類型的簡寫,Service Bus 命名空間通常使用
sb。 - 環境:例如
prod(正式)、dev(開發) 或test(測試)。 - 地區:例如
tw(台灣) 或hk(香港)。
範例: sb-hrsystem-prod-tw-01
這讓 MIS 或維運人員一看就知道這是用於 HR 系統、正式環境、位於台灣機房的服務匯流排。
混合式連線管理員 (HCM) 的部署建議
HCM 是安裝在內部網路伺服器上的代理程式(Agent),它是連線成功的關鍵。
- 高可用性 (High Availability):CAF 建議在生產環境中,針對同一個混合式連線,應在不同的伺服器上安裝至少兩個 HCM 執行個體。Azure 會自動在這些活動狀態的執行個體之間進行負載平衡與故障轉移。
- 安全性 (Security):
- HCM 伺服器只需要對外存取 Azure 的 443 埠(HTTPS/WebSockets)。
- 不需要開啟任何入站(Inbound)防火牆規則。
- CAF 強烈建議啟用用戶端授權,並使用共用存取簽章(SAS)金鑰來管理連線權限。
實務建議整理表
| 項目 | CAF / 最佳實務建議 |
| 網路延遲 | 命名空間應與 App Service 放在同一個 Azure Region。 |
| 定價層級 | 建議至少使用 Standard (標準) 層級以獲得更好的 SLA 保證與管理功能。 |
| 監控 | 應將命名空間的診斷日誌(Diagnostic Logs)發送至 Log Analytics 以監控連線狀態。 |
| 管理 | 避免將過多不相關系統的混合式連線放在同一個命名空間,應以「工作負載(Workload)」為單位進行隔離。 |
在 Azure 控制台中操作時,選擇「建立新混合式連線」通常會自動引導你完成命名空間的建立或選擇,此時套用上述命名慣例,會對未來的維護有很大幫助。
針對混合式連線管理員(HCM)與相關資源的命名,遵循 Microsoft 雲端導入框架(CAF)可以確保架構在擴充時保持清晰。以下是具體的命名建議與實務做法。
資源命名建議
在 Azure 中,混合式連線(Hybrid Connection)並非獨立存在的實體,它依賴於服務匯流排(Service Bus)命名空間以及轉送(Relay)實體。
- 服務匯流排命名空間(Service Bus Namespace)建議格式:sb-<系統/專案名稱>-<環境>-<區域>範例:sb-hr-prod-tw用途:這是承載所有連線的容器,應以「用途」而非單一伺服器命名。
- 混合式連線實體(Hybrid Connection Entity)建議格式:hc-<目標伺服器/服務>-<通訊埠>範例:hc-sqlserver01-1433 或 hc-api-endpoint-8080用途:直接反映這個連線要通往內網的哪台主機與哪個服務。
- 混合式連線管理員(HCM)安裝主機建議格式:hcm-vm-<流水號>範例:hcm-vm-01, hcm-vm-02用途:安裝在內網的實體機或虛擬機。建議在主機名稱加上 hcm 前綴,方便網路管理員識別這台機器的流量性質。
CAF 命名組成要素
CAF 建議的命名應包含以下標籤資訊,透過連字號(-)組合:
資源類型縮寫(Resource type):例如 sb (Service Bus), hc (Hybrid Connection)。
應用程式名稱(App name):代表這個連線服務的系統。
環境(Environment):例如 dev, test, prod。
區域(Region):縮寫如 tw (Taiwan), hk (Hong Kong)。
部署與架構建議
為了符合企業級的穩定性,除了命名外,CAF 還有幾點關鍵建議:
- 分組管理(Grouping)不要將所有不相關的連線塞進同一個服務匯流排。建議依據工作負載(Workload)來區分。例如:薪資系統使用一個 sb,差勤系統使用另一個 sb。這樣在金鑰管理與權限控管上會更安全。
- 高可用性(High Availability)在內網環境中,針對同一個混合式連線,應至少在兩台不同的主機上安裝 HCM。Azure 會自動在這些主機之間切換流量。這時命名可採用 hcm-host-a 與 hcm-host-b 來區分冗餘成員。
- 規格層級在正式生產環境中,Service Bus 建議至少選擇標準版(Standard),以支援足夠的連線數與混合式連線功能。
透過這種標準化的命名方式,當系統搬遷或擴充規模時,MIS 人員能迅速識別資源歸屬,減少誤刪或配置錯誤的風險。
要讓位於 Azure 雲端的應用程式連回地端資源,混合式連線管理員(HCM)扮演的是一個主動外連的轉運站角色。它的運作邏輯並非由雲端直接「戳」進你的防火牆,而是從內部主動向外建立通道。
安裝與連通的具體流程如下:
安裝與配對
首先,你需要在地端內網找一台伺服器(Windows Server 2012 以上版本)安裝 HCM 程式。
- 在 Azure 入口網站點擊建立新混合式連線後,會得到一串連線字串(Gateway Connection String)。
- 將此字串貼入地端的 HCM 程式中。
- 此時 HCM 會透過 TCP 443 埠向 Azure Relay 服務發起連線。
建立通訊隧道
一旦 HCM 與 Azure 握手成功,連線狀態會顯示為已連線(Connected)。
- 外連請求:雲端的 App Service 發出存取請求(例如指向
db-server:1433)。 - 代理轉送:Azure Relay 收到請求後,會透過剛才 HCM 建立的長連線通道,將封包傳送給地端的 HCM。
- 本地派送:地端的 HCM 接收到封包,再以地端伺服器的身份,將請求發送給內網中真正的目標(如 SQL Server)。
關鍵技術特性
這種方式之所以適合企業環境,主要有三個原因:
- 免開入站埠:防火牆不需要開啟任何 Incoming Port,這對資安部門來說非常重要。只要內網主機可以連上網(443 埠),連線就能建立。
- 無需 VPN:它不需要建立點對點 VPN 或昂貴的專線,設定過程只需幾分鐘。
- 解析機制:App Service 會使用 HCM 所在的內網 DNS 環境。只要在 Azure 上設定的主機名稱地端能認得,連線就能成功。
實際操作建議
如果你的環境需要穩定運作,請注意以下幾點:
- 多主機部署:在兩台不同的地端伺服器安裝同一個連線的 HCM,這樣當其中一台重啟或更新時,服務不會中斷。
- 網路出口:確保地端 HCM 所在的主機沒有嚴格限制對外連線,否則無法連接到 Azure 的服務匯流排。
- 資源隔離:一個連線只對應一個特定主機與通訊埠(例如
192.168.1.50:1433),這符合最小權限原則,不會讓整個內網暴露在雲端。
資源隔離:一個連線只對應一個特定主機與通訊埠, 地端的API 只能被一台雲端的web app access ?
並非如此。資源隔離的定義是指每個混合式連線(Hybrid Connection)的「終點」是固定的,但「起點」可以非常靈活。
多對一的存取關係
一個地端資源(例如一台 API Server)可以同時被多個雲端應用程式存取。
在 Azure 的設定中,混合式連線是一個獨立的資源實體。只要你將該連線實體關聯到不同的 Web App,這些 App 都能透過同一個 HCM 通道連回地端的同一個 API。這在微服務架構中非常常見,例如你的前端 Web App、後端 API App 以及排程用的 Azure Functions,都可以共用同一個連往地端資料庫的混合式連線。
資源隔離的真正含義
所謂的資源隔離(Resource Isolation),重點在於安全控管與範圍限制:
- 精確的目標定義:一個混合式連線必須明確指定目標主機名稱(或 IP)與通訊埠(Port)。例如,你建立了一個連往
api-server:8080的連線,雲端 App 就只能存取這個主機的 8080 埠,無法存取該機器的 1433 埠或其他內網主機。 - 按需分配:你可以決定哪些 Web App 有權掛載這個連線。如果 Web App A 有掛載,它就能連通;如果 Web App B 沒有掛載,它完全無法偵測到地端資源的存在。
實務建議
如果你有多個雲端 App 需要存取地端 API,建議做法如下:
- 建立單一連線實體:在 Service Bus 命名空間下建立一個名為
hc-internal-api-8080的連線。 - 多點掛載:分別進入各個 Web App 的「網路」設定頁面,選擇「新增選取的混合式連線」,並指名同一個
hc-internal-api-8080。 - 流量監控:雖然多個 App 共用連線,但你仍可以在 Service Bus 的監控圖表中看到整體的連線數與資料傳輸量。
總結來說,地端 API 並非只能被一台雲端 App 存取,而是能被「你授權過的」所有雲端資源存取。這種設計讓你在維護地端 HCM 代理程式時更方便,不需要為每個雲端 App 都重複安裝一套地端代理。
地端的 outbound 要怎麼開?
要讓地端的混合式連線管理員(HCM)成功連回 Azure,地端防火牆不需要開啟任何「入站(Inbound)」規則,但必須確保「出站(Outbound)」通訊順暢。
HCM 是透過 HTTPS(TCP 443 埠)連向雲端的,且必須能與特定類型的 Azure 資源溝通。
出站防火牆設定規則
建議 MIS 人員在地端防火牆或代理伺服器(Proxy)上,針對 HCM 所在的主機設定以下規則:
- 連接埠(Port):必須開啟 TCP 443。
- 傳輸通訊協定:HTTPS 與 WebSockets(混合式連線依賴 WebSocket 進行雙向傳輸)。
建議開通的網域名稱(FQDN)
由於 Azure 的 IP 位址會變動,CAF 建議優先使用 FQDN(網域名稱)進行過濾:
- *.servicebus.windows.net這是最重要的核心。混合式連線底層跑的是 Azure Relay,而 Relay 服務掛在 Service Bus 之下。
- *.table.core.windows.netHCM 需要存取 Azure 儲存體資料表來確認連線狀態與配置。
- https://www.google.com/search?q=login.microsoftonline.com用於身份驗證與取得存取權杖(Access Token)。
如果資安要求必須使用固定 IP
如果貴單位的防火牆嚴格限制不能使用萬用字元(Wildcard)網域,則必須下載 Azure IP Ranges and Service Tags 列表。
- Service Tag:請搜尋 AzureRelay 與 ServiceBus 兩個標籤。
- 注意事項:Azure 每個區域的 IP 範圍很大且會定期更新。如果使用 IP 過濾,MIS 必須定期更新防火牆白名單,維運成本較高。
如何測試連線是否成功
在地端 HCM 主機上,你可以使用 PowerShell 快速測試網路路徑是否通暢:
PowerShell
# 測試連往 Service Bus 命名空間的 443 埠
Test-NetConnection -ComputerName [您的命名空間名稱].servicebus.windows.net -Port 443
如果 TcpTestSucceeded 顯示為 True,表示地端的 outbound 已經成功開通。
特別提示:關於 Proxy(代理伺服器)
如果地端環境必須經過 Proxy 才能上網,安裝完 HCM 後,你需要手動修改 HCM 的設定檔(通常是 Microsoft.HybridConnectionManager.Core.dll.config),在 <system.net> 標籤中加入 proxy 設定,它才能正常穿透代理服務。