受控線上端點的網路隔離
適用於:Azure CLI ml 延伸模組 v2 (目前)Python SDK azure-ai-ml v2 (目前)
將機器學習模型部署至受控線上端點時,您可以使用私人端點來保護與線上端點的通訊。 在本文中,您將了解如何使用私人端點來保護對受控線上端點的輸入通訊。 您也將了解如何使用工作區受控虛擬網路來提供部署與資源之間的安全通訊。
您可以保護從用戶端到線上端點的輸入評分要求,以及保護部署、其使用的 Azure 資源,以及私人資源之間的輸出通訊。 輸入和輸出通訊的安全性會個別設定。 如需端點和部署的詳細資訊,請參閱什麼是端點和部署。
下列架構圖顯示通訊如何透過私人端點流動至受控線上端點。 來自用戶端虛擬網路的傳入評分要求會透過工作區的私人端點流向受控線上端點。 從部署到服務的輸出通訊會透過從工作區的受控虛擬網路到這些服務執行個體的私人端點進行處理。
注意
- 本文著重於使用工作區受控虛擬網路的網路隔離。 如需網路隔離的舊版方法描述,其中 Azure Machine Learning 會針對端點中的每個部署建立受控虛擬網路,請參閱附錄。
- 不論本文所討論的輸入和輸出通訊為何,每個部署都會與其他部署隔離。 換句話說,即使使用允許網際網路輸入/輸出的端點/部署,部署之間也有網路隔離,這會阻止任何部署直接連線到其他部署。
限制
您必須在 Azure Machine Learning 工作區上停用
v1_legacy_mode
旗標 (false)。 如果啟用此旗標,您就無法建立受控線上端點。 如需詳細資訊,請參閱 v2 API 的網路隔離。如果您的 Azure Machine Learning 工作區具有 2022 年 5 月 24 日之前建立的私人端點,您就必須先重新建立工作區的私人端點,才能將線上端點設定為使用私人端點。 如需為您的工作區建立私人端點的詳細資訊,請參閱如何針對 Azure Machine Learning 工作區設定私人端點。
提示
若要確認建立工作區的時間,您可以檢查工作區屬性。
在 Studio 中,移至
Directory + Subscription + Workspace
區段 (Studio 的右上方),然後選取View all properties in Azure Portal
。 從 [概觀] 頁面的右上角選取 JSON 檢視,然後選擇最新的 API 版本。 您可以從此頁面檢查properties.creationTime
的值。或者,使用
az ml workspace show
搭配 CLI、my_ml_client.workspace.get("my-workspace-name")
搭配 SDK,或者工作區上的curl
搭配 REST API。當您搭配線上端點使用網路隔離時,可以從與工作區不同的資源群組使用工作區相關聯的資源 (Azure Container Registry (ACR)、儲存體帳戶、Key Vault 和 Application Insights)。 不過,這些資源必須屬於與工作區相同的訂用帳戶和租用戶。
注意
本文所述的網路隔離適用於資料平面作業,也就是評分要求所產生的作業 (或模型服務)。 控制平面作業 (例如建立、更新、刪除或擷取驗證金鑰的要求) 會透過公用網路傳送至 Azure Resource Manager。
保護輸入評分要求
您可以使用 Azure Machine Learning 工作區的私人端點,保護從用戶端到受控線上端點的輸入通訊。 用戶端虛擬網路上的這個私人端點會與受控線上端點的工作區通訊,這是受控線上端點可以接收來自用戶端傳入評分要求的方法。
若要保護對線上端點的評分要求,讓用戶端只能透過工作區的私人端點存取它,請將端點的 public_network_access
旗標設定為 disabled
。 建立端點之後,您可以更新此設定,以視需要啟用公用網路存取。
將端點的 public_network_access
旗標設定為 disabled
:
az ml online-endpoint create -f endpoint.yml --set public_network_access=disabled
當 public_network_access
是 disabled
時,會使用工作區的私人端點接收輸入評分要求,而且無法從公用網路連線端點。
或者,如果您將 public_network_access
設定為 enabled
,則端點可以接收來自網際網路的輸入評分要求。
使用來自特定IP位址的公用網路存取來保護輸入評分
Azure 機器學習 工作區支援從特定 IP 位址或位址範圍啟用公用網路存取。 這項功能與受控在線端點旗 public_network_access
標有一些互動,您應該在搭配受控在線端點使用時注意。 如需詳細資訊,請參閱 案例:具有特定IP位址存取權的受控在線端點。
使用工作區受控虛擬網路保護輸出存取
若要保護從部署到服務的輸出通訊,您必須為 Azure Machine Learning 工作區啟用受控虛擬網路隔離,讓 Azure Machine Learning 可以為工作區建立受控虛擬網路。 工作區中的所有受控線上端點 (以及工作區的受控計算資源,例如計算叢集和計算執行個體) 會自動使用此工作區受控虛擬網路,而端點下的部署會共用受控虛擬網路的私人端點,以便與工作區的資源進行通訊。
當您使用受控虛擬網路保護工作區時,不再套用受控線上部署的 egress_public_access
旗標。 建立受控線上部署時,請避免設定此旗標。
針對與工作區受控虛擬網路的輸出通訊,Azure Machine Learning 會:
- 建立受控虛擬網路的私人端點,以用於與工作區所使用的 Azure 資源進行通訊,例如 Azure 儲存體、Azure Key Vault 和 Azure Container Registry。
- 允許部署存取 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。 |
Yes |
具有安全輸出的公用輸入 | public_network_access 已啟用 |
egress_public_network_access 已停用 |
是 |
具有公用輸出的公用輸入 | public_network_access 已啟用 |
egress_public_network_access 已啟用工作區也必須允許公用存取,因為部署輸出是工作區 API。 |
Yes |