共用方式為


在Azure DocumentDB啟用私有存取

Azure Private Link 是一項強大的服務,允許使用者透過指定的私人端點連接 Azure DocumentDB。 這個私有端點由位於你自己虛擬網路子網路中的私有 IP 位址組成。 端點允許你限制僅透過私有 IP 存取 Azure DocumentDB 產品。 透過整合私人連結與嚴格的 NSG 政策,資料外洩風險大幅降低。 想更深入了解私有端點,可以參考《 什麼是 Azure Private Link?》。

備註

Private Link 會保護你的連線,但它不會阻止你的 Azure DocumentDB 端點被公開 DNS 解析。 進來請求的過濾是在應用程式層級處理,而非傳輸或網路層級。

Private Link 提供彈性,讓您能從虛擬網路內或任何連接的對等虛擬網路存取 Azure DocumentDB。 此外,連結至 Private Link 的資源可透過私人互聯、VPN 或 Azure ExpressRoute 在本地端存取。

為了建立連線,Azure DocumentDB 與 Private Link 支援自動與手動批准方式。

先決條件

  • Azure 訂用帳戶

    • 如果您沒有 Azure 訂用帳戶,請建立 免費帳戶
  • 一個現有的 Azure DocumentDB 叢集

使用 Azure 入口網站建立帶有私有端點的叢集

請依照以下步驟,使用 Azure 入口網站建立一個新的 Azure DocumentDB 叢集,並設置私人端點:

  1. 登入 Azure 入口網站,然後在 Azure 入口網站左上角選擇 「建立資源 」。

  2. 「建立資源 」頁面,選擇 「資料庫」 ,然後選擇 Azure DocumentDB

  3. 在 Select API 選項頁面, MongoDB 圖塊中選擇「建立」。

  4. 選擇 叢集 資源類型。

  5. 「建立 Azure DocumentDB 叢集」頁面,選擇或建立 資源群組,輸入 叢集名稱 與位置,並輸入並確認管理員密碼。

  6. 選擇下一頁: 人脈網絡

  7. 選擇 網路 標籤,連接方式選擇 私人存取

  8. 在建立私有端點畫面,輸入或選擇適當的值:

    Setting 價值觀
    資源群組 選取資源群組。
    名稱 輸入任意名稱作為你的私有端點。 如果這個名字被採用,請創造一個獨特的名字。
    網路介面名稱 輸入任何網路介面名稱。 如果這個名字被採用,請創造一個獨特的名字。
    地點 選擇你想部署私有連結的區域。 在虛擬網路所在的位置建立私有端點。
    資源類型 選取 Microsoft.DocumentDB/mongoClusters
    目標資源 選擇你建立的 Azure DocumentDB 資源。
    目標子資源 選擇先前所選資源的子資源類型,以確保您的私人端點能夠存取。
    虛擬網路 選取您的虛擬網路。
    子網路 選取子網路。
    與私人 DNS 區域整合 選擇。 若要私下與私人端點連線,則需要 DNS 記錄。 我們建議您將私人端點與私有 DNS 區域整合。 你也可以使用自己的 DNS 伺服器,或是利用虛擬機上的主機檔案建立 DNS 紀錄。 當你選擇「是」時,也會建立一個私人 DNS 區域群組。 DNS 區域群組是連接私有 DNS 區域與私有端點的連結。 這個連結可以幫助你在私有端點有更新時自動更新私有 DNS 區域。 例如,當你新增或移除區域時,私有 DNS 區域會自動更新。
    組態名稱 選擇您的訂閱與資源群組。 私人 DNS 區域是自動決定的。 你無法透過 Azure 入口網站來更改它。
  9. 選取 [確定]

  10. 選擇 下一步:標籤>評論 + 創建。 在 「Review + 建立 」頁面,選擇 「建立」。

在現有叢集上啟用私人存取

若要為現有叢集中的節點建立私人端點,請開啟叢集的 [網路] 頁面。

  1. 選取 [新增私人端點]

    在 [網路] 畫面上選取 [新增私人端點] 的螢幕擷取畫面。

  2. 在 [建立私人端點] 畫面的 [基本] 索引標籤上,確認 [訂用帳戶]、[資源群組] 和 [區域]。 輸入端點的名稱,例如 my-cluster-1,並輸入網路介面名稱,例如 my-cluster-1-nic

    備註

    除非您有充分理由另行選擇,否則建議您挑選與您叢集相符的訂用帳戶和區域。 表單欄位的預設值可能不正確。 檢查這些值並視需要更新。

  3. 選擇下一步:資源。 選擇「Microsoft.DocumentDB/mongoClusters」作為 資源類型,並選擇目標叢集作為 資源。 對於 目標子資源,選擇「MongoCluster」。

  4. 選取 [下一步:虛擬網路]。 選擇所需的虛擬網路子網路。 在 [私人 IP 設定] 底下,選取 [靜態配置 IP 位址],或保留預設值 [動態配置 IP 位址]

  5. 選取 下一步:DNS

  6. 在 [私人 DNS整合] 底下,針對 [與私人 DNS 區域整合],保留預設的 [是] 或選取 [否]

備註

叢集需要啟用私有 DNS 集成才可進行正確的 DNS 解析。

  1. 選取 [下一步:標記],然後新增任何所需的標籤。

  2. 選擇 檢閱 + 創建。 檢閱設定,如果滿意,請選取 [建立]

使用 Azure CLI 建立私有端點

執行以下 Azure CLI 腳本,為現有的 Azure DocumentDB 帳號建立一個名為 myPrivateEndpoint 的私人端點。 用你環境的細節來替換變數值。

# Resource group where the Azure DocumentDB account and virtual network resources are located  
ResourceGroupName="myResourceGroup" 

# Name of the existing Azure DocumentDB account  
ClusterName="myMongoCluster" 

# Subscription ID where the Azure DocumentDB account and virtual network resources are located  
SubscriptionId="<your Azure subscription ID>"  

# API type of your Azure DocumentDB account: Sql, SqlDedicated, MongoCluster, Cassandra, Gremlin, or Table 
SubResourceType="MongoCluster"  

# Name of the virtual network to create  
VNetName="myVnet"  

# Name of the subnet to create  
SubnetName="mySubnet"  

# Name of the private endpoint to create  
PrivateEndpointName="myPrivateEndpoint"  

# Name of the private endpoint connection to create 
PrivateConnectionName="myConnection" 

az network vnet create \
  --name $VNetName \
  --resource-group $ResourceGroupName \
  --subnet-name $SubnetName 

az network vnet subnet update \
  --name <name> \
  --resource-group $ResourceGroupName \
  --vnet-name $VNetName \
  --disable-private-endpoint-network-policies true 

az network private-endpoint create \
  --name $PrivateEndpointName \
  --resource-group $ResourceGroupName \
  --vnet-name $VNetName \
  --subnet $SubnetName \
  --private-connection-resource-id "/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.DocumentDB/mongoClusters/$ClusterName" \
  --group-ids MongoCluster --connection-name $PrivateConnectionName 

將私人端點與私人 DNS 區域整合

建立私有端點後,應使用以下 Azure CLI 腳本將其整合至私有 DNS 區域:

備註

叢集需要啟用私有 DNS 集成才可進行正確的 DNS 解析。

#Zone name differs based on the API type and group ID you are using. 
zoneName="privatelink.mongocluster.cosmos.azure.com" 

az network private-dns zone create \
  --resource-group $ResourceGroupName \
  --name $zoneName 

az network private-dns link vnet create --resource-group $ResourceGroupName \
  --zone-name $zoneName \
  --name <dns-link-name> \
  --virtual-network $VNetName \
  --registration-enabled false 

#Create a DNS zone group
az network private-endpoint dns-zone-group create \
  --resource-group $ResourceGroupName \
  --endpoint-name <pe-name> \
  --name <zone-group-name> \
  --private-dns-zone $zoneName \
  --zone-name mongocluster 

取得用於連接的連接字串

從擁有私有 IP 位址且能存取 Azure DocumentDB 叢集私有端點的客戶端,請務必使用 mongodb+srv connection string 連接到資料庫。

  1. 選擇一個現有的 Azure DocumentDB 叢集。
  2. 在叢集提要字段的 [設定]下,選取 [連接字串]
  3. 複製全域讀寫或自連線字串,以進行原生 DocumentDB 認證或 Microsoft Entra ID 驗證

備註

在副本叢集中,僅提供自連線字串。

  1. 在你的應用程式或管理工具中使用複製的連接字串來連接叢集。
az network private-link-resource list \
  -g <rg-name> \
  -n <resource-name> \
  --type Microsoft.DocumentDB/mongoClusters 

驗證並排除私有端點連線問題

在你為 Azure DocumentDB 叢集建立私人端點後,確認 DNS 解析是否正確,且你的應用程式能透過該私有端點連線非常重要。

驗證私有端點狀態

首先,確認私有端點是否已正確配置並連接:

  1. 在 Azure 入口網站中,導覽到你的 Azure DocumentDB 叢集。
  2. 在叢集側邊欄,在設定中選擇網路。
  3. 確認私有端點是否出現在列表中,狀態為 「已批准」。
  4. 選擇私有端點名稱以查看其詳細資訊,包括指派的私有 IP 位址。

你也可以使用 Azure CLI 來檢查私有端點狀態:

az network private-endpoint show \
  --resource-group $ResourceGroupName \
  --name $PrivateEndpointName

測試 DNS 解析

Azure DocumentDB 在使用 mongodb+srv connection 字串格式時會使用 SRV 記錄來進行服務發現。 為了驗證 DNS 解析是否正確運作,請測試同一虛擬網路內的虛擬機器或資源,或是對等網路中的 DNS 解析。

Windows DNS 測試

從連接到虛擬網路的 Windows 機器上,請使用以下指令:

  1. 測試SRV記錄解析度:

    Resolve-DnsName -Name _mongodb._tcp.<your-cluster-name>.mongocluster.cosmos.azure.com -Type SRV
    

    輸出應該會顯示指向私有 DNS 區域內叢集節點的 SRV 紀錄。

  2. 解析各個節點主機名稱以確認其是否連接到私有 IP 位址:

    Resolve-DnsName -Name <your-node-hostname>.mongocluster.cosmos.azure.com
    

    輸出應顯示私有 IP 位址(例如 10.x.x.x),而非公共 IP 位址。

  3. 使用nslookup作為替代方案:

    nslookup -type=SRV _mongodb._tcp.<your-cluster-name>.mongocluster.cosmos.azure.com
    nslookup <your-node-hostname>.mongocluster.cosmos.azure.com
    

Linux 與 macOS DNS 測試

從連接到虛擬網路的 Linux 或 macOS 電腦,請使用以下指令:

  1. 測試SRV記錄解析度:

    dig _mongodb._tcp.<your-cluster-name>.mongocluster.cosmos.azure.com SRV
    

    輸出應該會顯示具有目標指向叢集節點的 SRV 記錄。

  2. 解析各個節點的主機名稱:

    dig <your-node-hostname>.mongocluster.cosmos.azure.com
    

    A 紀錄應該會解析成虛擬網路位址空間中的私有 IP 位址。

  3. 作為替代方案使用nslookup

    nslookup -type=SRV _mongodb._tcp.<your-cluster-name>.mongocluster.cosmos.azure.com
    nslookup <your-node-hostname>.mongocluster.cosmos.azure.com
    

常見疑難解答案例

如果你遇到連線問題,請檢查以下幾點:

DNS 解析失敗或回傳公網 IP 位址

  • 確認私人 DNS 區域是否正確連結到你的虛擬網路。
  • 確認私人端點的 DNS 區域群組是否正確設定。
  • 檢查你的虛擬網路 DNS 設定是否設定為使用 Azure 提供的 DNS(168.63.129.16)或是自訂的 DNS 伺服器,將查詢轉發到 Azure DNS。
  • 確保您在虛擬網路或正確對接的網路內的資源進行測試。

連線逾時或失敗

  • 確認子網路上的網路安全群組(NSG)規則是否允許在 27017 埠(MongoDB 預設埠)進行外出連線。
  • 確認私有端點的網路介面是否分配了正確的私有 IP 位址。
  • 檢查應用程式或用戶端是否使用正確的連接字串格式(mongodb+srv)。
  • 確保 Azure DocumentDB 叢集上的防火牆規則允許私有端點連線。

私人 DNS 區域無法解析

  • 確認私有 DNS 區域名稱是否符合預期格式: privatelink.mongocluster.cosmos.azure.com
  • 檢查叢集節點的私有 DNS 區域是否存在 A 紀錄。
  • 確認虛擬網路連結在私有 DNS 區域中是否啟用且設定正確。

查看私有端點詳情

要查看您的私有端點設定詳細資訊,請使用以下 Azure CLI 指令:

az network private-endpoint show \
  --resource-group $ResourceGroupName \
  --name $PrivateEndpointName \
  --query '{Name:name, PrivateIpAddress:customDnsConfigs[0].ipAddresses[0], FQDN:customDnsConfigs[0].fqdn, ProvisioningState:provisioningState}' \
  --output table

此指令顯示關鍵資訊,包括私有 IP 位址、完全限定網域名稱(FQDN)及配置狀態。