使用虛擬網路保護 Azure 機器學習 工作區 (v1)

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

在本文中,您將瞭解如何保護 Azure 機器學習 工作區及其 Azure 虛擬網絡 中相關聯的資源。

提示

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

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

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

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

  • Azure Machine Learning 工作區
  • Azure 儲存體帳戶
  • Azure 機器學習 資料存放區和數據集
  • Azure Key Vault
  • Azure Container Registry

必要條件

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

  • 閱讀適用於企業安全性的 Azure 機器學習 最佳做法一文,以瞭解最佳做法。

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

    警告

    請勿針對 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 機器學習 工作區必須包含 Azure 機器學習 計算叢集

限制

Azure 儲存體帳戶

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

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

Azure 容器執行個體

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

Azure Container Registry

當 ACR 位於虛擬網路後方時,Azure 機器學習 無法使用它直接建置 Docker 映射。 而是使用計算叢集來建置映像。

重要

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

警告

如果您的 Azure Container Registry 使用私人端點或服務端點來與虛擬網路通訊,則您無法將受控識別與 Azure 機器學習 計算叢集搭配使用。

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 機器學習 計算實例會使用埠 5831。
輸出 ANY: 443 BatchNodeManagement.region 與 Azure Batch 後端通訊,適用於 Azure 機器學習 計算實例/叢集。
輸出 TCP:443 AzureResourceManager 使用 Azure 機器學習、Azure CLI 和 Azure 機器學習 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 機器學習 路由器。

提示

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

IP 位址可能會定期變更。

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

主機名稱 目的
anaconda.com
*.anaconda.com
用來安裝預設封裝。
*.anaconda.org 用來取得存放庫資料。
pypi.org 用來列出來自預設索引的相依性 (如果有的話),而且使用者設定不會覆寫索引。 如果覆寫索引,您也必須允許 *.pythonhosted.org
cloud.r-project.org 安裝CRAN套件以進行 R 開發時使用。
*.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 延伸模組的必要專案。 這些主機可讓遠端連線到適用於Visual StudioCode的 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 機器學習 VS Code 擴充功能時,遠端計算實例將需要存取公用存放庫,才能安裝擴充功能所需的套件。 如果計算實例需要 Proxy 才能存取這些公用存放庫或因特網,您必須在計算實例的檔案中~/.bashrc設定和匯出 HTTP_PROXYHTTPS_PROXY 環境變數。 此程式可以在布建時使用 自定義腳本自動化。

使用 Azure Kubernetes Service (AKS) 搭配 Azure 機器學習 時,允許下列流量進入 AKS VNet:

  • AKS 的一般輸入/輸出需求,如限制 Azure Kubernetes Service 中的輸出流量一文所述
  • 輸出 至 mcr.microsoft.com。
  • 將模型部署至 AKS 叢集時,請使用將 ML 模型部署至 Azure Kubernetes Service 一文中的指引。

如需使用防火牆解決方案的詳細資訊,請參閱搭配 Azure 機器學習 使用防火牆。

使用私人端點保護工作區

Azure Private Link 可讓您使用私人端點連線到工作區。 私人端點是虛擬網路內的一組私人IP位址。 然後,您可以將工作區的存取限制為只透過私人IP位址進行。 私人端點有助於降低數據外流的風險。

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

警告

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

保護 Azure 記憶體帳戶

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

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

  2. 請使用使用私人端點 Azure 儲存體 中的資訊,為下列記憶體資源新增私人端點:

    • Blob
    • 檔案
    • 佇列 - 只有在您打算在 Azure 機器學習 管線中使用 ParallelRunStep 時才需要。
    • 數據表 - 只有在您打算在 Azure 機器學習 管線中使用 ParallelRunStep 時才需要。

    Screenshot showing private endpoint configuration page with blob and file options

    提示

    設定不是預設記憶體的記憶體帳戶時,請選取對應至您要新增之記憶體帳戶的目標子資源類型。

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

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

    提示

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

    The networking area on the Azure Storage page in the Azure portal when using private endpoint

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

提示

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

保護 Azure 金鑰保存庫

Azure 機器學習 會使用相關聯的 金鑰保存庫 實例來儲存下列認證:

  • 相關聯的記憶體帳戶 連接字串
  • Azure Container Repository 實例的密碼
  • 將資料存放區 連線 字串

Azure 金鑰保存庫可以設定為使用私人端點或服務端點。 若要使用 Azure 機器學習 實驗功能搭配虛擬網路後方的 Azure 金鑰保存庫,請使用下列步驟:

提示

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

如需搭配 Azure 金鑰保存庫 使用私人端點的詳細資訊,請參閱整合 金鑰保存庫 與 Azure Private Link

啟用 Azure Container Registry (ACR)

提示

如果您在建立工作區時未使用現有的 Azure Container Registry,可能不存在。 根據預設,除非工作區需要 ACR 實例,否則不會建立 ACR 實例。 若要強制建立一個模型,請先使用工作區定型或部署模型,再使用本節中的步驟。

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

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

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

    如果您已安裝適用於 Azure CLI 的 機器學習 擴充功能 v1,您可以使用 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 機器學習 資源的虛擬網路和子網。

  3. 將工作區的 ACR 設定為 [允許受信任的服務存取]。

  4. 建立 Azure 機器學習 計算叢集。 當 ACR 位於 VNet 後方時,此叢集可用來建置 Docker 映像。 如需詳細資訊,請參閱 建立計算叢集

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

    重要

    下列限制適用於使用映像組建的計算叢集時:

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

    您可以使用 az ml workspace update 命令來設定組建計算。 針對適用於機器學習的 v1 和 v2 Azure CLI 擴充功能,命令都相同。 在下列命令中,將 取代為您的工作區名稱、myresourcegroup包含工作區的資源群組,並以mycomputecluster計算叢集名稱取代 myworkspace

    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 資源。 [概觀] 索引標籤可能或可能沒有 Workspace 屬性。 如果沒有 屬性,請執行步驟 2。 如果這樣做,您可以直接前往步驟 3。

    提示

    新的工作區預設會建立以工作區為基礎的 Application Insights 資源。 如果最近建立工作區,則您不需要執行步驟 2。

  2. 升級工作區的Application Insights實例。 如需如何升級的步驟,請參閱 遷移至以工作區為基礎的 Application Insights 資源

  3. 建立 Azure 監視器 Private Link 範圍,並將步驟 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 內,因此可以直接存取工作區。 如需使用跳躍方塊的範例,請參閱 教學課程:建立安全的工作區

重要

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

如果您在連線到工作區時遇到問題,請參閱 針對安全的工作區聯機進行疑難解答。

工作區診斷

您可以從 Azure Machine Learning 工作室 或 Python SDK 在工作區上執行診斷。 診斷執行之後,會傳回任何偵測到的問題清單。 此清單包含可能解決方案的連結。 如需詳細資訊,請參閱 如何使用工作區診斷

下一步

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