適用於:
Azure CLI ml 延伸模組 v2 (目前)
Python SDK azure-ai-ml v2 (目前)
當您將機器學習模型部署至受控線上端點時,可以使用私人端點來保護與線上端點的通訊。 在本文中,您將了解私有端點如何保護與受管理線上端點的入站通訊安全。 你也會學到工作區管理的虛擬網路如何提供部署與資源間的安全通訊。
您可以保護從用戶端到線上端點的輸入評分要求,以及保護部署、其使用的 Azure 資源,以及私人資源之間的輸出通訊。 你可以分別設定進出通訊的安全。 如需端點和部署的詳細資訊,請參閱什麼是端點和部署。
下列架構圖顯示通訊如何透過私人端點流動至受控線上端點。 來自用戶端虛擬網路的傳入評分要求會透過工作區的私人端點流向受控線上端點。 從部署到服務的輸出通訊會透過從工作區的受控虛擬網路到這些服務執行個體的私人端點進行處理。
附註
- 本文聚焦於利用工作區管理的虛擬網路來實現網路隔離。 如需網路隔離的舊版方法描述,其中 Azure Machine Learning 會針對端點中的每個部署建立受控虛擬網路,請參閱附錄。
- 不論本文所討論的輸入和輸出通訊為何,每個部署都會與其他部署隔離。 換句話說,即使是允許網際網路進出存取的端點和部署,部署之間仍存在網路隔離,阻止任何部署直接連接其他部署。
限制
旗
v1_legacy_mode標必須設定為 ,false才能關閉 Azure Machine Learning 工作區上的 v1 舊版模式。 如果開啟此設定,您就無法建立受控在線端點。 如需詳細資訊,請參閱 Azure Resource Manager 上的新 API 平台的網路隔離變更。如果您的 Azure Machine Learning 工作區有在 2022 年 5 月 24 日之前建立的私人端點,您必須先重新建立該私人端點,才能將在線端點設定為使用私人端點。 如需為工作區建立私人端點的詳細資訊,請參閱 設定 Azure Machine Learning 工作區的私人端點。
秘訣
若要查看工作區的建立日期,您可以檢查工作區屬性。
- 在 Azure Machine Learning Studio 中,移至右上角,然後選取工作區的名稱。
- 在 Directory + Subscription + Workspace 視窗中,選擇 Azure 入口網站中檢視所有屬性。
- 在 Azure 入口網站 [概觀] 頁面中,移至右上角,然後選取 [JSON 檢視]。
- 在 [資源 JSON] 視窗的 [API 版本] 下,選取最新的 API 版本。
- 在 JSON 程式碼的
properties段中,檢查creationTime值。
或者,使用下列其中一種方法:
-
Python SDK:
Workspace.get(name=<workspace-name>, subscription_id=<subscription-ID>, resource_group=<resource-group-name>).get_details() -
REST API:
curl https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/?api-version=2023-10-01 -H "Authorization:Bearer <access-token>" -
PowerShell:
Get-AzMLWorkspace -Name <workspace-name> -ResourceGroupName <resource-group-name>
當您使用網路隔離來協助保護線上端點時,您可以使用與工作區資源群組不同的資源群組中的工作區相關聯資源。 不過,這些資源必須屬於與工作區相同的訂用帳戶和租用戶。 與工作區相關聯的資源包括 Azure Container Registry、Azure 記憶體、Azure Key Vault 和 Application Insights。
附註
本文說明適用於數據平面作業的網路隔離。 這些作業是由評分要求或模型服務產生的。 控制平面作業,例如建立、更新、刪除或擷取驗證密鑰的要求,會透過公用網路傳送至 Azure Resource Manager。
保護輸入評分要求
你可以透過使用 Azure Machine Learning Workspace 的私有端點,保護客戶端到受管理線上端點的入站通訊。 用戶端虛擬網路上的此私有端點與受管線上端點的工作空間通訊,並成為受管理端點接收用戶端來函評分請求的方式。
若要保護對線上端點的評分要求,讓用戶端只能透過工作區的私人端點存取它,請將端點的 public_network_access 旗標設定為 disabled。 建立端點後,你可以更新這個設定,啟用公開網路存取。
將端點的 public_network_access 旗標設定為 disabled:
在執行 Azure CLI 指令之前:
- 確保你目前的工作目錄裡有
endpoint.yml檔案(本地或 Azure Cloud Shell)。 - 如果你使用 Azure Cloud Shell,請將
endpoint.yml上傳或將包含它的儲存庫克隆到你的 Cloud Shell 主目錄中。 - 如果你的預設 Azure Machine Learning 工作區和資源群組沒有設定,請加入
--resource-groupand--workspace-name參數。
az ml online-endpoint create \
--file endpoint.yml \
--set public_network_access=disabled
# Optionally specify the workspace and resource group explicitly
az ml online-endpoint create \
--file endpoint.yml \
--resource-group <resource-group-name> \
--workspace-name <workspace-name> \
--set public_network_access=disabled
如果你看到No such file or directory: endpoint.yml錯誤,請確認你目前的目錄裡有endpoint.yml,並且你是從該目錄運行命令。
當你停用 public_network_access時,工作區的私人端點會收到入站的評分請求,公共網路無法連接到該端點。
如果你啟用 public_network_access,端點就能接收來自網際網路的入站評分請求。
使用來自特定 IP 位址的公用網路存取來保護輸入評分
Azure Machine Learning 工作區支援從特定 IP 位址或位址範圍啟用公用網路存取。 此功能會與受控線上端點的 public_network_access 旗標有一些互動,在使用它搭配受控線上端點時應該要注意。 如需詳細資訊,請參閱案例:具有的存取來自特定 IP 位址的受控線上端點。
使用工作區受控虛擬網路保護輸出存取
若要保護從部署到服務的輸出通訊,您必須為 Azure Machine Learning 工作區啟用受控虛擬網路隔離,讓 Azure Machine Learning 可以為工作區建立受控虛擬網路。 工作區中的所有受控線上端點 (以及工作區的受控計算資源,例如計算叢集和計算執行個體) 會自動使用此工作區受控虛擬網路,而端點下的部署會共用受控虛擬網路的私人端點,以便與工作區的資源進行通訊。
當您使用受控虛擬網路保護工作區時,不再套用受控線上部署的 egress_public_access 旗標。 建立受控線上部署時,請避免設定此旗標。
針對與工作區受控虛擬網路的輸出通訊,Azure Machine Learning 會:
- 為受管理的虛擬網路建立私有端點,用於與工作空間使用的 Azure 資源通訊,例如 Azure Storage、Azure Key Vault 及 Azure 容器登錄檔。
- 允許部署存取 Microsoft Container Registry (MCR),當您想要使用策展的環境或 MLflow 無程式碼部署時,這非常有用。
- 允許使用者將私人端點輸出規則設定為私人資源,並為公用資源設定輸出規則 (服務標籤或 FQDN)。 如需如何管理輸出規則的詳細資訊,請參閱管理輸出規則。
此外,你可以為工作空間管理的虛擬網路外出流量設定兩種隔離模式:
- 允許網際網路輸出,以允許來自受控虛擬網路的所有網際網路輸出流量
- 允許只允許核准的出站,並透過私有端點、FQDN 出站規則及服務標籤出站規則來控制出站流量。
例如,如果您的工作空間的受管理虛擬網路包含兩個部署,且均為受管理線上端點,兩個部署皆可利用工作區的私有端點與以下單位通訊:
- Azure Machine Learning 工作區
- 與工作區相關聯的 Azure 儲存體 Blob
- 工作區的 Azure Container Registry
- Azure Key Vault
- (選擇性) 支援私人端點的其他私人資源。
若要深入了解工作區受控虛擬網路的設定,請參閱受控虛擬網路架構。
網路隔離設定的案例
您的 Azure Machine Learning 工作區和受控線上端點各有 public_network_access 旗標,可用來設定其輸入通訊。 另一方面,來自部署的輸出通訊取決於工作區的受控虛擬網路。
與受控線上端點的通訊
假設受控線上端點具有使用 AI 模型的部署,而您想要使用應用程式將評分要求傳送至端點。 您可以決定要用於受控線上端點的網路隔離設定,如下所示:
針對輸入通訊:
如果應用程式可在網際網路上公開使用,則您必須為端點啟用public_network_access,才能從應用程式接收輸入評分要求。
然而,如果應用程式是私人的,例如組織內部的應用程式,你希望 AI 模型只在組織內部使用,而非公開給網路。 因此,您必須停用端點的 public_network_access,使其只能透過其工作區的私人端點接收輸入評分要求。
針對輸出通訊 (部署):
假設您的部署需要存取私人 Azure 資源 (例如 Azure 儲存體 Blob、ACR 和 Azure Key Vault),否則部署無法存取網際網路。 在此情況下,您必須使用僅允許核准的輸出隔離模式來啟用工作區的受控虛擬網路。 此隔離模式僅允許從部署到已核准目的地的輸出通訊,從而防止資料外流。 此外,您可以新增工作區的輸出規則,以允許存取更多私人或公用資源。 如需詳細資訊,請參閱將受控虛擬網路設定為僅允許核准的輸出。
不過,如果您想要讓部署存取網際網路,則可以使用工作區的受控虛擬網路搭配允許網際網路輸出隔離模式。 除了能夠存取網際網路之外,您還可以使用受控虛擬網路的私人端點來存取您需要的私人 Azure 資源。
最後,如果您的部署不需要存取私人 Azure 資源,而且您不需要控制網際網路的存取權,則不需要使用工作區受控虛擬網路。
Azure Machine Learning 工作區的輸入通訊
您可使用 Azure Machine Learning 工作區的 public_network_access 旗標來啟用或停用輸入工作區存取。
一般而言,如果您保護對工作區的輸入通訊 (藉由停用工作區的 public_network_access 旗標),您也想要保護對受控線上端點的輸入通訊。
下圖顯示的一般工作流程用於保護對 Azure Machine Learning 工作區和受控線上端點的輸入通訊。 為了獲得最佳安全性,建議您停用工作區和受控線上端點的 public_network_access 旗標,以確保兩者皆無法透過公用網際網路存取。 如果工作區沒有私人端點,您可以建立一個私人端點,務必包含適當的 DNS 解析。 接著,您可使用工作區的私人端點來存取受控線上端點。
附註
受控線上端點會共用工作區私人端點。 如果您要手動將 DNS 記錄新增至私人 DNS 區域 privatelink.api.azureml.ms,則應該新增具有萬用字元 *.<per-workspace globally-unique identifier>.inference.<region>.privatelink.api.azureml.ms 的 A 記錄,以將工作區下的所有端點路由傳送至私人端點。
如需工作區和私人端點 DNS 解析的詳細資訊,請參閱如何使用工作區搭配自訂 DNS 伺服器。
附錄
使用舊版網路隔離方法保護輸出存取
對於託管線上端點,你可以透過在每個端點部署中使用 Azure Machine Learning 管理虛擬網路,來保護部署與資源之間的外發通訊。 安全輸出通訊也會使用這些服務執行個體的私人端點來處理。
附註
強烈建議您使用使用工作區受控虛擬網路保護輸出存取中所述的方法,而不是使用這個舊版方法。
若要限制部署與外部資源之間的通訊,包括其所使用的 Azure 資源,您應該確保:
部署的
egress_public_network_access旗標為disabled。 此旗標可確保下載部署所需的模型、程式碼和映像時受到私人端點保護。 一旦建立部署,就無法更新(啟用或停用)該egress_public_network_access旗標。 嘗試在更新部署時變更旗標失敗,並發生錯誤。工作區具有私人連結,允許透過私人端點存取 Azure 資源。
工作區有一個可供啟用或停用的
public_network_access旗標。 如果你打算使用使用公開 外撥的託管線上部署,那麼你也必須 設定工作區允許公開存取。 此要求之所以存在,是因為線上部署的外部通訊是發送到工作區 API。 當你設定部署使用 公開出站時,工作區必須能接受該公開通訊(允許公開存取)。
當您有多個部署,且將 egress_public_network_access 設定為受控線上端點中每個部署的 disabled 時,每個部署都有自己的獨立 Azure Machine Learning 受控虛擬網路。 針對每個虛擬網路,Azure Machine Learning 會建立三個私人端點,以便與下列服務進行通訊:
- Azure Machine Learning 工作區
- 與工作區相關聯的 Azure 儲存體 Blob
- 工作區的 Azure Container Registry
例如,如果您針對受控線上端點的兩個部署將 egress_public_network_access 旗標設定為 disabled,則總共會建立六個私人端點。 每次部署使用三個私有端點與工作區、blob 及容器登錄檔通訊。
重要事項
Azure Machine Learning 不支援部署受控虛擬網路與用戶端虛擬網路之間的對等互連。 為了安全地存取部署所需的資源,我們會使用私人端點與資源通訊。
下圖顯示來自用戶端虛擬網路的傳入評分要求,這些要求會流經工作區的私人端點到受控線上端點。 此圖也會顯示兩個線上部署,每個部署都位於自己的 Azure Machine Learning 受控虛擬網路中。 每個部署的虛擬網路都有三個私人端點,可供與 Azure Machine Learning 工作區、與工作區相關聯的 Azure 儲存體 Blob,以及工作區的 Azure Container Registry 進行輸出通訊。
若要停用 egress_public_network_access 並建立私人端點:
az ml online-deployment create -f deployment.yml --set egress_public_network_access=disabled
若要確認私人端點的建立,請先檢查與工作區相關聯的儲存體帳戶和容器登錄 (請參閱下載組態檔)、從 Azure 入口網站尋找每個資源,然後檢查 Networking 功能表下的 Private endpoint connections 索引標籤。
重要事項
- 如先前所述,來自受控線上端點部署的輸出通訊是工作區 API。 當端點設定為使用公用輸出時 (換句話說,端點的
public_network_access旗標設定為enabled),則工作區必須能夠接受該公用通訊 (工作區的public_network_access旗標設定為enabled)。 - 當線上部署將
egress_public_network_access旗標設為disabled時,他們只能存取安全資源(工作區、blob 和容器登錄檔)。 例如,若部署使用上傳至其他儲存帳號的模型資產,模型下載會失敗。 確定模型資產位於與工作區相關聯的儲存體帳戶上。 - 當
egress_public_network_access設定為disabled時,部署只能存取虛擬網路中保護的工作區相關聯資源。 相反地,當egress_public_network_access設定為enabled時,部署只能存取具有公開權限的資源,這表示無法存取虛擬網路中安全的資源。
下表列出設定線上端點的輸入和輸出通訊時的支援設定:
| 組態 | 輸入 (端點屬性) |
輸出 (部署屬性) |
是否支援? |
|---|---|---|---|
| 具有安全輸出的安全輸入 |
public_network_access 已停用 |
egress_public_network_access 已停用 |
是 |
| 具有公用輸出的安全輸入 |
public_network_access 已停用 |
egress_public_network_access 已啟用工作區也必須允許公用存取,因為部署輸出是工作區 API。 |
是 |
| 具有安全輸出的公用輸入 |
public_network_access 已啟用 |
egress_public_network_access 已停用 |
是 |
| 具有公用輸出的公用輸入 |
public_network_access 已啟用 |
egress_public_network_access 已啟用工作區也必須允許公用存取,因為部署輸出是工作區 API。 |
是 |