使用虛擬網路保護 Azure Machine Learning 定型環境

適用於Python SDK azure-ai-ml v2 (目前)

Azure Machine Learning 計算實例和計算叢集可用來安全地定型 Azure 虛擬網路中的模型。 規劃環境時,您可以使用或不使用公用 IP 位址來設定計算實例/叢集。 兩者之間的一般差異如下:

  • 沒有公用 IP:降低成本,因為它沒有相同的網路資源需求。 藉由移除來自網際網路的輸入流量需求來改善安全性。 不過,在 Azure Active Directory、Azure Resource Manager等) 啟用必要 (資源的輸出存取權時,還需要進行額外的設定變更。
  • 公用 IP:預設可運作,但會因為額外的 Azure 網路資源而產生更多成本。 需要透過公用網際網路從 Azure Machine Learning 服務進行輸入通訊。

下表包含這些組態之間的差異:

組態 使用公用 IP 沒有公用 IP
輸入流量 AzureMachineLearning 服務標籤。
輸出流量 根據預設,可以存取沒有限制的公用網際網路。
您可以使用網路安全性群組或防火牆來限制其存取的內容。
根據預設,可以使用 Azure 所提供的 預設輸出存取 來存取公用網路。
如果您需要將輸出流量路由傳送至網際網路上所需的資源,建議您改用虛擬網路 NAT 閘道或防火牆。
Azure 網路資源 公用 IP 位址、負載平衡器、網路介面

您也可以使用 Azure Databricks 或 HDInsight 在虛擬網路中定型模型。

提示

Azure Machine Learning 也提供 受控虛擬網路 (預覽) 。 透過受控虛擬網路,Azure Machine Learning 會處理工作區和受控計算的網路隔離作業。 您也可以為工作區所需的資源新增私人端點,例如 Azure 儲存體帳戶。

目前,受控虛擬網路預覽 不支援 計算資源的公用 IP 組態。 如需詳細資訊,請參閱工作區受管理的網路隔離

重要

本文中標示為 (預覽) 的項目目前處於公開預覽狀態。 此預覽版本會在沒有服務等級協定的情況下提供,不建議用於實際執行工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

本文是關於保護 Azure Machine Learning 工作流程系列文章的一部分。 請參閱本系列的其他文章:

如需關於建立安全工作區的教學課程,請參閱教學課程:建立安全工作區教學課程:使用範本建立安全工作區

在本文中,您將了解如何在虛擬網路中保護下列訓練計算資源:

  • Azure Machine Learning 計算叢集
  • Azure Machine Learning 計算執行個體
  • Azure Databricks
  • 虛擬機器
  • HDInsight 叢集

必要條件

  • 請參閱網路安全性概觀,以了解常見的虛擬網路情節和整體虛擬網路架構。

  • 用於計算資源的現有虛擬網路和子網路。 此 VNet 必須與 Azure Machine Learning 工作區位於相同的訂用帳戶中。

    • 建議您將工作區所使用的儲存體帳戶和訓練作業放在您打算用於計算實例和叢集的相同 Azure 區域中。 如果它們不在相同的 Azure 區域中,您可能會產生資料傳輸成本並增加網路延遲。
    • 請確定 VNet 中的 *.instances.azureml.net*.instances.azureml.ms 允許使用 WebSocket 通訊。 Jupyter 會在計算執行個體上使用 WebSocket。
  • 虛擬網路中的現有子網。 建立計算實例和叢集時,會使用此子網。

    • 請確定子網未委派給其他 Azure 服務。
    • 請確定子網包含足夠的可用 IP 位址。 每個計算實例都需要一個 IP 位址。 計算叢集中的每個 節點 都需要一個 IP 位址。
  • 如果您有自己的 DNS 伺服器,建議您使用 DNS 轉送來解析計算實例和叢集 (FQDN) 的完整功能變數名稱。 如需詳細資訊,請參閱 搭配 Azure Machine Learning 使用自訂 DNS

  • 若要將資源部署到虛擬網路或子網路,在 Azure 角色型存取控制 (Azure RBAC) 中,您的使用者帳戶必須具有下列動作的權限:

    • 虛擬網路資源上的 "Microsoft.Network/virtualNetworks/*/read"。 Azure Resource Manager (ARM) 範本部署不需要此權限。
    • 子網路資源上的 "Microsoft.Network/virtualNetworks/subnet/join/action"。

    如需 Azure RBAC 搭配網路的詳細資訊,請參閱網路內建角色

限制

  • 您可以在工作區以外的區域中建立計算叢集。 這項功能目前為預覽版本,且僅適用於計算叢集,而非計算執行個體。 使用不同區域來建立叢集時,須遵循下列限制:

    • 如果工作區相關聯的資源 (例如儲存體) 與叢集位於不同的虛擬網路中,請設定網路之間的全域虛擬網路對等互連。 如需詳細資訊,請參閱虛擬網路對等互連
    • 您可能會看到增加的網路延遲和資料傳輸成本。 建立叢集以及在叢集上執行作業時,可能會產生延遲和成本。

    使用與工作區不同的區域時,NSG 規則、使用者定義路由及輸入/輸出需求等等的使用指引則一如往常。

    警告

    如果您使用啟用私人端點的工作區,則不支援在不同區域中建立叢集。

  • Azure Lighthouse 不支援虛擬網路中的計算叢集/實例部署。

不含公用 IP 的計算實例/叢集

重要

如果您已在未加入宣告預覽的情況下,使用未針對任何公用 IP 設定的計算實例或計算叢集,則必須在 2023 年 1 月 20 日之後刪除並重新建立這些實例, (功能正式推出時) 。

如果您先前使用沒有公用 IP 的預覽版,您可能也需要修改允許輸入和輸出的流量,因為需求已變更正式運作:

  • 輸出需求 - 兩個額外的輸出,僅用於計算實例和叢集的管理。 這些服務標籤的目的地是由 Microsoft 所擁有:
    • AzureMachineLearning UDP 埠 5831 上的服務標籤。
    • BatchNodeManagement TCP 埠 443 上的服務標籤。

除了必要條件 一節所列 的組態之外,下列組態也專屬於 建立 未設定為公用 IP 的計算實例/叢集:

  • 您必須針對計算資源使用工作區私人端點,才能從 VNet 與 Azure Machine Learning 服務通訊。 如需詳細資訊,請參閱設定 Azure Machine Learning 工作區的私人端點

  • 在您的 VNet 中 ,允許輸出 流量流向下列服務標籤或完整功能變數名稱, (FQDN) :

    服務標籤 通訊協定 連接埠 備註
    AzureMachineLearning TCP
    UDP
    443/8787/18881
    5831
    與 Azure Machine Learning 服務通訊。
    BatchNodeManagement.<region> ANY 443 將 取代 <region> 為包含 Azure Machine Learning 工作區的 Azure 區域。 與Azure Batch通訊。 計算實例和計算叢集是使用 Azure Batch 服務來實作。
    Storage.<region> TCP 443 將 取代 <region> 為包含 Azure Machine Learning 工作區的 Azure 區域。 此服務標籤可用來與Azure Batch所使用的 Azure 儲存體帳戶通訊。

    重要

    的輸出存取 Storage.<region> 可能用來從工作區外泄資料。 您可以使用服務端點原則以減輕此弱點。 如需詳細資訊,請參閱 Azure Machine Learning 資料外流保護一文。

    FQDN 通訊協定 連接埠 備註
    <region>.tundra.azureml.ms UDP 5831 將 取代 <region> 為包含 Azure Machine Learning 工作區的 Azure 區域。
    graph.windows.net TCP 443 與 Microsoft 圖形 API通訊。
    *.instances.azureml.ms TCP 443/8787/18881 與 Azure Machine Learning 通訊。
    *.<region>.batch.azure.com ANY 443 將 取代 <region> 為包含 Azure Machine Learning 工作區的 Azure 區域。 與Azure Batch通訊。
    *.<region>.service.batch.azure.com ANY 443 將 取代 <region> 為包含 Azure Machine Learning 工作區的 Azure 區域。 與Azure Batch通訊。
    *.blob.core.windows.net TCP 443 與 Azure Blob 儲存體通訊。
    *.queue.core.windows.net TCP 443 與 Azure 佇列儲存體通訊。
    *.table.core.windows.net TCP 443 與 Azure 資料表儲存體通訊。
  • 根據預設,針對沒有公用 IP 設定的計算實例/叢集沒有網際網路的輸出存取權。 如果 您可以從 網際網路存取網際網路,這是因為 Azure 預設的輸出存取 ,而且您有一個 NSG 可允許輸出到網際網路。 不過, 我們不建議 使用預設的輸出存取。 如果您需要網際網路的輸出存取權,建議您改用防火牆和輸出規則或 NAT 閘道和網路服務群組來允許輸出流量。

    如需 Azure Machine Learning 所使用輸出流量的詳細資訊,請參閱下列文章:

    如需可與 Azure 防火牆搭配使用之服務標籤的詳細資訊,請參閱虛擬網路服務標籤一文。

使用下列資訊來建立沒有公用 IP 位址的計算實例或叢集:

在 命令中 az ml compute create ,取代下列值:

  • rg:將建立計算的資源群組。
  • ws:Azure Machine Learning 工作區名稱。
  • yourvnet:Azure 虛擬網路。
  • yoursubnet:要用於計算的子網。
  • AmlComputeComputeInstance :指定 AmlCompute 建立 計算叢集ComputeInstance 會建立 計算實例
# create a compute cluster with no public IP
az ml compute create --name cpu-cluster --resource-group rg --workspace-name ws --vnet-name yourvnet --subnet yoursubnet --type AmlCompute --set enable_node_public_ip=False

# create a compute instance with no public IP
az ml compute create --name myci --resource-group rg --workspace-name ws --vnet-name yourvnet --subnet yoursubnet --type ComputeInstance --set enable_node_public_ip=False

使用公用 IP 計算實例/叢集

下列組態除了必要 條件 一節所列的組態之外,也特別適用于 建立 具有公用 IP 的計算實例/叢集:

  • 如果您將多個計算實例/叢集放在一個虛擬網路中,您可能需要要求增加一或多個資源的配額。 Machine Learning 計算執行個體或叢集會自動將網路資源配置在包含虛擬網路的資源群組中。 針對每個計算執行個體或叢集,服務會配置下列資源:

    • 系統會自動建立網路安全性群組 (NSG) 。 此 NSG 允許來自 AzureMachineLearning 服務標籤的埠 44224 上的輸入 TCP 流量。

      重要

      計算執行個體和計算叢集會自動建立包含必要規則的 NSG。

      如果子網路層級有另一個 NSG,子網路層級 NSG 中的規即不得與自動建立 NSG 中的規則衝突。

      若要了解 NSG 如何篩選網路流量,請參閱網路安全性群組如何篩選網路流量

    • 一個負載平衡器

    若是計算叢集,每次叢集縮小為 0 個節點時,這些資源就會刪除,而擴大時則會建立這些資源。

    若是計算執行個體,這些資源則會保留到刪除執行個體為止。 停止執行個體並不會移除資源。

    重要

    這些資源會被訂用帳戶的資源配額所限制。 如果虛擬網路資源群組遭到鎖定,則刪除計算叢集/執行個體將會失敗。 在刪除計算叢集/執行個體之前,將無法刪除負載平衡器。 此外,請確定沒有任何 Azure 原則指派會禁止建立網路安全性群組。

  • 在您的 VNet 中,允許來自 AzureMachineLearning 服務標籤的埠44224上的輸入TCP 流量。

    重要

    建立計算實例/叢集時,會動態指派 IP 位址。 由於建立之前不知道位址,而且在建立過程中需要輸入存取權,因此您無法在防火牆上以靜態方式指派該位址。 相反地,如果您使用具有 VNet 的防火牆,則必須建立使用者定義的路由,以允許此輸入流量。

  • 在您的 VNet 中 ,允許輸出 流量傳送至下列服務標籤:

    服務標籤 通訊協定 連接埠 備註
    AzureMachineLearning TCP
    UDP
    443/8787/18881
    5831
    與 Azure Machine Learning 服務通訊。
    BatchNodeManagement.<region> ANY 443 將 取代 <region> 為包含 Azure Machine Learning 工作區的 Azure 區域。 與Azure Batch通訊。 計算實例和計算叢集是使用 Azure Batch 服務來實作。
    Storage.<region> TCP 443 將 取代 <region> 為包含 Azure Machine Learning 工作區的 Azure 區域。 此服務標籤可用來與Azure Batch所使用的 Azure 儲存體帳戶通訊。

    重要

    的輸出存取 Storage.<region> 可能會用來從工作區外泄資料。 您可以使用服務端點原則以減輕此弱點。 如需詳細資訊,請參閱 Azure Machine Learning 資料外流保護一文。

    FQDN 通訊協定 連接埠 備註
    <region>.tundra.azureml.ms UDP 5831 將 取代 <region> 為包含 Azure Machine Learning 工作區的 Azure 區域。
    graph.windows.net TCP 443 與 Microsoft 圖形 API通訊。
    *.instances.azureml.ms TCP 443/8787/18881 與 Azure Machine Learning 通訊。
    *.<region>.batch.azure.com ANY 443 將 取代 <region> 為包含 Azure Machine Learning 工作區的 Azure 區域。 與Azure Batch通訊。
    *.<region>.service.batch.azure.com ANY 443 將 取代 <region> 為包含 Azure Machine Learning 工作區的 Azure 區域。 與Azure Batch通訊。
    *.blob.core.windows.net TCP 443 與 Azure Blob 儲存體通訊。
    *.queue.core.windows.net TCP 443 與 Azure 佇列儲存體通訊。
    *.table.core.windows.net TCP 443 與 Azure 資料表儲存體通訊。

使用下列資訊來建立具有 VNet 中公用 IP 位址的計算實例或叢集:

在 命令中 az ml compute create ,取代下列值:

  • rg:將建立計算的資源群組。
  • ws:Azure Machine Learning 工作區名稱。
  • yourvnet:Azure 虛擬網路。
  • yoursubnet:要用於計算的子網。
  • AmlComputeComputeInstance :指定 AmlCompute 會建立 計算叢集ComputeInstance 會建立 計算實例
# create a compute cluster with a public IP
az ml compute create --name cpu-cluster --resource-group rg --workspace-name ws --vnet-name yourvnet --subnet yoursubnet --type AmlCompute

# create a compute instance with a public IP
az ml compute create --name myci --resource-group rg --workspace-name ws --vnet-name yourvnet --subnet yoursubnet --type ComputeInstance

Azure Databricks

  • 虛擬網路必須在與 Azure Machine Learning 工作區相同的訂用帳戶和區域中。
  • 如果工作區的 Azure 儲存體帳戶也在虛擬網路中受到保護,則這些帳戶必須位於與 Azure Databricks 叢集相同的虛擬網路中。
  • 除了 Azure Databricks 所使用的 databricks-privatedatabricks-public 子網路外,還需要有針對虛擬網路所建立的預設子網路。
  • Azure Databricks 不會使用私人端點來與虛擬網路通訊。

如需搭配虛擬網路使用 Azure Databricks 的特定資訊,請參閱在 Azure 虛擬網路中部署 Azure Databricks

虛擬機器或 HDInsight 叢集

在本節中,您會了解如何在虛擬網路中搭配您的工作區使用虛擬機器或 Azure HDInsight 叢集。

建立 VM 或 HDInsight 叢集

重要

Azure Machine Learning 僅支援執行 Ubuntu 的虛擬機器。

透過使用 Azure 入口網站或 Azure CLI 來建立 VM 或 HDInsight 叢集,並將叢集放在 Azure 虛擬網路中。 如需詳細資訊,請參閱下列文章:

設定網路連接埠

若要讓 Azure Machine Learning 能夠與 VM 或叢集上的 SSH 連接埠通訊,請設定網路安全性群組的來源項目。 SSH 連接埠通常是連接埠 22。 若要允許來自此來源的流量,請執行下列動作:

  1. 在 [來源] 下拉式清單中選取 [服務標籤]。

  2. 在 [來源服務標籤] 下拉式清單中選取 [AzureMachineLearning]。

    用於對虛擬網路內的 VM 或 HDInsight 叢集進行測試的輸入規則

  3. 在 [來源連接埠範圍] 下拉式清單中選取 [*]。

  4. 在 [目的地] 下拉式清單中選取 [任何]。

  5. 在 [目的地連接埠範圍] 下拉式清單中選取 [22]。

  6. 在 [通訊協定] 底下選取 [任何]。

  7. 在 [動作] 底下選取 [允許]。

請保留網路安全性群組的預設輸出規則。 如需詳細資訊,請參閱安全性群組中的預設安全性規則一節。

如果您不想要使用預設輸出規則,而是想要限制虛擬網路的輸出存取,請參閱必要的公用網際網路存取一節。

連結 VM 或 HDInsight 叢集

將 VM 或 HDInsight 叢集連結至 Azure Machine Learning 工作區。 如需詳細資訊,請參閱在 Studio 中管理模型定型和部署的計算資源

定型模型所需的公用網際網路存取

重要

雖然本文先前各節說明 建立 計算資源所需的設定,但本節中的組態 資訊需要使用這些 資源來定型模型。

Azure Machine Learning 需要對公用網際網路進行輸入和輸出存取。 下表提供必要存取權的概觀及其用途。 如果服務標籤以 .region 結尾,請將 region 換成您的工作區所在的 Azure 區域。 例如,Storage.westus

提示

必要的索引標籤會列出必要的輸入和輸出組態。 情況索引標籤會列出您想要啟用的特定組態所需的選擇性輸入和輸出組態。

方向 協定 &
連接埠
服務標籤 目的
輸出 TCP:80、443 AzureActiveDirectory 使用 Azure AD 進行驗證。
輸出 TCP:443、18881
UDP:5831
AzureMachineLearning 使用 Azure Machine Learning 服務。
筆記本中的 Python Intellisense 使用埠 18881。
建立、更新和刪除 Azure Machine Learning 計算實例會使用埠 5831。
輸出 ANY:443 BatchNodeManagement.region Azure Machine Learning 計算實例/叢集的Azure Batch後端通訊。
輸出 TCP:443 AzureResourceManager 使用 Azure Machine Learning、Azure CLI 和 Azure Machine Learning SDK 建立 Azure 資源。
輸出 TCP:443 Storage.region 存取儲存在 Azure 儲存體帳戶中的資料,以取得計算叢集和計算執行個體。 如需防止此輸出外泄資料的資訊,請參閱 資料外泄保護
輸出 TCP:443 AzureFrontDoor.FrontEnd
* Azure 中國不需要。
Azure Machine Learning 工作室的全域進入點。 儲存 AutoML 的映像和環境。 如需防止此輸出外泄資料的資訊,請參閱 資料外泄保護
輸出 TCP:443 MicrosoftContainerRegistry.region
請注意 ,此標籤相依 AzureFrontDoor.FirstParty 于 標記
存取 Microsoft 提供的 Docker 映像。 設定 Azure Kubernetes Service 的 Azure Machine Learning 路由器。

提示

如果您需要 IP 位址而非服務標籤,請使用下列其中一個選項:

IP 位址可能定期變更。

您可能也需要允許輸出流量流向 Visual Studio Code 和非 Microsoft 網站,以安裝機器學習專案所需的封裝。 下表列出機器學習常用的存放庫:

主機名稱 目的
anaconda.com
*.anaconda.com
用來安裝預設封裝。
*.anaconda.org 用來取得存放庫資料。
pypi.org 用來列出來自預設索引的相依性 (如果有的話),而且使用者設定不會覆寫索引。 如果覆寫索引,您也必須允許 *.pythonhosted.org
cloud.r-project.org 安裝適用於 R 開發的 CRAN 封裝時使用。
*pytorch.org 由基於 PyTorch 的一些範例使用。
*.tensorflow.org 由基於 Tensorflow 的一些範例使用。
code.visualstudio.com 需要下載並安裝Visual Studio Code桌面。 Visual Studio Code Web 不需要這樣做。
update.code.visualstudio.com
*.vo.msecnd.net
用來擷取透過安裝腳本安裝在計算實例上的伺服器位Visual Studio Code。
marketplace.visualstudio.com
vscode.blob.core.windows.net
*.gallerycdn.vsassets.io
需要下載並安裝Visual Studio Code延伸模組。 這些主機會啟用 Azure ML 擴充功能針對 Visual Studio Code 所提供的計算實例遠端連線。 如需詳細資訊,請參閱在 Visual Studio Code 中連線至 Azure Machine Learning 計算執行個體
raw.githubusercontent.com/microsoft/vscode-tools-for-ai/master/azureml_remote_websocket_server/* 用來擷取安裝在計算執行個體上的 websocket 伺服器位元。 websocket 伺服器用來將 Visual Studio Code 用戶端 (桌面應用程式) 的要求,傳輸至計算執行個體上執行的 Visual Studio Code 伺服器。

注意

使用 Azure Machine Learning VS Code 擴充 功能時,遠端計算實例將需要存取公用存放庫,才能安裝擴充功能所需的套件。 如果計算實例需要 Proxy 才能存取這些公用存放庫或網際網路,您必須在計算實例的檔案中 ~/.bashrc 設定和匯出 HTTP_PROXYHTTPS_PROXY 環境變數。 此程式可以使用 自訂腳本在布建時自動化。

使用 Azure Kubernetes Service (AKS) 搭配 Azure Machine Learning 時,請允許下列流量流向 AKS VNet:

如需使用防火牆解決方案的相關資訊,請參閱搭配 Azure Machine Learning 使用防火牆

後續步驟

本文是關於保護 Azure Machine Learning 工作流程系列文章的一部分。 請參閱本系列的其他文章: