針對適用於 MySQL 的 Azure 資料庫使用虛擬網路服務端點和規則

適用於: 適用於 MySQL 的 Azure 資料庫 - 單一伺服器

重要

適用於 MySQL 的 Azure 資料庫單一伺服器位於淘汰路徑上。 強烈建議您升級至適用於 MySQL 的 Azure 資料庫彈性伺服器。 如需移轉至「適用於 MySQL 的 Azure 資料庫」彈性伺服器的詳細資訊,請參閱「適用於 MySQL 的 Azure 資料庫」單一伺服器會發生什麼事?

虛擬網路規則是一項防火牆安全性功能,可控制適用於 MySQL 的 Azure 資料庫伺服器是否接受從虛擬網路中特定子網路所傳來的通訊。 本文說明為何虛擬網路規則功能有時是讓適用於 MySQL 的 Azure 資料庫伺服器安全接受通訊的最佳選項。

若要建立虛擬網路規則,必須先有虛擬網路 (VNet) 和虛擬網路服務端點可供規則參考。 下圖說明虛擬網路服務端點如何與適用於 MySQL 的 Azure 資料庫搭配運作:

Example of how a VNet Service Endpoint works

注意

如果適用於 MySQL 的 Azure 資料庫是針對「一般用途」和「記憶體最佳化」伺服器來部署的,則此功能可在所有 Azure 區域中使用。 在 VNet 對等互連的案例中,如果流量流經含有服務端點的通用 VNet 閘道,且應流往同儕節點,請建立 ACL/VNet 規則以允許閘道 VNet 中的 Azure 虛擬機器存取適用於 MySQL 的 Azure 資料庫伺服器。

您也可以考慮使用 Private Link 進行連線。 Private Link 在 VNet 中為「適用於 MySQL 的 Azure 資料庫」伺服器提供私人 IP 位址。

術語和描述

虛擬網路:Azure 訂用帳戶可以有相關聯的虛擬網路。

子網路:虛擬網路包含子網路。 您有的任何 Azure 虛擬機器 (VM) 會指派給子網路。 一個子網路可以包含多個 VM 或其他計算節點。 計算虛擬網路外部的節點無法存取虛擬網路,除非您設定安全性來允許存取。

虛擬網路服務端點:虛擬網路服務端點是一個子網路,其屬性值包含一或多個正式的 Azure 服務類型名稱。 本文中我們探討類型名稱 Microsoft.Sql,它參考名為 SQL Database 的 Azure 服務。 此服務標籤也會套用至適用於 MySQL 和 PostgreSQL 服務的 Azure 資料庫。 請務必注意,當您將 Microsoft.Sql 服務標籤套用到 VNet 服務端點時,它將會針對子網路上的所有 Azure SQL Database、適用於 MySQL 的 Azure 資料庫,以及適用於 PostgreSQL 的 Azure 資料庫伺服器設定服務端點流量。

虛擬網路規則:適用於 MySQL 的 Azure 資料庫伺服器的虛擬網路規則,是列於適用於 MySQL 的 Azure 資料庫伺服器之存取控制清單 (ACL) 中的子網路。 子網路必須包含 Microsoft.Sql 類型名稱,才能列在適用於 MySQL 的 Azure 資料庫伺服器的 ACL 中。

虛擬網路規則會指示適用於 MySQL 的 Azure 資料庫伺服器接受來自該子網路上每個節點的通訊。

虛擬網路規則的優點

除非您採取動作,否則子網路上的 VM 無法與適用於 MySQL 的 Azure 資料庫伺服器通訊。 建立通訊的一個動作,就是建立虛擬網路規則。 為了選擇虛擬網路 (VNet) 規則方法,基本上需要經過一番比較與對照討論,以確實了解防火牆所提供的各種只能擇其一的安全性選項。

A. 允許存取 Azure 服務

連線安全性窗格有一個標示為 [允許存取 Azure 服務] 的 [開啟/關閉] 按鈕。 [開啟] 設定允許來自所有 Azure IP 位址和所有 Azure 子網路的通訊。 這些 Azure IP 或子網路可能不是您所擁有。 此 [開啟] 設定可能會超出您想要開啟適用於 MySQL 資料庫的 Azure 資料庫的幅度。 虛擬網路規則功能提供更細微的控制。

B. IP 規則

適用於 MySQL 的 Azure 資料庫防火牆可讓您指定 IP 位址範圍,以接受來自此範圍內的通訊進入適用於 MySQL 資料庫的 Azure 資料庫。 此方法對 Azure 私人網路外部的穩定 IP 位址很適合。 但 Azure 私人網路內部的許多節點都以「動態」IP 位址設定。 動態 IP 位址可能變更,例如當 VM 重新啟動時。 在生產環境中,請勿在防火牆規則中指定動態 IP 位址。

您可以取得 VM 的「靜態」IP 位址,以挽回 IP 選項。 如需詳細資料,請參閱使用 Azure 入口網站設定虛擬機器的私人 IP 位址

不過,靜態 IP 方法可能變得難以管理,在大規模使用時成本很高。 虛擬網路規則較容易建立和管理。

虛擬網路規則的詳細資料

本節描述虛擬網路規則的一些詳細資料。

只有一個地理區域

每個虛擬網路服務端點只套用至一個 Azure 區域。 端點無法讓其他區域接受來自子網路的通訊。

任何虛擬網路規則只以套用其基礎端點的區域為對象。

伺服器層級,非資料庫層級

每個虛擬網路規則都會套用到整個適用於 MySQL 的 Azure 資料庫伺服器,而不只是伺服器上的特定資料庫。 換句話說,虛擬網路規則是在伺服器層級套用,而不是資料庫層級。

安全性管理角色

有一組獨立的安全性角色負責管理虛擬網路服務端點。 下列每個角色都需要採取動作:

  • 網路管理員:開啟端點。
  • 資料庫管理員:更新存取控制清單 (ACL) 以將指定的子網路新增至適用於 MySQL 的 Azure 資料庫伺服器。

「Azure RBAC 替代方案」:

「網路管理員」和「資料庫管理員」角色的能力已超過管理虛擬網路規則所需。 只需要其中一部分能力。

在 Azure 中,您可選擇使用 Azure 角色型存取控制 (Azure RBAC) 來建立單一自訂角色,該角色只具有一部分必要的功能。 可使用此自訂角色來代替,不必動用到「網路管理員」或「資料庫管理員」。將使用者新增至自訂角色,而不要新增至其他兩個主要的系統管理員角色,就可縮小安全性曝露面。

注意

在某些案例中,適用於 MySQL 的 Azure 資料庫和 VNet 子網路是位於不同的訂用帳戶。 在這些情況下,您必須確保下列設定:

  • 兩個訂用帳戶必須位於相同的 Microsoft Entra 租用戶下。
  • 使用者具備啟動作業的必要權限,例如啟用服務端點、將 VNet 子網路新增至指定的伺服器。
  • 請確定這兩個訂用帳戶都已註冊 Microsoft.SqlMicrosoft.DBforMySQL 資源提供者。 如需詳細資訊,請參閱 resource-manager-registration

限制

針對適用於 MySQL 的 Azure 資料庫,虛擬網路規則功能具有下列限制:

  • Web 應用程式可以對應到 VNet/子網路中的私人 IP。 即使服務端點已從指定的 VNet/子網路上開啟,從 Web 應用程式至伺服器的連線仍具有 Azure 公用 IP 來源,而非 VNet/子網路來源。 若要啟用從 Web 應用程式到具有 VNet 防火牆規則伺服器的連線,您必須在伺服器上 [允許 Azure 服務存取伺服器]。

  • 在適用於 MySQL 的 Azure 資料庫防火牆中,每個虛擬網路規則都會參考一個子網路。 裝載所有這些參考子網路的地理區域,必須和裝載適用於 MySQL 的 Azure 資料庫的地理區域相同。

  • 在任何指定的虛擬網路中,每個適用於 MySQL 的 Azure 資料庫伺服器最多只能有 128 個 ACL 項目。

  • 虛擬網路規則只套用至 Azure Resource Manager 虛擬網路,而不是傳統部署模型網路。

  • 使用 Microsoft.Sql 服務標籤對「適用於 PostgreSQL 的 Azure 資料庫」開啟虛擬網路服務端點,也會對所有 Azure 資料庫服務啟用端點:適用於 MySQL 的 Azure 資料庫、適用於 PostgreSQL 的 Azure 資料庫、Azure SQL Database 和 Azure Synapse Analytics。

  • VNet 服務端點的支援僅適用於一般用途伺服器和記憶體最佳化伺服器。

  • 若在子網路上啟用 Microsoft.Sql,這表示您只想使用 VNet 規則來進行連線。 在該子網路中,資源的非 VNet 防火牆規則沒有作用。

  • 在防火牆上,IP 位址範圍會套用到下列網路項目,但虛擬網路規則不這麼做:

ExpressRoute

如果您的網路使用 ExpressRoute 連線至 Azure 網路,則每個線路在 Microsoft Edge 會設定兩個公用 IP 位址。 兩個 IP 位址可使用 Azure 公用對等互連來連線至 Microsoft 服務,例如 Azure 儲存體。

若要允許從您的線路針對適用於 MySQL 的 Azure 資料庫進行通訊,您必須為線路的公用 IP 位址建立 IP 網路規則。 若要尋找您 ExpressRoute 線路的公用 IP 位址,請使用 Azure 入口網站開啟具有 ExpressRoute 的支援票證。

將 VNET 防火牆規則新增至伺服器但未開啟 VNET 服務端點

只是設定 VNet 防火牆規則無助於在 VNet 內保護伺服器。 您也必須開啟 VNet 服務端點,安全性才會生效。 當您開啟服務端點時,您的 VNet 子網路會停機,直到完成關閉開啟的轉換。 特別是大型的 VNet,這會更明顯。 您可以使用 IgnoreMissingServiceEndpoint 旗標來減少或排除在轉換期間的停機時間。

您可以使用 Azure CLI 或入口網站設定 IgnoreMissingServiceEndpoint 旗標。

下一步

如需建立 VNet 規則的文章,請參閱: