注释
本文中提供的信息特定于基于中心的项目,不适用于 Azure AI Foundry 项目。 有关详细信息,请参阅项目类型。
Azure AI Foundry 中心默认使用共享密钥访问其默认的 Azure 存储帐户。 利用基于密钥的授权,拥有对存储帐户的密钥和访问权限的任何人都可以访问数据。
若要降低未经授权的访问风险,请禁用基于密钥的授权,而是使用 Microsoft Entra ID 进行授权。 此配置使用 Microsoft Entra ID 值来授权访问存储帐户。 用于访问存储的标识是用户的标识或托管标识。 用户标识用于在 Azure 机器学习工作室中查看数据或在使用用户标识进行身份验证时运行笔记本。 机器学习使用托管标识来访问存储帐户,例如,当托管标识运行训练作业时。
将中心与禁用共享密钥的存储帐户配合使用目前为预览版。
先决条件
需要已禁用共享密钥授权的现有存储帐户。 若要详细了解为存储帐户禁用共享密钥授权的过程和影响,请参阅阻止对 Azure 存储帐户进行共享密钥授权。
安装 SDK v2。
重要
本文中的步骤需要使用 azure-ai-ml Python 包版本 1.17.0。 若要确定已安装的包版本,请使用 Python 开发环境中的 pip list 命令。
安装 azure-identity:pip install azure-identity。 如果要在笔记本单元格中工作,请使用 %pip install azure-identity。
提供订阅的详细信息:
# Enter details of your subscription
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
获取订阅的句柄。 本文中的所有 Python 代码都使用 ml_client。
# get a handle to the subscription
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group)
(可选)如果有多个帐户,请添加要在 DefaultAzureCredential 中使用的 Microsoft Entra ID 的租户 ID。 在 Azure 门户中的“Microsoft Entra ID”>“外部标识”中查找租户 ID。
DefaultAzureCredential(interactive_browser_tenant_id="<TENANT_ID>")
(可选)如果你在 Azure 政府 - 美国或世纪互联运营的 Azure 区域工作,必须指定要在其中进行身份验证的云。 可以在 DefaultAzureCredential 中指定这些区域。
from azure.identity import AzureAuthorityHosts
DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_GOVERNMENT))
若要使用本文档中的 CLI 命令,需要 Azure CLI 和 Azure 机器学习扩展。
如果使用的是 Azure Cloud Shell,可通过浏览器访问 CLI(它位于云端)。
重要
本文中的步骤需要将 Azure CLI 扩展用于机器学习 2.27.0 版或更高版本。 若要确定已安装的扩展版本,请使用 Azure CLI 中的 az version 命令。 在返回的扩展集合中,找到 ml 扩展。 此代码示例显示示例返回值:
{
"azure-cli": "2.61.0",
"azure-cli-core": "2.61.0",
"azure-cli-telemetry": "1.1.0",
"extensions": {
"ml": "2.27.0"
}
}
- 现有 Azure Key Vault 实例。
- 要用于中心的存储帐户和密钥保管库的 Azure 资源管理器 ID。
创建新的中心
创建新中心时,创建过程可以自动禁用共享密钥访问。 还可以创建存储帐户、禁用共享密钥访问,并在中心创建期间使用它。
本部分介绍如何创建具有对存储帐户的基于标识的访问权限的中心。
在Azure 门户中,搜索 Azure AI Foundry。 在左侧菜单中,选择 “AI 中心”,然后选择“ + 创建>中心”。
在“ 基本信息 ”选项卡上,输入中心详细信息,然后选择“ 存储 ”选项卡。选择之前创建的存储帐户。
在“标识”选项卡上,将“存储帐户访问”设置为“基于标识的访问”。 启用 “禁用共享密钥访问”。
继续中心创建过程。 创建中心时,会自动为托管标识分配访问存储帐户所需的权限。
使用 SDK 创建中心时,请为中心设置 system_datastores_auth_mode="identity"。 若要使用预先存在的存储帐户,请使用 storage_account 参数指定现有存储帐户的资源管理器 ID:
# Creating a unique hub name with current datetime to avoid conflicts
from azure.ai.ml.entities import Hub
import datetime
hub_name = "mlw-hub-prod-" + datetime.datetime.now().strftime(
"%Y%m%d%H%M"
)
ws_hub = Hub(
name=hub_name,
location="eastus",
display_name="Hub-example",
description="This example shows how to create a Hub",
hbi_workspace=False,
tags=dict(purpose="demo"),
storage_account="{existing_storage_account with AllowSharedKeyAccess=false}",
system_datastores_auth_mode="identity",
)
created_hub = ml_client.workspaces.begin_create(ws_hub).result()
print(created_hub)
若要创建对存储帐户使用 Microsoft Entra ID 授权的新中心,请使用将 system_datastores_auth_mode 设置为 identity 的 YAML 配置文件。 还可以使用 storage_account 条目指定现有存储帐户的资源管理器 ID。
此示例 YAML 文件演示如何将中心设置为使用托管标识和现有存储帐户:
$schema: https://azuremlschemas.azureedge.net/latest/workspace.schema.json
name: mlw-basicex-prod
location: eastus
display_name: Bring your own dependent resources-example
description: This configuration specifies a workspace configuration with existing dependent resources
storage_account: <your-storage-account-resource-id>
system_datastores_auth_mode: identity
tags:
purpose: demonstration
可以将此 YAML 文件与 az ml workspace create 命令和 --file 参数结合使用:
az ml workspace create -g <resource-group-name> --kind hub --file workspace.yml
在 JSON 模板示例中,用自己的值替换以下占位符:
<workspace-name>
<workspace-friendly-name>
<storage-account-arm-resource-id>
<key-vault-arm-resource-id>
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources":
[
{
"type": "Microsoft.MachineLearningServices/workspaces",
"apiVersion": "2024-04-01",
"name": "<workspace-name>",
"location": "[resourceGroup().location]",
"sku":
{
"name": "Basic",
"tier": "Basic"
},
"kind": "Hub",
"identity":
{
"type": "SystemAssigned"
},
"properties":
{
"friendlyName": "<workspace-friendly-name>",
"storageAccount": "<storage-account-arm-resource-id>",
"keyVault": "<key-vault-arm-resource-id>",
"systemDatastoresAuthMode": "identity",
"managedNetwork":
{
"isolationMode": "Disabled"
},
"publicNetworkAccess": "Enabled"
}
}
]
}
有关如何部署 Azure 资源管理器模板(ARM 模板)的信息,请参阅以下文章:
创建中心后,确定需要使用中心的所有用户,例如数据科学家。 必须在存储帐户的 Azure 基于角色的访问控制 (RBAC) 中,为这些用户分配“存储 Blob 数据参与者”和“存储文件数据特权参与者”角色。 如果这些用户只需要读取访问权限,请改用“存储 Blob 数据读者”和“存储文件数据特权读者”角色。 有关详细信息,请参阅 角色分配。
更新现有中心
如果有现有的 Azure AI Foundry 中心,请按照本部分中的步骤更新中心,使用 Microsoft Entra ID 授权对存储帐户的访问。 然后在存储帐户上禁用共享密钥访问。
转到 Azure 门户并选择“Azure AI Foundry 中心”。
在左侧菜单上,选择“属性”。 在窗格底部,将“存储帐户访问”设置为“基于标识的访问”。 选择窗格顶部的“保存”以保存配置。
若要更新现有中心,请为中心设置 system_datastores_auth_mode = "identity"。 以下代码示例展示了名为 test-ws1 的 hub 更新:
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group)
ws = ml_client.workspaces.get(name="test-ws1")
ws.system_datastores_auth_mode = "identity"
ws = ml_client.workspaces.begin_update(workspace=ws).result()
若要更新现有中心,请使用 az ml workspace update 命令并指定 --system-datastores-auth-mode identity。 以下示例展示了一个名为myhub的集线器更新:
az ml workspace update --name myhub --system-datastores-auth-mode identity
在 JSON 模板示例中,用自己的值替换以下占位符:
-
[工作区名称]
-
[工作区友好名称]
-
[存储帐户 ARM 资源 ID]
-
[Key Vault ARM 资源 ID]
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources":
[
{
"type": "Microsoft.MachineLearningServices/workspaces",
"apiVersion": "2024-04-01",
"name": "[workspace name]",
"location": "[resourceGroup().location]",
"sku":
{
"name": "Basic",
"tier": "Basic"
},
"kind": "Hub",
"identity":
{
"type": "SystemAssigned"
},
"properties":
{
"friendlyName": "[workspace friendly name]",
"storageAccount": "[Storage Account ARM resource ID]",
"keyVault": "[Key Vault ARM resource ID]",
"systemDatastoresAuthMode": "identity",
"managedNetwork":
{
"isolationMode": "Disabled"
},
"publicNetworkAccess": "Enabled"
}
}
]
}
有关如何部署 ARM 模板的信息,请参阅以下文章:
向用户分配角色
更新中心后,请更新存储帐户以禁用共享密钥访问。 有关详细信息,请参阅阻止对 Azure 存储帐户进行共享密钥授权。
还必须标识需要访问默认数据存储(如数据科学家)的所有用户。 必须在存储帐户的 Azure RBAC 中,为这些用户分配“存储 Blob 数据参与者”和“存储文件数据特权参与者”角色。 如果这些用户只需要读取访问权限,请改用“存储 Blob 数据读者”和“存储文件数据特权读者”角色。 有关详细信息,请参阅角色分配部分。
还原为使用共享密钥
若要将中心还原回使用共享密钥访问存储帐户,请使用以下信息。
转到 “属性 ”并选择 “基于凭据的访问”。
选择“保存”。
若要将中心配置为再次使用共享密钥,请为中心设置 system_datastores_auth_mode = "accesskey"。 此代码段更新名为 test-ws1 的中心:
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group)
ws = ml_client.workspaces.get(name="test-ws1")
ws.system_datastores_auth_mode = "accesskey"
ws = ml_client.workspaces.begin_update(workspace=ws).result()
若要将中心配置为再次使用共享密钥,请使用 az ml workspace update 命令并指定 --system-datastores-auth-mode accesskey。 此示例更新了一个名为myhub的集线器:
az ml workspace update --name myhub --system-datastores-auth-mode accesskey
如果有现有的 Azure AI Foundry 中心,请按照本部分中的步骤更新中心,使用 Microsoft Entra ID 授权对存储帐户的访问。 然后,在存储帐户上禁用共享密钥访问。
在 JSON 模板示例中,用自己的值替换以下占位符:
-
[工作区名称]
-
[工作区友好名称]
-
[存储帐户 ARM 资源 ID]
-
[Key Vault ARM 资源 ID]
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources":
[
{
"type": "Microsoft.MachineLearningServices/workspaces",
"apiVersion": "2024-04-01",
"name": "[workspace name]",
"location": "[resourceGroup().location]",
"sku":
{
"name": "Basic",
"tier": "Basic"
},
"kind": "Hub",
"identity":
{
"type": "SystemAssigned"
},
"properties":
{
"friendlyName": "[workspace friendly name]",
"storageAccount": "[Storage Account ARM resource ID]",
"keyVault": "[Key Vault ARM resource ID]",
"systemDatastoresAuthMode": "accesskey",
"managedNetwork":
{
"isolationMode": "Disabled"
},
"publicNetworkAccess": "Enabled"
}
}
]
}
若要了解如何部署 ARM 模板,请参阅以下文章:
创建中心后,标识将使用它的所有用户,例如数据科学家。 必须在存储帐户的 Azure RBAC 中,为这些用户分配“存储 Blob 数据参与者”和“存储文件数据特权参与者”角色。 如果这些用户只需要读取访问权限,请改用“存储 Blob 数据读者”和“存储文件数据特权读者”角色。 有关详细信息,请参阅角色分配部分。
还原集线器后,更新存储帐户以启用共享密钥访问。 有关详细信息,请参阅阻止对 Azure 存储帐户进行共享密钥授权。
中心存储帐户角色分配的应用场景
若要使用已禁用共享密钥访问的存储帐户,需要向用户或中心的托管标识授予更多角色。 中心默认具有系统分配的托管标识。 某些应用场景需要用户分配的托管标识。 下表总结了需要额外角色分配的应用场景。
| 情景 |
Microsoft Entra ID |
必需的角色 |
注释 |
| Azure AI 语音 |
用户的标识 |
存储 Blob 数据参与者 存储文件数据特权参与者 |
|
| 模型即服务 |
系统分配的托管标识 |
存储 Blob 数据参与者 |
中心的托管标识。
预配中心时自动分配了角色。
请勿手动更改此角色分配。 |
| Azure AI 搜索 |
系统分配的托管标识 |
存储 Blob 数据参与者 |
中心的托管标识。
预配中心时自动分配了角色。
请勿手动更改此角色分配。 |
| 微调开源软件模型 |
用户分配的管理标识 |
存储 Blob 数据参与者 |
|
| 提示流 |
用户的标识 |
存储 Blob 数据参与者 存储文件数据特权参与者 |
|
| 添加和管理自己的数据 |
用户的标识 |
存储 Blob 数据参与者 |
|
相关内容