設定 Azure Machine Learning 工作區的私人端點
在此文件中,您將了解如何為您的 Azure Machine Learning 工作區設定私人端點。 如需建立 Azure Machine Learning 的虛擬網路的相關資訊,請參閱虛擬網路隔離和隱私權概觀。
Azure Private Link 可讓您將工作區的連線限制於 Azure 虛擬網路。 您可以建立私人端點,以限制工作區只接受來自虛擬網路的連線。 私人端點是虛擬網路內的一組私人 IP 位址。 然後,您可以將對工作區的存取權限制為只透過私人 IP 位址進行。 私人端點有助於降低資料外流的風險。 若要深入了解私人端點,請參閱 Azure Private Link 一文。
警告
使用私人端點保護工作區本身無法確保端對端安全性。 您必須保護解決方案的所有個別元件。 例如,如果您使用私人端點做為工作區,但您的 Azure 儲存體帳戶不在 VNet 後方,則工作區和儲存體之間的流量不會使用 VNet 來獲得安全性。
如需保護 Azure Machine Learning 所使用資源的詳細資訊,請參閱下列文章:
必要條件
您必須擁有現有的虛擬網路,才能在其中建立私人端點。
警告
請勿為您的 VNet 使用 172.17.0.0/16 IP 位址範圍。 這是 Docker 橋接器網路所使用的預設子網路範圍,如果用於 VNet,將會導致錯誤。 根據您想要連線至虛擬網路的內容,其他範圍也可能會衝突。 例如,如果您打算將您的內部部署網路連線至 VNet,而且您的內部部署網路也會使用 172.16.0.0/16 範圍。 最後,「您」必須規劃網路基礎結構。
在新增私人端點之前,請先停用私人端點的網路原則。
限制
如果您針對使用私人端點保護的工作區啟用公用存取,並透過公用網際網路使用 Azure Machine Learning 工作室,則某些功能 (例如設計工具) 可能會無法存取您的資料。 當資料儲存在虛擬網路後方保護的服務時,就會發生此問題。 例如,Azure 儲存體帳戶。
如果您是使用 Mozilla Firefox,則在嘗試存取工作區的私人端點時可能會遇到問題。 此問題可能與 Mozilla Firefox 中透過 HTTPS 的 DNS 有關。 建議您使用 Microsoft Edge 或 Google Chrome。
使用私人端點並不會影響 Azure 控制平面 (管理作業),例如刪除工作區或管理計算資源。 例如,建立、更新或刪除計算目標。 這些作業會正常地透過公用網際網路執行。 資料平面作業 (例如使用 Azure Machine Learning 工作室)、API (包括已發佈的管線),或 SDK 都會使用私人端點。
在具有私人端點的工作區中建立計算執行個體或計算叢集時,計算執行個體和計算叢集必須位於與工作區相同的 Azure 區域中。
將 Azure Kubernetes Service 叢集連結至具有私人端點的工作區時,該叢集必須位於與工作區相同的區域中。
使用具有多個私人端點的工作區時,其中一個私人端點必須與下列相依性服務位於相同的虛擬網路中:
- 為工作區提供預設儲存體的 Azure 儲存體帳戶
- 工作區的 Azure Key Vault
- 工作區的 Azure Container Registry。
例如,一個虛擬網路 (「服務」) 會包含用於相依性服務和工作區的私人端點。 此設定可讓工作區與服務通訊。 另一個虛擬網路 (「用戶端」) 可能只包含用於工作區的私人端點,而且只能用於用戶端開發電腦和工作區之間的通訊。
建立使用私人端點的工作區
使用下列其中一個方法來建立具有私人端點的工作區。 這兩種方法都需要現有的虛擬網路:
提示
如果您想要同時建立工作區、私人端點和虛擬網路,請參閱使用 Azure Resource Manager 範本來建立 Azure Machine Learning 的工作區。
使用適用於機器學習的 Azure CLI 擴充功能 2.0 CLI 時,可使用 YAML 文件來設定工作區。 以下範例示範使用 YAML 設定來建立新工作區:
提示
使用私人連結時,您的工作區無法將 Azure Container Registry 工作計算用於建置映像。 工作區會改為預設使用無伺服器計算叢集來建置映像。 此情況只有在儲存體帳戶或容器登錄等工作區相依資源不受任何網路限制 (私人端點) 時才適用。 如果您的工作區相依性受到網路限制,請使用 image_build_compute
屬性來指定用於映像建置的計算叢集。
此設定中的 image_build_compute
屬性會指定要用於建置 Docker 映像環境的 CPU 計算叢集名稱。 您也可以使用 public_network_access
屬性,指定是否應該可透過網際網路存取私人連結工作區。
在此範例中,將需要在建置映像之前建置 image_build_compute
所參考的計算。
$schema: https://azuremlschemas.azureedge.net/latest/workspace.schema.json
name: mlw-privatelink-prod
location: eastus
display_name: Private Link endpoint workspace-example
description: When using private link, you must set the image_build_compute property to a cluster name to use for Docker image environment building. You can also specify whether the workspace should be accessible over the internet.
image_build_compute: cpu-compute
public_network_access: Disabled
tags:
purpose: demonstration
az ml workspace create \
-g <resource-group-name> \
--file privatelink.yml
建立工作區之後,請使用 Azure 網路 CLI 命令來為工作區建立私人連結端點。
az network private-endpoint create \
--name <private-endpoint-name> \
--vnet-name <vnet-name> \
--subnet <subnet-name> \
--private-connection-resource-id "/subscriptions/<subscription>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>" \
--group-id amlworkspace \
--connection-name workspace -l <location>
若要建立工作區的私人 DNS 區域項目,請使用下列命令:
# Add privatelink.api.azureml.ms
az network private-dns zone create \
-g <resource-group-name> \
--name privatelink.api.azureml.ms
az network private-dns link vnet create \
-g <resource-group-name> \
--zone-name privatelink.api.azureml.ms \
--name <link-name> \
--virtual-network <vnet-name> \
--registration-enabled false
az network private-endpoint dns-zone-group create \
-g <resource-group-name> \
--endpoint-name <private-endpoint-name> \
--name myzonegroup \
--private-dns-zone privatelink.api.azureml.ms \
--zone-name privatelink.api.azureml.ms
# Add privatelink.notebooks.azure.net
az network private-dns zone create \
-g <resource-group-name> \
--name privatelink.notebooks.azure.net
az network private-dns link vnet create \
-g <resource-group-name> \
--zone-name privatelink.notebooks.azure.net \
--name <link-name> \
--virtual-network <vnet-name> \
--registration-enabled false
az network private-endpoint dns-zone-group add \
-g <resource-group-name> \
--endpoint-name <private-endpoint-name> \
--name myzonegroup \
--private-dns-zone privatelink.notebooks.azure.net \
--zone-name privatelink.notebooks.azure.net
將私人端點新增至工作區
使用下列其中一個方法,將私人端點新增至現有的工作區:
警告
如果您有與此工作區相關聯的任何現有計算目標,而且它們不在與建立私人端點所在相同的虛擬網路中,它們將無法運作。
使用適用於機器學習的 Azure CLI 擴充功能 2.0 CLI 時,請使用 Azure 網路 CLI 命令來為工作區建立私人連結端點。
az network private-endpoint create \
--name <private-endpoint-name> \
--vnet-name <vnet-name> \
--subnet <subnet-name> \
--private-connection-resource-id "/subscriptions/<subscription>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>" \
--group-id amlworkspace \
--connection-name workspace -l <location>
若要建立工作區的私人 DNS 區域項目,請使用下列命令:
# Add privatelink.api.azureml.ms
az network private-dns zone create \
-g <resource-group-name> \
--name 'privatelink.api.azureml.ms'
az network private-dns link vnet create \
-g <resource-group-name> \
--zone-name 'privatelink.api.azureml.ms' \
--name <link-name> \
--virtual-network <vnet-name> \
--registration-enabled false
az network private-endpoint dns-zone-group create \
-g <resource-group-name> \
--endpoint-name <private-endpoint-name> \
--name myzonegroup \
--private-dns-zone 'privatelink.api.azureml.ms' \
--zone-name 'privatelink.api.azureml.ms'
# Add privatelink.notebooks.azure.net
az network private-dns zone create \
-g <resource-group-name> \
--name 'privatelink.notebooks.azure.net'
az network private-dns link vnet create \
-g <resource-group-name> \
--zone-name 'privatelink.notebooks.azure.net' \
--name <link-name> \
--virtual-network <vnet-name> \
--registration-enabled false
az network private-endpoint dns-zone-group add \
-g <resource-group-name> \
--endpoint-name <private-endpoint-name> \
--name myzonegroup \
--private-dns-zone 'privatelink.notebooks.azure.net' \
--zone-name 'privatelink.notebooks.azure.net'
移除私人端點
您可以移除工作區的一個或所有私人端點。 移除私人端點會從該端點相關聯的虛擬網路中移除工作區。 移除私人端點可能會讓工作區無法存取該虛擬網路中的資源,或虛擬網路中的資源無法存取工作區。 例如,如果虛擬網路不允許存取公用網際網路或從公用網際網路存取。
若要移除私人端點,請使用下列資訊:
使用適用於機器學習的 Azure CLI 擴充功能 2.0 CLI 時,請使用下列命令來移除私人端點:
az network private-endpoint delete \
--name <private-endpoint-name> \
--resource-group <resource-group-name> \
啟用公用存取
在某些情況下,您可能想要允許某人透過公用端點 (而不是透過虛擬網路) 連接到您的安全工作區。 或者,您可能想要從虛擬網路中移除工作區,然後重新啟用公用存取。
重要
啟用公用存取並不會移除任何存在的私人端點。 私人端點連接到的 VNet 背後元件之間的所有通訊,仍會受到保護。 除了透過任何私人端點的私人存取之外,它也可讓您僅啟用對工作區的公用存取。
警告
當工作區使用私人端點來與其他資源進行通訊時,透過公用端點進行連線:
- 工作室的某些功能將無法存取您的資料。 當資料儲存在 VNet 後方保護的服務時,就會發生此問題。 例如,Azure 儲存體帳戶。 若要解決此問題,請將用戶端裝置的 IP 位址新增至 Azure 儲存體帳戶的防火牆。
- 不支援在計算執行個體上 (包括執行中的筆記本) 使用 Jupyter、JupyterLab、RStudio 或 Posit Workbench (先前稱為 RStudio Workbench)。
若要啟用公用存取,請使用下列步驟:
提示
您可以設定兩個可能的屬性:
allow_public_access_when_behind_vnet
- Python SDK v1 使用public_network_access
- CLI 和 Python SDK v2 使用的每個屬性都會覆寫另一個屬性。 例如,設定public_network_access
會覆寫任何先前設定為allow_public_access_when_behind_vnet
。
Microsoft 建議使用 public_network_access
來啟用或停用工作區的公用存取。
使用適用於機器學習的 Azure CLI 延伸模組 2.0 CLI 時,請使用 az ml update
命令來移啟用工作區的 public_network_access
:
az ml workspace update \
--set public_network_access=Enabled \
-n <workspace-name> \
-g <resource-group-name>
您也可以使用 YAML 檔案來啟用公用網路存取。 如需詳細資訊,請參閱工作區 YAML 參考。
只從網際網路 IP 範圍啟用公用存取 (預覽)
您可以使用 IP 網路規則,藉由建立 IP 網路規則,允許從特定公用網際網路 IP 位址範圍對工作區和端點進行存取。 每個 Azure Machine Learning 工作區最多可支援 200 個規則。 這些規則可將存取權授與特定的網際網路型服務和內部部署網路,並且封鎖一般網際網路流量。
警告
- 如果您想要允許從特定公用網際網路 IP 位址範圍存取端點,請啟用端點的公用網路存取旗標。
- 當您啟用此功能時,會影響與工作區相關聯的所有現有公用端點。 這可能會限制對新端點或現有端點的存取。 如果您從不允許的 IP 存取任何端點,您會收到 403 錯誤。
- 您只能使用 IPv4 位址。
- 若要搭配 Azure Machine Learning 受控虛擬網路使用此功能,請參閱 Azure Machine Learning 受控虛擬網路。
Azure CLI 不支援啟用來自 IP 範圍的公用存取。
IP 網路規則的限制
下列限制適用於 IP 位址範圍:
只有公用網際網路 IP 位址允許使用 IP 網路規則。
IP 規則中不允許保留的 IP 位址範圍,例如以 10、172.16 到 172.31 和 192.168 開頭的私人位址。
允許的網際網路位址範圍必須使用 16.17.18.0/24 格式的 CIDR 標記法,或 16.17.18.19 等個別 IP 位址來提供。
設定儲存體防火牆規則時僅支援 IPv4 位址。
啟用此功能時,您可以使用任何用戶端工具 (例如 Curl) 來測試公用端點,但不支援入口網站中的端點測試工具。
安全地連線到您的工作區
若要連線到在 VNet 後方保護的工作區,請使用下列其中一種方法:
Azure VPN 閘道 - 透過私人連線將內部部署網路連線到 VNet。 連線是透過公用網際網路所建立。 您可能會使用兩種類型的 VPN 閘道:
ExpressRoute - 透過私人連線將內部部署網路連線到雲端。 連線是透過連線提供者所建立。
Azure Bastion - 在此案例中,您會在 VNet 內建立 Azure 虛擬機器 (有時稱為跳板機)。 然後,您可以使用 Azure Bastion 連線到 VM。 Bastion 可讓您從本機網頁瀏覽器使用 RDP 或 SSH 工作階段連線到 VM。 然後,您可以使用跳板機作為開發環境。 由於其位於 VNet 內,因此可以直接存取工作區。 如需使用 Jumpbox 的範例,請參閱教學課程:建立安全的工作區。
重要
使用 VPN 閘道或 ExpressRoute 時,您將需要規劃在內部部署資源之間與 VNet 中名稱解析的運作方式。 如需詳細資訊,請參閱使用自訂 DNS 伺服器。
如果您在連線到工作區時遇到問題,請參閱為安全工作區連線疑難排解。
多個私人端點
Azure Machine Learning 對工作區支援多個私人端點。 當您想要讓不同環境保持分開時,通常會使用多個私人端點。 以下是使用多個私人端點啟用的一些案例:
不同虛擬網路中的用戶端開發環境。
不同虛擬網路中的 Azure Kubernetes Service (AKS) 叢集。
不同虛擬網路中的其他 Azure 服務。 例如,Azure Synapse 和 Azure Data Factory 可以使用 Microsoft 受控虛擬網路。 無論是哪一種情況,都可以將工作區的私人端點新增至這些服務所使用的受控虛擬網路。 如需使用受控虛擬網路搭配這些服務的詳細資訊,請參閱下列文章:
重要
Synapse 的資料外流保護未使用 Azure Machine Learning 支援。
重要
包含私人端點做為工作區的每個 VNet 也必須能夠存取工作區所使用的 Azure 儲存體帳戶、Azure Key Vault 和 Azure Container Registry。 例如,您可能會每個 VNet 中的服務建立私人端點。
新增多個私人端點會使用的步驟,與將私人端點新增至工作區一節中所述的步驟相同。
案例:隔離式用戶端
如果您想要隔離開發用戶端,使其無法直接存取 Azure Machine Learning 所使用的計算資源,請使用下列步驟:
注意
這些步驟假設您有現有的工作區、Azure 儲存體帳戶、Azure Key Vault 和 Azure Container Registry。 這些服務的每一項在現有 VNet 中都有私人端點。
- 為用戶端建立另一個虛擬網路。 此虛擬網路可能包含作為用戶端的 Azure 虛擬機器,也可能包含內部部署用戶端用來連線到虛擬網路的 VPN 閘道。
- 為您的工作區所使用的 Azure 儲存體帳戶、Azure Key Vault 和 Azure Container Registry 新增私人端點。 這些私人端點應該存在於用戶端虛擬網路中。
- 如果您有工作區使用的另一個儲存體,請為該儲存體新增私人端點。 私人端點應該存在於用戶端虛擬網路中,並啟用私人 DNS 區域整合。
- 將新的私人端點新增至您的工作區。 此私人端點應該存在於用戶端虛擬網路中,並啟用私人 DNS 區域整合。
- 若要讓 Azure Machine Learning 工作室可以存取儲存體帳戶,請參閱在虛擬網路中使用工作室一文。
下圖說明此設定。 工作負載虛擬網路包含工作區針對定型與部署所建立的計算資源。 用戶端虛擬網路包含用戶端或用戶端 ExpressRoute/VPN 連線。 這兩個 VNet 都包含工作區的私人端點、Azure 儲存體帳戶、Azure Key Vault 和 Azure Container Registry。
案例:隔離式 Azure Kubernetes Service
如果您想要建立工作區使用的隔離式 Azure Kubernetes Service,請使用下列步驟:
注意
這些步驟假設您有現有的工作區、Azure 儲存體帳戶、Azure Key Vault 和 Azure Container Registry。 這些服務的每一項在現有 VNet 中都有私人端點。
- 建立 Azure Kubernetes Service 執行個體。 在建立期間,AKS 會建立包含 AKS 叢集的虛擬網路。
- 為您的工作區所使用的 Azure 儲存體帳戶、Azure Key Vault 和 Azure Container Registry 新增私人端點。 這些私人端點應該存在於用戶端虛擬網路中。
- 如果您有工作區使用的其他儲存體,請為該儲存體新增私人端點。 私人端點應該存在於用戶端虛擬網路中,並啟用私人 DNS 區域整合。
- 將新的私人端點新增至您的工作區。 此私人端點應該存在於用戶端虛擬網路中,並啟用私人 DNS 區域整合。
- 將 AKS 叢集連結至 Azure Machine Learning 工作區。 如需詳細資訊,請參閱建立和連結 Azure Kubernetes Service 叢集。