使用虛擬網路保護 Azure Machine Learning 工作區
適用於:Azure CLI ml 延伸模組 v2 (目前)
Python SDK azure-ai-ml v2 (目前)
提示
您可以使用 Azure Machine Learning「受控虛擬網路」,而不是本文中的步驟。 透過受控虛擬網路,Azure Machine Learning 可以處理工作區和受控計算的網路隔離作業。 您也可以為工作區所需的資源 (例如 Azure 儲存體帳戶) 新增私人端點。 如需詳細資訊,請參閱工作區受管理的網路隔離 (部分機器翻譯)。
在本文中,您將了解如何在 Azure 虛擬網路中保護 Azure Machine Learning 工作區與其相關聯的資源。
本文是關於保護 Azure Machine Learning 工作流程系列文章的一部分。 請參閱本系列的其他文章:
如需關於建立安全工作區的教學課程,請參閱教學課程:建立安全工作區或教學課程:使用範本建立安全工作區。
在本文中,您將了解如何在虛擬網路中啟用下列工作區資源:
- Azure Machine Learning 工作區
- Azure 儲存體帳戶
- 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 工作室,且儲存體帳戶也在虛擬網路中,則會有額外的驗證需求:
- 如果儲存體帳戶使用服務端點,工作區私人端點和儲存體服務端點必須位於與虛擬網路相同的子網路中。
- 如果儲存體帳戶使用私人端點,則工作區私人端點和儲存體私人端點必須位於相同的虛擬網路中。 在此情況下,兩者可以位於不同的子網路。
Azure 容器執行個體
將 Azure Machine Learning 工作區設為私人端點時,不支援部署至虛擬網路中的 Azure 容器執行個體。 請考慮改用具有網路隔離的受控線上端點。
Azure Container Registry
當您的 Azure Machine Learning 工作區或任何資源設定為私人端點時,可能需要為 AzureML 環境映像組建設定使用者受控計算叢集。 預設案例會利用無伺服器計算,目前適用於沒有與 AzureML 工作區相關聯資源網路限制的案例。
重要
用來建置 Docker 映像的計算叢集必須能夠存取用來定型及部署模型的套件存放庫。 您可能需要新增網路安全性規則,以允許存取公用存放庫、使用私人 Python 套件,或使用已包括套件的自訂 Docker 映像 (SDK v1)。
警告
如果您的 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 位址而非服務標籤,請使用下列其中一個選項:
- 從 Azure IP 範圍和服務標籤下載清單。
- 使用 Azure CLI az network list-service-tags 命令。
- 使用 Azure PowerShell Get-AzNetworkServiceTag 命令。
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_PROXY
和 HTTPS_PROXY
環境變數。 可以使用自訂指令碼在佈建時自動執行此流程。
使用 Azure Kubernetes Service (AKS) 搭配 Azure Machine Learning 時,請允許下列流量流向 AKS VNet:
- AKS 的一般輸入/輸出需求,如在 Azure Kubernetes Service 中限制輸出流量一文所述。
- 輸出至 mcr.microsoft.com.
- 將模型部署至 AKS 叢集時,請使用將 ML 模型部署至 Azure Kubernetes Service 一文中的指導。
如需使用防火牆解決方案的相關資訊,請參閱設定必要的輸入和輸出通訊 (部分機器翻譯)。
使用私人端點保護工作區
Azure Private Link 可讓您使用私人端點連線到工作區。 私人端點是虛擬網路內的一組私人 IP 位址。 然後,您可以將對工作區的存取權限制為只透過私人 IP 位址進行。 私人端點有助於降低資料外流的風險。
如需設定工作區私人端點的詳細資訊,請參閱如何設定私人端點。
警告
使用私人端點保護工作區本身無法確保端對端安全性。 您必須遵循本文其餘部分和 VNet 系列中的步驟,來保護解決方案的個別元件。 例如,如果您使用私人端點做為工作區,但您的 Azure 儲存體帳戶不在 VNet 後方,則工作區和儲存體之間的流量不會使用 VNet 來獲得安全性。
保護 Azure 儲存體帳戶
Azure Machine Learning 支援設定為使用私人端點或服務端點的儲存體帳戶。
在 Azure 入口網站中,選取 Azure 儲存體帳戶。
使用針對 Azure 儲存體使用私人端點中的資訊,以新增下列儲存體資源的私人端點:
- Blob
- 檔案
- 佇列:只有當您打算在 Azure Machine Learning 管線中使用批次端點 (部分機器翻譯) 或 ParallelRunStep (部分機器翻譯) 時才需要。
- 資料表:只有當您打算在 Azure Machine Learning 管線中使用批次端點 (部分機器翻譯) 或 ParallelRunStep (部分機器翻譯) 時才需要。
提示
設定非預設儲存體的儲存體帳戶時,請選取對應至您想要新增儲存體帳戶的 [目標子資源] 類型。
建立儲存體資源的私人端點之後,請針對儲存體帳戶選取 [網路] 下的 [防火牆和虛擬網路] 索引標籤。
選取 [選取的網路],然後在 [資源執行個體] 下,選取
Microsoft.MachineLearningServices/Workspace
做為 [資源類型]。 使用 [執行個體名稱] 選取您的工作區。 如需詳細資訊,請參閱以系統指派的受控識別為基礎的受信任存取。提示
或者,您也可以選取 [允許受信任服務清單上的 Azure 服務存取此儲存體帳戶],更廣泛地允許來自受信任服務的存取。 如需詳細資訊,請參閱設定 Azure 儲存體防火牆和虛擬網路。
選取儲存 以儲存設定。
提示
使用私人端點時,您也可以停用匿名存取。 如需詳細資訊,請參閱不允許匿名存取。
保護 Azure Key Vault
Azure Machine Learning 會使用相關聯的 Key Vault 執行個體來儲存下列認證:
- 相關聯的儲存體帳戶連接字串
- Azure Container Repository 執行個體的密碼
- 資料存放區的連接字串
Azure Key Vault 可以設定為使用私人端點或服務端點。 若要在虛擬網路背後搭配 Azure Key Vault 使用 Azure Machine Learning 測試,請使用下列步驟:
提示
「建議」讓金鑰保存庫位於與工作區相同的 VNet 中,不過其也可以位於對等互連的 VNet 中。
如需使用私人端點搭配 Azure Key Vault 的詳細資訊,請參閱整合 Key Vault 與 Azure Private Link。
啟用 Azure Container Registry (ACR)
提示
如果您在建立工作區時未使用現有的 Azure Container Registry,則該 Azure Container Registry 可能不存在。 根據預設,工作區在需要 ACR 執行個體之前,將不會建立該執行個體。 若要強制建立一個執行個體,請使用您的工作區定型或部署模型,然後再使用本節中的步驟。
可以設定 Azure Container Registry 以使用私人端點。 使用下列步驟來設定您的工作區,以當 ACR 在虛擬網路時使用 ACR:
如需尋找工作區的 Azure Container Registry 名稱,請使用下列其中一種方法:
如果您已安裝適用於 Azure CLI 的 Machine Learning 延伸模組第 2 版,則可以使用
az ml workspace show
命令來顯示工作區資訊。 第 1 版延伸模組不會傳回此資訊。az ml workspace show -n yourworkspacename -g resourcegroupname --query 'container_registry'
此命令會傳回如下值:
"/subscriptions/{GUID}/resourceGroups/{resourcegroupname}/providers/Microsoft.ContainerRegistry/registries/{ACRname}"
。 字串的最後一個部分是工作區的 Azure Container Registry 名稱。使用私人連線至 Azure Container Registry 中的步驟,以限制對您虛擬網路的存取。 在新增虛擬網路時,請選取 Azure Machine Learning 資源的虛擬網路和子網路。
設定工作區的 ACR,以允許受信任服務的存取。
根據預設,Azure 機器學習 會嘗試使用無伺服器計算來建置映像。 只有當記憶體帳戶或 Container Registry 等工作區相依資源不受任何網路限制(私人端點)時才適用。 如果您的工作區相依資源受限於網路,請改用 image-build-compute。
若要設定映像建置計算,請在與工作區相依資源相同的 VNet 中建立 Azure 機器學習 CPU SKU 計算叢集。 接著,此叢集可以設定為預設映射建置計算,並用來從該點開始建置工作區中的每個映像。 使用下列其中一種方法來設定工作區,以使用計算叢集來建置 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
您可以執行相同命令並將計算參考為空白空間,以切換回無伺服器計算:
--image-build-compute ''
。
提示
當 ACR 位於 VNet 後方時,您也可以停用其公用存取。
保護 Azure 監視器和 Application Insights
若要針對工作區為 Azure 監視器和 Application Insights 執行個體啟用網路隔離,請使用下列步驟:
在 Azure 入口網站中開啟 Application Insights 資源。 [概觀] 索引標籤不一定會有工作區屬性。 如果其「沒有」該屬性,請執行步驟 2。 如果其「有」該屬性,您可以直接跳到步驟 3。
提示
根據預設,新的工作區會建立工作區型 Application Insights 資源。 如果您的工作區是在最近建立的,則您不需要執行步驟 2。
升級您工作區的 Application Insights 執行個體。 如需升級方式的步驟,請參閱移轉至工作區型 Application Insights 資源。
建立 Azure 監視器私人連結範圍並將步驟 1 中的 Application Insights 執行個體新增至該範圍。 如需詳細資訊,請參閱設定您的 Azure 監視器私人連結。
安全地連線到您的工作區
若要連線到在 VNet 後方保護的工作區,請使用下列其中一種方法:
Azure VPN 閘道 - 透過私人連線將內部部署網路連線到 VNet。 連線是透過公用網際網路所建立。 您可能會使用兩種類型的 VPN 閘道:
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 支援的設定,但 Microsoft 不建議使用。 在生產環境中使用此設定之前,您應該先向安全性小組確認此設定。
在某些情況下,您可能需要允許公用網路對工作區的存取 (使用在安全地連線到您的工作區一節中詳述的方法,在不透過虛擬網路的情況下連線)。 透過公用網際網路的存取是使用 TLS 加以保護。
若要啟用對工作區的公用網路存取,請使用下列步驟:
- 在設定工作區的私人端點之後,針對工作區啟用公用存取。
- 設定 Azure 儲存體防火牆,以允許與透過公用網際網路連線的用戶端 IP 位址進行通訊。 如果用戶端沒有靜態 IP,您可能需要變更允許的 IP 位址。 例如,如果您的其中一名資料科學家是在家中工作,且無法與虛擬網路建立 VPN 連線。
下一步
本文是關於保護 Azure Machine Learning 工作流程系列文章的一部分。 請參閱本系列的其他文章: