設定虛擬網路中後端儲存體的私人網路存取
注意
基本、標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告。
標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps。
本文適用於: ✔️ 標準 ✔️ 企業
本文說明如何為虛擬網路內的應用程式設定後端儲存體的私人網路存取。
當您使用虛擬網路插入在 Azure Spring Apps 服務執行個體中部署應用程式時,服務執行個體會依賴後端儲存體來儲存相關資產,包括 JAR 檔案和記錄。 雖然預設組態會透過公用網路將流量路由傳送至此後端儲存體,但您可以開啟私人儲存體存取功能。 這項功能可讓您透過私人網路引導流量、增強安全性,並可能改善效能。
注意
此功能僅適用於 Azure Spring Apps 虛擬網路插入的服務執行個體。
啟用 Azure Spring Apps 服務執行個體的這項功能之前,請確定服務運行時間子網路中至少有兩個可用的 IP 位址。
啟用或停用此功能會將 DNS 解析變更為後端儲存體。 在短時間內,您可能會遇到無法建立後端儲存體連線或無法在更新期間解析其端點的部署。
啟用此功能之後,後端儲存體只能私下存取,因此您必須在虛擬網路內部署應用程式。
必要條件
- Azure 訂用帳戶。 如果您沒有訂用帳戶,請先建立免費帳戶,再開始操作。
- Azure CLI 2.56.0 版或更新版本。
- 部署在虛擬網路中現有的 Azure Spring 應用程式服務執行個體。 如需詳細資訊,請參閱在虛擬網路中部署 Azure Spring 應用程式。
當您建立新的 Azure Spring Apps 執行個體時,啟用私人儲存體存取
當您在虛擬網路中建立 Azure Spring Apps 執行個體時,請使用下列命令傳遞自變數 --enable-private-storage-access true
,以啟用私人儲存體存取。 如需詳細資訊,請參閱在虛擬網路中部署 Azure Spring 應用程式。
az spring create \
--resource-group "<resource-group>" \
--name "<Azure-Spring-Apps-instance-name>" \
--vnet "<virtual-network-name>" \
--service-runtime-subnet "<service-runtime-subnet>" \
--app-subnet "<apps-subnet>" \
--location "<location>" \
--enable-private-storage-access true
訂用帳戶中會建立一個資源群組,以裝載 Azure Spring Apps 執行個體的私人連結資源。 資源群組的名稱為 ap-res_{service instance name}_{service instance region}
。
在資源群組中部署了兩組私人連結資源,每個資源都是由下列 Azure 資源所組成:
- 表示後端儲存體帳戶私人端點的私人端點。
- 維護服務執行階段子網路中私人 IP 位址的網路介面 (NIC)。
- 針對虛擬網路部署的私人 DNS 區域,此 DNS 區域中也會為儲存體帳戶建立 DNS A 記錄。
重要
資源群組是由 Azure Spring Apps 完全管理。 請勿手動刪除或修改這些資源群組中的任何資源。
啟用或停用現有 Azure Spring Apps 執行個體的私人儲存體存取
使用下列命令來更新現有的 Azure Spring Apps 執行個體,以啟用或停用私人儲存體存取:
az spring update \
--resource-group "<resource-group>" \
--name "<Azure-Spring-Apps-instance-name>" \
--enable-private-storage-access <true-or-false>
使用集中式 DNS 解析
集中式 DNS 管理架構記載於中樞和輪輻網路架構中,私人連結和 DNS 大規模整合。 在此架構中,所有私人 DNS 區域都會在與 Azure Spring Apps 服務執行個體不同的中央虛擬網路中集中部署和管理。 如果您使用此架構,您可以適當地設定 DNS 設定,以啟用私人儲存體存取的中央 DNS 解析。 這個設定可確保:
- 建立私人端點時,會自動將對應的 DNS 記錄新增至集中式私人 DNS 區域。
- DNS 記錄根據私人端點的生命週期管理,這表示會在刪除私人端點時自動移除。
下列各節說明如何使用 Azure 原則來啟用 Azure 儲存體 Blob 的中央 DNS 解析,假設您已在中央虛擬網路中設定私人 DNS 區域 privatelink.blob.core.windows.net
。 相同的原則適用於支援 Private Link 的 Azure 儲存體檔案和其他 Azure 服務。
原則定義
除了私人 DNS 區域之外,您還需要建立自訂的 Azure 原則定義。 如需更多資訊,請參閱教學課程:建立自訂原則定義。 當您建立私人端點時,此定義會自動在中央私人 DNS 區域中建立必要的 DNS 記錄。
當您使用服務特定的 groupId
建立私人端點資源時,會觸發下列原則。 groupId
是從遠端資源或服務取得的群組識別碼,是此私人端點應連線到的地方。 在此範例中,Azure 儲存體 Blob 的 groupId
是 blob
。 如需 groupId
上其他 Azure 服務的詳細資訊,請參閱子資源資料行底下的 Azure 私人端點私人 DNS 區域值中的資料表。
該原則接著會在私人端點內觸發 privateDNSZoneGroup
部署,藉此將私人端點與指定為參數的私人 DNS 區域產生關聯。 在下列範例中,私人 DNS 區域資源識別碼會是 /subscriptions/<subscription-id>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/privateDnsZones/privatelink.blob.core.windows.net
:
{
"mode": "Indexed",
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Network/privateEndpoints"
},
{
"value": "[contains(resourceGroup().name, 'ap-res_')]",
"equals": "true"
},
{
"count": {
"field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].groupIds[*]",
"where": {
"field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].groupIds[*]",
"equals": "blob"
}
},
"greaterOrEquals": 1
}
]
},
"then": {
"effect": "deployIfNotExists",
"details": {
"type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
"evaluationDelay": "AfterProvisioningSuccess",
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7"
],
"deployment": {
"properties": {
"mode": "incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"privateDnsZoneId": {
"type": "string"
},
"privateEndpointName": {
"type": "string"
},
"location": {
"type": "string"
}
},
"resources": [
{
"name": "[concat(parameters('privateEndpointName'), '/deployedByPolicy')]",
"type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups",
"apiVersion": "2020-03-01",
"location": "[parameters('location')]",
"properties": {
"privateDnsZoneConfigs": [
{
"name": "storageBlob-privateDnsZone",
"properties": {
"privateDnsZoneId": "[parameters('privateDnsZoneId')]"
}
}
]
}
}
]
},
"parameters": {
"privateDnsZoneId": {
"value": "[parameters('privateDnsZoneId')]"
},
"privateEndpointName": {
"value": "[field('name')]"
},
"location": {
"value": "[field('location')]"
}
}
}
}
}
}
},
"parameters": {
"privateDnsZoneId": {
"type": "String",
"metadata": {
"displayName": "privateDnsZoneId",
"description": null,
"strongType": "Microsoft.Network/privateDnsZones"
}
}
}
}
原則指派
部署原則定義之後,請在裝載 Azure Spring Apps 服務執行個體的訂用帳戶上指派原則,並將中央私人 DNS 區域指定為參數。
中央私人 DNS 區域和 Azure Spring Apps 服務執行個體可能會裝載在不同的訂用帳戶中。 在此案例中,請記得將位於託管了私人 DNS 區域的訂閱/資源群組中的私人 DNS 區域參與者角色,指派給由 DeployIfNotExists
原則指派所建立的受控識別。此受控識別會負責建立並管理私人 DNS 區域中的私人端點 DNS 紀錄。 如需詳細資訊,請參閱使用 Azure 原則補救不符合規範的資源一節中的設定受控識別一節。
完成設定之後,當您啟用或停用私人儲存體存取功能時,會在對應的私人 DNS 區域中自動註冊私人端點的 DNS 記錄,並在刪除私人端點之後移除。
額外成本
Azure Spring Apps 執行個體不會產生這項功能的費用。 不過,系統會向您收取支援此功能的訂用帳戶中所裝載的私人連結資源費用。 如需更多資訊,請參閱 Azure Private Link 定價和 Azure DNS 定價。
使用自訂 DNS 伺服器
如果您使用自訂網域名稱系統 (DNS) 伺服器,且 Azure DNS IP 168.63.129.16
未設定為上游 DNS 伺服器,則必須手動繫結資源群組 ap-res_{service instance name}_{service instance region}
中所顯示私人 DNS 區域的所有 DNS 記錄,以解析私人 IP 位址。