設定 Azure Machine Learning 工作區的私人端點

適用於:Azure CLI ML 延伸模組第 2 版 (目前)

在此文件中,您將了解如何為您的 Azure Machine Learning 工作區設定私人端點。 如需建立 Azure Machine Learning 的虛擬網路的相關資訊,請參閱虛擬網路隔離和隱私權概觀

Azure Private Link 可讓您使用私人端點連接到工作區。 私人端點是虛擬網路內的一組私人 IP 位址。 然後,您可以將對工作區的存取權限制為只透過私人 IP 位址進行。 私人端點有助於降低資料外流的風險。 若要深入了解私人端點,請參閱 Azure Private Link 一文。

警告

使用私人端點保護工作區本身無法確保端對端安全性。 您必須保護解決方案的所有個別元件。 例如,如果您使用私人端點做為工作區,但您的 Azure 儲存體帳戶不在 VNet 後方,則工作區和儲存體之間的流量不會使用 VNet 來獲得安全性。

如需保護 Azure Machine Learning 所使用資源的詳細資訊,請參閱下列文章:

必要條件

  • 您必須擁有現有的虛擬網路,才能在其中建立私人端點。

    重要

    不建議針對 VNet 使用 172.17.0.0/16 IP 位址範圍。 這是 Docker 橋接器網路所使用的預設子網路範圍。 根據您想要連線至虛擬網路的內容,其他範圍也可能會衝突。 例如,如果您打算將您的內部部署網路連線至 VNet,而且您的內部部署網路也會使用 172.16.0.0/16 範圍。 最後,「您」必須規劃網路基礎結構。

  • 在新增私人端點之前,請先停用私人端點的網路原則

限制

  • 如果您針對使用私人端點保護的工作區啟用公用存取,並透過公用網際網路使用 Azure Machine Learning 工作室,則某些功能 (例如設計工具) 可能會無法存取您的資料。 當資料儲存在 VNet 後方保護的服務時,就會發生此問題。 例如,Azure 儲存體帳戶。

  • 如果您使用 Mozilla Firefox,在嘗試存取工作區的私人端點時可能會遇到問題。 此問題可能與 Mozilla Firefox 中透過 HTTPS 的 DNS 有關。 建議您使用 Microsoft Edge 或 Google Chrome。

  • 使用私人端點並不會影響 Azure 控制平面 (管理作業),例如刪除工作區或管理計算資源。 例如,建立、更新或刪除計算目標。 這些作業會正常地透過公用網際網路執行。 資料平面作業 (例如使用 Azure Machine Learning 工作室)、API (包括已發佈的管線),或 SDK 都會使用私人端點。

  • 在具有私人端點的工作區中建立計算執行個體或計算叢集時,計算執行個體和計算叢集必須位於與工作區相同的 Azure 區域中。

  • 將 Azure Kubernetes Service 叢集連結至具有私人端點的工作區時,該叢集必須位於與工作區相同的區域中。

  • 使用具有多個私人端點的工作區時,其中一個私人端點必須與下列相依性服務位於相同的 VNet 中:

    • 為工作區提供預設儲存體的 Azure 儲存體帳戶
    • 工作區的 Azure Key Vault
    • 工作區的 Azure Container Registry。

    例如,一個 VNet (「服務」VNet) 會包含用於相依性服務和工作區的私人端點。 此設定可讓工作區與服務通訊。 另一個 VNet (「用戶端」) 可能只包含用於工作區的私人端點,而且只能用於用戶端開發電腦和工作區之間的通訊。

建立使用私人端點的工作區

使用下列其中一個方法來建立具有私人端點的工作區。 這兩種方法都需要現有的虛擬網路

提示

如果您想要同時建立工作區、私人端點和虛擬網路,請參閱使用 Azure Resource Manager 範本來建立 Azure Machine Learning 的工作區

適用於:Azure CLI ml 延伸模組 v2 (目前)

使用適用於機器學習的 Azure CLI 擴充功能 2.0 CLI 時,會使用 YAML 文件來設定工作區。 以下範例示範使用 YAML 設定來建立新工作區:

提示

使用私人連結時,您的工作區無法將 Azure Container Registry 工作計算用於建置映像。 此設定中的 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 ml 延伸模組 v2 (目前)

使用適用於機器學習的 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'

移除私人端點

您可以移除工作區的一個或所有私人端點。 移除私人端點會從與端點相關聯的 VNet 中移除工作區。 移除私人端點可能會讓工作區無法存取該 VNet 中的資源,或 VNet 中的資源無法存取工作區。 例如,如果 VNet 不允許存取公用網際網路或從公用網際網路存取。

警告

移除工作區的私人端點並不會讓它可公開存取。 若要讓工作區可供公開存取,請使用 [啟用公用存取] 區段中的步驟。

若要移除私人端點,請使用下列資訊:

適用於:Azure CLI ml 延伸模組 v2 (目前)

使用適用於機器學習的 Azure CLI 擴充功能 2.0 CLI 時,請使用下列命令來移除私人端點:

az network private-endpoint delete \
    --name <private-endpoint-name> \
    --resource-group <resource-group-name> \

啟用公用存取

在某些情況下,您可能想要允許某人透過公用端點 (而不是透過 VNet) 連接到您的安全工作區。 或者,您可能想要從 VNet 中移除工作區,然後重新啟用公用存取。

重要

啟用公用存取並不會移除任何存在的私人端點。 私人端點連接到的 VNet 背後元件之間的所有通訊,仍會受到保護。 除了透過任何私人端點的私人存取之外,它也可讓您僅啟用對工作區的公用存取。

警告

當工作區使用私人端點來與其他資源進行通訊時,透過公用端點進行連線:

  • 工作室的某些功能將無法存取您的資料。 當資料儲存在 VNet 後方保護的服務時,就會發生此問題。 例如,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 ml 延伸模組 v2 (目前)

使用適用於機器學習的 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 參考

安全地連線到您的工作區

若要連線到在 VNet 後方保護的工作區,請使用下列其中一種方法:

  • Azure VPN 閘道 - 透過私人連線將內部部署網路連線到 VNet。 連線是透過公用網際網路所建立。 您可能會使用兩種類型的 VPN 閘道:

    • 點對站:每部用戶端電腦都會使用 VPN 用戶端連線到 VNet。
    • 站對站:VPN 裝置會將 VNet 連線到您的內部部署網路。
  • ExpressRoute - 透過私人連線將內部部署網路連線到雲端。 連線是透過連線提供者所建立。

  • Azure Bastion - 在此案例中,您會在 VNet 內建立 Azure 虛擬機器 (有時稱為跳板機)。 然後,您可以使用 Azure Bastion 連線到 VM。 Bastion 可讓您從本機網頁瀏覽器使用 RDP 或 SSH 工作階段連線到 VM。 然後,您可以使用跳板機作為開發環境。 由於其位於 VNet 內,因此可以直接存取工作區。 如需使用 Jumpbox 的範例,請參閱教學課程:建立安全的工作區

重要

使用 VPN 閘道ExpressRoute 時,您將需要規劃在內部部署資源之間與 VNet 中名稱解析的運作方式。 如需詳細資訊,請參閱使用自訂 DNS 伺服器

如果您在連線到工作區時遇到問題,請參閱為安全工作區連線疑難排解

多個私人端點

Azure Machine Learning 對工作區支援多個私人端點。 當您想要讓不同環境保持分開時,通常會使用多個私人端點。 以下是使用多個私人端點啟用的一些案例:

  • 不同 VNet 中的用戶端開發環境。

  • 不同 VNet 中的 Azure Kubernetes Service (AKS) 叢集。

  • 不同 VNet 中的其他 Azure 服務。 例如,Azure Synapse 和 Azure Data Factory 可以使用 Microsoft 受控虛擬網路。 無論是哪一種情況,都可以將工作區的私人端點新增至這些服務所使用的受控 VNet。 如需使用受控虛擬網路搭配這些服務的詳細資訊,請參閱下列文章:

    重要

    Synapse 的資料外流保護未使用 Azure Machine Learning 支援。

重要

包含私人端點做為工作區的每個 VNet 也必須能夠存取工作區所使用的 Azure 儲存體帳戶、Azure Key Vault 和 Azure Container Registry。 例如,您可能會每個 VNet 中的服務建立私人端點。

新增多個私人端點會使用的步驟,與將私人端點新增至工作區一節中所述的步驟相同。

案例:隔離式用戶端

如果您想要隔離開發用戶端,使其無法直接存取 Azure Machine Learning 所使用的計算資源,請使用下列步驟:

注意

這些步驟假設您有現有的工作區、Azure 儲存體帳戶、Azure Key Vault 和 Azure Container Registry。 這些服務的每一項在現有 VNet 中都有私人端點。

  1. 為用戶端建立另一個 VNet。 此 VNet 可能包含作為用戶端的 Azure 虛擬機器,也可能包含內部部署用戶端用來連線到 VNet 的 VPN 閘道。
  2. 為您的工作區所使用的 Azure 儲存體帳戶、Azure Key Vault 和 Azure Container Registry 新增私人端點。 這些私人端點應該存在於用戶端 VNet 中。
  3. 如果您有工作區使用的另一個儲存體,請為該儲存體新增私人端點。 私人端點應該存在於用戶端 VNet 中,並啟用私人 DNS 區域整合。
  4. 將新的私人端點新增至您的工作區。 此私人端點應該存在於用戶端 VNet 中,並啟用私人 DNS 區域整合。
  5. 使用在虛擬網路中使用工作室文章中的步驟,讓工作室存取儲存體帳戶。

下圖說明此設定。 工作負載 VNet 包含工作區針對定型 & 部署所建立的計算。 用戶端 VNet 包含用戶端或用戶端 ExpressRoute/VPN 連線。 這兩個 VNet 都包含工作區的私人端點、Azure 儲存體帳戶、Azure Key Vault 和 Azure Container Registry。

隔離式用戶端 VNet 的圖表

案例:隔離式 Azure Kubernetes Service

如果您想要建立工作區使用的隔離式 Azure Kubernetes Service,請使用下列步驟:

注意

這些步驟假設您有現有的工作區、Azure 儲存體帳戶、Azure Key Vault 和 Azure Container Registry。 這些服務的每一項在現有 VNet 中都有私人端點。

  1. 建立 Azure Kubernetes Service 執行個體。 在建立期間,AKS 會建立包含 AKS 叢集的 VNet。
  2. 為您的工作區所使用的 Azure 儲存體帳戶、Azure Key Vault 和 Azure Container Registry 新增私人端點。 這些私人端點應該存在於用戶端 VNet 中。
  3. 如果您有工作區使用的其他儲存體,請為該儲存體新增私人端點。 私人端點應該存在於用戶端 VNet 中,並啟用私人 DNS 區域整合。
  4. 將新的私人端點新增至您的工作區。 此私人端點應該存在於用戶端 VNet 中,並啟用私人 DNS 區域整合。
  5. 將 AKS 叢集連結至 Azure Machine Learning 工作區。 如需詳細資訊,請參閱建立和連結 Azure Kubernetes Service 叢集

隔離式 AKS VNet 的圖表

後續步驟