注释
本文中提供的信息特定于 基于中心的项目,不适用于 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>")
from azure.identity import AzureAuthorityHosts
DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_GOVERNMENT))
若要使用本文档中的 CLI 命令,需要 Azure CLI 和 ml 扩展。
如果使用的是 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 存储帐户和 Azure Key Vault 的 Azure 资源管理器 ID。
创建新的中心
创建新中心时,创建过程可以自动禁用共享密钥访问。 还可以创建 Azure 存储帐户、禁用共享密钥访问,并在中心创建期间使用它。
在 Azure 门户中,搜索 Azure AI Foundry
。 从左侧菜单中选择AI 中心,然后选择+ 创建,最后选择中心。
在“基本信息”选项卡中,输入中心详细信息,然后选择“存储”选项卡。选择之前创建的 Azure 存储帐户。
在“标识”选项卡中,将“存储帐户访问类型”设置为“基于标识”,然后启用“禁用共享密钥访问”选项。
继续中心创建过程。 创建中心时,会自动为托管标识分配访问存储帐户所需的权限。
使用 SDK 创建中心时,请设置 system_datastores_auth_mode="identity"
。 若要使用预先存在的存储帐户,请使用 storage_account
参数指定现有存储帐户的 Azure 资源管理器 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
项指定现有存储帐户的 Azure 资源 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 模板示例中,用自己的值替换以下占位符:
- [工作区名称]
- [工作区友好名称]
- [存储帐户 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 基于角色的存储帐户访问控制中为这些用户分配“存储 Blob 数据参与者”和“存储文件数据特权参与者”角色。 如果这些用户只需要读取访问权限,请改用“存储 Blob 数据读者”和“存储文件数据特权读者”角色。 有关详细信息,请访问角色分配部分。
更新现有中心
如果有现有的 Azure AI Foundry 中心,请使用本部分中的步骤更新中心以使用 Microsoft Entra ID 来授权对存储帐户的访问。 然后,在存储帐户上禁用共享密钥访问。
转到 Azure 门户并选择“Azure AI Foundry 中心”。
在左侧菜单上,选择“属性”。 从页面底部,将“存储帐户访问类型”设置为“基于标识”。 从页面顶部选择“保存”以保存配置。
若要更新现有中心,请为中心设置 system_datastores_auth_mode = "identity"
。 此代码示例显示了名为 test-ws1
的中心的更新:
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 基于角色的存储帐户访问控制中为这些用户分配“存储 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 基于角色的存储帐户访问控制中为这些用户分配“存储 Blob 数据参与者”和“存储文件数据特权参与者”角色。 如果这些用户只需要读取访问权限,请改用“存储 Blob 数据读者”和“存储文件数据特权读者”角色。 有关详细信息,请访问本文档中的角色分配资源。
还原中心后,请更新存储帐户以启用共享密钥访问。 有关详细信息,请阅读阻止对 Azure 存储帐户进行共享密钥授权一文。
中心存储帐户角色分配的应用场景
若要使用已禁用共享密钥访问的存储帐户,可能需要向用户或中心的托管标识授予更多角色。 中心默认具有系统分配的托管标识。 但是,某些应用场景需要用户分配的托管标识。 下表总结了需要额外角色分配的应用场景:
情景 |
Microsoft Entra 身份识别系统 |
必需的角色 |
注释 |
AI 语音 |
存储 Blob 数据参与者 存储文件数据特权参与者 |
|
|
模型即服务 |
系统分配的托管标识 |
存储 Blob 数据参与者 |
中心的托管标识。 预配时自动分配了角色。 请勿手动更改此角色分配。 |
Azure 搜索 |
系统分配的托管标识 |
存储 Blob 数据参与者 |
中心的托管标识。 预配时自动分配了角色。 请勿手动更改此角色分配。 |
微调 OSS 模型 |
用户分配的管理标识 |
存储 Blob 数据参与者 |
|
PromptFlow |
用户的标识 |
存储 Blob 数据参与者 存储文件数据特权参与者 |
|
添加和管理自己的数据 |
用户的标识 |
存储 Blob 数据参与者 |
|
相关内容