允許從特定虛擬網路存取 Azure 服務匯流排命名空間

服務匯流排與虛擬網路 (VNet) 服務端點的整合可以安全存取來自虛擬機器 (繫結至虛擬網路) 工作負載的傳訊功能,兩端的網路流量路徑都受到保護。

一旦設定為繫結到至少一個虛擬網路子網路服務端點,個別的服務匯流排命名空間除了授權的虛擬網路以外 (以及選擇性地,特定的網際網路 IP 位址),無法再接受任何位置的流量。 從虛擬網路的觀點而言,將服務匯流排命名空間繫結至服務端點,會設定從虛擬網路子網路到傳訊服務的隔離網路通道。

結果是繫結至子網路的工作負載與個別服務匯流排命名空間之間的私人和隔離關係,儘管傳訊服務端點的可觀察網路位址是在公用 IP 範圍中。

重點

  • 唯有進階層服務匯流排命名空間支援虛擬網路。 使用 VNet 服務端點搭配服務匯流排時,應避免在混合了標準和進階層服務匯流排命名空間的應用程式中啟用這些端點。 因為標準層不支援 VNet。 端點僅限於進階層命名空間。

  • 實作虛擬網路整合可以防止其他 Azure 服務與服務匯流排互動。 例外狀況是,即使在啟用網路服務端點時,您也可以允許從某些信任的服務存取服務匯流排資源。 如需信任的服務清單,請參閱信任的服務

    虛擬網路上必須有下列 Microsoft 服務

    • Azure App Service
    • Azure Functions
  • 為命名空間指定至少一個 IP 規則或虛擬網路規則,只允許來自虛擬網路的指定 IP 位址或子網路的流量。 如果沒有 IP 和虛擬網路規則,可透過公用網際網路 (使用存取金鑰) 來存取命名空間。

VNet 整合所實現的進階安全性案例

需要緊密和劃分安全性,而且虛擬網路子網路分割各劃分服務的解決方案,通常仍然需要位於這些區間之各項服務之間的通訊路徑。

區間之間的任何立即 IP 路由,包括那些運輸 HTTPS over TCP/IP,會帶來上層網路的弱點危害風險。 傳訊服務提供隔離式的通訊路徑,當訊息在對象之間轉換時,甚至會寫入磁碟。 兩個都繫結到相同服務匯流排執行個體的不同虛擬網路,其中的工作負載可以透過訊息有效且可靠地通訊,同時保留各自的網路隔離界限完整性。

這表示您的安全性敏感雲端解決方案,不只獲得 Azure 可靠、可擴充的領先業界非同步傳訊功能的存取權,而且它們現在可以使用傳訊來建立安全解決方案區間之間的通訊路徑,這些區間本質上比任何對等通訊模式 (包括 HTTPS 和其他 TLS 保護的通訊端通訊協定) 更為安全。

將服務匯流排繫結至虛擬網路

「虛擬網路規則」是防火牆安全性功能,可控制 Azure 服務匯流排伺服器是否接受來自特定虛擬網路子網路的連線。

將服務匯流排命名空間繫結至虛擬網路是一個雙步驟的程序。 您必須如服務端點概觀所述,先在虛擬網路子網路上建立虛擬網路服務端點,然後為「Microsoft.ServiceBus」啟用該端點。 一旦您新增服務端點,您就可使用「虛擬網路規則」,將服務匯流排命名空間與其繫結。

虛擬網路規則是服務匯流排命名空間與虛擬網路子網路的關聯。 當此規則存在時,繫結至子網路的所有工作負載都會獲得授與服務匯流排命名空間的存取權。 服務匯流排本身永遠不會建立輸出連線,不需要獲得存取權,因此永遠不會因為啟用這項規則而獲得子網路的存取權。

注意

請記住,網路服務端點為在虛擬網路中執行的應用程式提供服務匯流排命名空間的存取權。 虛擬網路可控制端點的可連線性,但無法控制在服務匯流排實體 (佇列、主題或訂用帳戶) 上可以執行的作業。 使用 Microsoft Entra ID 來授權應用程式可以在命名空間及其實體上執行的作業。 如需詳細資訊,請參閱使用 Microsoft Entra ID 驗證和授權應用程式以存取服務匯流排實體

使用 Azure 入口網站

建立命名空間時,您可以允許僅限公用 (來自所有網路) 或僅限私人 (僅透過私人端點) 存取命名空間。 一旦建立了命名空間,您就可以允許從特定 IP 位址或從特定虛擬網路進行存取 (使用網路服務端點)。

建立命名空間時設定公用存取

若要啟用公用存取,請在命名空間建立精靈的 [網路] 頁面上選取 [公用存取]

Screenshot showing the Networking page of the Create namespace wizard with Public access option selected.

在建立命名空間之後,請在 [服務匯流排命名空間] 頁面的左側功能表上選取 [網路]。 您會看到已選取 [所有網路] 選項。 您可以選取 [選取的網路] 選項,並允許從特定 IP 位址或特定虛擬網路進行存取。 下一節會為您提供詳細資料,說明如何指定允許存取的網路。

為現有的命名空間設定選取的網路

本節說明如何使用 Azure 入口網站來新增虛擬網路服務端點。 若要限制存取,您必須為此事件中樞命名空間整合虛擬網路服務端點。

  1. 瀏覽至 Azure 入口網站中的 [服務匯流排命名空間]

  2. 在左側功能表的 [設定] 下,選取 [網路] 選項。

    注意

    您只會看到進階命名空間的 [網路] 索引標籤。

  3. 在 [網路] 頁面上,針對 [公用網路存取],您可以設定下列三個選項的其中一個。 選擇 [選取的網路] 選項,只允許從指定的 IP 位址存取。

    • Disabled。 此選項會停用對命名空間的任何公用存取。 命名空間只能透過私人端點來存取。

      Screenshot that shows the Networking page of a namespace with public access disabled.

      選擇您是否想要允許信任的 Microsoft 服務略過此防火牆。 如需 Azure 服務匯流排信任的 Microsoft 服務清單,請參閱信任的 Microsoft 服務一節。

    • 選取的網路。 此選項可讓您使用來自所選網路的存取金鑰來公開存取命名空間。

      重要

      如果您選擇 [選取的網路],請新增至少一個可存取命名空間的 IP 防火牆規則或虛擬網路。 如果您想要將對此命名空間的所有流量限制在僅透過私人端點,請選擇 [已停用]

    • 所有網路 (預設值)。 此選項可啟用使用存取金鑰透過所有網路進行公開存取。 如果您選取 [所有網路] 選項,服務匯流排便會接受來自任何 IP 位址的連線 (使用存取金鑰)。 此設定等同於可接受 0.0.0.0/0 IP 位址範圍的規則。

  4. 若要限制對特定虛擬網路的存取權,請選取 [選取的網路] 選項 (如果尚未選取)。

  5. 在頁面中的 [虛擬網路] 區段中選取 [+ 新增現有的虛擬網路]。 如果您想要建立新的 VNet,請選取 [+ 建立新的虛擬網路]

    Image showing the selection of Add existing virtual network button on the toolbar.

    警告

    如果您選取 [選取的網路] 選項,且未在此頁面上新增至少一個 IP 防火牆規則或虛擬網路,則可以透過公用網際網路 (使用存取金鑰) 存取命名空間。

  6. 從虛擬網路清單中選取虛擬網路,然後挑選子網路。 您必須先啟用服務端點,才能將虛擬網路新增至清單中。 如果未啟用服務端點,入口網站會提示您將其啟用。

    Image showing the selection of VNet and subnet.

  7. 針對 Microsoft.ServiceBus 的子網路啟用服務端點之後,您應該會看到下列成功訊息。 選取頁面底部的 [新增] 以新增網路。

    Image showing the success message of enabling the service endpoint.

    注意

    如果您無法啟用服務端點,則可以忽略使用 Resource Manager 範本的遺漏虛擬網路服務端點。 在入口網站上無法使用這項功能。

  8. 選取工具列上的 [儲存] 來儲存設定。 等候幾分鐘的時間,讓入口網站通知上顯示確認訊息。 [儲存] 按鈕應停用。

    Image showing the network service endpoint saved.

    注意

    若需允許從特定 IP 位址或範圍存取的指示,請參閱允許從特定 IP 位址或範圍存取

受信任的 Microsoft 服務

啟用 [允許信任的 Microsoft 服務略過此防火牆] 設定時,下列服務會獲授與服務匯流排資源的存取權。

信任的服務 支援的使用方式情節
事件格線 允許 Azure 事件方格將事件傳送至服務匯流排命名空間中的佇列或主題。 您也必須執行下列步驟:
  • 為主題或網域啟用系統指派的身分識別
  • 將身分識別新增至服務匯流排命名空間上的 Azure 服務匯流排資料傳送者角色
  • 然後,將使用服務匯流排佇列或主題做為端點的事件訂用帳戶設定為使用系統指派的身分識別。

如需詳細資訊,請參閱使用受控識別傳遞事件

Azure 串流分析 允許 Azure 串流分析作業將資料輸出至主題的服務匯流排佇列

重要:串流分析作業應設定為使用受控識別來存取服務匯流排命名空間。 將身分識別新增至服務匯流排命名空間上的 Azure 服務匯流排資料傳送者角色。

Azure IoT 中樞 允許 IoT 中樞將訊息傳送至服務匯流排命名空間中的佇列或主題。 您也必須執行下列步驟:
Azure API 管理

API 管理服務可讓您將訊息傳送至服務匯流排命名空間中的服務匯流排佇列/主題。

Azure IoT Central

可讓 IoT Central 將資料匯出至服務匯流排命名空間中的服務匯流排佇列或主題。 您也必須執行下列步驟:

Azure Digital Twins 允許 Azure Digital Twins 將資料輸出至服務匯流排命名空間中的服務匯流排主題。 您也必須執行下列步驟:

  • 為您的 Azure Digital Twins 執行個體啟用系統指派的身分識別。
  • 將身分識別新增至服務匯流排命名空間上的 Azure 服務匯流排資料傳送者角色。
  • 然後,設定 Azure Digital Twins 端點或 Azure Digital Twins 資料歷程記錄連線,其會使用系統指派的身分識別進行驗證。 如需設定從 Azure Digital Twins 至服務匯流排資源的端點和事件路由的詳細資訊,請參閱路由 Azure Digital Twins 事件在 Azure Digital Twins 中建立端點
Azure 監視器 (診斷設定和動作群組) 允許 Azure 監視器將診斷資訊和警示通知傳送至服務匯流排命名空間中的服務匯流排。 Azure 監視器可以從服務匯流排命名空間讀取資料,以及將資料寫入其中。
Azure Synapse 允許 Azure Synapse 使用 Synapse 工作區受控識別連線至服務匯流排。 將 Azure 服務匯流排資料傳送者、接收者或擁有者角色新增至服務匯流排命名空間上的身分識別。

以下是 Azure 服務匯流排的其他受信任服務:

  • Azure 資料總管
  • Azure 健康資料服務
  • Azure Arc
  • Azure Kubernetes
  • Azure Machine Learning
  • Microsoft Purview

使用 Resource Manager 範本

下列樣本 Resource Manager 範本可讓您將虛擬網路規則新增至現有的服務匯流排命名空間。 針對網路規則,其會指定虛擬網路中子網路的識別碼。

識別碼是虛擬網路子網路的完整 Resource Manager 路徑。 例如,針對虛擬網路的預設子網路 /subscriptions/{id}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworks/{vnet}/subnets/default

注意

defaultAction 的預設值為 Allow。 新增虛擬網路或防火牆規則時,請確保將 defaultAction 設定為 Deny

範本:

{
	"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
	"contentVersion": "1.0.0.0",
	"parameters": {
		"servicebusNamespaceName": {
			"type": "string",
			"metadata": {
				"description": "Name of the Service Bus namespace"
			}
		},
		"virtualNetworkName": {
			"type": "string",
			"metadata": {
				"description": "Name of the Virtual Network Rule"
			}
		},
		"subnetName": {
			"type": "string",
			"metadata": {
				"description": "Name of the Virtual Network Sub Net"
			}
		},
		"location": {
			"type": "string",
			"metadata": {
				"description": "Location for Namespace"
			}
		}
	},
	"variables": {
		"namespaceNetworkRuleSetName": "[concat(parameters('servicebusNamespaceName'), concat('/', 'default'))]",
		"subNetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets/', parameters('virtualNetworkName'), parameters('subnetName'))]"
	},
	"resources": [{
			"apiVersion": "2022-10-01-preview",
			"name": "[parameters('servicebusNamespaceName')]",
			"type": "Microsoft.ServiceBus/namespaces",
			"location": "[parameters('location')]",
			"sku": {
				"name": "Premium",
				"tier": "Premium",
				"capacity": 1
			},
			"properties": {
				"premiumMessagingPartitions": 1,
				"minimumTlsVersion": "1.2",
				"publicNetworkAccess": "Enabled",
				"disableLocalAuth": false,
				"zoneRedundant": true
			}
		},
		{
			"apiVersion": "2022-07-01",
			"name": "[parameters('virtualNetworkName')]",
			"location": "[parameters('location')]",
			"type": "Microsoft.Network/virtualNetworks",
			"properties": {
				"addressSpace": {
					"addressPrefixes": [
						"10.0.0.0/23"
					]
				},
				"subnets": [{
					"name": "[parameters('subnetName')]",
					"properties": {
						"addressPrefix": "10.0.0.0/23",
						"serviceEndpoints": [{
							"service": "Microsoft.ServiceBus"
						}]
					}
				}]
			}
		},
		{
			"apiVersion": "2022-10-01-preview",
			"name": "[variables('namespaceNetworkRuleSetName')]",
			"type": "Microsoft.ServiceBus/namespaces/networkruleset",
			"dependsOn": [
				"[concat('Microsoft.ServiceBus/namespaces/', parameters('servicebusNamespaceName'))]"
			],
			"properties": {
				"publicNetworkAccess": "Enabled",
				"defaultAction": "Deny",
				"virtualNetworkRules": [{
					"subnet": {
						"id": "[variables('subNetId')]"
					},
					"ignoreMissingVnetServiceEndpoint": false
				}],
				"ipRules": [],
				"trustedServiceAccessEnabled": false
			}
		}
	],
	"outputs": {}
}

若要部署範本,請依照適用於 Azure Resource Manager 的指示執行。

重要

如果沒有 IP 和虛擬網路規則,則即使您將設定 defaultActiondeny,所有流量也會流向命名空間。 您可以透過公用網際網路存取命名空間 (使用存取金鑰)。 為命名空間指定至少一個 IP 規則或虛擬網路規則,只允許來自虛擬網路的指定 IP 位址或子網路的流量。

使用 Azure CLI

使用 az servicebus namespace network-rule-set add、list、update 和 remove 命令,來管理服務匯流排命名空間的虛擬網路規則。

使用 Azure PowerShell

使用下列 Azure PowerShell 命令來新增、列出、移除、更新和刪除服務匯流排命名空間的網路規則。

預設動作和公用網路存取

REST API

API 版本 2021-01-01-preview 和更早版本defaultAction 屬性預設值是 Deny。 但除非您設定 IP 篩選器或虛擬網路 (VNet) 規則,否則不會強制執行拒絕規則。 換句話說,如果您沒有任何 IP 篩選器或 VNet 規則,則會將其視為 Allow

從 API 版本 2021-06-01-preview 開始defaultAction 屬性的預設值為 Allow,以精確地反映服務端強制執行。 如果預設動作設定為 Deny,則會強制執行 IP 篩選器和 VNet 規則。 如果預設動作設定為 Allow,則不會強制執行 IP 篩選器和 VNet 規則。 當您關閉並重新啟動規則時,服務會記住規則。

2021-06-01-preview 之後的 API 版本也引進名為 publicNetworkAccess 的新屬性。 如果設定為 Disabled,作業將僅限於私人連結。 如果設定為 Enabled,則允許透過公用網際網路執行作業。

如需這些屬性的詳細資訊,請參閱建立或更新網路規則集建立或更新私人端點連線

注意

上述設定都不會略過透過 SAS 或 Microsoft Entra 驗證進行的宣告驗證。 驗證檢查一律會在服務驗證由 defaultActionpublicNetworkAccessprivateEndpointConnections 設定所設定的網路檢查之後執行。

Azure 入口網站

Azure 入口網站會一律使用最新的 API 版本來取得和設定屬性。 如果您先前已使用將 defaultAction 設為 Deny2021-01-01-preview 和更早版本設定命名空間,且未指定任何 IP 篩選器和 VNet 規則,則入口網站先前會在命名空間的 [網路功能] 頁面上檢查 [選取的網路]。 現在,入口網站會檢查 [所有網路] 選項。

Screenshot of the Azure portal Networking page. The option to allow access from All networks is selected on the Firewalls and virtual networks tab.

下一步

如需虛擬網路的詳細資訊,請參閱下列連結: