對 Azure SQL Database 中的伺服器使用虛擬網路服務端點和規則
適用於:Azure SQL Database Azure Synapse Analytics
虛擬網路規則是一項防火牆安全性功能,其可控制您在 Azure SQL 資料庫中的資料庫和彈性集區的伺服器,或是您在 Azure Synapse Analytics 中的專用 SQL 集區 (以前稱為 SQL DW) 資料庫的伺服器是否接受從虛擬網路中的特定子網路傳送的通訊。 本文說明為什麼虛擬網路規則有時是允許與 SQL Database 和 Azure Synapse Analytics 中的資料庫安全通訊的最佳選項。
注意
本文適用於 SQL Database 和 Azure Synapse Analytics。 簡單來說,「資料庫」一詞同時指稱 SQL Database 和 Azure Synapse Analytics 中的資料庫。 同樣地,只要提到「伺服器」,就代表裝載 SQL Database 與 Azure Synapse Analytics 的邏輯伺服器。
若要建立虛擬網路規則,必須先有虛擬網路服務端點,才能參考規則。
注意
Microsoft Entra ID 先前稱為 Azure Active Directory (Azure AD)。
建立虛擬網路規則
如果想要只建立虛擬網路規則,可以直接跳到本文稍後的步驟和說明。
虛擬網路規則的詳細資料
本節描述虛擬網路規則的一些詳細資料。
只有一個地理區域
每個虛擬網路服務端點僅套用至一個 Azure 區域。 端點無法讓其他區域接受來自子網路的通訊。
任何虛擬網路規則都受限於其基礎端點套用的區域。
伺服器層級,而非資料庫層級
每個虛擬網路規則都會套用至整個伺服器,而不只是套用至伺服器上的一個特定資料庫。 換句話說,虛擬網路規則會在伺服器層級,而不是在資料庫層級套用。
相反地,IP 規則可以在任一層級套用。
安全性管理角色
虛擬網路服務端點管理中的安全性角色會分開。 下列每個角色都需要採取動作:
- 網路管理員 (網路參與者角色):開啟端點。
- 資料庫管理員 (SQL Server 參與者角色):更新存取控制清單 (ACL) 以將指定的子網路新增至伺服器。
Azure RBAC 替代專案
網路管理員和資料庫管理員的角色具有比管理虛擬網路規則所需的更多功能。 只需要其功能的子集。
您可以選擇在 Azure 中使用角色型存取控制 (RBAC) 來建立只有必要功能子集的單一自訂角色。 您可以使用自訂角色,而不是牽涉到網路管理員或資料庫管理員。如果您將使用者新增至自訂角色,而不是將使用者新增至其他兩個主要系統管理員角色,則安全性風險的介面區較低。
注意
在某些情況下,SQL Database 中的資料庫和虛擬網路子網路位於不同的訂用帳戶中。 在這些情況下,必須確定下列設定:
- 這兩個訂用帳戶必須位於相同的 Microsoft Entra 租用戶。
- 使用者具有起始作業所需的權限,例如啟用服務端點,並將虛擬網路子網路新增至指定的伺服器。
- 這兩個訂用帳戶都必須註冊 Microsoft.Sql 提供者。
限制
針對 SQL Database,虛擬網路規則功能具有下列限制:
- 在 SQL Database 資料庫的防火牆中,每個虛擬網路規則都會參考子網路。 所有這些參考的子網路都必須裝載於裝載資料庫的相同地理區域中。
- 每部伺服器最多可有 128 個 ACL 項目供任何虛擬網路使用。
- 虛擬網路規則僅適用於 Azure Resource Manager 虛擬網路,不適用於傳統部署模型網路。
- 開啟連線 SQL Database 的虛擬網路服務端點也會啟用適用於 MySQL 的 Azure 資料庫和適用於 PostgreSQL 的 Azure 資料庫的端點。 當端點設定為 ON 時,嘗試從端點連線到您的適用於 MySQL 的 Azure 資料庫或適用於 PostgreSQL 的 Azure 資料庫執行個體可能會失敗。
- 根本原因是,適用於 MySQL 的 Azure 資料庫和適用於 PostgreSQL 的 Azure 資料庫可能未設定虛擬網路規則。 您必須為適用於 MySQL 的 Azure 資料庫和適用於 PostgreSQL 的 Azure 資料庫設定虛擬網路規則。
- 若要在已使用私人端點設定的 SQL 邏輯伺服器上定義虛擬網路防火牆規則,請將 [拒絕公用網路存取] 設定為 [否]。
- 在防火牆上,IP 位址範圍會套用至下列網路項目,但虛擬網路規則不會:
- 站對站 (S2S) 虛擬私人網路 (VPN)
- 透過 Azure ExpressRoute 的內部部署
使用服務端點時的考量
當您使用 SQL Database 服務端點時,請檢閱下列考量:
- 需要輸出至 Azure SQL 資料庫公用 IP。 網路安全性群組 (NSG) 必須對 SQL Database IP 開啟以允許連線。 您可以使用 SQL Database 的 NSG 服務標籤來執行此動作。
ExpressRoute
如果從內部部署使用 ExpressRoute 進行公用對等互連或 Microsoft 對等互連,您必須識別所使用的 NAT IP 位址。 針對公用對等互連,每個 ExpressRoute 線路預設會使用兩個 NAT IP 位址,此 IP 位址在流量進入 Microsoft Azure 網路骨幹時會套用至 Azure 服務流量。 若為 Microsoft 對等互連,所使用的 NAT IP 位址是由客戶提供或由服務提供者提供。 若要允許存取您的服務資源,您必須在資源 IP 防火牆設定中允許這些公用 IP 位址。 若要尋找公用對等互連 ExpressRoute 線路 IP 位址,請透過 Azure 入口網站開啟 ExpressRoute 支援票證。 若要深入了解 ExpressRoute 公用對等互連和 Microsoft 對等互連的 NAT,請參閱 Azure 公用對等互連的 NAT 需求。
若要允許從線路到 SQL Database 的通訊,您必須為 NAT 的公用 IP 位址建立 IP 網路規則。
使用虛擬網路服務端點搭配 Azure 儲存體的影響
Azure 儲存體已實作功能,可讓您限制連線至 Azure 儲存體帳戶的連線。 如果您選擇搭配 SQL Database 正在使用的 Azure 儲存體帳戶使用這項功能,可能會遇到問題。 接下來是受此影響之 SQL Database 和 Azure Synapse Analytics 功能的清單和討論。
Azure Synapse Analytics PolyBase 和 COPY 陳述式
PolyBase 和 COPY 陳述式通常用於將資料從 Azure 儲存體帳戶載入 Azure Synapse Analytics,以進行高輸送量資料擷取。 如果您正在載入資料的來源 Azure 儲存體帳戶限制只能存取一組虛擬網路子網路,則您使用 PolyBase 和 COPY 陳述式時到儲存體帳戶的連線會中斷。 若要在 Azure Synapse Analytics 連線至受虛擬網路保護的 Azure Synapse 儲存體時,使用 COPY 和 PolyBase 啟用匯入和匯出案例,請遵循本章節中提供的步驟。
必要條件
- 安裝 Azure PowerShell。 如需詳細資訊,請參閱安裝 Azure PowerShell 模組。
- 如果您有一般用途 v1 或 Azure Blob 儲存體帳戶,則必須先依照升級至一般用途 v2 儲存體帳戶中的步驟升級至一般用途 v2。
- 您必須開啟 Azure 儲存體帳戶 [防火牆與虛擬網路] 設定功能表下方的 [允許信任的 Microsoft 服務存取此儲存體帳戶]。 啟用此設定可讓 PolyBase 和 COPY 陳述式使用增強式驗證連線到儲存體帳戶,而網路流量會保留在 Azure 骨幹上。 如需詳細資訊,請參閱此指南。
重要
Azure SQL Database 仍然支援 PowerShell Azure Resource Manager 模組,但所有未來的開發都是針對 Az.Sql
模組。 AzureRM 模組在至少 2020 年 12 月之前都還會持續收到 Bug 修正。 Az 模組和 AzureRm 模組中命令的引數本質上完全相同。 如需其相容性的詳細資訊,請參閱新的 Azure PowerShell Az 模組簡介。
步驟
如果您有獨立的專用 SQL 集區 (先前稱為 SQL DW),請使用 PowerShell 向 Microsoft Entra ID 註冊您的 SQL Server:
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 或 Azure Blob 儲存體帳戶,則必須依照升級至一般用途 v2 儲存體帳戶中的步驟先升級至 v2。
- 如需 Azure Data Lake Storage Gen2 的已知問題,請參閱 Azure Data Lake Storage Gen2 的已知問題。
在您的儲存體帳戶頁面上,選取 [存取控制 (IAM)]。
選取 [新增]>[新增角色指派],開啟 [新增角色指派] 頁面。
指派下列角色。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色。
設定 值 角色 儲存體 Blob 資料參與者 存取權指派對象 使用者、群組或服務主體 成員 裝載您已向 Microsoft Entra ID 註冊的專用 SQL 集區的伺服器或工作區 注意
僅有具備儲存體帳戶「擁有者」權限的成員才能執行此步驟。 如需了解各種 Azure 內建角色,請參閱 Azure 內建角色。
若要啟用與 Azure 儲存體帳戶的 PolyBase 連線:
如果您先前尚未建立資料庫主要金鑰,則建立一個。
CREATE MASTER KEY [ENCRYPTION BY PASSWORD = 'somepassword'];
使用 IDENTITY = '受控服務識別' 建立資料庫範圍的認證。
CREATE DATABASE SCOPED CREDENTIAL msi_cred WITH IDENTITY = 'Managed Service Identity';
不需要使用 Azure 儲存體存取金鑰來指定 SECRET,因為此機制會在幕後使用受控識別。 Azure Synapse Analytics 工作區內的專用 SQL 集區不需要此步驟。 系統指派的工作區受控識別 (SA-MI) 是 Synapse 管理員角色的成員,因此在工作區的專用 SQL 集區上有較高的權限。
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 儲存體帳戶相關聯的外部表格,則您應該先卸除這些外部表格。 然後卸除對應的外部資料來源。 接下來,使用連線到一般用途 v2 儲存體帳戶的
abfss://
配置來建立外部資料來源,如先前所示。 然後使用這個新的外部資料來源重新建立所有外部表格。 您可以使用 [產生和發佈指令碼精靈] 來產生所有外部表格的建立指令碼,以方便使用。 - 如需
abfss://
配置的詳細資訊,請參閱使用 Azure Data Lake Storage Gen2 URI。 - 如需 T-SQL 命令的詳細資訊,請參閱 CREATE EXTERNAL DATA SOURCE。
- 如果您已經有與一般用途 v1 或 Blob 儲存體帳戶相關聯的外部表格,則您應該先卸除這些外部表格。 然後卸除對應的外部資料來源。 接下來,使用連線到一般用途 v2 儲存體帳戶的
使用外部表格以標準方式查詢。
SQL Database blob 稽核
Azure SQL 稽核可以將 SQL 稽核記錄寫入您自己的儲存體帳戶。 如果此儲存體帳戶使用虛擬網路服務端點功能,請參閱如何將稽核寫入虛擬網路和防火牆後方的儲存體帳戶。
將虛擬網路防火牆規則新增至您的伺服器
很久以前,在增強此功能之前,您必須先開啟虛擬網路服務端點,才能在防火牆中實作即時虛擬網路規則。 端點會將指定的虛擬網路子網路與 SQL Database 中的資料庫相關聯。 自 2018 年 1 月起,您可以藉由設定 IgnoreMissingVNetServiceEndpoint 旗標來規避這項需求。 現在,您可以將虛擬網路防火牆規則新增至伺服器,而不需開啟虛擬網路服務端點。
僅設定防火牆規則無法協助保護伺服器。 您必須也開啟虛擬網路服務端點,安全性才會生效。 當您開啟服務端點時,您的虛擬網路子網路會停機,直到完成關閉到開啟的轉換。 在大型虛擬網路的內容中,此停機期間尤其如此。 您可以使用 IgnoreMissingVNetServiceEndpoint 旗標來減少或排除在轉換期間的停機時間。
您可以使用 PowerShell 來設定 IgnoreMissingVNetServiceEndpoint 旗標。 如需詳細資訊,請參閱使用 PowerShell 建立 SQL Database 的虛擬網路服務端點和規則。
注意
如需 Azure Synapse Analytics 中的類似指示,請參閱 Azure Synapse Analytics IP 防火牆規則
使用 Azure 入口網站建立虛擬網路規則
本節說明如何使用 Azure 入口網站,在 SQL Database 的資料庫中建立虛擬網路規則。 此規則會告知資料庫接受已標記為虛擬網路服務端點之特定子網路的通訊。
注意
如果您想要將服務端點新增至伺服器的虛擬網路防火牆規則,請先確定子網路的服務端點已開啟。
如果子網路的服務端點未開啟,入口網站會要求您啟用它們。 選取您新增規則的相同窗格上的 [啟用] 按鈕。
必要條件
您必須已經有已標記與 SQL Database 相關的特定虛擬網路服務端點類型名稱的子網路。
- 相關的端點類型名稱為 Microsoft.Sql。
- 如果您的子網路可能未標記類型名稱,請參閱確認您的子網路是端點。
Azure 入口網站步驟
登入 Azure 入口網站。
搜尋並選取 [SQL Server],然後選取您的伺服器。 在 [安全性] 底下,選取 [網路]。
在 [公用存取] 索引標籤下,確定 [公用網路存取] 已設定為 [選取網路],否則會隱藏 [虛擬網路] 設定。 在 [虛擬網路] 區段中,選取 [+ 新增現有的虛擬網路]。
在新的 [建立/更新] 窗格中,填入 Azure 資源名稱方塊。
提示
您必須包括子網路的正確位址前置詞。 您可以在入口網站中找到 [位址前置詞] 值。 移至 [所有資源]>[所有類型]>[虛擬網路]。 篩選會顯示您的虛擬網路。 選取您的虛擬網路,然後選取 [子網路]。 ADDRESS RANGE 資料行具有您需要的位址前置詞。
請參閱 [防火牆] 窗格上產生的虛擬網路規則。
將 [允許 Azure 服務和資源存取此伺服器] 設定為 [否]。
重要
如果您將 [允許 Azure 服務和資源存取此伺服器] 保留核取狀態,您的伺服器會接受來自 Azure 邊界內任何子網路的通訊。 這是源自其中一個 IP 位址的通訊,這些 IP 位址會辨識為針對 Azure 資料中心定義的範圍內。 從安全性的觀點來看,讓控件保持啟用可能會過度存取。 Microsoft Azure 虛擬網路服務端點功能會與 SQL Database 的虛擬網路規則功能協調,以減少您的安全性介面區。
選取靠近窗格底部的 [確定] 按鈕。
注意
下列狀態適用於規則:
- 就緒:表示您起始的作業已成功。
- 失敗:表示您起始的作業失敗。
- 已刪除:僅適用於
Delete
作業,並表示規則已刪除且不再適用。 - 進行中:表示作業正在進行中。 作業處於此狀態時,會套用舊規則。
使用 PowerShell 建立虛擬網路規則
指令碼也可以使用 PowerShell Cmdlet New-AzSqlServerVirtualNetworkRule
或 az network vnet create 來建立虛擬網路規則。 如需詳細資訊,請參閱使用 PowerShell 建立 SQL Database 的虛擬網路服務端點和規則。
使用 REST API 建立虛擬網路規則
在內部,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 入口網站中的 [防火牆] 窗格來執行此步驟。