Tip
Microsoft Fabric Data Warehouse 是一個企業規模的關聯式倉庫,建立在資料湖基礎上,具備未來準備架構、內建 AI 及新功能。 如果你是資料倉儲新手,建議先從Fabric Data Warehouse開始。 現有的 專用 SQL 工作負載可升級至 Fabric,以取得資料科學、即時分析與報告等多項新功能。
適用於: Azure Synapse Analytics 專用 SQL 集區
虛擬網路規則是一種防火牆安全功能,用來控制你在 Azure Synapse Analytics 中的邏輯伺服器是否接受來自虛擬網路中特定子網、針對你的專用 SQL 池(前稱 SQL DW)資料庫所傳送的通訊。 本文說明為什麼虛擬網路規則有時是你安全允許與專用 SQL 池通訊的最佳選擇。
要建立虛擬網路規則,必須先有一個 虛擬網路服務端點 供規則參考。
建立虛擬網路規則
如果你只想建立虛擬網路規則,可以跳到 本文後面的步驟和說明。
關於虛擬網路規則的詳細資訊
本節將詳細說明虛擬網路規則的若干細節。
只有一個地理區域
每個虛擬網路服務端點只適用於一個 Azure 區域。 端點不允許其他區域接受來自子網路的通訊。
任何虛擬網路規則都限制在其底層端點所適用的區域內。
伺服器層級,而非資料庫層級
每個虛擬網路規則都適用於整個伺服器,而非只針對伺服器上的某個特定資料庫。 換句話說,虛擬網路規則適用於伺服器層級,而非資料庫層級。
安全性管理角色
虛擬網路服務端點的管理中,安全角色是分離的。 以下各角色都必須採取行動:
- 網路管理員(網路貢獻者 角色): 開啟端點。
- 資料庫管理員(SQL Server Contributor 角色):更新存取控制清單(ACL),將指定的子網加入伺服器。
Azure RBAC 替代方案
網路管理員與資料庫管理員的角色擁有超過管理虛擬網路規則所需的更多功能。 只需要其部分功能。
你可以選擇在 Azure 中使用角色基礎存取控制(RBAC),建立一個只具備必要子集功能的自訂角色。 自訂角色可以取代網路管理員或資料庫管理員。如果你將使用者加入自訂角色,安全暴露範圍會比將該使用者加入另外兩個主要管理員角色小得多。
註
在某些情況下,專用的 SQL 池和虛擬網路子網屬於不同的訂閱。 在這些情況下,您必須確保下列設定:
- 使用者擁有啟動操作的必要權限,例如啟用服務端點及將虛擬網路子網路新增至指定伺服器。
- 兩個訂閱都必須已註冊
Microsoft.Sql提供者。
Limitations
對於獨立專用 SQL 池,虛擬網路規則功能有以下限制:
- 在你邏輯伺服器的防火牆中,每個虛擬網路規則都會參考一個子網路。 所有參考的子網路都必須位於與專用 SQL 池相同的地理區域。
- 對於任何虛擬網路,每台伺服器最多可擁有 128 個 ACL 條目。
- 虛擬網路規則僅適用於 Azure Resource Manager 的虛擬網路,而不適用於經典部署模型網路。
- 在防火牆上,IP 位址範圍確實適用於以下網路項目,但虛擬網路規則則不適用:
- 站對站(S2S)虛擬私人網路(VPN)
- 透過 Azure ExpressRoute 連線至內部部署
- 兩個訂閱必須在同一個 Microsoft Entra 租戶中。
使用服務端點時的考量
當你使用專用 SQL 池的服務端點時,請考慮以下事項:
- 需要具有對 Azure Synapse Analytics 公用 IP 的對外存取權限。 網路安全群組(NSG)必須允許與服務 IP 的連線。 你可以使用
SqlNSG 服務標籤。
ExpressRoute
如果您從您的內部部署端使用 ExpressRoute,無論是公用對等還是 Microsoft 對等,您都需要識別所使用的 NAT IP 位址。 對於公共對等互連,每個 ExpressRoute 電路預設會使用兩個 NAT IP 位址,供 Azure 服務流量進入 Microsoft Azure 網路骨幹時使用。 對於 Microsoft 對等連線來說,所使用的 NAT IP 位址是由客戶或服務提供者提供。 若要允許存取您的服務資源,您必須在資源 IP 防火牆設定中允許這些公用 IP 位址。 要找到你的公開對等 ExpressRoute 電路 IP 位址,請透過 Azure 入口網站向 ExpressRoute 開啟支援單。 欲了解更多關於 ExpressRoute 公有對等與 Microsoft 對等的 NAT 資訊,請參閱 Azure 公有對等的 NAT 要求。
要允許你的電路與 Azure Synapse Analytics 通訊,你必須為 NAT 的公共 IP 位址建立 IP 網路規則。
使用虛擬網路服務端點搭配 Azure 儲存體 的影響
Azure 儲存體也已提供相同的功能,可讓您限制對 Azure 儲存體帳戶的連線。 如果你用 Azure Synapse Analytics 使用的 Azure 儲存體 帳號使用此功能,可能會遇到問題。
以下章節將討論受影響的 Azure Synapse Analytics 功能。
Azure Synapse Analytics PolyBase and COPY statement
PolyBase 和 COPY 陳述式常用於從 Azure 儲存體 帳戶載入資料到 Azure Synapse Analytics,以進行高輸送量的資料內嵌。 如果你載入資料來源的 Azure 儲存體 帳戶只允許一組虛擬網路子網存取,當你使用 PolyBase 和 COPY 陳述式連線到該儲存體帳戶時,連線就會中斷。 若要啟用透過 Azure Synapse Analytics 連線到受虛擬網路保護的 Azure 儲存體,並使用 COPY 和 PolyBase 來實現匯入與匯出情境,請遵循本節的步驟。
Prerequisites
- 安裝 Azure PowerShell。 如需詳細資訊,請參閱安裝 Azure PowerShell 模組。
- 如果你有通用 v1 或 Azure Blob 儲存體 帳號,必須先依照 升級至通用 v2 儲存帳號 中的步驟升級到通用 v2。
- 您必須在 Azure 儲存體 帳號防火牆與虛擬網路設定選單中開啟「允許可信的 Microsoft 服務 存取此儲存帳號」。 啟用此設定後,PolyBase 與 COPY 陳述句能透過強認證連線到儲存帳號,且網路流量仍停留在 Azure 骨幹網路上。 欲了解更多資訊,請參閱 本指南。
Important
PowerShell Azure Resource Manager(AzureRM)模組於 2024 年 2 月 29 日被棄用。 所有未來的開發都應該使用 Az.Sql 模組。 建議使用者從 AzureRM 遷移到 Az PowerShell 模組,以確保獲得持續的支援和更新。 不再維護或支援 AzureRM 模組。 Az PowerShell 模組和 AzureRM 模組中命令的自變數基本上完全相同。 如需其相容性的詳細資訊,請參閱 新的 Az PowerShell 模組簡介。
Steps
如果你有一個獨立的專用 SQL 池(前稱 SQL DW),請使用 PowerShell 註冊你的 SQL 伺服器 使用 Microsoft Entra ID:
Connect-AzAccount Select-AzSubscription -SubscriptionId <subscriptionId> Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-SQL-servername -AssignIdentity這個步驟對於 Azure Synapse Analytics 工作空間內的專用 SQL 池則不需要。 系統指派的工作區受控識別 (SA-MI) 是 Synapse 管理員角色的成員,因此在工作區的專用 SQL 集區上有較高的權限。
依照 建立儲存體帳戶 中的步驟,建立 通用 v2 儲存體帳戶。
- 如果你有通用 v1 或 Blob 儲存體 帳戶,必須先升級到 v2,方法是依照《升級至通用 v2 儲存體帳戶》中的步驟操作。
- 關於 Azure Data Lake Storage Gen2 的已知問題,請參見《Azure Data Lake Storage Gen2 已知問題》。
在你的儲存體帳戶頁面上,選取存取控制 (IAM)。
選取 [新增]> [新增角色指派],開啟 [新增角色指派] 頁面。
指派下列角色。 詳細步驟請參見 使用 Azure 入口網站分配 Azure 角色。
Setting Value 角色 Storage Blob 資料貢獻者 指派存取權限 使用者、群組或服務主體 Members 已向 Microsoft Entra ID 註冊、託管你專用 SQL 集區的伺服器或工作空間
註
只有對儲存體帳戶具有 Owner 權限的成員才能執行此步驟。 關於各種 Azure 內建角色,請參見 Azure 內建角色。
要啟用 PolyBase 連接 Azure 儲存體 帳號:
如果你之前沒建立過資料庫 主金鑰 ,建議先建立。
CREATE MASTER KEY [ENCRYPTION BY PASSWORD = '<password>'];建立一個資料庫範圍的憑證, IDENTITY = 'Managed Service Identity'。
CREATE DATABASE SCOPED CREDENTIAL msi_cred WITH IDENTITY = 'Managed Service Identity';不需要用 Azure 儲存體 存取金鑰指定 SECRET,因為這個機制底下是使用 Managed Identity。 這個步驟對於 Azure Synapse Analytics 工作空間內的專用 SQL 池則不需要。 系統指派的工作區受控識別 (SA-MI) 是 Synapse 管理員角色的成員,因此在工作區的專用 SQL 集區上有較高的權限。
IDENTITY 名稱必須是「Managed Service Identity」,PolyBase 連線才能搭配受虛擬網路保護的 Azure 儲存體 帳號運作。
建立使用
abfss://配置的外部資料來源,以便使用 PolyBase 連線到您的通用用途 v2 儲存體帳戶。CREATE EXTERNAL DATA SOURCE ext_datasource_with_abfss WITH (TYPE = hadoop, LOCATION = 'abfss://myfile@mystorageaccount.dfs.core.windows.net', CREDENTIAL = msi_cred);- 如果你已經有與通用 v1 或 Blob 儲存體 帳號相關的外部資料表,應該先把這些外部資料表移除。 然後刪除相應的外部資料來源。 接著,建立一個外部資料來源,其配置為使用
abfss://配置,連線至如前所述的一般用途 v2 儲存體帳戶。 然後用這個新的外部資料來源重新建立所有外部資料表。 你可以使用 「產生與發佈腳本」精靈 ,為所有外部資料表產生建立腳本,方便使用。 - 欲了解更多該配置資訊
abfss://,請參閱使用 Azure Data Lake Storage Gen2 URI。 - 欲了解更多關於 T-SQL 指令的資訊,請參閱 CREATE EXTERNAL DATA SOURCE。
- 如果你已經有與通用 v1 或 Blob 儲存體 帳號相關的外部資料表,應該先把這些外部資料表移除。 然後刪除相應的外部資料來源。 接著,建立一個外部資料來源,其配置為使用
照常用 外部資料表查詢。
Azure Synapse Analytics 稽核至 Blob 儲存體
Azure Synapse Analytics 的稽核可以將 SQL 稽核記錄寫入你自己的儲存體帳戶。 如果這個儲存帳號使用虛擬網路服務端點功能,請參考如何在 VNet 和防火牆後面的儲存帳號寫入稽核。
在你專用的 SQL 池 SQL 伺服器上新增一個虛擬網路防火牆規則
很久以前,在這個功能被強化之前,你必須先開啟虛擬網路服務端點,才能在防火牆中實作即時的虛擬網路規則。 端點將特定的虛擬網路子網路與專用的 SQL 池相關聯。 截至 2018 年 1 月,您可以透過設定 IgnoreMissingVNetServiceEndpoint 旗標來繞過此要求。 現在,你可以在不啟用虛擬網路服務端點的情況下,為伺服器新增虛擬網路防火牆規則。
僅僅設定防火牆規則並不能幫助保護伺服器安全。 你也必須啟用虛擬網路服務端點,安全措施才會生效。 當您啟用服務端點時,您的虛擬網路子網路會發生停機,直到完成從關閉到開啟的轉換。 這段停機期在大型虛擬網路的情境下尤其明顯。 你可以使用 IgnoreMissingVNetServiceEndpoint 旗標來減少或消除轉換期間的停機時間。
你可以用 PowerShell 設定 IgnoreMissingVNetServiceEndpoint旗標。 欲了解更多資訊,請參見 New-AzSqlServerVirtualNetworkRule。
使用 Azure 入口網站建立虛擬網路規則
註
這些虛擬網路規則指令適用於獨立的專用 SQL 池。 關於工作空間網路設定,請參見 Azure Synapse Analytics IP 防火牆規則。
在本節中,學習如何利用 Azure 入口網站建立獨立專用 SQL 池的虛擬網路規則。 該規則告訴邏輯伺服器接受來自特定子網的通訊,該子網被標記為 虛擬網路服務端點。
註
如果你打算在伺服器的虛擬網路防火牆規則中新增服務端點,首先確保該子網的服務端點已啟用。
如果子網沒有啟用服務端點,入口網站會要求你啟用它們。 在你加入規則的同一個窗格中選擇 啟用 按鈕。
Prerequisites
你必須已經有一個子網路,已標記 Azure Synapse Analytics 所使用的虛擬網路服務端點類型名稱。
- 相關的端點類型名稱為
Microsoft.Sql。 - 如果你的子網路可能沒有標註類型名稱,請參考 「驗證服務端點是否啟用」。
Azure 入口網站步驟
登入 Azure 入口網站。
搜尋並選擇 SQL 伺服器,然後選擇你的伺服器。 在 [安全性] 底下,選取 [網路]。
在「公共存取」標籤下,確保「公共網路存取」設為「選擇網路」,否則「虛擬網路」設定會被隱藏。 在虛擬網路區塊中選擇 + 新增現有虛擬網路。
在新的建立/更新窗格中,在方框中填入你的 Azure 資源名稱。
Tip
您必須為子網輸入正確的地址前綴。 你可以在入口網站找到 地址前綴 值。 前往所有資源>,所有類型>虛擬網路。 篩選器會顯示您的虛擬網路。 選擇你的虛擬網路,然後選擇 子網路。 ADDRESS RANGE 欄包含你需要的位址前綴。
請在 防火牆 窗格中查看產生的虛擬網路規則。
將允許 Azure 服務與資源存取此伺服器設為「否」。
Important
如果你勾選「允許 Azure 服務與資源存取此伺服器」,你的伺服器會接受來自 Azure 邊界內任何子網的通訊。 也就是來自被辨識為屬於 Azure 資料中心所定義範圍內其中一個 IP 位址的通訊。 從安全角度來看,保持控制開啟可能造成過大的存取權限。 Microsoft Azure 虛擬網絡 服務端點功能,結合 Azure Synapse Analytics 虛擬網路規則,可以減少您的攻擊面。
選擇面板底部附近的 確定 按鈕。
註
以下狀態或情形適用於這些規則:
- 就緒:表示您啟動的作業已成功。
- 失敗:表示你啟動的行動失敗。
-
已刪除:僅適用於
Delete操作,並表示該規則已被刪除且不再適用。 - 進行中:表示作業正在進行中。 舊規則在作業處於此狀態時適用。
使用 PowerShell 建立虛擬網路規則
腳本也可以透過使用 PowerShell cmdlet New-AzSqlServerVirtualNetworkRule 或 az network vnet create 來建立虛擬網路規則。 欲了解更多資訊,請參見 New-AzSqlServerVirtualNetworkRule。
使用 REST API 來建立虛擬網路規則
在內部,Synapse SQL 虛擬網路動作的 PowerShell Cmdlet 會呼叫 REST API。 你可以直接呼叫 REST API。 欲了解更多資訊,請參閱 虛擬網路規則:運作。
故障排除錯誤 40914 與 40615
連線錯誤 40914 與虛擬網路規則有關,該規則在 Azure 入口網站的防火牆面板中所指定。
錯誤 40615 類似,但與防火牆上的 IP 位址規則 有關。
錯誤 40914
訊息文字:「無法開啟登入要求的伺服器 '[server-name]'。」 用戶端不允許存取伺服器。」
錯誤描述: 用戶端位於一個包含虛擬網路伺服器端點的子網路中。 但伺服器沒有虛擬網路規則賦予子網與資料庫通訊的權利。
錯誤解決方法:在 Azure 入口網站的防火牆面板上,使用虛擬網路規則控制來為子網路新增虛擬網路規則。
錯誤 40615
訊息文字: 「無法開啟登入所要求的伺服器 '{0}'。」 不允許 IP 位址為 {1} 的用戶端存取伺服器。」
錯誤描述: 用戶端嘗試從未獲授權連線到伺服器的 IP 位址進行連線。 伺服器防火牆沒有允許用戶端從指定 IP 位址與資料庫通訊的 IP 位址規則。
錯誤解決方法: 輸入用戶端的 IP 位址作為 IP 規則。 請使用 Azure 入口網站中的防火牆面板來完成此步驟。