使用虛擬網路保護 Azure Machine Learning 訓練環境 (SDKv1)

適用於:Python SDK azureml 第 1 版

在本文中,您將了解如何使用 Python SDK v1,在 Azure Machine Learning 中使用虛擬網路來保護訓練環境。

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

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

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

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

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

提示

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

注意

如需使用 Azure Machine Learning 工作室 和 Python SDK v2 的相關資訊,請參閱 保護訓練環境 (v2)

如需關於建立安全工作區的教學課程,請參閱教學課程:在 Azure 入口網站中建立安全工作區教學課程:使用範本建立安全工作區

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

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

重要

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

必要條件

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

  • 用於計算資源的現有虛擬網路和子網路。 此 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 搭配網路的詳細資訊,請參閱網路內建角色

限制

Azure Machine Learning 計算叢集/執行個體

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

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

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

    警告

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

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

Azure Databricks

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

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

Azure HDInsight 或虛擬機器

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

不含公用 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 資料表儲存體通訊。
  • 建立防火牆和輸出規則或 NAT 閘道和網路服務群組,以允許輸出流量。 由於計算沒有公用 IP 位址,因此無法在沒有此設定的情況下與公用網際網路上的資源通訊。 例如,它無法與 Azure Active Directory 或 Azure Resource Manager通訊。 從公用來源安裝 Python 套件也需要此設定。

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

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

若要建立不含公用 IP 的計算實例或計算叢集,請使用 Azure Machine Learning 工作室 UI 來建立資源:

  1. 登入Azure Machine Learning 工作室,然後選取您的訂用帳戶和工作區。

  2. 從左側導覽列中選取 [ 計算 ] 頁面。

  3. 從計算實例或計算叢集的導覽列中選取 [+ 新增 ]。

  4. 設定您需要的 VM 大小和設定,然後選取 [ 下一步]。

  5. 從 [ 進階設定] 中,選取 [ 啟用虛擬網路]、您的虛擬網路和子網,最後選取 [VNet/子網] 區段下的 [沒有公用 IP ] 選項。

    如何為計算實例和計算叢集設定任何公用 IP 的螢幕擷取畫面。

提示

您也可以使用適用于 ML v2 的 Azure Machine Learning SDK v2 或 Azure CLI 擴充功能。 如需建立不含公用 IP 的計算實例或叢集的相關資訊,請參閱 保護 Azure Machine Learning 訓練環境的 v2 版本一文。

具有公用 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 資料表儲存體通訊。

適用於:Python SDK azureml 第 1 版

import datetime
import time

from azureml.core.compute import ComputeTarget, ComputeInstance
from azureml.core.compute_target import ComputeTargetException

# Choose a name for your instance
# Compute instance name should be unique across the azure region
compute_name = "ci{}".format(ws._workspace_id)[:10]

# Verify that instance does not exist already
try:
    instance = ComputeInstance(workspace=ws, name=compute_name)
    print('Found existing instance, use it.')
except ComputeTargetException:
    compute_config = ComputeInstance.provisioning_configuration(
        vm_size='STANDARD_D3_V2',
        ssh_public_access=False,
        vnet_resourcegroup_name='vnet_resourcegroup_name',
        vnet_name='vnet_name',
        subnet_name='subnet_name',
        # admin_user_ssh_public_key='<my-sshkey>'
    )
    instance = ComputeInstance.create(ws, compute_name, compute_config)
    instance.wait_for_completion(show_output=True)

建立程式完成時,您會將模型定型。 如需詳細資訊,請參閱選取與使用定型的計算目標

注意

您可以選擇使用低優先順序的 VM 來執行部分或所有的工作負載。 請參閱如何建立低優先順序的 VM

Azure Databricks

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

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

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

重要

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

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 工作流程系列文章的一部分。 請參閱本系列的其他文章: