分享方式:


使用虛擬網路 (v1) 保護 Azure Machine Learning 工作區

適用於:Azure CLI ml 延伸模組 v1Python SDK azureml v1

在本文中,您將了解如何在 Azure 虛擬網路中保護 Azure Machine Learning 工作區與其相關聯的資源。

提示

您可以使用 Azure Machine Learning「受控虛擬網路」,而不是本文中的步驟。 透過受控虛擬網路,Azure Machine Learning 可以處理工作區和受控計算的網路隔離作業。 您也可以為工作區所需的資源 (例如 Azure 儲存體帳戶) 新增私人端點。 如需詳細資訊,請參閱工作區受管理的網路隔離

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

如需了解如何建立安全工作區的教學課程,請參閱教學課程:建立安全工作區 (英文)、Bicep 範本 (英文) 或 Terraform 範本 (英文)。

在本文中,您將了解如何在虛擬網路中啟用下列工作區資源:

  • Azure Machine Learning 工作區
  • Azure 儲存體帳戶
  • Azure Machine Learning 資料存放區和資料集
  • Azure Key Vault
  • Azure Container Registry

必要條件

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

  • 請閱讀企業安全性的 Azure Machine Learning 最佳做法 文章,以了解最佳做法。

  • 用於計算資源的現有虛擬網路和子網路。

    警告

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

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

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

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

Azure Container Registry

  • Azure Container Registry 必須是進階版本。 如需升級的詳細資訊,請參閱變更 SKU

  • 如果 Azure Container Registry 使用「私人端點」,則必須位於與用於定型或推斷的儲存體帳戶和計算目標相同的「虛擬網路」中。 如果其使用「服務端點」,則必須位於與儲存體帳戶和計算目標相同的「虛擬網路」和「子網路」中。

  • Azure Machine Learning 工作區必須包含 Azure Machine Learning 計算叢集

限制

Azure 儲存體帳戶

  • 如果您打算使用 Azure Machine Learning 工作室,且儲存體帳戶也在 VNet 中,則會有額外的驗證需求:

    • 如果儲存體帳戶使用服務端點,工作區的私人端點和儲存體的服務端點必須位於虛擬網路的相同子網路中。
    • 如果儲存體帳戶使用「私人端點」,則工作區私人端點和儲存體私人端點必須位於相同的 VNet 中。 在此情況下,兩者可以位於不同的子網路。

Azure 容器執行個體

將 Azure Machine Learning 工作區設為私人端點時,不支援部署至 VNet 中的 Azure 容器執行個體。 請考慮改用具有網路隔離的受控線上端點

Azure Container Registry

ACR 位於虛擬網路後方時,Azure Machine Learning 無法使用 ACR 來直接建置 Docker 映像。 但可改為使用計算叢集來建置映像。

重要

用來建置 Docker 映像的計算叢集必須能夠存取用來定型及部署模型的套件存放庫。 您可能需要新增網路安全性規則,以允許存取公用存放庫、使用私人 Python 套件,或使用已包含套件的自訂 Docker 映像

警告

如果您的 Azure Container Registry 使用私人端點或服務端點以與虛擬網路通訊,則您無法將受控身分識別與 Azure Machine Learning 計算叢集搭配使用。

Azure 監視器

警告

Azure 監視器支援使用 Azure Private Link 連線到 VNet。 不過,您必須在 Azure 監視器中使用已開啟的 Private Link 模式。 如需詳細資訊,請參閱 Private Link 存取模式:僅私人與已開啟

需要公用網際網路存取

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

提示

[必要] 索引標籤會列出必要的輸入和輸出設定。 [視情況而定] 索引標籤則會針對您可能想要啟用的特定設定,列出所需的選擇性輸入和輸出設定。

方向 通訊協定與
連接埠
服務標籤 目的
輸出 TCP:80、443 AzureActiveDirectory 使用 Microsoft Entra ID 進行驗證。
輸出 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
* 在由 21Vianet 營運的 Microsoft 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 網頁版不需要此設定。
update.code.visualstudio.com
*.vo.msecnd.net
用來擷取透過安裝指令碼安裝在計算執行個體上的 Visual Studio Code 伺服器位元。
marketplace.visualstudio.com
vscode.blob.core.windows.net
*.gallerycdn.vsassets.io
下載及安裝 Visual Studio Code 延伸模組時所需。 這些主機可以針對適用於 Visual Studio Code 的 Azure ML 延伸模組所提供的計算執行個體啟用遠端連線。 如需詳細資訊,請參閱在 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 Private Link 可讓您使用私人端點連線到工作區。 私人端點是虛擬網路內的一組私人 IP 位址。 然後,您可以將對工作區的存取權限制為只透過私人 IP 位址進行。 私人端點有助於降低資料外流的風險。

如需設定工作區私人端點的詳細資訊,請參閱如何設定私人端點

警告

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

保護 Azure 儲存體帳戶

Azure Machine Learning 支援設定為使用私人端點或服務端點的儲存體帳戶。

  1. 在 Azure 入口網站中,選取 Azure 儲存體帳戶。

  2. 使用針對 Azure 儲存體使用私人端點中的資訊,以新增下列儲存體資源的私人端點:

    • Blob
    • 檔案
    • 佇列 - 只有當您打算在 Azure Machine Learning 管線中使用 ParallelRunStep 時才需要。
    • 資料表 - 只有當您打算在 Azure Machine Learning 管線中使用 ParallelRunStep 時才需要。

    顯示具有 Blob 和檔案選項的私人端點組態頁面的螢幕擷取畫面

    提示

    設定預設儲存體的儲存體帳戶時,請選取對應至您想要新增儲存體帳戶的 [目標子資源] 類型。

  3. 建立儲存體資源的私人端點之後,請針對儲存體帳戶選取 [網路] 下的 [防火牆和虛擬網路] 索引標籤。

  4. 選取 [選取的網路],然後在 [資源執行個體] 下,選取 Microsoft.MachineLearningServices/Workspace 做為 [資源類型]。 使用 [執行個體名稱] 選取您的工作區。 如需詳細資訊,請參閱以系統指派的受控識別為基礎的受信任存取

    提示

    或者,您也可以選取 [允許受信任服務清單上的 Azure 服務存取此儲存體帳戶],更廣泛地允許來自受信任服務的存取。 如需詳細資訊,請參閱設定 Azure 儲存體防火牆和虛擬網路

    使用私人端點時,Azure 入口網站中 Azure 儲存體頁面上的網路區域

  5. 選取儲存 以儲存設定。

提示

使用私人端點時,您也可以停用匿名存取。 如需詳細資訊,請參閱不允許匿名存取

保護 Azure Key Vault

Azure Machine Learning 會使用相關聯的 Key Vault 執行個體來儲存下列認證:

  • 相關聯的儲存體帳戶連接字串
  • Azure Container Repository 執行個體的密碼
  • 資料存放區的連接字串

Azure Key Vault 可以設定為使用私人端點或服務端點。 若要在虛擬網路背後搭配 Azure Key Vault 使用 Azure Machine Learning 測試,請使用下列步驟:

提示

無論您是使用私人端點還是服務端點,金鑰保存庫都必須與工作區的私人端點位於相同的網路中。

如需使用私人端點搭配 Azure Key Vault 的詳細資訊,請參閱整合 Key Vault 與 Azure Private Link

啟用 Azure Container Registry (ACR)

提示

如果您在建立工作區時未使用現有的 Azure Container Registry,則該 Azure Container Registry 可能不存在。 根據預設,工作區在需要 ACR 執行個體之前,將不會建立該執行個體。 若要強制建立一個執行個體,請使用您的工作區定型或部署模型,然後再使用本節中的步驟。

可以設定 Azure Container Registry 以使用私人端點。 使用下列步驟來設定您的工作區,以當 ACR 在虛擬網路時使用 ACR:

  1. 如需尋找工作區的 Azure Container Registry 名稱,請使用下列其中一種方法:

    適用於:Azure CLI ml 延伸模組 v1

    如果您已安裝適用於 Azure CLI 的 Machine Learning 延伸模組第 1 版,則可以使用 az ml workspace show 命令來顯示工作區資訊。

    az ml workspace show -w yourworkspacename -g resourcegroupname --query 'containerRegistry'
    

    此命令會傳回如下值:"/subscriptions/{GUID}/resourceGroups/{resourcegroupname}/providers/Microsoft.ContainerRegistry/registries/{ACRname}"。 字串的最後一個部分是工作區的 Azure Container Registry 名稱。

  2. 使用私人連線至 Azure Container Registry 中的步驟,以限制對您虛擬網路的存取。 在新增虛擬網路時,請選取 Azure Machine Learning 資源的虛擬網路和子網路。

  3. 設定工作區的 ACR,以允許受信任服務的存取

  4. 建立 Azure Machine Learning 計算叢集。 此叢集用來在 ACR 位於 VNet 後方時建置 Docker 映像。 如需詳細資訊,請參閱建立計算叢集

  5. 使用下列其中一種方法來設定工作區,以使用計算叢集來建置 Docker 映像。

    重要

    使用計算叢集進行映像建置時,適用下列限制:

    • 僅支援 CPU SKU。
    • 如果您使用設定為沒有公用 IP 位址的計算叢集,則必須提供一些方法讓叢集存取公用網際網路。 存取儲存在 Microsoft Container Registry 上的映像;安裝在 Pypi、Conda 上的套件等時,需要網際網路存取。您必須設定使用者定義的路由 (UDR),才能連線到公用 IP 以存取網際網路。 例如,您可以使用防火牆的公用 IP,或可以搭配公用 IP 使用虛擬網路 NAT。 如需詳細資訊,請參閱如何在 VNet 中安全地定型

    您可以使用 az ml workspace update 命令來設定建置計算。 針對適用於機器學習的第 1 版和第 2 版 Azure CLI 延伸模組,此命令會相同。 在下列命令中,將 myworkspace 取代為您的工作區名稱、將 myresourcegroup 取代為包含工作區的資源群組,並將 mycomputecluster 取代為計算叢集名稱:

    az ml workspace update --name myworkspace --resource-group myresourcegroup --image-build-compute mycomputecluster
    

提示

當 ACR 位於 VNet 後方時,您也可以停用其公用存取

資料存放區和資料集

下表列出您略過驗證所需的服務:

服務 略過所需的驗證?
Azure Blob 儲存體 Yes
Azure 檔案共用 Yes
Azure Data Lake Store Gen1 No
Azure Data Lake Store Gen2 No
Azure SQL Database Yes
PostgreSql Yes

注意

Azure Data Lake Store Gen1 和 Azure Data Lake Store Gen2 預設會略過驗證,因此您不需要採取任何動作。

下列程式碼範例會建立新的 Azure Blob 資料存放區並設定 skip_validation=True

blob_datastore = Datastore.register_azure_blob_container(workspace=ws,  

                                                         datastore_name=blob_datastore_name,  

                                                         container_name=container_name,  

                                                         account_name=account_name, 

                                                         account_key=account_key, 

                                                         skip_validation=True ) // Set skip_validation to true

使用資料集

略過資料集驗證的語法類似於下列資料集類型:

  • 符號分隔檔案
  • JSON
  • Parquet
  • SQL
  • 檔案

下列程式碼會建立新的 JSON 資料集並設定 validate=False

json_ds = Dataset.Tabular.from_json_lines_files(path=datastore_paths, 

validate=False) 

保護 Azure 監視器和 Application Insights

若要針對工作區為 Azure 監視器和 Application Insights 執行個體啟用網路隔離,請使用下列步驟:

  1. 在 Azure 入口網站中開啟 Application Insights 資源。 [概觀] 索引標籤不一定會有工作區屬性。 如果其「沒有」該屬性,請執行步驟 2。 如果其「有」該屬性,您可以直接跳到步驟 3。

    提示

    根據預設,新的工作區會建立工作區型 Application Insights 資源。 如果您的工作區是在最近建立的,則您不需要執行步驟 2。

  2. 升級您工作區的 Application Insights 執行個體。 如需升級方式的步驟,請參閱移轉至工作區型 Application Insights 資源

  3. 建立 Azure 監視器私人連結範圍並將步驟 1 中的 Application Insights 執行個體新增至該範圍。 如需如何執行此作業的步驟,請參閱設定 Azure 監視器私人連結

安全地連線到您的工作區

若要連線到在 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 工作室或 Python SDK 診斷工作區。 診斷執行完成後,就會傳回所有偵測到的問題清單。 這份清單包含可能的解決方案連結。 如需詳細資訊,請參閱如何使用工作區診斷

下一步

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