附註
Azure Cosmos DB 帳戶和虛擬網路必須位於相同的 Microsoft Entra ID 租用戶內。
您可以設定 Azure Cosmos DB 帳戶,只允許從虛擬網路的特定子網存取。 在虛擬網路內的子網上啟用 服務端點 ,以控制對 Azure Cosmos DB 的存取。 來自該子網的流量會以子網和虛擬網路的身分識別傳送至 Azure Cosmos DB。 Azure Cosmos DB 服務端點啟用之後,就可以將它新增至您的 Azure Cosmos DB 帳戶,以限制對子網路的存取。
根據預設,如果要求伴隨有效的授權權杖,就可以從任何來源存取 Azure Cosmos DB 帳戶。 當您在虛擬網路中新增一或多個子網時,只有來自這些子網的要求才會得到有效的回應。 來自任何其他來源的要求會收到 403(禁止)回應。
若要限制只能從虛擬網路中的子網路進行連線來存取 Azure Cosmos DB 帳戶:
讓 Azure Cosmos DB 的服務端點能夠將子網路和虛擬網路身分識別傳送至 Azure Cosmos DB。
在 Azure Cosmos DB 帳戶中新增規則,將子網路指定為可存取帳戶的來源。
附註
在子網路上啟用 Azure Cosmos DB 帳戶的服務端點時,送到 Azure Cosmos DB 的流量來源就會從公用 IP 切換為虛擬網路和子網路。 對於任何要從這個子網路存取的 Azure Cosmos DB 帳戶,都會套用流量切換。 如果您的 Azure Cosmos DB 帳戶有允許此子網路的 IP 型防火牆,已啟用服務的子網路所發出的要求將不再符合 IP 防火牆規則,而會被拒絕。
若要深入了解,請參閱本文的從 IP 防火牆規則移轉至虛擬網路存取控制清單一節所說明的步驟。
以下幾節將說明如何設定 Azure Cosmos DB 帳戶的虛擬網路服務端點。
使用 Azure 入口網站來設定服務端點
對現有的 Azure 虛擬網路和子網路設定服務端點
從 [所有資源] 窗格,尋找要保護的 Azure Cosmos DB 帳戶。
從設定功能表中選取 [網路]。
選擇允許從 [選取的網路] 存取。
若要將存取權授與現有虛擬網路的子網路,請在 [虛擬網路] 下選取 [新增現有 Azure 虛擬網路]。
選取您要從中新增 Azure 虛擬網路的訂用帳戶。 選取要提供 Azure Cosmos DB 帳戶存取權的 Azure 虛擬網路和子網路。 接下來,選取 [啟用] 以啟用具有
Microsoft.AzureCosmosDB服務端點的選定網路。 完成時選取 [新增]。附註
設定虛擬網路服務端點最多可能需要 15 分鐘的時間才能傳播,而且端點可能會在這段期間內表現出不一致的行為。
啟用 Azure Cosmos DB 帳戶以從虛擬網路存取之後,它只允許來自此所選子網的流量。 您所新增的虛擬網路和子網路應會如下列螢幕擷取畫面所示:
附註
若要啟用虛擬網路服務端點,您必須具備下列訂用帳戶權限:
- 虛擬網路的訂用帳戶:網路參與者
- 具備 Azure Cosmos DB 帳戶的訂閱:DocumentDB 帳戶貢獻者
- 如果虛擬網路和 Azure Cosmos DB 帳戶在不同的訂用帳戶中,請確定虛擬網路所在的訂用帳戶也已註冊
Microsoft.DocumentDB資源提供者。 若要註冊資源提供者,請參閱 Azure 資源提供者和類型。
以下是向資源提供者註冊訂用帳戶的指示。
對新的 Azure 虛擬網路和子網路設定服務端點
從 [所有資源] 窗格,尋找要保護的 Azure Cosmos DB 帳戶。
從設定功能表中選取 [網路],並選擇允許從 [選取的網路] 進行存取。
若要授與新 Azure 虛擬網路的存取權,請在 [虛擬網路] 下選取 [新增虛擬網路]。
提供建立新虛擬網路所需的詳細資料,然後選取 [建立]。 子網已建立,並啟用了服務端點
Microsoft.AzureCosmosDB。
如果您的 Azure Cosmos DB 帳戶由其他 Azure 服務使用 (例如 Azure AI 搜尋服務),或由串流分析或 Power BI 存取,請選取 [接受來自全球 Azure 資料中心內的連線] 來允許存取。
若要確保您可以從入口網站存取 Azure Cosmos DB 計量,您必須啟用 [允許從 Azure 入口網站存取] 選項。 若要深入了解這些選項,請參閱 設定IP防火牆。 啟用存取之後,請選取 [儲存] 以儲存設定。
移除現有虛擬網路或子網路
從「所有資源」窗格中,尋找您要指派服務端點的 Azure Cosmos DB 帳戶。
從設定功能表中選取 [網路]。
若要移除虛擬網路或子網路規則,請選取該虛擬網路或子網路旁的 […],然後選取 [移除]。
選取儲存套用變更。
使用 Azure PowerShell 來設定服務端點
附註
建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 若要開始使用,請參閱安裝 Azure PowerShell。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az。
若要使用 Azure PowerShell 對 Azure Cosmos DB 帳戶設定服務端點,請使用下列步驟:
安裝 Azure PowerShell 並登入。
對現有的虛擬網路子網路啟用服務端點。
$resourceGroupName = "<Resource group name>" $vnetName = "<Virtual network name>" $subnetName = "<Subnet name>" $subnetPrefix = "<Subnet address range>" $serviceEndpoint = "Microsoft.AzureCosmosDB" Get-AzVirtualNetwork ` -ResourceGroupName $resourceGroupName ` -Name $vnetName | Set-AzVirtualNetworkSubnetConfig ` -Name $subnetName ` -AddressPrefix $subnetPrefix ` -ServiceEndpoint $serviceEndpoint | Set-AzVirtualNetwork附註
當您使用 PowerShell 或 Azure CLI 時,請務必在參數中指定 IP 篩選器和虛擬網路 ACL 的完整清單,而不是只指定必須新增的項目。
取得虛擬網路資訊。
$vnet = Get-AzVirtualNetwork ` -ResourceGroupName $resourceGroupName ` -Name $vnetName $subnetId = $vnet.Id + "/subnets/" + $subnetName準備 Azure Cosmos DB 虛擬網路規則
$vnetRule = New-AzCosmosDBVirtualNetworkRule ` -Id $subnetId使用新的虛擬網路端點組態更新 Azure Cosmos DB 帳戶屬性:
$accountName = "<Azure Cosmos DB account name>" Update-AzCosmosDBAccount ` -ResourceGroupName $resourceGroupName ` -Name $accountName ` -EnableVirtualNetwork $true ` -VirtualNetworkRuleObject @($vnetRule)若要確認 Azure Cosmos DB 帳戶已透過上一個步驟中設定的虛擬網路服務端點進行更新,請執行下列命令:
$account = Get-AzCosmosDBAccount ` -ResourceGroupName $resourceGroupName ` -Name $accountName $account.IsVirtualNetworkFilterEnabled $account.VirtualNetworkRules
使用 Azure CLI 來設定服務端點
稍後建立或更新服務端點時,如果已設定子網路,則可設定 Azure Cosmos DB 帳戶。 在尚未設定子網路的 Azure Cosmos DB 帳戶上,也可以啟用服務端點。 然後服務端點會在稍後設定子網時開始運作。 這種彈性讓無法同時存取 Azure Cosmos DB 帳戶與虛擬網路資源的管理員能夠個別設定這兩者。
建立新的 Azure Cosmos DB 帳戶並連線至新虛擬網路的後端子網路
在此範例中,虛擬網路和子網路建立時都啟用服務端點。
# Create an Azure Cosmos DB Account with a service endpoint connected to a backend subnet
# Resource group and Azure Cosmos DB account variables
resourceGroupName='MyResourceGroup'
location='West US 2'
accountName='mycosmosaccount'
# Variables for a new Virtual Network with two subnets
vnetName='myVnet'
frontEnd='FrontEnd'
backEnd='BackEnd'
# Create a resource group
az group create -n $resourceGroupName -l $location
# Create a virtual network with a front-end subnet
az network vnet create \
-n $vnetName \
-g $resourceGroupName \
--address-prefix 10.0.0.0/16 \
--subnet-name $frontEnd \
--subnet-prefix 10.0.1.0/24
# Create a back-end subnet with service endpoints enabled for Azure Cosmos DB
az network vnet subnet create \
-n $backEnd \
-g $resourceGroupName \
--address-prefix 10.0.2.0/24 \
--vnet-name $vnetName \
--service-endpoints Microsoft.AzureCosmosDB
svcEndpoint=$(az network vnet subnet show -g $resourceGroupName -n $backEnd --vnet-name $vnetName --query 'id' -o tsv)
# Create an Azure Cosmos DB account with default values and service endpoints
az cosmosdb create \
-n $accountName \
-g $resourceGroupName \
--enable-virtual-network true \
--virtual-network-rules $svcEndpoint
將 Azure Cosmos DB 帳戶獨立連線並設定至後端子網
此範例旨在示範如何將 Azure Cosmos DB 帳戶連線至現有或新的虛擬網路。 在此範例中,尚未針對服務端點設定子網路。 使用 --ignore-missing-vnet-service-endpoint 參數設定服務端點。 在虛擬網路的子網路配置完成之前,此設定允許 Azure Cosmos DB 帳戶正確無誤地完成設置。 子網設定完成後,即可透過設定的子網存取 Azure Cosmos DB 帳戶。
# Create an Azure Cosmos DB Account with a service endpoint connected to a backend subnet
# that is not yet enabled for service endpoints.
# Resource group and Azure Cosmos DB account variables
resourceGroupName='MyResourceGroup'
location='West US 2'
accountName='mycosmosaccount'
# Variables for a new Virtual Network with two subnets
vnetName='myVnet'
frontEnd='FrontEnd'
backEnd='BackEnd'
# Create a resource group
az group create -n $resourceGroupName -l $location
# Create a virtual network with a front-end subnet
az network vnet create \
-n $vnetName \
-g $resourceGroupName \
--address-prefix 10.0.0.0/16 \
--subnet-name $frontEnd \
--subnet-prefix 10.0.1.0/24
# Create a back-end subnet but without configuring service endpoints (--service-endpoints Microsoft.AzureCosmosDB)
az network vnet subnet create \
-n $backEnd \
-g $resourceGroupName \
--address-prefix 10.0.2.0/24 \
--vnet-name $vnetName
svcEndpoint=$(az network vnet subnet show -g $resourceGroupName -n $backEnd --vnet-name $vnetName --query 'id' -o tsv)
# Create an Azure Cosmos DB account with default values
az cosmosdb create -n $accountName -g $resourceGroupName
# Add the virtual network rule but ignore the missing service endpoint on the subnet
az cosmosdb network-rule add \
-n $accountName \
-g $resourceGroupName \
--virtual-network $vnetName \
--subnet svcEndpoint \
--ignore-missing-vnet-service-endpoint true
read -p'Press any key to now configure the subnet for service endpoints'
az network vnet subnet update \
-n $backEnd \
-g $resourceGroupName \
--vnet-name $vnetName \
--service-endpoints Microsoft.AzureCosmosDB
使用直接模式時的連接埠範圍
當您透過直接模式連線搭配 Azure Cosmos DB 帳戶使用服務端點時,您必須確保 TCP 連接埠範圍從 10000 到 20000 開啟。
從 IP 防火牆規則移轉至虛擬網路 ACL
若要將 Azure Cosmos DB 帳戶從使用 IP 防火牆規則遷移至使用虛擬網路服務端點,請使用下列步驟。
針對子網路的服務端點設定 Azure Cosmos DB 帳戶之後,來自該子網路的每項要求都會以不同方式傳送至 Azure Cosmos DB。 要求是透過虛擬網路和子網路的來源資訊傳送,而不是透過來源公用 IP 位址。 這些要求不再符合在 Azure Cosmos DB 帳戶上設定的 IP 篩選器,這就是為什麼必須執行下列步驟以避免停機的原因。
取得虛擬網路和子網路資訊:
$resourceGroupName = "myResourceGroup" $accountName = "mycosmosaccount" $vnetName = "myVnet" $subnetName = "mySubnet" $vnet = Get-AzVirtualNetwork ` -ResourceGroupName $resourceGroupName ` -Name $vnetName $subnetId = $vnet.Id + "/subnets/" + $subnetName為 Azure Cosmos DB 帳戶準備新的虛擬網路規則物件:
$vnetRule = New-AzCosmosDBVirtualNetworkRule ` -Id $subnetId將 Azure Cosmos DB 帳戶更新為可供服務端點從子網路存取:
Update-AzCosmosDBAccount ` -ResourceGroupName $resourceGroupName ` -Name $accountName ` -EnableVirtualNetwork $true ` -VirtualNetworkRuleObject @($vnetRule)針對從子網路存取的所有 Azure Cosmos DB 帳戶,重複上述步驟。
請依照此文章的針對虛擬網路的現有子網路啟用服務端點一節中所示的步驟,在虛擬網路和子網路上啟用 Azure Cosmos DB 服務端點。
從 Azure Cosmos DB 帳戶的防火牆規則中,移除子網路的 IP 防火牆規則。
常見問題集
以下是一些關於從虛擬網路設定存取的常見問題:
Notebook 和 Mongo/Cassandra 殼層目前與已啟用虛擬網路的帳戶是否相容?
目前,Azure Cosmos DB 數據總管中的 Mongo 殼層 和 Cassandra 殼層 整合不支援虛擬網路存取。 目前正在積極開發此整合功能。
是否可以在 Azure Cosmos DB 帳戶中同時指定虛擬網路服務端點和 IP 存取控制原則?
您可以在 Azure Cosmos DB 帳戶上同時啟用虛擬網路服務端點和 IP 存取控制原則 (也稱為防火牆)。 這兩個功能彼此互補,且可共同確保 Azure Cosmos DB 帳戶的隔離與安全性。 使用 IP 防火牆可確保靜態 IP 可以存取您的帳戶。
如何限制對虛擬網路內子網路的存取?
若要限制從子網路存取 Azure Cosmos DB 帳戶,必須執行兩個步驟。 首先,您要允許子網路流量將其子網路和虛擬網路身分識別攜帶至 Azure Cosmos DB。 在子網路上啟用 Azure Cosmos DB 的服務端點,即可變更流量的身分識別。 接下來要在 Azure Cosmos DB 帳戶中新增規則,將這個子網路指定為可存取帳戶的來源。
虛擬網路 ACL 與 IP 防火牆會拒絕要求或連線嗎?
在新增了 IP 防火牆或虛擬網路存取規則時,只有來自已允許來源的要求能取得有效回應。 系統會拒絕其他要求,並顯示 403 (禁止)。 請務必區別 Azure Cosmos DB 帳戶的防火牆和連線層級防火牆。 來源仍可連線至服務,且連線本身不會被拒絕。
當我在子網路上啟用 Azure Cosmos DB 的服務端點時,我的要求開始遭到封鎖。 發生什麼事?
在子網路上啟用 Azure Cosmos DB 的服務端點後,送到帳戶的流量來源就會從公用 IP 切換至虛擬網路和子網路。 如果您的 Azure Cosmos DB 帳戶只有 IP 型防火牆,來自已啟用服務之子網路的流量將不再符合 IP 防火牆規則,因此會遭到拒絕。 請執行步驟以順暢地從 IP 型防火牆移轉至虛擬網路型存取控制。
具有虛擬網路服務端點的 Azure Cosmos DB 帳戶是否需要額外的 Azure 角色型存取控制許可權?
將虛擬網路服務端點新增至 Azure Cosmos DB 帳戶之後,若要對帳戶設定進行任何變更,您需要存取設定於 Azure Cosmos DB 帳戶上的所有 VNET 的 Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action 操作。 這是必要權限,因為授權程序驗證對資源 (例如,資料庫和虛擬網路資源) 的存取,然後再評估任何屬性。
即使使用者未使用 Azure CLI 指定虛擬網路 ACL,授權也會驗證虛擬網路資源動作的許可權。 目前,Azure Cosmos DB 帳戶的控制平面支援設定 Azure Cosmos DB 帳戶的完整狀態。 控制平面呼叫的其中一個參數是 virtualNetworkRules。 如果未指定此參數,Azure CLI 會進行 GET 資料庫呼叫以擷取 virtualNetworkRules,並在更新呼叫中使用此值。
對等互連的虛擬網路也可以存取 Azure Cosmos DB 帳戶嗎?
只有新增至 Azure Cosmos DB 帳戶的虛擬網路及其子網路可以存取。 只有將對等互連之虛擬網路內的子網路新增到帳戶之後,其對等互連的 VNet 才能存取帳戶。
允許存取單一 Azure Cosmos DB 帳戶的子網路數目上限為何?
目前,針對一個 Azure Cosmos DB 帳戶,您最多可以有 256 個子網路。
可以啟用來自 VPN 和 Express Route 的存取嗎?
若要透過快速路由從內部部署存取 Azure Cosmos DB 帳戶,您需要啟用 Microsoft 對等互連。 一旦設定 IP 防火牆或虛擬網路存取規則後,可以在 Azure Cosmos DB 帳戶的 IP 防火牆中新增用於 Microsoft Peering 的公用 IP 位址,以允許內部部署的服務存取 Azure Cosmos DB 帳戶。
我需要更新網路安全性群組 (NSG) 規則嗎?
NSG 規則可用來限制子網路和虛擬網路的往返連線。 當您將 Azure Cosmos DB 的服務端點新增至子網路時,不需要在 NSG 中針對您的 Azure Cosmos DB 帳戶開啟輸出連線。
服務端點是否可供所有 VNet 使用?
否,只有 Azure Resource Manager 虛擬網路可以啟用服務端點。 傳統虛擬網路不支援服務端點。
何時應該針對 Azure Cosmos DB 帳戶接受來自全域 Azure 資料中心的連線?
只有當您想要讓 Azure Cosmos DB 帳戶可供任何 Azure 區域中的任何 Azure 服務存取時,才應該啟用此設定。 其他 Azure 第一方服務,例如 Azure Data Factory 和 Azure AI 搜尋服務提供了文件,說明如何保護對資料來源的存取,包含 Azure Cosmos DB 帳戶,例如: