在 Azure Cosmos DB 中設定 IP 防火牆

適用於:NoSQL MongoDB Cassandra Gremlin Table

為了保護您帳戶中所儲存的資料,Azure Cosmos DB 支援利用強式雜湊式訊息驗證碼 (HMAC) 的祕密型授權模型。 此外,Azure Cosmos DB 支援 IP 型存取控制,以提供輸入防火牆支援。 此模型與傳統資料庫系統的防火牆規則類似,並可為您的帳戶提供額外的安全性層級。 使用防火牆時,您可以設定只能從一組核准的電腦和/或雲端服務存取 Azure Cosmos DB 帳戶。 經由這些核准的電腦和服務組合來存取 Azure Cosmos DB 資料庫中儲存的資料,仍然需要呼叫者出示有效的授權權杖。

IP 存取控制

根據預設,只要要求伴隨有效的授權權杖,就可以從網際網路存取 Azure Cosmos DB 帳戶。 若要設定 IP 原則型存取控制,使用者必須以 CIDR (無類別網域間路由選擇) 形式提供這組 IP 位址或 IP 位址範圍,以包括為允許存取指定 Azure Cosmos DB 帳戶的用戶端 IP 清單。 套用此組態之後,任何源自此允許清單外部機器的要求都會收到 403 (禁止) 回應。 使用IP防火牆時,建議您允許 Azure 入口網站存取您的帳戶。 需要存取權,才能允許使用數據總管,並擷取顯示在 Azure 入口網站 上的帳戶計量。 使用資料總管時,除了允許 Azure 入口網站存取您的帳戶之外,您還需要更新防火牆設定,以將目前的 IP 位址新增至防火牆規則。 防火牆變更最多可能需要 15 分鐘才能傳播,且防火牆在此期間可能會表現出不一致的行為。

您可以結合IP型防火牆與子網和虛擬網路訪問控制。 藉由結合它們,您可以限制對虛擬網路內具有公用IP和/或特定子網之任何來源的存取。 若要深入瞭解如何使用子網和虛擬網路型訪問控制,請參閱 從虛擬網路存取 Azure Cosmos DB 資源。

整體來說,一律需有授權權杖才能存取 Azure Cosmos DB 帳戶。 如果未設定IP防火牆和虛擬網路 存取控制 清單 (ACL),可以使用授權令牌存取 Azure Cosmos DB 帳戶。 在 Azure Cosmos DB 帳戶上設定 IP 防火牆或虛擬網路 ACL 或兩者之後,只有來自您指定來源的要求(並使用授權令牌)取得有效的回應。

您可以使用 IP 防火牆來保護 Azure Cosmos DB 帳戶中所儲存的資料。 Azure Cosmos DB 支援 IP 型存取控制,以提供輸入防火牆支援。 您可以使用下列其中一種方法,在 Azure Cosmos DB 帳戶上設定 IP 防火牆:

  • 從 Azure 入口網站
  • 使用 Azure Resource Manager 範本,以宣告方式進行設定
  • 藉由更新 ipRangeFilter 屬性,透過 Azure CLI 或 Azure PowerShell 以程式設計方式進行設定

使用 Azure 入口網站設定 IP 防火牆

若要在 Azure 入口網站中設定 IP 存取控制原則,請移至 Azure Cosmos DB 帳戶頁面,然後在導覽功能表中選取 [防火牆與虛擬網路]。 將 [允許從下項存取] 值變更為 [選取的網路],然後選取 [儲存]。 如果您藉由停用或允許所有網路的公用存取網路設定來變更公用存取網路設定,您會遺失先前可能設定的防火牆 IP。

顯示如何在 Azure 入口網站中開啟 [防火牆] 頁面的螢幕擷取畫面

開啟 IP 存取控制時,Azure 入口網站就能指定 IP 位址、IP 位址範圍及參數。 這些參數可啟用對其他 Azure 服務與 Azure 入口網站的存取。 下列各節將提供這些參數的詳細資訊。

注意

當您啟用 Azure Cosmos DB 帳戶的 IP 存取控制原則之後,即會拒絕所允許 IP 位址範圍清單外部的電腦對 Azure Cosmos DB 帳戶的所有要求。 從入口網站瀏覽 Azure Cosmos DB 資源也會遭到封鎖,以確保存取控制的完整性。

允許來自 Azure 入口網站的要求

當您以程式設計方式啟用 IP 存取控制原則時,您必須將 Azure 入口網站的 IP 位址加入到 ipRangeFilter 屬性以維持存取權。

需要開啟此選項的入口網站案例包括:

  • 使用資料總管或 <cosmos.azure.com> 存取 API for MongoDB 或 API for Apache Cassandra 帳戶
  • 使用 Azure 入口網站內的下列 Azure Cosmos DB 刀鋒視窗:
    • 將資料複寫到世界各地
    • 瀏覽集合
    • Power BI
    • Azure Synapse

入口網站 IP 位址是:

區域 IP 位址
中國 139.217.8.252
US Gov 52.244.48.71
所有其他區域 104.42.195.92

您可以選取 [允許從 Azure 入口網站存取] 選項,來啟用對 Azure 入口網站的存取,如下列螢幕擷取畫面所示:

顯示如何允許存取 Azure 入口網站的螢幕擷取畫面

新的 Azure 入口網站 IP 位址

Cosmos DB 入口網站服務正於 2024 年轉換至新的基礎結構。 隨著此轉換,啟用防火牆的帳戶將需要允許新的 IP 位址,才能繼續存取某些入口網站功能,例如資料總管。 此變化也會為 Mongo DB 和 Apache Cassandra API 帳戶引進專用的 IP 位址。

在此轉換期間,[允許從 Azure 入口網站 存取] 選項會將目前和新的IP位址新增至帳戶防火牆設定(包括這些帳戶的 MongoDB 和 Cassandra 特定位址)完成轉換時,會提供入口網站選項來移除舊的 IP 位址。

Azure 公用
資料庫帳戶 API IP 位址
全部 13.91.105.215、4.210.172.107、13.88.56.148、40.91.218.243
僅限 MongoDB 20.245.81.54、40.118.23.126、40.80.152.199、13.95.130.121
僅限 Apache Cassandra 40.113.96.14、104.42.11.145、137.117.230.240、168.61.72.237
Azure 中國
資料庫帳戶 API IP 位址
全部 163.228.137.6、143.64.170.142
僅限 MongoDB 52.131.240.99、143.64.61.130
僅限 Apache Cassandra 40.73.99.146、143.64.62.47
Azure US Gov
資料庫帳戶 API IP 位址
全部 52.247.163.6、52.244.134.181
僅限 MongoDB 52.244.176.112、52.247.148.42
僅限 Apache Cassandra 52.244.50.101、52.227.165.24

注意

如果您從資料總管連線到 Azure Cosmos DB 帳戶遇到問題,請檢閱資料總管疑難排解指南

允許來自全球 Azure 資料中心或 Azure 中其他來源的要求

如果您從不提供靜態 IP 的服務 (例如 Azure 串流分析和 Azure Functions) 存取 Azure Cosmos DB 帳戶,您仍然可以使用 IP 防火牆來限制存取。 您可以選取 [接受來自 Azure 資料中心內的連線] 選項,來啟用在 Azure 內其他來源的存取,如下列螢幕擷取畫面所示:

顯示如何接受來自 Azure 資料中心連線的螢幕擷取畫面

當您啟用此選項時,系統會將 IP 位址 0.0.0.0 新增至允許的 IP 位址清單。 0.0.0.0 IP 位址會限制只能從 Azure 資料中心 IP 範圍向您的 Azure Cosmos DB 帳戶提出要求。 此設定不允許存取 Azure Cosmos DB 帳戶的任何其他 IP 範圍。

注意

將 publicNetworkAccess 設定為 Disabled 優先於此 [接受來自 Azure 數據中心 ] 選項內的連線。 請參閱 blocking-public-network-access-during-account-creation

注意

這個選項會將防火牆設定為允許所有來自 Azure 的連線,包括來自 Azure 中所部署之其他客戶訂用帳戶的連線。 此選項所允許的 IP 清單範圍寬鬆,因而限制了防火牆原則的效果。 只有當您的要求不是來自靜態 IP 或虛擬網路中的子網路時,才使用此選項。 由於 Azure 入口網站部署於 Azure 中,因此,選擇此選項就會自動允許從 Azure 入口網站存取。

來自您目前 IP 的要求

為了簡化開發工作,Azure 入口網站協助您識別用戶端電腦的 IP 並新增至允許清單。 您電腦上執行的應用程式可以接著存取 Azure Cosmos DB 帳戶。

入口網站會自動偵測用戶端 IP 位址。 它可能是您電腦的用戶端 IP 位址或網路閘道的 IP 位址。 請務必在將您的工作負載投入生產環境之前移除此 IP 位址。

若要將您目前的 IP 新增至 IP 清單,請選取 [新增我目前的 IP]。 然後選取儲存

顯示如何為目前的 IP 進行防火牆設定的螢幕擷取畫面

來自雲端服務的要求

在 Azure 中,雲端服務是使用 Azure Cosmos DB 裝載中介層服務邏輯的常見方式。 若要從雲端服務啟用對 Azure Cosmos DB 帳戶的存取,您必須設定 IP 存取控制原則,以將雲端服務的公用 IP 位址新增至與您 Azure Cosmos DB 帳戶相關聯的允許 IP 位址清單。 這確保雲端服務的所有角色執行個體都能存取您的 Azure Cosmos DB 帳戶。

您可以在 Azure 入口網站中擷取雲端服務的 IP 位址,如下列螢幕擷取畫面所示:

這個螢幕擷取畫面顯示 Azure 入口網站中所顯示雲端服務的公用 IP 位址

當您藉由新增角色執行個體來擴增雲端服務時,那些新的執行個體將可自動存取 Azure Cosmos DB 帳戶,因為它們是相同雲端服務的一部分。

來自虛擬機器的要求

您也可以使用虛擬機器虛擬機器擴展集,透過 Azure Cosmos DB 裝載中介層服務。 若要將您的 Azure Cosmos DB 帳戶設定為允許來自虛擬機器的存取,您必須設定 IP 存取控制原則,以將虛擬機器和/或虛擬機器擴展集的公用 IP 位址設定為 Azure Cosmos DB 帳戶的其中一個允許 IP 位址。

您可以在 Azure 入口網站中擷取虛擬機器的 IP 位址,如下列螢幕擷取畫面所示:

這個螢幕擷取畫面顯示 Azure 入口網站中所顯示虛擬機器的公用 IP 位址

當您將虛擬機器執行個體新增至群組時,它們即可自動存取您的 Azure Cosmos DB 帳戶。

來自網際網路的要求

從網際網路上的電腦存取 Azure Cosmos DB 帳戶時,必須將電腦的用戶端 IP 位址或 IP 位址範圍新增至您帳戶的允許 IP 位址清單。

將輸出規則新增至防火牆

若要存取目前的輸出 IP 範圍清單以新增至您的防火牆設定,請參閱下載 Azure IP 範圍和服務標籤

若要將清單自動化,請參閱使用服務標籤探索 API

使用 Resource Manager 範本設定 IP 防火牆

為了設定 Azure Cosmos DB 帳戶的存取控制,請確定 Resource Manager 範本指定 ipRules 屬性,其中含有允許的 IP 範圍陣列。 如果將 IP 防火牆設定為已部署的 Azure Cosmos DB 帳戶,請確保 locations 陣列符合目前所部署的項目。 您無法同時修改 locations 陣列和其他屬性。 如需適用於 Azure Cosmos DB 之 Azure Resource Manager 範本的詳細資訊和範例, 請參閱適用於 Azure Cosmos DB 的 Azure Resource Manager 範本

重要

已在 API 2020-04-01 版中引進 ipRules 屬性。 先前的版本會改為公開 ipRangeFilter 屬性,這是以逗號分隔的 IP 位址清單。

此範例示範 如何在 API 2020-04-01 版或更新版本中公開 ipRules 屬性:

{
  "type": "Microsoft.DocumentDB/databaseAccounts",
  "name": "[variables('accountName')]",
  "apiVersion": "2020-04-01",
  "location": "[parameters('location')]",
  "kind": "GlobalDocumentDB",
  "properties": {
    "consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
    "locations": "[variables('locations')]",
    "databaseAccountOfferType": "Standard",
    "enableAutomaticFailover": "[parameters('automaticFailover')]",
    "ipRules": [
      {
        "ipAddressOrRange": "13.91.105.215"
      },
      {
        "ipAddressOrRange": "4.210.172.107"
      },
      {
        "ipAddressOrRange": "13.88.56.148"
      },
      {
        "ipAddressOrRange": "40.91.218.243"
      }
    ]
  }
}

以下是 2020-04-01 之前任何 API 版本的相同範例:

{
  "type": "Microsoft.DocumentDB/databaseAccounts",
  "name": "[variables('accountName')]",
  "apiVersion": "2019-08-01",
  "location": "[parameters('location')]",
  "kind": "GlobalDocumentDB",
  "properties": {
    "consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
    "locations": "[variables('locations')]",
    "databaseAccountOfferType": "Standard",
    "enableAutomaticFailover": "[parameters('automaticFailover')]",
    "ipRangeFilter":"13.91.105.215,4.210.172.107,13.88.56.148,40.91.218.243"
  }
}

使用 Azure CLI 設定 IP 存取控制原則

下列命令示範如何使用 IP 存取控制來建立 Azure Cosmos DB 帳戶:

# Create an Azure Cosmos DB account with default values and IP Firewall enabled
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
ipRangeFilter='192.168.221.17,183.240.196.255,40.76.54.131'

# Make sure there are no spaces in the comma-delimited list of IP addresses or CIDR ranges.
az cosmosdb create \
    -n $accountName \
    -g $resourceGroupName \
    --locations regionName='West US 2' failoverPriority=0 isZoneRedundant=False \
    --locations regionName='East US 2' failoverPriority=1 isZoneRedundant=False \
    --ip-range-filter $ipRangeFilter

使用 PowerShell 設定 IP 存取控制原則

下列指令碼說明如何使用 IP 存取控制來建立 Azure Cosmos DB 帳戶:

# Create an Azure Cosmos DB account with default values and IP Firewall enabled
$resourceGroupName = "myResourceGroup"
$accountName = "mycosmosaccount"
$ipRules = @("192.168.221.17","183.240.196.255","40.76.54.131")

$locations = @(
    @{ "locationName"="West US 2"; "failoverPriority"=0; "isZoneRedundant"=False },
    @{ "locationName"="East US 2"; "failoverPriority"=1, "isZoneRedundant"=False }
)

# Make sure there are no spaces in the comma-delimited list of IP addresses or CIDR ranges.
$CosmosDBProperties = @{
    "databaseAccountOfferType"="Standard";
    "locations"=$locations;
    "ipRules"=$ipRules
}

New-AzResource -ResourceType "Microsoft.DocumentDb/databaseAccounts" `
    -ApiVersion "2020-04-01" -ResourceGroupName $resourceGroupName `
    -Name $accountName -PropertyObject $CosmosDBProperties

針對 IP 存取控制原則問題進行疑難排解

您可以使用下列選項,針對 IP 存取控制原則問題進行疑難排解:

Azure 入口網站

藉由啟用 Azure Cosmos DB 帳戶的 IP 存取控制原則,您可以封鎖所允許 IP 位址範圍清單外部的電腦對您帳戶的所有要求。 若要啟用入口網站資料平面作業 (例如瀏覽容器和查詢文件),則需要在入口網站中使用 [防火牆] 窗格,明確地允許 Azure 入口網站存取。

SDK

當您從不在允許清單中的計算機使用 SDK 存取 Azure Cosmos DB 資源時,會傳回一般 403 禁止 回應,且沒有額外的詳細數據。 請確認您帳戶的允許 IP 清單,並確保會將正確的原則設定套用至您的 Azure Cosmos DB 帳戶。

已封鎖要求中的來源 IP

啟用 Azure Cosmos DB 帳戶的診斷記錄。 這些記錄會顯示每個要求和回應。 防火牆相關的訊息會以 403 傳回碼進行記錄。 藉由篩選這些訊息,您就能看到已封鎖要求的來源 IP。 請參閱 Azure Cosmos DB 診斷記錄

要求來自具有已啟用 Azure Cosmos DB 之服務端點的子網路

若要求來自虛擬網路中具有已啟用 Azure Cosmos DB 之服務端點的子網路,即會將虛擬網路和子網路身分識別傳送至 Azure Cosmos DB 帳戶。 這些要求沒有來源的公用 IP,因此 IP 篩選器會予以拒絕。 若要允許來自虛擬網路中特定子網路的存取,請新增如何針對 Azure Cosmos DB 帳戶設定虛擬網路和子網路型存取中所述的存取控制清單。 套用防火牆規則最多可能需要 15 分鐘的時間,且防火牆在此期間可能會表現出不一致的行為。

允許位址清單中的私人 IP 位址

建立或更新包含私人IP位址的允許位址清單的 Azure Cosmos DB 帳戶失敗。 請確定清單中未指定任何私人 IP 位址。