你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Microsoft Foundry 中的身份验证和授权控制主体如何证明身份并获取执行操作的权限。 Foundry 将操作划分为控制平面(资源管理)和数据平面(运行时使用情况),每个操作都有自己的身份验证和基于角色的访问控制(RBAC)图面。
Foundry 支持两种身份验证方法:Microsoft Entra ID和 API 密钥。 Microsoft Entra ID 支持条件访问、托管标识和细粒度 RBAC。 API 密钥仍可用于快速原型制作,但缺乏每用户可追溯性。 本文比较了这些方法,将标识映射到角色,并介绍了常见的最低特权方案。
重要
对生产工作负荷使用 Microsoft Entra ID 以实现条件访问、托管标识和最小特权 RBAC。 API 密钥可用于快速评估,但提供粗略的权限。
先决条件
- 一个 Azure 订阅。 如果没有帐户, 请创建一个免费帐户。
- 配置了自定义子域的 Microsoft Foundry 资源。
- 对 Azure RBAC 概念 的理解。
- 若要分配角色,需要在适当的范围内使用 “所有者” 角色或 “用户访问管理员” 角色。
- (可选)安装 Azure CLI 或 Azure SDK for Python用于编程身份验证。
- (可选)代码示例的Python包:
pip install azure-identity requests
控制平面和数据平面
Azure操作分为两类:控制平面和数据平面。 Azure将资源管理(控制平面)与操作运行时(数据平面)分开。 因此,可以通过控制平面管理订阅中的资源,并通过数据平面使用由资源类型的实例提供的功能。 若要详细了解控制平面和数据平面,请参阅Azure控制平面和数据平面。 在 Foundry 中,控制平面操作与数据平面操作之间存在明显的区别。 下表说明了这两者之间的差异、Foundry 中的范围、用户的典型操作、示例工具和功能以及要使用的授权图面。
| 飞机 | Foundry 中的范围 | 典型操作 | 示例工具 | 授权范围 |
|---|---|---|---|---|
| 控制平面 | 设置和配置资源、项目、网络、加密和连接 | 创建或删除资源、分配角色、轮换密钥、设置专用链接 | Azure门户、Azure CLI、ARM 模板、Bicep、Terraform | Azure RBAC 操作 |
| 数据平面 | 运行和使用模型推理、代理交互、评估作业和内容安全调用 | 聊天完成、嵌入生成、启动微调作业、发送代理消息、分析器和分类器操作 | SDK、REST API、Foundry 门户实验环境 | Azure RBAC dataActions |
有关所有 Bicep、Terraform 和 SDK 示例,请参阅 GitHub 上的 foundry-samples 存储库以获取 Foundry 的信息。
以下列表和关系图详细说明了控制平面和数据平面操作之间的分离。 Foundry 中的控制平面操作包括:
- Foundry 资源创建
- Foundry 项目创建
- 帐户能力主机创建
- 项目能力主机创建
- 模型部署
- 创建帐户和项目连接
Foundry 中的数据平面操作包括:
- 构建代理
- 进行评估
- 跟踪和监视
- 微调
下图显示了 Foundry 中控制平面与数据平面分离的视图,以及基于角色的访问控制(RBAC)分配,以及控制平面或数据平面中用户可能拥有的访问权限。 如图所示,RBAC“操作”与控制平面关联,而 RBAC“dataActions”与数据平面关联。
身份验证方法
Foundry 支持Microsoft Entra ID(基于令牌、无密钥)和 API 密钥。
Microsoft Entra ID
Microsoft Entra ID 使用范围限定为 https://ai.azure.com/.default 的 OAuth 2.0 持有者令牌。
将Microsoft Entra ID用于:
- 生产工作负荷。
- 条件访问、多重身份验证(MFA)和实时访问。
- 最小特权 RBAC 与托管身份集成。
优势:精细的角色分配、主体级审计、可控令牌生命周期、自动密钥管理以及服务托管身份。
限制:较高的初始设置复杂性。 需要了解基于角色的访问控制(RBAC)。 有关 Foundry 中的 RBAC 的详细信息,请参阅 Microsoft Foundry 的基于角色的访问控制。
API 密钥
API 密钥是限定为 Foundry 资源的静态密钥。
对以下项使用 API 密钥:
- 快速原型制作。
- 可以接受单机密轮换的独立测试环境。
优点:简单、与语言无关,并且不需要获取令牌。
限制:无法表达用户标识,难以精细确定范围,更难进行审核。 企业生产工作负载通常不被接受,Microsoft不推荐使用。
有关启用无密钥身份验证的详细信息,请参阅
使用Microsoft Entra ID进行身份验证(Python)
以下示例演示如何使用 azure-identity 库对 Microsoft Entra ID 进行身份验证,并向 Foundry 终结点发出请求:
from azure.identity import DefaultAzureCredential
import requests
# Create a credential object using DefaultAzureCredential
# This automatically uses environment variables, managed identity, or Azure CLI credentials
credential = DefaultAzureCredential()
# Get an access token for the Cognitive Services scope
token = credential.get_token("https://ai.azure.com/.default")
# Use the token in your API request
headers = {
"Authorization": f"Bearer {token.token}",
"Content-Type": "application/json"
}
# Replace with your Foundry endpoint
endpoint = "https://<your-resource-name>.cognitiveservices.azure.com"
# Example: List deployments (adjust the path for your specific API)
response = requests.get(f"{endpoint}/openai/deployments?api-version=2024-10-21", headers=headers)
print(response.json())
预期输出:列出模型部署的 JSON 响应;如果未配置凭据或未配置角色分配,则会出现身份验证错误。
参考: DefaultAzureCredential | azure-identity 库
使用 API 密钥进行身份验证(Python)
以下示例演示如何使用 API 密钥进行身份验证。 仅使用此方法进行快速原型制作;建议将Microsoft Entra ID用于生产。
import requests
# Replace with your actual API key and endpoint
api_key = "<your-api-key>"
endpoint = "https://<your-resource-name>.cognitiveservices.azure.com"
headers = {
"api-key": api_key,
"Content-Type": "application/json"
}
# Example: List deployments
response = requests.get(f"{endpoint}/openai/deployments?api-version=2024-10-21", headers=headers)
print(response.json())
警告
API 密钥提供对资源的完全访问权限,不能限定为特定用户或操作。 定期轮换密钥,避免将它们提交到版本控制系统。
预期输出:列出模型部署的 JSON 响应;如果 API 密钥无效,则会出现 401 错误。
参考: 轮换 API 访问密钥
功能支持矩阵
参考以下矩阵,了解 Foundry 中哪些功能支持 API 密钥与 Microsoft Entra ID。
| 能力或功能 | API 密钥 | Microsoft Entra ID | 笔记 |
|---|---|---|---|
| 基本模型推理 (聊天, 嵌入) | 是的 | 是的 | 完全支持。 |
| 微调操作 | 是的 | 是的 | Entra ID 新增每个主体审核。 |
| 代理服务 | 不 | 是的 | 使用 Entra ID 访问托管身份工具。 |
| 评估 | 不 | 是的 | 使用Entra ID。 |
| 内容安全分析调用 | 是的 | 是的 | 使用 RBAC 限制高风险操作。 |
| 批量分析任务(内容理解) | 是的 | 是的 | Entra ID推荐用于扩展规模。 |
| 门户操场使用情况 | 是的 | 是的 | 操场使用项目连接模式。 |
| 使用专用链接进行网络隔离 | 是的 | 是的 | Entra ID添加条件访问。 |
| 具有内置角色和自定义角色的最小特权 | 不 | 是的 | 每个资源的键都是“全是或全否”。 |
| 托管标识(系统或用户分配) | 不 | 是的 | 启用无秘钥身份验证。 |
| 基于请求的用户归因 | 不 | 是的 | 令牌包含租户和对象 ID。 |
| 吊销(立即) | 轮换密钥 | 删除角色或禁用主体 | 短令牌生存期适用。 |
| 自动化流程中的支持 | 是(机密) | 是(服务主体或托管标识) | Entra ID减少了对机密轮换的需求。 |
| 助手 API | 是的 | 是的 | 建议使用Entra ID。 |
| 批量推理 | 是的 | 是的 | |
| 工具箱 | 不 | 是的 | 使用 Entra ID 访问托管身份工具。 |
标识类型
Azure资源和应用程序使用不同的标识类型进行身份验证,每个类型都专为特定方案而设计。 用户主体表示人类用户,服务主体表示应用程序或自动化过程,托管标识为Azure资源提供安全、无凭据的方式来访问其他服务。 了解这些区别有助于为交互式登录、应用到应用通信或工作负荷自动化选择正确的标识。
Azure支持以下标识类型。
| 标识类型 | 描述 |
|---|---|
| 用户主体 | 微软 Entra ID 中的个人用户 |
| 服务主体(应用注册) | 使用客户端机密或证书的应用程序标识 |
| 托管标识 (系统分配) | Azure平台自动管理的资源绑定身份。 |
| 托管标识(用户分配) | 独立身份,可关联多个资源。 |
内置角色概述
在 Foundry 中,使用内置角色分隔用户允许的操作。 大多数企业希望对其内置角色的控制平面操作和数据平面操作进行分离。 其他人预计数据与控制平面的合并角色可以减少所需的角色分配数量。 下表列出了方案和最适合每个方案的相应内置 Foundry 角色。
| 场景 | 典型的内置角色 | 笔记 |
|---|---|---|
| 使用预部署的模型生成代理 | Azure AI 用户 | 仅限于数据平面的使用,没有管理写入。 |
| 管理部署或微调模型 | Azure AI项目经理 | 包括模型部署的创建和更新。 |
| 轮换密钥或管理资源 | Azure AI 帐户所有者 | 高权限;考虑使用自定义角色以实现最小权限原则。 |
| 管理资源、管理部署、生成代理 | Azure AI 所有者 | 为既需要控制平面访问权限又需要数据平面访问权限的用户提供一种高特权自助服务模式。 如果需要可观测性,请与Azure Monitor读取器结合使用。 |
| 可观测性、跟踪、监视 | 最低级别的 Azure AI 用户 | 在 Application Insights 上添加 Azure Monitor 阅读器。 |
若要了解内置角色的细分以及控制和数据平面操作,请查看下图。
提示
如果内置角色授予对用例的超额权限,请创建自定义角色。
设置Microsoft Entra ID
有关在 Foundry 中设置Entra ID身份验证的高级指南,请参阅配置无密钥身份验证。
确保 Microsoft Foundry 资源已配置自定义子域。 请参阅 自定义子域。 基于令牌的身份验证需要自定义子域。
为每个主体分配所需的内置或自定义角色。 你需要目标范围的所有者或用户访问管理员角色才能分配角色。 常见角色分配:
- Azure AI 用户:对于需要使用预部署的模型进行生成和测试的开发人员。
- Azure AI Project Manager:对于需要创建项目和管理部署的团队主管。
- Azure AI 帐户所有者:针对需要全面管理资源的管理员,允许有条件地分配 Azure AI 用户以访问数据平面。
- Azure AI 所有者:适用于需要完全资源管理和数据平面访问的用户。 用于分配 Azure AI 用户角色的示例 CLI 命令:
az role assignment create \ --assignee <principal-id> \ --role "Azure AI User" \ --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<resource-name>若要验证角色分配,请运行
az role assignment list --assignee <principal-id> --scope <resource-scope>并确认该角色显示在输出中。(可选)对于服务主体,请创建应用注册、添加客户端密码或证书,并记下租户 ID、客户端 ID 和机密或证书。
(可选)对于托管标识,请在调用服务上启用系统分配的标识或附加用户分配的标识,然后在 Foundry 资源上为其分配角色。
在所有调用方使用令牌身份验证后,删除基于密钥的身份验证。 (可选)在部署模板中禁用本地身份验证。
Reference:分配 Azure 角色 | Foundry 角色访问控制
排查常见身份验证错误
| 错误 | 原因 | 分辨率 |
|---|---|---|
| 401 未授权 | 缺少或过期的令牌;无效的 API 密钥 | 验证令牌获取范围是否为 https://ai.azure.com/.default。 如果使用基于密钥的身份验证,请重新生成 API 密钥。 |
| 403 禁止 | 缺少 RBAC 角色分配 | 在资源或项目范围内分配适当的内置角色(例如,Azure AI 用户)。 |
| AADSTS700016 | 在租户中找不到应用程序 | 验证应用注册是否存在于正确的租户中,并且客户端 ID 正确。 |
| 需要自定义子域 | 资源使用区域终结点而不是自定义子域 | 在 Foundry 资源上配置 自定义子域 。 基于令牌的身份验证需要自定义子域。 |
相关内容
- Foundry 的基于角色的访问控制
使用 Microsoft Entra ID - 轮换 API 访问密钥
- Azure内置角色(AI + 机器学习)
- 认证与授权对比(Microsoft Entra ID)
- 身份基础知识