樞紐式專案的網路隔離分為兩部分:存取 Microsoft Foundry 樞紐,以及隔離樞紐與專案中的運算資源(如運算實例、無伺服器及受管理線上端點)。 本文涵蓋後者。 圖表醒目提示。 使用中樞的內建網路隔離來保護計算資源。
設定下列網路隔離設定:
先決條件
開始之前,請確定您有下列必要條件:
Azure 訂用帳戶。 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶。
針對您的 Azure 訂用帳戶註冊 Microsoft.Network 資源提供者: 中樞會使用此提供者來建立受控虛擬網路的私人端點。
如需有關註冊資源提供者的詳細資訊,請參閱解決資源提供者註冊的錯誤。
搭配下列 Azure 角色型存取控制 (Azure RBAC) 動作使用 Azure 身分識別,為受控虛擬網路建立私人端點:
Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/read
Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/write
Azure 訂用帳戶。 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶。
您必須為 Azure 訂用帳戶註冊 Microsoft.Network 資源提供者。 中樞在建立受管理虛擬網路的私有端點時,會使用此資源提供者。
如需有關註冊資源提供者的詳細資訊,請參閱解決資源提供者註冊的錯誤。
搭配下列 Azure 角色型存取控制 (Azure RBAC) 動作使用 Azure 身分識別,為受控虛擬網路建立私人端點:
- Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/read
- Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/write
安裝 Azure CLI 和 Azure CLI 的 ml 延伸模組。 如需詳細資訊,請參閱安裝、設定和使用 CLI (v2)。
一個與 Bash 相容的 shell,用於執行本文中 CLI 範例。 例如,使用 Linux 系統或 Windows 子系統 Linux 版。
本文中的 Azure CLI 範例會針對中樞名稱使用 ws,針對資源群組名稱使用 rg。 在您的 Azure 訂用帳戶中執行命令時,請視需要變更這些值。
Azure 訂用帳戶。 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶。 嘗試 免費或付費版本。
您必須為 Azure 訂用帳戶註冊 Microsoft.Network 資源提供者。 中樞在建立受管理虛擬網路的私有端點時,會使用此資源提供者。
如需有關註冊資源提供者的詳細資訊,請參閱解決資源提供者註冊的錯誤。
部署受控網路時所使用的 Azure 身分識別需要下列 Azure 角色型存取控制 (Azure RBAC) 動作來建立私人端點:
- Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/read
- Microsoft.MachineLearningServices/workspaces/privateEndpointConnections/write
Azure Machine Learning Python SDK v2。 如需 SDK 的詳細資訊,請參閱 安裝適用於 Azure Machine Learning 的 Python SDK v2。
本文中的範例假設您的程式碼以下列 Python 程式碼開頭。 它會匯入使用受控虛擬網路建立中樞所需的類別、設定 Azure 訂用帳戶和資源群組的變數,以及建立 ml_client。 在下列範例中,將預留位置文字 <SUBSCRIPTION_ID> 和 <RESOURCE_GROUP> 取代為您自己的值:
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
Hub,
ManagedNetwork,
IsolationMode,
ServiceTagDestination,
PrivateEndpointDestination,
FqdnDestination
)
from azure.identity import DefaultAzureCredential
# Replace with the values for your Azure subscription and resource group.
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
# get a handle to the subscription
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group)
網路隔離架構和隔離模式
當你啟用受管虛擬網路隔離時,你就是為集線器建立一個受管理的虛擬網路。 您為中樞建立的受控計算資源會自動使用這個受控虛擬網路。 針對中樞使用的 Azure 資源 (例如 Azure 儲存體、Azure Key Vault 和 Azure Container Registry),受控虛擬網路可以使用私人端點。
選擇三種受控虛擬網路輸出模式之一:
| 輸出模式 |
說明 |
案例 |
| 允許網際網路輸出 |
允許來自受控虛擬網路的所有網際網路輸出流量。 |
您想要不受限制地存取網際網路上的機器學習資源,例如 Python 套件或預先定型的模型。1 |
| 僅允許核准的輸出 |
使用服務標籤來允許輸出流量。 |
* 您想要將資料外洩的風險降到最低,但必須在私人環境中準備所有必要的機器學習成品。 * 您要設定已核准的服務、服務標籤或完整網域名稱 (FQDN) 清單的輸出存取。 |
| 已停用 |
輸入和輸出流量不受限制。 |
您希望允許中樞的公開輸入和輸出。 |
1 您可以使用輸出規則搭配 [僅允許核准的輸出] 模式,以達到與使用 [允許網際網路輸出] 相同的結果。 差異包括:
- 一律使用私人端點來存取 Azure 資源。
- 您必須針對每一個允許輸出連線新增規則。
- 新增完整網域名稱 (FQDN) 輸出規則會增加您的成本,因為此規則類型會使用 Azure 防火牆。 如果您使用 FQDN 輸出規則,Azure 防火牆的費用會包含在您的計費中。 如需詳細資訊,請參閱定價。
- [僅允許核准的輸出] 的預設規則設計目的是為了將資料外洩的風險降到最低。 您新增的任何輸出規則都可能會增加風險。
受控虛擬網路已預先設定必要的預設規則。 當這些資源設定為私人,或隔離模式設定為僅允許核准的輸出時,中樞也會針對中樞、中樞預設儲存體帳戶、容器登錄和金鑰保存庫設定私人端點連線。 選擇隔離模式之後,請新增您需要的任何其他輸出規則。
下圖顯示設定為 [允許網際網路輸出] 的受控虛擬網路:
下圖顯示設定為 [僅允許核准的輸出] 的受控虛擬網路:
備註
在此設定中,中樞使用的儲存體、金鑰保存庫和容器登錄會設定為私人。 因為它們是私人的,所以中樞會使用私人端點來連線。
備註
若要從公開的 Foundry 中樞存取私人儲存帳號,請在你的儲存帳號虛擬網路內使用 Foundry。 從虛擬網路內存取 Foundry 可確保你能執行如上傳檔案至私人儲存帳號等操作。 私人儲存帳號與 Foundry 樞紐的網路設定無關。 請參閱設定 Azure 儲存體防火牆和虛擬網路。
局限性
- Foundry 支援運算資源的受管虛擬網路隔離。 Foundry 不支援自帶虛擬網路來進行運算隔離。 此情境與從本地網路存取 Foundry 所需的 Azure 虛擬網路不同。
- 啟用受控虛擬網路隔離之後,就無法停用。
- 受控虛擬網路會使用私人端點連線至私人資源。 您無法在相同 Azure 資源 (例如儲存體帳戶) 上使用私人端點和服務端點。 針對所有案例使用私人端點。
- 當你刪除 Foundry 時,服務會刪除受管理的虛擬網路。
- Foundry 設定為僅允許核准的外發,可自動啟用資料外洩保護。 如果您新增其他輸出規則,例如 FQDN,則 Microsoft 無法保證可防範將資料外流到那些目的地。
- FQDN 輸出規則會增加受控虛擬網路成本,因為它們會使用 Azure 防火牆。 如需詳細資訊,請參閱定價。
- FQDN 輸出規則僅支援連接埠 80 和 443。
- 若要停用計算執行個體的公用 IP 位址,請將私人端點新增至中樞。
- 針對受控網路中的計算執行個體,請執行
az ml compute connect-ssh 以透過 SSH 連線。
- 如果您的受控網路設定為 [僅允許核准的輸出],您就無法使用 FQDN 規則來存取 Azure 儲存體帳戶。 請改用私人端點。
小提示
Foundry 會延後建立受管理的虛擬網路,直到你建立運算資源或開始手動配置。 自動建立時,建立第一個計算資源大約需要 30 分鐘的時間,因為還要佈建網路。
建立新的中樞:
登入 Azure 入口網站,從 「建立資源 」選單中選擇 Foundry。
選取 [+ 新增 Azure AI]。
在 [基本] 索引標籤上,輸入必要資訊。
從 [網路] 索引標籤中,選取 [具有網際網路輸出的私人]。
若要新增 [輸出規則],請從 [網路] 索引標籤選取 [新增使用者定義的輸出規則]。從 [輸出規則] 資訊看板輸入下列資訊:
-
規則名稱:規則的名稱。 此名稱不可與此中樞內其他名稱重複。
-
目的地類型:當網路隔離是 [具有網際網路輸出的私人] 時,私人端點是唯一的選項。 中樞受控虛擬網路不支援為所有 Azure 資源類型建立私人端點。 如需支援的資源清單,請參閱私人端點一節。
-
訂用帳戶:包含您要新增私人端點的 Azure 資源的訂用帳戶。
-
資源群組:包含您要新增私人端點的 Azure 資源的資源群組。
-
資源類型:Azure 資源的類型。
-
資源名稱:Azure 資源的名稱。
-
子資源:Azure 資源類型的子資源。
選取 [儲存]。 若要新增更多規則,請選取 [新增使用者定義的輸出規則]。
繼續建立中樞。
更新現有的中樞:
登入 Azure 入口網站,然後選取中樞以啟用受控虛擬網路隔離。
選取 [網路]> [具有網際網路輸出的私人]。
選取頁面頂端的 [儲存],以套用對受控虛擬網路的變更。
若要設定允許網際網路輸出的受控虛擬網路,您可以使用 --managed-network allow_internet_outbound 參數或具有下列項目的 YAML 設定檔:
managed_network:
isolation_mode: allow_internet_outbound
定義中樞所依賴的其他 Azure 服務的「輸出規則」。 這些規則會定義「私人端點」,讓 Azure 資源安全地與受控虛擬網路通訊。 下列規則顯示如何將私人端點新增至 Azure Blob 儲存體帳戶。 在下列範例中,將預留位置文字 <SUBSCRIPTION_ID>、<RESOURCE_GROUP> 和 <STORAGE_ACCOUNT_NAME> 取代為您自己的值。
managed_network:
isolation_mode: allow_internet_outbound
outbound_rules:
- name: added-perule
destination:
service_resource_id: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME>
spark_enabled: true
subresource_target: blob
type: private_endpoint
使用 az ml workspace create 或 az ml workspace update 命令來設定受控虛擬網路:
建立新的中樞:
下列範例會建立新的中樞。 參數 --managed-network allow_internet_outbound 會設定中樞的受控虛擬網路:
az ml workspace create --name ws --resource-group rg --kind hub --managed-network allow_internet_outbound
要使用 YAML 檔案建立集線器,請使用 --file 參數並指定包含設定的 YAML 檔案:
az ml workspace create --file hub.yaml --resource-group rg --name ws --kind hub
下列 YAML 範例會定義具有受控虛擬網路的中樞:
name: myhub
location: EastUS
managed_network:
isolation_mode: allow_internet_outbound
更新現有的中樞:
警告
更新現有的工作區以使用受控虛擬網路之前,您必須先刪除工作區的所有計算資源。 這包括計算執行個體、計算叢集和受控線上端點。
下列範例會更新現有的中樞。 參數 --managed-network allow_internet_outbound 會設定中樞的受控虛擬網路:
az ml workspace update --name ws --resource-group rg --kind hub --managed-network allow_internet_outbound
若要使用 YAML 檔案更新現有集線器,請使用參數 --file 並指定包含設定的 YAML 檔案:
az ml workspace update --file hub.yaml --name ws --kind hub --resource-group MyGroup
下列 YAML 範例會定義中樞的受控虛擬網路。 也會顯示如何將私人端點連線新增至中樞使用的資源。 在此範例中,它會新增 Azure Blob 儲存體帳戶的私人端點。 在下列範例中,將預留位置文字 <SUBSCRIPTION_ID>、<RESOURCE_GROUP> 和 <STORAGE_ACCOUNT_NAME> 取代為您自己的值:
name: myhub
managed_network:
isolation_mode: allow_internet_outbound
outbound_rules:
- name: added-perule
destination:
service_resource_id: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME>
spark_enabled: true
subresource_target: blob
type: private_endpoint
若要設定允許網際網路輸出通訊的受控虛擬網路,請搭配 ManagedNetwork 使用 IsolationMode.ALLOW_INTERNET_OUTBOUND 類別。 然後,使用 ManagedNetwork 物件來建立新的中樞,或更新現有的中樞。 若要定義中樞所依賴的 Azure 服務的「輸出規則」,請使用 PrivateEndpointDestination 類別來定義服務的新私人端點。
建立新的中樞:
下列範例會建立名為 myhub 的新中樞,其中包含名為 myrule 的輸出規則,其會新增 Azure Blob 儲存體帳戶的私人端點。 在下列範例中,將預留位置文字 <SUBSCRIPTION_ID>、<RESOURCE_GROUP> 和 <STORAGE_ACCOUNT_NAME> 取代為您自己的值:
from azure.ai.ml.entities import ManagedNetwork, IsolationMode, Hub, PrivateEndpointDestination
# Basic managed VNet configuration
network = ManagedNetwork(isolation_mode=IsolationMode.ALLOW_INTERNET_OUTBOUND)
# Hub configuration
ws = Hub(
name="myhub",
location="eastus",
managed_network=network
)
# Example private endpoint to Azure Blob Storage
rule_name = "myrule"
service_resource_id = "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME>"
subresource_target = "blob"
spark_enabled = True
# Add the outbound rule
ws.managed_network.outbound_rules = [PrivateEndpointDestination(
name=rule_name,
service_resource_id=service_resource_id,
subresource_target=subresource_target,
spark_enabled=spark_enabled)]
# Create the hub
ws = ml_client.workspaces.begin_create(ws).result()
參考資料
更新現有的中樞:
下列範例示範如何為名為 myhub 的現有中樞建立受控虛擬網路:
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
from azure.ai.ml.entities import ManagedNetwork, IsolationMode, PrivateEndpointDestination
# Get the existing hub
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, "myhub")
ws = ml_client.workspaces.get(name="myhub")
# Basic managed VNet configuration
ws.managed_network = ManagedNetwork(isolation_mode=IsolationMode.ALLOW_INTERNET_OUTBOUND)
# Example private endpoint outbound to a blob
rule_name = "myrule"
service_resource_id = "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME>"
subresource_target = "blob"
spark_enabled = True
# Add the outbound rule
ws.managed_network.outbound_rules = [PrivateEndpointDestination(
name=rule_name,
service_resource_id=service_resource_id,
subresource_target=subresource_target,
spark_enabled=spark_enabled)]
# Update the hub
ml_client.workspaces.begin_update(ws)
參考資料
小提示
Azure 會在你建立運算資源時自動設定受管理的 VNet。 如果您允許自動建立,建立第一個計算資源可能需要大約 30 分鐘的時間,因為網路也需要設定。 如果您設定 FQDN 輸出規則,則第一個 FQDN 規則會對設定時間增加約 10 分鐘。
建立新的中樞:
登入 Azure 入口網站,然後從建立資源選單中選擇 Foundry。
選取 [+ 新增 Azure AI]。
在 [基本] 索引標籤上提供必要資訊。
從 [網路] 索引標籤中,選取 [具有已核准輸出的私人]。
若要新增「輸出規則」,請從 [網路] 索引標籤選取 [新增使用者定義的輸出規則]。從 [輸出規則] 資訊看板提供下列資訊:
-
規則名稱:規則的名稱。 此名稱不可與此中樞內其他名稱重複。
-
目的地類型:私人端點、服務標籤或 FQDN。 只有在網路隔離是「具有已核准輸出的私人」時,才能使用服務標籤和 FQDN。
如果目的地類型為 [私人端點],請輸入下列資訊:
-
訂用帳戶:包含您要新增私人端點的 Azure 資源的訂用帳戶。
-
資源群組:包含您要新增私人端點的 Azure 資源的資源群組。
-
資源類型:Azure 資源的類型。
-
資源名稱:Azure 資源的名稱。
小提示
中樞受控 VNet 不針對所有 Azure 資源類型支援私人端點。 如需支援的資源清單,請參閱私人端點一節。
如果目的地類型為 [服務標籤],請輸入下列資訊:
-
服務標籤:要新增至已核准輸出規則的服務標籤。
-
通訊協定:要為服務標記允許的通訊協定。
-
連接埠範圍:要為服務標籤允許的連接埠範圍。
如果目的地類型為 [FQDN],請輸入下列資訊:
- 繼續如往常一般建立中樞。
更新現有的中樞:
登入 Azure 入口網站,然後選取您想要啟用受控虛擬網路隔離的中樞。
選取 [網路]> [具有核准輸出的私人]。
選取頁面頂端的 [儲存],以儲存對受控虛擬網路的變更。
若要設定僅允許核准的輸出通訊的受控虛擬網路,請使用 --managed-network allow_only_approved_outbound 參數或包含下列項目的 YAML 設定檔:
managed_network:
isolation_mode: allow_only_approved_outbound
您也可以為核准的輸出通訊定義輸出規則。 建立類型 service_tag、fqdn 或 private_endpoint 的輸出規則。 下列範例會將私人端點新增至 Azure Blob 資源、新增 Azure Data Factory 的服務標籤,以及新增 pypi.org 的 FQDN。 在下列範例中,將預留位置文字 <SUBSCRIPTION_ID>、<RESOURCE_GROUP> 和 <STORAGE_ACCOUNT_NAME> 取代為您的值。
這很重要
- 只有在受控 VNet 設定為
allow_only_approved_outbound 時,對服務標籤或 FQDN 新增輸出規則才會有效。
- 如果您新增輸出規則,Microsoft 無法保證可防範資料外流。
managed_network:
isolation_mode: allow_only_approved_outbound
outbound_rules:
- name: added-servicetagrule
destination:
port_ranges: 80, 8080
protocol: TCP
service_tag: DataFactory
type: service_tag
- name: add-fqdnrule
destination: 'pypi.org'
type: fqdn
- name: added-perule
destination:
service_resource_id: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME>
spark_enabled: true
subresource_target: blob
type: private_endpoint
你可以透過以下或az ml workspace createaz ml workspace update指令來設定受管理的虛擬網路:
建立新的中樞:
下列範例會使用 --managed-network allow_only_approved_outbound 參數來設定受控虛擬網路:
az ml workspace create --name ws --resource-group rg --kind hub --managed-network allow_only_approved_outbound
下列 YAML 檔案會定義具有受控虛擬網路的中樞:
name: myhub
location: EastUS
managed_network:
isolation_mode: allow_only_approved_outbound
要使用 YAML 檔案建立集線器,請使用 --file 參數:
az ml workspace create --file hub.yaml --resource-group rg --name ws --kind hub
更新現有的中樞
警告
更新現有的工作區以使用受控虛擬網路之前,您必須先刪除工作區的所有計算資源。 這包括計算執行個體、計算叢集和受控線上端點。
下列範例會使用 --managed-network allow_only_approved_outbound 參數為現有中樞設定受控虛擬網路:
az ml workspace update --name ws --resource-group rg --kind hub --managed-network allow_only_approved_outbound
下列 YAML 檔案會定義中樞的受控虛擬網路,並顯示如何新增核准的輸出規則。 在此範例中,會針對服務標籤、FQDN 和私人端點新增輸出規則:
name: myhub_dep
managed_network:
isolation_mode: allow_only_approved_outbound
outbound_rules:
- name: added-servicetagrule
destination:
port_ranges: 80, 8080
protocol: TCP
service_tag: DataFactory
type: service_tag
- name: add-fqdnrule
destination: 'pypi.org'
type: fqdn
- name: added-perule
destination:
service_resource_id: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME>
spark_enabled: true
subresource_target: blob
type: private_endpoint
若要設定僅允許核准的輸出通訊的受控虛擬網路,請使用 ManagedNetwork 類別來定義具有 IsolationMode.ALLOW_ONLY_APPROVED_OUTBOUND 的網路。 然後,您可以使用 ManagedNetwork 物件來建立新的中樞,或更新現有的中樞。 若要定義輸出規則,請使用下列類別:
| 目的地 |
班級 |
|
中樞所依賴的 Azure 服務 |
PrivateEndpointDestination |
|
Azure 服務標籤 |
ServiceTagDestination |
|
完全限定域名 (FQDN) |
FqdnDestination |
建立新的中樞:
下列範例會建立名為 myhub 的新中樞,其中包含數個輸出規則:
-
myrule - 為 Azure Blob 存放區新增私人端點。
-
datafactory - 新增服務標籤規則以與 Azure Data Factory 通訊。
這很重要
- 只有在受控 VNet 設定為
IsolationMode.ALLOW_ONLY_APPROVED_OUTBOUND 時,對服務標籤或 FQDN 新增輸出規則才會有效。
- 如果您新增輸出規則,Microsoft 無法保證可防範資料外流。
from azure.ai.ml.entities import ManagedNetwork, IsolationMode, Hub, PrivateEndpointDestination, ServiceTagDestination, FqdnDestination
# Basic managed VNet configuration
network = ManagedNetwork(isolation_mode=IsolationMode.ALLOW_ONLY_APPROVED_OUTBOUND)
# Hub configuration
ws = Hub(
name="myhub",
location="eastus",
managed_network=network
)
# Append some rules
ws.managed_network.outbound_rules = []
# Example private endpoint outbound to a blob
rule_name = "myrule"
service_resource_id = "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME>"
subresource_target = "blob"
spark_enabled = True
ws.managed_network.outbound_rules.append(
PrivateEndpointDestination(
name=rule_name,
service_resource_id=service_resource_id,
subresource_target=subresource_target,
spark_enabled=spark_enabled
)
)
# Example service tag rule
rule_name = "datafactory"
service_tag = "DataFactory"
protocol = "TCP"
port_ranges = "80, 8080-8089"
ws.managed_network.outbound_rules.append(
ServiceTagDestination(
name=rule_name,
service_tag=service_tag,
protocol=protocol,
port_ranges=port_ranges
)
)
# Example FQDN rule
ws.managed_network.outbound_rules.append(
FqdnDestination(
name="fqdnrule",
destination="pypi.org"
)
)
# Create the hub
ws = ml_client.workspaces.begin_create(ws).result()
參考資料
更新現有的中樞:
下列範例顯示如何為名為 myhub 的現有中樞設定受控虛擬網路。 它也新增數個輸出規則:
-
myrule - 為 Azure Blob 存放區新增私人端點。
-
datafactory - 新增服務標籤規則以與 Azure Data Factory 通訊。
小提示
僅在受管理的 VNet 設定為 IsolationMode.ALLOW_ONLY_APPROVED_OUTBOUND時,為服務標籤或 FQDN 新增出站規則。
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
from azure.ai.ml.entities import ManagedNetwork, IsolationMode, PrivateEndpointDestination, ServiceTagDestination, FqdnDestination
# Get the existing hub
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, "myhub")
ws = ml_client.workspaces.get()
# Basic managed VNet configuration
ws.managed_network = ManagedNetwork(isolation_mode=IsolationMode.ALLOW_ONLY_APPROVED_OUTBOUND)
# Append some rules
ws.managed_network.outbound_rules = []
# Example private endpoint outbound to a blob
rule_name = "myrule"
service_resource_id = "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE_ACCOUNT_NAME>"
subresource_target = "blob"
spark_enabled = True
ws.managed_network.outbound_rules.append(
PrivateEndpointDestination(
name=rule_name,
service_resource_id=service_resource_id,
subresource_target=subresource_target,
spark_enabled=spark_enabled
)
)
# Example service tag rule
rule_name = "datafactory"
service_tag = "DataFactory"
protocol = "TCP"
port_ranges = "80, 8080-8089"
ws.managed_network.outbound_rules.append(
ServiceTagDestination(
name=rule_name,
service_tag=service_tag,
protocol=protocol,
port_ranges=port_ranges
)
)
# Example FQDN rule
ws.managed_network.outbound_rules.append(
FqdnDestination(
name="fqdnrule",
destination="pypi.org"
)
)
# Update the hub
ml_client.workspaces.begin_update(ws)
參考資料
手動佈建受控 VNet
當您建立計算執行個體時,系統會自動佈建受控虛擬網路。 當你依賴自動配置時,建立第一個運算實例大約需要 30 分鐘 ,因為它同時也會配置網路。 如果你設定 FQDN 出站規則(僅允許僅批准模式),第一個 FQDN 規則會讓配置時間增加約 10 分鐘 。 如果您有一大組輸出規則要佈建在受控網路中,則佈建需要較長的時間才能完成。 增加的佈建時間可能會導致第一個計算執行個體的建立逾時。
若要減少等待時間並避免逾時,請手動設定受控網路。 請等待佈建完成,再建立計算執行個體。
或者,在建立中樞期間使用 provision_network_now 旗標來設定受控網路。
備註
若要將模型部署至受控計算,您必須手動布建受控網路,或先建立計算實例。 建立計算實例會自動配置受管理網路。
在建立工作區時,選取 [在建立時主動佈建受控網路] 以設定受控網路。 設定虛擬網路之後,網路資源 (例如私人端點) 會開始計費。 此選項僅在建立工作區期間可用。
下列範例示範如何在建立中樞時佈建受控虛擬網路。
az ml workspace create -n my_ai_hub_name -g my_resource_group --kind hub --managed-network AllowInternetOutbound --provision-network-now true
下列範例示範如何佈建受控虛擬網路。
az ml workspace provision-network -g my_resource_group -n my_ai_hub_name
若要檢查佈建是否已完成,請執行下列命令:
az ml workspace show -n my_ai_hub_name -g my_resource_group --query managed_network
使用 SDK 佈建受控虛擬網路,然後檢查其狀態。
from azure.identity import DefaultAzureCredential
from azure.ai.ml import MLClient
subscription_id = "00000000-0000-0000-0000-000000000000"
resource_group = "my_resource_group"
workspace_name = "my_ai_hub_name"
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace_name=workspace_name)
# Start provisioning the managed network for the workspace.
provision_result = ml_client.workspaces.begin_provision_network(workspace_name=workspace_name).result()
# Check the managed network status.
ws = ml_client.workspaces.get(name=workspace_name)
print(ws.managed_network.status)
參考資料
管理輸出規則
- 登入 Azure 入口網站,然後選取您想要啟用受控虛擬網路隔離的中樞。
- 選取 [網路功能]。 [Azure AI 輸出存取] 區段可讓您管理輸出規則。
在下列命令中,將預留位置文字 <workspace-name>、<resource-group> 和 <rule-name> 取代為您的值。 若要列出中樞的受控虛擬網路輸出規則,請執行:
az ml workspace outbound-rule list --workspace-name <workspace-name> --resource-group <resource-group>
若要檢視受控虛擬網路輸出規則的詳細資料,請執行:
az ml workspace outbound-rule show --rule <rule-name> --workspace-name <workspace-name> --resource-group <resource-group>
若要從受控虛擬網路移除輸出規則,請執行:
az ml workspace outbound-rule remove --rule <rule-name> --workspace-name <workspace-name> --resource-group <resource-group>
下列範例會顯示如何管理名為 myhub 的中樞的輸出規則。 在範例中,將預留位置文字 <some-rule-name> 取代為您的規則名稱:
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
# Connect to the hub
ws_name = "myhub"
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace_name=ws_name)
# Specify the rule name
rule_name = "<some-rule-name>"
# Get a rule by name
rule = ml_client._workspace_outbound_rules.get(resource_group, ws_name, rule_name)
# List rules for a hub
rule_list = ml_client._workspace_outbound_rules.list(resource_group, ws_name)
# Delete a rule from a hub
ml_client._workspace_outbound_rules.begin_remove(resource_group, ws_name, rule_name).result()
參考資料
必要規則的清單
小提示
這些規則會自動新增至受控虛擬網路 (VNet)。
私人端點:
- 當受管理虛擬網路的隔離模式為
Allow internet outbound時,Foundry 會自動為受管理虛擬網路建立必要的私有端點出站規則,針對中樞及相關資源(關閉公共網路存取時,Azure Key Vault、儲存帳號、Azure 容器登錄檔及中樞)。
- 當受管理的虛擬網路的隔離模式為
Allow only approved outbound時,無論這些資源的公共網路存取設定如何,Foundry 會自動從受管理的虛擬網路為中樞及相關資源(如 Azure Key Vault、儲存體帳戶、Azure 容器登錄庫及中樞)建立必要的私有端點外站規則。
Foundry 需要一組服務標籤來進行私有網路。 請勿取代必要服務標籤。 下表說明每個必需的服務標籤及其在 Foundry 中的用途。
| 服務標籤規則 |
輸入或輸出 |
目標 |
AzureMachineLearning |
輸入 |
建立、更新及刪除 Foundry 的運算實例與叢集。 |
AzureMachineLearning |
輸出 |
使用 Azure Machine Learning 服務。 筆記本中的 Python IntelliSense 使用連接埠 18881。 建立、更新和刪除 Azure Machine Learning 計算執行個體會使用連接埠 5831。 |
AzureActiveDirectory |
輸出 |
使用 Microsoft Entra ID 進行驗證。 |
BatchNodeManagement.region |
輸出 |
與 Azure Batch 後端對 Foundry 計算實例和叢集進行通訊。 |
AzureResourceManager |
輸出 |
使用 Foundry、Azure CLI 及 Microsoft Foundry SDK 來建立 Azure 資源。 |
AzureFrontDoor.FirstParty |
輸出 |
存取 Microsoft 提供的 Docker 映像。 |
MicrosoftContainerRegistry |
輸出 |
存取 Microsoft 提供的 Docker 映像。 設定 Foundry 路由器以支援 Azure Kubernetes Service。 |
AzureMonitor |
輸出 |
將記錄和計量傳送至 Azure 監視器。 只有在尚未針對工作區保護 Azure 監視器時,才需要此規則。 此輸出規則也會記錄支援事件的資訊。 |
VirtualNetwork |
輸出 |
當虛擬網路或對等的虛擬網路中存在私人端點時,則為必要項目。 |
案例特定輸出規則的清單
案例:存取公用機器學習套件
若要安裝 Python 套件以進行訓練和部署,請新增輸出 FQDN 規則以允許流量傳送至下列主機名稱:
備註
此清單涵蓋網際網路上 Python 資源的常見主機。 如果您需要存取 GitHub 存放庫或其他主機,請識別並新增您的案例所需的主機。
|
主機名稱 |
目的 |
anaconda.com
*.anaconda.com |
用來安裝預設封裝。 |
*.anaconda.org |
用來取得存放庫資料。 |
pypi.org |
如果使用者設定未覆寫,則列出預設索引中的相依性。 如果您覆寫索引,也允許 *.pythonhosted.org。 |
pytorch.org
*.pytorch.org |
由基於 PyTorch 的一些範例使用。 |
*.tensorflow.org |
由基於 TensorFlow 的一些範例使用。 |
案例:使用 Visual Studio Code
Visual Studio Code 依賴特定主機和連接埠來建立遠端連線。
主機
使用這些主機來安裝 Visual Studio Code 套件,並建立與專案計算執行個體的遠端連線。
備註
此清單未包含網路上所有 Visual Studio Code 資源所需的主機。 例如,如果您需要存取 GitHub 存放庫或其他主機,則必須識別並新增該情節所需的主機。 如需主機名稱的完整清單,請參閱 Visual Studio Code 中的網路連線。
|
主機名稱 |
目的 |
*.vscode.dev
*.vscode-unpkg.net
*.vscode-cdn.net
*.vscodeexperiments.azureedge.net
default.exp-tas.com |
存取 Web 版 VS Code (vscode.dev) 時所需。 |
code.visualstudio.com |
下載及安裝 VS Code 桌面版時所需。 VS Code Web 不需要此主機。 |
update.code.visualstudio.com
*.vo.msecnd.net |
在安裝指令碼期間將 VS Code Server 元件下載至計算執行個體。 |
marketplace.visualstudio.com
vscode.blob.core.windows.net
*.gallerycdn.vsassets.io |
下載及安裝 VS Code 延伸模組時所需。 這些主機可讓您以遠端連線方式連線到計算執行個體。 了解更多資訊,請參閱於 VS Code 中開始使用 Foundry 專案。 |
vscode.download.prss.microsoft.com |
作為 Visual Studio Code 下載 CDN。 |
港口
允許連接埠 8704 到 8710 的網路流量。 VS Code Server 會選取此範圍內的第一個可用連接埠。
案例:使用 Hugging Face 模型
若要使用 Hugging Face 模型搭配中樞,請新增輸出 FQDN 規則,以允許流量傳送至下列主機:
docker.io
*.docker.io
*.docker.com
production.cloudflare.docker.com
cdn.auth0.com
huggingface.co
cas-bridge.xethub.hf.co
cdn-lfs.huggingface.co
案例:Azure 直接銷售的模型
這些模型會在執行時安裝相依性。 新增出站 FQDN 規則,允許流量到達以下主機:
*.anaconda.org
*.anaconda.com
anaconda.com
pypi.org
*.pythonhosted.org
*.pytorch.org
pytorch.org
私人終端節點
Azure 服務目前支援以下服務的私有端點:
- 鑄造中心
- Azure AI 搜尋服務
- 鑄造工具
- Azure API 管理
- 僅支援沒有 VNet 插入的傳統層,以及具有虛擬網路整合的標準 V2 層。 如需 APIM 虛擬網路的詳細資訊,請參閱虛擬網路概念。
- Azure Container Registry
- Azure Cosmos DB (所有子資源類型)
- Azure Data Factory
- 適用於 MariaDB 的 Azure 資料庫
- 適用於 MySQL 的 Azure 資料庫
- 適用於 PostgreSQL 的 Azure 資料庫單一伺服器
- 適用於 PostgreSQL 的 Azure 資料庫彈性伺服器
- Azure Databricks
- Azure 事件中樞
- Azure Key Vault
- Azure Machine Learning
- Azure Machine Learning 登錄
- Azure Cache for Redis
- Azure SQL Server
- Azure 儲存體 (所有子資源類型)
- Application Insights (透過 PrivateLinkScopes)
當您建立私人端點時,您會提供端點所連線的資源類型和子資源。 某些資源有多個類型和子資源。 如需詳細資訊,請參閱什麼是私人端點。
當您為中樞相依性資源建立私人端點時,例如 Azure 儲存體、Azure Container Registry 和 Azure Key Vault,資源可以位於不同的 Azure 訂用帳戶中。 不過,資源必須位於與中樞相同的租用戶中。
如果目標資源是前面列出的 Azure 資源,服務會自動為連線建立私人端點。 提供私人端點的有效目標識別碼。 針對連線,目標識別碼可以是父資源的 Azure Resource Manager 識別碼。 將目標識別碼包含在連線的目標或 metadata.resourceid 中。 關於連線的更多資訊,請參見 如何在 Foundry 入口新增連線。
私人端點的核准
要在受管虛擬網路中使用 Foundry 建立私有端點連線,工作區管理身份(系統指派或使用者指派)與建立私有端點的使用者身份必須具備核准目標資源私有端點連線的權限。 過去,Foundry 服務透過自動分配角色來授予此權限。 由於自動角色指派的安全性考量,從 2025 年 4 月 30 日開始,服務會中止此自動權限授與邏輯。 指派 Azure AI 企業網路連線審核者角色 ,或自訂角色,並賦予目標資源類型的私有端點連線權限,並將此角色授權給 Foundry 中樞的管理身份,讓 Foundry 核准目標 Azure 資源的私有端點連線。
以下是 Azure AI 企業網路連線核准者角色所涵蓋的私人端點目標資源類型清單:
- Azure 應用程式閘道
- Azure 監視器
- Azure AI 搜尋服務
- Azure 事件中樞
- Azure SQL Database
- Azure 儲存體
- Azure Machine Learning 工作區
- Azure Machine Learning 註冊表
- 鑄造廠
- Azure Key Vault
- Azure Cosmos DB
- 適用於 MySQL 的 Azure 資料庫
- 適用於 PostgreSQL 的 Azure 資料庫
- 鑄造工具
- Azure Cache for Redis
- Azure Container Registry
- Azure API 管理
若要為 Azure AI 企業網路連線核准者角色未涵蓋的目標資源類型 (例如 Azure Data Factory、Azure Databricks 和 Azure 函式應用程式) 建立私人端點輸出規則,請使用自訂的範圍縮減角色 (只依據要在目標資源類型上核准私人端點連線所需的動作進行定義)。
若要建立預設工作區資源的私人端點輸出規則,工作區建立會透過角色指派授與必要的權限,因此您不需要採取任何其他動作。
選擇 Azure 防火牆版本,只允許核准的外發
當您 [僅允許核准的輸出] 模式中新增輸出 FQDN 規則時,Azure 防火牆會部署。 Azure 防火牆費用會新增至您的帳單。 根據預設,系統會建立標準版本的 Azure 防火牆。 或選取基本版本。 隨時變更防火牆版本。 若要了解哪個版本符合您的需求,請移至選擇正確的 Azure 防火牆版本。
這很重要
在您新增輸出 FQDN 規則之前,不會建立 Azure 防火牆。 如需價格的詳細資訊,請參閱 Azure 防火牆價格並檢視標準版本的價格。
使用這些索引標籤來查看如何為受控虛擬網路選取防火牆版本。
選取 [僅允許核准的輸出] 模式之後,會出現一個選項供您選取 Azure 防火牆版本 (SKU)。 選取 [標準] 或 [基本]。 選取 [儲存]。
若要使用 Azure CLI 設定防火牆版本,請使用 YAML 檔案並指定 firewall_sku。 下列範例會將防火牆 SKU 設定為 basic:
name: test-ws
resource_group: test-rg
location: eastus2
managed_network:
isolation_mode: allow_only_approved_outbound
outbound_rules:
- category: required
destination: 'contoso.com'
name: contosofqdn
type: fqdn
firewall_sku: basic
tags: {}
若要使用 Python SDK 設定防火牆版本,請設定 firewall_sku 物件的 ManagedNetwork 屬性。 下列範例會將防火牆 SKU 設定為 basic:
from azure.ai.ml.entities import ManagedNetwork, IsolationMode
network = ManagedNetwork(isolation_mode=IsolationMode.ALLOW_ONLY_APPROVED_OUTBOUND,
firewall_sku='basic')
參考資料
定價
中樞管理的虛擬網路功能是免費的,但你要為管理虛擬網路使用的以下資源付費:
Azure Private Link - 保護受管理虛擬網路與 Azure 資源間通訊的私有端點使用 Azure Private Link。 針對價格,請參閱 Azure Private Link 價格。
FQDN 外發規則 - Azure 防火牆會強制執行這些規則。 如果您使用輸出 FQDN 規則,Azure 防火牆費用就會顯示在您的帳單上。 預設會使用標準版本的 Azure 防火牆。 若要選取基本版本,請參閱選取 Azure 防火牆版本。 針對各個中樞佈建 Azure 防火牆。
這很重要
在您新增輸出 FQDN 規則之前,不會建立 Azure 防火牆。 如果您未使用 FQDN 規則,則不會向您收取 Azure 防火牆的費用。 針對價格,請參閱 Azure 防火牆價格。
相關內容