基于中心的项目的网络隔离包含两部分:访问 Azure AI Foundry 中心,以及隔离中心和项目中的计算资源(如计算实例、无服务器和托管在线终结点)。 本文介绍后一部分内容。 该图表对此进行了强调说明。 使用中心内置网络隔离来保护计算资源。
设置以下网络隔离设置:
网络隔离体系结构和隔离模式
启用托管虚拟网络隔离时,会为中心创建托管虚拟网络。 为中心创建的托管计算资源会自动使用此托管虚拟网络。 托管虚拟网络可以为中心使用的 Azure 资源(如 Azure 存储、Azure Key Vault 和 Azure 容器注册表)使用专用终结点。
为托管虚拟网络选择以下三种出站模式之一:
| 出站模式 |
DESCRIPTION |
方案 |
| 允许 Internet 出站 |
允许来自托管虚拟网络的所有 Internet 出站流量。 |
你希望不受限制地访问 Internet 上的机器学习资源,例如 Python 包或预先训练的模型。1 |
| 仅允许已批准的出站 |
使用服务标记允许出站流量。 |
* 你希望最大程度地降低数据外泄风险,但需要在专用环境中准备所有必需的机器学习项目。 * 你希望配置对经批准的服务列表、服务标记或完全限定域名 (FQDN) 的出站访问权限。 |
| 已禁用 |
入站和出站流量不受限制。 |
需要从中心进行公共入站和出站。 |
1 可以使用“仅允许经批准的出站”模式下的出站规则,达到与使用“允许 Internet 出站”模式相同的效果。 不同之处在于:
- 始终使用专用终结点访问 Azure 资源。
- 必须为需要允许的每个出站连接添加规则。
- 添加完全限定域名 (FQDN) 出站规则会增加成本,因为此规则类型使用 Azure 防火墙。 如果使用 FQDN 出站规则,Azure 防火墙费用将包含在你的账单中。 有关详细信息,请参阅定价。
- “仅允许批准的出站连接”的默认规则旨在最大程度地减少数据外泄的风险。 添加的任何出站规则都可能会增加风险。
托管虚拟网络预先配置了所需的默认规则。 当这些资源设置为专用或隔离模式设置为仅允许经批准的出站时,中心还会配置与中心、中心的默认存储帐户、容器注册表和密钥保管库之间的专用终结点连接。 选择隔离模式后,添加所需的其他出站规则。
下图显示了配置为“允许 Internet 出站”的托管虚拟网络:
下图显示了配置为“仅允许已批准的出站”的托管虚拟网络:
注释
在此配置中,中心使用的存储、密钥保管库和容器注册表均设置为专用。 由于它们是专用的,因此中心使用专用终结点来访问它们。
注释
若要从公共 AI Foundry 中心访问专用存储帐户,请在存储帐户的虚拟网络中使用 AI Foundry。 从虚拟网络内部访问 AI Foundry 可确保可以执行将文件上传到专用存储帐户之类的操作。 专用存储帐户独立于 AI Foundry 中心的网络设置。 请参阅配置 Azure 存储防火墙和虚拟网络。
先决条件
开始之前,请确保你已满足以下先决条件:
一份 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)。
本文中的 CLI 示例假定你使用的是与 Bash 兼容的 Shell。 例如,使用 Linux 系统或适用于 Linux 的 Windows 子系统。
本文中的 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 机器学习 Python SDK v2。 有关 SDK 的详细信息,请参阅安装适用于 Azure 机器学习的 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 AI Foundry 支持对计算资源进行托管虚拟网络隔离。 Azure AI Foundry 不支持使用你自己的虚拟网络进行计算隔离。 此方案与从本地网络访问 Azure AI Foundry 所需的 Azure 虚拟网络不同。
- 启用托管虚拟网络隔离后,将无法禁用它。
- 托管虚拟网络使用专用终结点连接到专用资源。 你无法在同一 Azure 资源(如存储帐户)上同时使用专用终结点和服务终结点。 在所有方案中都使用专用终结点。
- 删除 Azure AI Foundry 时,服务会删除托管虚拟网络。
- 在“仅允许经批准的出站”模式下,Azure AI Foundry 会自动启用数据外泄防护。 如果添加其他出站规则(如 FQDN),Microsoft 无法保证能防止数据外泄到这些目标。
- FQDN 出站规则会增加托管虚拟网络的成本,因为它们使用 Azure 防火墙。 有关详细信息,请参阅定价。
- FQDN 出站规则仅支持端口 80 和 443。
- 若要禁用计算实例的公共 IP 地址,请向中心添加专用终结点。
- 对于托管网络中的计算实例,运行
az ml compute connect-ssh 以通过 SSH 连接。
- 如果将托管网络配置为“仅允许已批准的出站”,则无法使用 FQDN 规则访问 Azure 存储帐户。 请改用专用终结点。
小窍门
Azure AI Foundry 会延迟创建托管虚拟网络,直到创建计算资源或你手动开始预配。 通过自动创建,创建第一个计算资源可能需要约 30 分钟时间,因为这还会预配网络。
创建新的中心:
登录 Azure 门户,然后从“创建资源”菜单中选择“Azure AI Foundry”。
选择“+ 新建 Azure AI”。
在“基本信息”选项卡上输入所需信息。
在“网络”选项卡中,选择“Internet 出站专用”。
若要添加出站规则,请从“网络”选项卡中选择“添加用户定义的出站规则”。从“出站规则”边栏,输入以下信息:
-
规则名称:规则的名称。 该名称对于此中心来说必须是唯一的。
-
目标类型:当网络隔离为“专用(带 Internet 出站)”时,唯一选项是“专用终结点”。 中心管理的虚拟网络不支持为所有 Azure 资源类型创建专用终结点。 请参阅 专用终结点 部分查看受支持资源的列表。
-
订阅:包含要为其添加专用终结点的 Azure 资源的订阅。
-
资源组:包含要为其添加专用终结点的 Azure 资源的资源组。
-
资源类型:Azure 资源的类型。
-
资源名称:Azure 资源的名称。
-
子资源:Azure 资源类型的子资源。
选择“保存”。 若要添加更多规则,请选择“添加用户定义的出站规则”。
继续创建中心。
更新现有中心:
登录到 Azure 门户,然后选择要启用托管虚拟网络隔离的中心。
选择“网络”>“专用(带 Internet 出站)”。
选择页面顶部的“保存”,将更改应用到托管虚拟网络。
若要配置允许 Internet 出站的托管虚拟网络,请使用 --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
若要配置允许 Internet 出站的托管虚拟网络,请使用带有 IsolationMode.ALLOW_INTERNET_OUTBOUND的 ManagedNetwork 类。 然后,使用 ManagedNetwork 对象创建新中心或更新现有中心。 若要定义中心所依赖的 Azure 服务的出站规则,请使用 PrivateEndpointDestination 类定义服务的新专用终结点。
创建新的中心:
以下示例创建一个名为 myhub 的新中心,其中包含一个名为 myrule 的出站规则,该规则为 Azure Blob 存储帐户添加专用终结点。 在以下示例中,将占位符文本 <SUBSCRIPTION_ID>、<RESOURCE_GROUP> 和 <STORAGE_ACCOUNT_NAME> 替换为你自己的值:
# 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 rulerule
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 的现有中心创建托管虚拟网络:
# 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
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 门户,然后从“创建资源”菜单中选择“Azure AI 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 数据工厂添加服务标记以及向 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 create 或 az 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 数据工厂通信。
重要
- 仅当托管 VNet 配置为
IsolationMode.ALLOW_ONLY_APPROVED_OUTBOUND 时,添加服务标记或 FQDN 的出站规则才有效。
- 如果添加出站规则,Microsoft 无法保证能防止数据外泄。
# 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 数据工厂通信。
小窍门
仅当托管 VNet 配置为 IsolationMode.ALLOW_ONLY_APPROVED_OUTBOUND 时,为服务标记或 FQDN 添加出站才有效。
# 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> 替换为你的规则名称:
# 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 时,Azure AI Foundry 会自动从托管虚拟网络为禁用公共网络访问的中心及相关资源(Azure Key Vault、存储帐户、Azure 容器注册表和中心)创建所需的专用终结点出站规则。
- 当托管虚拟网络的隔离模式为
Allow only approved outbound 时,无论相关资源(Azure Key Vault、存储帐户、Azure 容器注册表和中心)的公共网络访问设置如何,Azure AI Foundry 都会从托管虚拟网络自动为中心及关联资源创建所需的专用终结点出站规则。
Azure AI Foundry 需要一组用于专用网络的服务标记。 请勿替换所需的服务标记。 下表描述了每个必需的服务标记及其在 Azure AI Foundry 中的目的。
| 服务标签规则 |
入站或出站 |
目的 |
AzureMachineLearning |
入站 |
创建、更新和删除 Azure AI Foundry 计算实例和群集。 |
AzureMachineLearning |
出站 |
使用 Azure 机器学习服务。 笔记本中的 Python IntelliSense 使用端口 18881。 创建、更新和删除 Azure 机器学习计算实例时使用端口 5831。 |
AzureActiveDirectory |
出站 |
使用 Microsoft Entra ID 进行身份验证。 |
BatchNodeManagement.region |
出站 |
与 Azure Batch 后端通信,用于 Azure AI Foundry 计算实例和群集。 |
AzureResourceManager |
出站 |
使用 Azure AI Foundry、Azure CLI 和 Azure AI Foundry SDK 创建 Azure 资源。 |
AzureFrontDoor.FirstParty |
出站 |
访问由 Microsoft 提供的 docker 映像。 |
MicrosoftContainerRegistry |
出站 |
访问由 Microsoft 提供的 docker 映像。 为 Azure Kubernetes 服务设置 Azure AI Foundry 路由器。 |
AzureMonitor |
出站 |
将日志和指标发送到 Azure Monitor。 仅当尚未保护工作区的 Azure Monitor 时,才需要。 此出站规则还会记录支持事件的信息。 |
VirtualNetwork |
出站 |
当虚拟网络或对等虚拟网络中存在专用终结点时所需。 |
特定于方案的出站规则列表
场景:访问公共机器学习包
若要安装用于训练和部署的 Python 包,请添加出站 FQDN 规则以允许以下主机名的出站流量:
注释
此列表涵盖了 Internet 上 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 包,并建立与项目计算实例的远程连接。
注释
这不是 Internet 上所有 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 中的 Azure AI Foundry 项目入门中了解详细信息。 |
vscode.download.prss.microsoft.com |
用作 Visual Studio Code 下载 CDN。 |
港口
允许流向端口 8704 到 8710 的网络流量。 VS Code Server 会在此范围内选择第一个可用端口。
场景:使用 Hugging Face 模型
要将 HuggingFace 模型与中心配合使用,请添加出站 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 Foundry 中心
- Azure AI 搜索
- Azure AI 服务
- Azure API 管理
- 仅支持无 VNet 注入的经典层和具有虚拟网络集成的标准 V2 层。 有关 API 管理虚拟网络的详细信息,请参阅虚拟网络概念。
- Azure 容器注册表
- Azure Cosmos DB(所有子资源类型)
- Azure 数据工厂
- Azure Database for MariaDB
- Azure Database for MySQL
- Azure Database for PostgreSQL 单一服务器
- Azure Database for PostgreSQL 灵活服务器
- Azure Databricks
- Azure 事件中心
- Azure Key Vault
- Azure 机器学习
- Azure 机器学习注册表
- Azure Cache for Redis
- Azure SQL Server
- Azure 存储(所有子资源类型)
- Application Insights(通过 PrivateLinkScopes)
创建专用终结点时,需要提供终结点连接到的资源类型和子资源。 某些资源有多个类型和子资源。 有关详细信息,请参阅什么是专用终结点。
为中心依赖项资源(例如 Azure 存储、Azure 容器注册表和 Azure Key Vault)创建专用终结点时,该资源可以位于不同的 Azure 订阅中。 但是,资源必须与中心位于同一租户中。
如果目标资源是前面列出的 Azure 资源之一,服务会自动创建专用终结点进行连接。 为专用终结点提供有效的目标 ID。 对于连接,目标 ID 可以是父资源的 Azure 资源管理器 ID。 在连接的目标中或 metadata.resourceid 中包含目标 ID。 有关连接的详细信息,请参阅如何在 Azure AI Foundry 门户添加新连接。
批准专用终结点
若要使用 Azure AI Foundry 在托管虚拟网络中建立专用终结点连接,工作区托管标识(系统分配或用户分配)以及创建专用终结点的用户标识必须对目标资源上的专用终结点连接具有审批权限。 以前,Azure AI Foundry 服务通过自动角色分配授予此权限。 由于自动角色分配存在安全隐患,从 2025 年 4 月 30 日开始,服务将停止使用此自动权限授予逻辑。 分配 Azure AI 企业网络连接批准者角色或对目标资源类型具有必要的专用终结点连接权限的自定义角色,并将此角色授予 Foundry 中心的托管标识,以允许 Azure AI Foundry 批准与目标 Azure 资源的专用终结点连接。
下面是 Azure AI 企业网络连接审批者角色涵盖的专用终结点目标资源类型列表:
- Azure 应用程序网关
- Azure Monitor
- Azure AI 搜索
- Azure 事件中心
- Azure SQL 数据库
- Azure 存储
- Azure 机器学习工作区
- Azure 机器学习注册表
- Azure AI Foundry
- Azure Key Vault
- Azure Cosmos DB
- Azure Database for MySQL
- Azure Database for PostgreSQL
- Azure AI 服务
- Azure Cache for Redis
- Azure 容器注册表
- Azure API 管理
对于 Azure AI 企业网络连接审批者角色未涵盖的目标资源类型(如 Azure 数据工厂、Azure Databricks 和 Azure Function Apps),若要创建专用终结点出站规则,请使用仅由在目标资源类型上批准专用终结点连接所需的操作定义的自定义、范围缩小的角色。
若要为默认工作区资源创建专用终结点出站规则,工作区创建会通过角色分配授予所需权限,因此你无需执行任何额外操作。
为仅允许已批准的出站选择 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 设置防火墙版本,请设置 ManagedNetwork 对象的 firewall_sku 属性。 以下示例将防火墙 SKU 设置为 basic:
network = ManagedNetwork(isolation_mode=IsolationMode.ALLOW_ONLY_APPROVED_OUTBOUND,
firewall_sku='basic')
定价
中心托管虚拟网络功能是免费的,但会对托管虚拟网络使用的以下资源收费:
Azure 专用链接 - 用于保护托管虚拟网络与 Azure 资源之间的通信的专用终结点使用 Azure 专用链接。 有关定价,请参阅 Azure 专用链接定价。
FQDN 出站规则 - Azure 防火墙会强制实施这些规则。 如果使用出站 FQDN 规则,Azure 防火墙费用会显示在你的账单中。 默认情况下会使用标准版本的 Azure 防火墙。 若要选择基本版,请参阅选择 Azure 防火墙版本。 Azure 防火墙是按中心预配的。
重要
在添加出站 FQDN 规则之前,不会创建 Azure 防火墙。 如果不使用 FQDN 规则,则无需支付 Azure 防火墙费用。 有关定价,请参阅 Azure 防火墙定价。
相关内容