你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure AI Foundry 门户中基于角色的访问控制

本文介绍如何管理 对 Azure AI Foundry 资源的访问(授权)。 Azure 基于角色的访问控制 (Azure RBAC) 用于管理对 Azure 资源的访问权限,例如,创建新资源或使用现有资源的权限。 Microsoft Entra ID 中的用户可获得特定角色,从而拥有资源访问权限。 Azure 提供内置角色和创建自定义角色的功能。

Azure AI Foundry 支持两种类型的项目: Foundry 项目基于中心的项目。 有关这两个项目类型之间的差异的详细信息,请参阅 项目类型。 使用本文顶部的选择器在两个项目类型之间切换。

警告

应用某些角色可能会限制 Azure AI Foundry 门户中针对其他用户的 UI 功能。 例如,如果用户的角色无法创建计算实例,工作室中就不会提供创建计算实例的选项。 此行为是正常的,可以防止用户尝试会返回“拒绝访问”错误的操作。

Azure AI Foundry 项目角色

在 Azure AI Foundry 门户中,有两个级别的访问权限:

  • 帐户:该帐户位于 Azure AI Foundry 资源的基础结构(包括虚拟网络设置、客户管理的密钥、托管标识和策略)的所在地。
  • 项目:项目是帐户的子集,可用于生成和部署代理。 通过项目访问,您可以在帐户上利用已设置的基础设施的同时实现端到端的 AI 开发。

Azure AI Foundry 资源具有内置角色,默认情况下这些角色可用于帐户和项目。 下面是内置角色及其权限的表。

角色 DESCRIPTION
Azure AI 用户 此角色授予读者对 AI 项目的访问权限、对 AI 帐户的读者访问权限,以及 AI 项目的数据操作权限。 如果用户可以分配角色,则会自动将此角色分配给用户。 如果不是这样,则必须由您的订阅所有者或具有角色分配权限的用户授予此角色。
Azure AI 项目经理 此角色允许你在 Azure AI Foundry 项目上执行管理操作,构建和开发项目,并向其他用户主体授予 Azure AI 用户角色的条件分配的权限。
Azure AI 帐户所有者 此角色授予管理 AI 项目和帐户的完全访问权限,并授予将 Azure AI 用户角色按条件分配给其他用户主体的权限。

Azure AI 项目经理Azure AI 帐户所有者之间的主要区别在于能够:

  • 创建新的 Foundry 帐户资源,只有 Azure AI 帐户所有者 才能执行此作。
  • 开始使用 AI Foundry 项目进行构建和开发。

第二个差别体现在角色定义中,其中数据操作为 Microsoft.CognitiveServices/*。 此数据操作允许用户完成项目中的任何读取、写入或删除数据操作。 Azure AI 项目经理可以执行此操作,但Azure AI 帐户所有者不能执行。 只有 Azure AI 用户Azure AI 项目经理 才拥有为 AI 项目提供数据操作权限。 可以将 Azure AI 项目经理 视为提升的 Azure AI 用户

除了这些内置角色分配之外,还有 Azure 特权管理员角色,例如所有者、参与者和读取者。 这些角色不特定于 Azure AI Foundry 资源权限,因此请考虑使用上述内置角色进行最低特权访问。

使用下表帮助了解为每个新的内置角色提供哪些特权,包括 Azure 特权管理员角色:

内置角色 创建 Foundry 项目 创建 Foundry 帐户 在项目中生成和开发(数据操作) 完成角色分配 读取者对项目和帐户的访问权限
Azure AI 用户
Azure AI 项目经理 ✔ (仅分配 Azure AI 用户角色)
Azure AI 帐户所有者 ✔ (仅分配 Azure AI 用户角色)
所有者 ✔ (将任何角色分配给任何用户)
参与者
读取者

项目的默认角色

Azure AI 用户

Azure AI 用户 角色的完整权限集如下所示:

{
    "id": "/providers/Microsoft.Authorization/roleDefinitions/53ca6127-db72-4b80-b1b0-d745d6d5456d",
    "properties": {
        "roleName": "Azure AI User",
        "description": "Grants reader access to AI projects, reader access to AI accounts, and data actions for an AI project.",
        "assignableScopes": [
            "/"
        ],
        "permissions": [
            {
                "actions": [
                    "Microsoft.CognitiveServices/*/read",
                    "Microsoft.CognitiveServices/accounts/listkeys/action",
                    "Microsoft.Insights/alertRules/read",
                    "Microsoft.Insights/diagnosticSettings/read",
                    "Microsoft.Insights/logDefinitions/read",
                    "Microsoft.Insights/metricdefinitions/read",
                    "Microsoft.Insights/metrics/read",
                    "Microsoft.ResourceHealth/availabilityStatuses/read",
                    "Microsoft.Resources/deployments/*",
                    "Microsoft.Resources/subscriptions/operationresults/read",
                    "Microsoft.Resources/subscriptions/read",
                    "Microsoft.Resources/subscriptions/resourceGroups/read",
                    "Microsoft.Support/*"
                ],
                "notActions": [],
                "dataActions": [
                    "Microsoft.CognitiveServices/*"
                ],
                "notDataActions": []
            }
        ]
    }
}

Azure AI 项目经理

Azure AI 项目经理角色利用条件性地委派 Azure 角色分配管理给他人。 由于条件委派,Azure AI 项目经理角色只能将 Azure AI 用户角色分配给资源组中的其他用户主体。 条件委派允许企业管理员委托角色分配的工作,以开始使用 AI Foundry 项目进行构建和开发。 有关具有条件的角色分配的详细信息,请参阅 将 Azure 角色分配管理委派给有条件的其他人

Azure AI 项目经理 角色的完整权限集如下所示:

{
    "id": "/providers/Microsoft.Authorization/roleDefinitions/eadc314b-1a2d-4efa-be10-5d325db5065e",
    "properties": {
        "roleName": "Azure AI Project Manager",
        "description": "Lets you perform developer actions and management actions on Azure AI Foundry Projects. Allows for making role assignments, but limited to Cognitive Service User role.",
        "assignableScopes": [
            "/"
        ],
        "permissions": [
            {
                "actions": [
                    "Microsoft.Authorization/roleAssignments/write",
                    "Microsoft.Authorization/roleAssignments/delete",
                    "Microsoft.CognitiveServices/accounts/*/read",
                    "Microsoft.CognitiveServices/accounts/projects/*",
                    "Microsoft.CognitiveServices/locations/*/read",
                    "Microsoft.Authorization/*/read",
                    "Microsoft.Insights/alertRules/*",
                    "Microsoft.Resources/deployments/*",
                    "Microsoft.Resources/subscriptions/resourceGroups/read"
                ],
                "notActions": [],
                "dataActions": [
                    "Microsoft.CognitiveServices/*"
                ],
                "notDataActions": [],
                "conditionVersion": "2.0",
                "condition": "((!(ActionMatches{'Microsoft.Authorization/roleAssignments/write'})) OR (@Request[Microsoft.Authorization/roleAssignments:RoleDefinitionId] ForAnyOfAnyValues:GuidEquals{53ca6127-db72-4b80-b1b0-d745d6d5456d})) AND ((!(ActionMatches{'Microsoft.Authorization/roleAssignments/delete'})) OR (@Resource[Microsoft.Authorization/roleAssignments:RoleDefinitionId] ForAnyOfAnyValues:GuidEquals{53ca6127-db72-4b80-b1b0-d745d6d5456d}))"
            }
        ]
    }
}

Azure AI 帐户所有者

Azure AI 帐户所有者角色利用委托的 Azure 角色分配管理来按条件管理其他人。 由于条件委派,Azure AI 帐户所有者角色只能将 Azure AI 用户角色分配给资源组中的其他用户主体。 条件委派允许企业管理员委托角色分配的工作,以开始使用 AI Foundry 项目进行构建和开发。 有关具有条件的角色分配的详细信息,请参阅 将 Azure 角色分配管理委派给有条件的其他人

新“Azure AI 帐户所有者”角色的完整权限集如下所示:

{
    "id": "/providers/Microsoft.Authorization/roleDefinitions/e47c6f54-e4a2-4754-9501-8e0985b135e1",
    "properties": {
        "roleName": "Azure AI Account Owner",
        "description": "Grants full access to manage AI projects and accounts. Grants conditional assignment of the Azure AI User role to other user principles.",
        "assignableScopes": [
            "/"
        ],
        "permissions": [
            {
                "actions": [
                    "Microsoft.Authorization/*/read",
                    "Microsoft.Authorization/roleAssignments/write",
                    "Microsoft.Authorization/roleAssignments/delete",
                    "Microsoft.CognitiveServices/*",
                    "Microsoft.Features/features/read",
                    "Microsoft.Features/providers/features/read",
                    "Microsoft.Features/providers/features/register/action",
                    "Microsoft.Insights/alertRules/*",
                    "Microsoft.Insights/diagnosticSettings/*",
                    "Microsoft.Insights/logDefinitions/read",
                    "Microsoft.Insights/metricdefinitions/read",
                    "Microsoft.Insights/metrics/read",
                    "Microsoft.ResourceHealth/availabilityStatuses/read",
                    "Microsoft.Resources/deployments/*",
                    "Microsoft.Resources/deployments/operations/read",
                    "Microsoft.Resources/subscriptions/operationresults/read",
                    "Microsoft.Resources/subscriptions/read",
                    "Microsoft.Resources/subscriptions/resourcegroups/deployments/*",
                    "Microsoft.Resources/subscriptions/resourceGroups/read",
                    "Microsoft.Support/*"
                ],
                "notActions": [],
                "dataActions": [],
                "notDataActions": [],
                "conditionVersion": "2.0",
                "condition": "((!(ActionMatches{'Microsoft.Authorization/roleAssignments/write'})) OR (@Request[Microsoft.Authorization/roleAssignments:RoleDefinitionId] ForAnyOfAnyValues:GuidEquals{53ca6127-db72-4b80-b1b0-d745d6d5456d})) AND ((!(ActionMatches{'Microsoft.Authorization/roleAssignments/delete'})) OR (@Resource[Microsoft.Authorization/roleAssignments:RoleDefinitionId] ForAnyOfAnyValues:GuidEquals{53ca6127-db72-4b80-b1b0-d745d6d5456d}))"
            }
        ]
    }
}

示例企业 RBAC 设置

下表是一个示例,演示如何为企业设置 Azure AI Foundry 资源的基于角色的访问控制。

角色 角色 目的
IT 管理员 订阅所有者 IT 管理员可以确保中心按照其企业标准进行设置。 如果想要使经理能够创建新的 Foundry 帐户,他们可以在资源上分配 Azure AI 帐户所有者 角色。 他们可以在资源上分配 Azure AI 项目经理角色,以允许在帐户中创建项目。
经理 Foundry 资源上的 Azure AI 帐户所有者 管理员可以管理中心、审核计算资源、审核连接以及创建共享连接。 他们无法开始在项目中生成,但可以将 Azure AI 用户角色分配给自己和其他人以开始生成。
团队主管/首席开发人员 Foundry 资源上的 Azure AI 项目经理 开发人员主管可为他们的团队创建项目并开始在项目中进行生成。 创建项目后,项目所有者可以邀请其他成员并分配 Azure AI 用户角色。
团队成员/开发人员 Foundry 资源上的 Azure AI 用户 开发人员可以在项目中生成和部署 AI 模型并生成代理。

访问 AI Foundry 外部创建的资源

创建 Foundry 资源时,内置的基于角色的访问控制权限授予你使用该资源的权限。 但是,如果你想要使用代表你创建的资源之外的资源,则需要确保下面两点:

  • 你尝试使用的资源已设置了权限,允许你访问它。
  • 允许 Foundry 帐户资源访问它。

例如,如果尝试使用新的 Blob 存储,需要确保将 Foundry 帐户资源的托管标识添加到 Blob 的 Blob 存储读取者角色。 如果尝试使用新的 Azure AI 搜索源,可能需要将中心添加到 Azure AI 搜索的角色分配中。

使用角色管理访问

如果你是 Foundry 帐户资源的所有者,则可以为 Azure AI Foundry 添加和删除角色。 在 Azure AI Foundry主页中,选择 Foundry 资源。 然后选择“用户”,以添加和移除中心的用户。 还可以通过访问控制(IAM)或通过 Azure CLI 从 Azure 门户管理权限。

例如,以下命令为订阅中的资源组joe@contoso.com分配 Azure AI 用户角色this-rg,ID 为00000000-0000-0000-0000-000000000000

az role assignment create --role "Azure AI User" --assignee "joe@contoso.com" --scope /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/this-rg 

创建自定义角色

如果内置角色不够,可以创建自定义角色。 自定义角色在该 Azure AI Foundry 中可能具有读取、写入、删除和计算资源权限。 可以在特定项目级别、特定资源组级别或特定订阅级别提供该角色。

注释

必须是该级别资源的所有者,才能在该资源中创建自定义角色。

有关创建自定义角色的步骤,请使用以下文章之一:

有关一般创建自定义角色的详细信息,请访问 Azure 自定义角色一文。

后续步骤

Azure AI Foundry 中心与项目

在 Azure AI Foundry 门户中,有两个访问级别:中心和项目。 在中心中,可找到基础结构(包括虚拟网络设置、客户管理的密钥、托管标识和策略),还可配置 Azure AI 服务。 中心访问权限允许修改基础结构、创建新中心以及创建项目。 项目是中心的子集,充当工作区,允许生成和部署 AI 系统。 在项目中,可以开发流、部署模型和管理项目资产。 通过项目访问,可以端到端开发 AI,同时利用中心上的基础结构设置。

此图显示 Azure AI Foundry 资源之间的关系。

中心和项目关系的主要优势之一是,开发人员可以创建继承中心安全设置的自己的项目。 你可能还有开发人员是项目的参与者,并且无法创建新项目。

中心的默认角色

Azure AI Foundry 中心具有默认可用的内置角色。

下面是中心的内置角色及其权限的表:

角色 DESCRIPTION
所有者 对中心的完全访问权限,包括管理和创建新中心以及分配权限的能力。 此角色会自动分配给中心创建者
贡献者 用户拥有对中心的完全访问权限,包括创建新中心的功能,但无法管理现有资源的中心权限。
Azure AI 管理员(预览) 此角色会自动分配给中心的系统分配托管标识。 Azure AI 管理员角色具有托管标识执行其任务所需的最低权限。 有关详细信息,请参阅 Azure AI 管理员角色(预览)
Azure AI 开发人员 执行除创建新中心和管理中心权限之外的所有操作。 例如,用户可以创建项目、计算和连接。 用户可以在其项目中分配权限。 用户可以与现有 Azure AI 资源(例如 Azure OpenAI、Azure AI 搜索和 Azure AI 服务)进行交互。
Azure AI 推理部署操作员 执行在资源组内创建资源部署所需的所有操作。
读取者 对中心的只读访问权限。 此角色自动分配给中心中的所有项目成员。

“参与者”与“Azure AI 开发人员”之间的主要区别在于能够创建新的中心。 如果你不希望用户创建新的中心(由于配额、成本或只是管理拥有的中心数量),请分配 Azure AI 开发人员角色。

只有“所有者”和“参与者”角色才允许创建中心。 目前,自定义角色无法授予创建中心的权限。

Azure AI 管理员角色(预览版)

在 2024 年 11 月 19 日之前,为中心创建的系统分配的托管标识会自动为包含中心和项目的资源组分配参与者角色。 在此日期之后创建的中心将为 Azure AI 管理员角色分配系统分配的托管标识。 此角色的范围更窄,仅限于托管标识执行其任务所需的最低权限。

Azure AI 管理员角色目前以公共预览版提供。

重要

本文中标记了“(预览版)”的项目目前为公共预览版。 此预览版未提供服务级别协议,不建议将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

Azure AI 管理员角色具有以下权限

{
    "permissions": [
        {
            "actions": [
                "Microsoft.Authorization/*/read",
                "Microsoft.CognitiveServices/*",
                "Microsoft.ContainerRegistry/registries/*",
                "Microsoft.DocumentDb/databaseAccounts/*",
                "Microsoft.Features/features/read",
                "Microsoft.Features/providers/features/read",
                "Microsoft.Features/providers/features/register/action",
                "Microsoft.Insights/alertRules/*",
                "Microsoft.Insights/components/*",
                "Microsoft.Insights/diagnosticSettings/*",
                "Microsoft.Insights/generateLiveToken/read",
                "Microsoft.Insights/logDefinitions/read",
                "Microsoft.Insights/metricAlerts/*",
                "Microsoft.Insights/metricdefinitions/read",
                "Microsoft.Insights/metrics/read",
                "Microsoft.Insights/scheduledqueryrules/*",
                "Microsoft.Insights/topology/read",
                "Microsoft.Insights/transactions/read",
                "Microsoft.Insights/webtests/*",
                "Microsoft.KeyVault/*",
                "Microsoft.MachineLearningServices/workspaces/*",
                "Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action",
                "Microsoft.ResourceHealth/availabilityStatuses/read",
                "Microsoft.Resources/deployments/*",
                "Microsoft.Resources/deployments/operations/read",
                "Microsoft.Resources/subscriptions/operationresults/read",
                "Microsoft.Resources/subscriptions/read",
                "Microsoft.Resources/subscriptions/resourcegroups/deployments/*",
                "Microsoft.Resources/subscriptions/resourceGroups/read",
                "Microsoft.Resources/subscriptions/resourceGroups/write",
                "Microsoft.Storage/storageAccounts/*",
                "Microsoft.Support/*",
                "Microsoft.Search/searchServices/write",
                "Microsoft.Search/searchServices/read",
                "Microsoft.Search/searchServices/delete",
                "Microsoft.Search/searchServices/indexes/*",
                "Microsoft.DataFactory/factories/*"
            ],
            "notActions": [],
            "dataActions": [],
            "notDataActions": []
        }
    ]
}

小窍门

建议将 2024 年 11 月 19 日之前创建的中心转换为使用 Azure AI 管理员角色。 Azure AI 管理员角色的范围比以前使用的参与者角色更窄,并且遵循最小特权原则。

可以使用以下方法之一转换在 2024 年 11 月 19 日之前创建的中心,以使用新的 Azure AI 管理员角色:

  • Azure REST API:对工作区使用 Azure REST API 的 PATCH 请求。 请求的正文应设置 {"properties":{"allowRoleAssignmeentOnRG":true}}。 以下示例演示了使用 PATCHcurl 请求。 将 <your-subscription><resource-group-name><workspace-name><YOUR-ACCESS-TOKEN> 替换为你的应用场景的值。 有关使用 REST API 的详细信息,请访问 Azure REST API 文档

    curl -X PATCH https://management.azure.com/subscriptions/<your-subscription>/resourcegroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>?api-version=2024-04-01-preview -H "Authorization:Bearer <YOUR-ACCESS-TOKEN>"
    
  • Azure CLI:使用包含 az ml workspace update--allow-roleassignment-on-rg true 命令。 以下示例会更新名为 myworkspace 的工作区。 此命令需要 Azure 机器学习 CLI 扩展 2.27.0 或更高版本。

    az ml workspace update --name myworkspace --allow-roleassignment-on-rg true
    
  • Azure Python SDK:将 Workspace 对象的 allow_roleassignment_on_rg 属性设置为 True 并执行更新操作。 以下示例会更新名为 myworkspace 的工作区。 此操作需要 Azure 机器学习 SDK 版本 1.17.0 版或更高版本。

    ws = ml_client.workspaces.get(name="myworkspace")
    ws.allow_roleassignment_on_rg = True
    ws = ml_client.workspaces.begin_update(workspace=ws).result()
    

如果遇到 Azure AI 管理员角色问题,作为故障排除步骤,可以还原为参与者角色。 有关详细信息,请参阅还原为参与者角色

Azure AI 开发人员角色

新的“Azure AI 开发人员”角色的完整权限集如下所示:

{
    "Permissions": [ 
        { 
        "Actions": [
            "Microsoft.MachineLearningServices/workspaces/*/read",
            "Microsoft.MachineLearningServices/workspaces/*/action",
            "Microsoft.MachineLearningServices/workspaces/*/delete",
            "Microsoft.MachineLearningServices/workspaces/*/write",
            "Microsoft.MachineLearningServices/locations/*/read",
            "Microsoft.Authorization/*/read",
            "Microsoft.Resources/deployments/*"
        ],

        "NotActions": [
            "Microsoft.MachineLearningServices/workspaces/delete",
            "Microsoft.MachineLearningServices/workspaces/write",
            "Microsoft.MachineLearningServices/workspaces/listKeys/action",
            "Microsoft.MachineLearningServices/workspaces/hubs/write",
            "Microsoft.MachineLearningServices/workspaces/hubs/delete",
            "Microsoft.MachineLearningServices/workspaces/featurestores/write",
            "Microsoft.MachineLearningServices/workspaces/featurestores/delete"
        ], 
        "DataActions": [ 
            "Microsoft.CognitiveServices/accounts/OpenAI/*", 
            "Microsoft.CognitiveServices/accounts/SpeechServices/*", 
            "Microsoft.CognitiveServices/accounts/ContentSafety/*" 
        ], 
        "NotDataActions": [], 
        "Condition": null, 
        "ConditionVersion": null 
        } 
    ] 
}

如果内置的 Azure AI 开发人员角色不符合你的需求,则可以创建自定义角色

项目的默认角色

Azure AI Foundry 门户中的项目具有默认可用的内置角色。

下面是项目的内置角色及其权限的表:

角色 DESCRIPTION
所有者 对项目的完全访问权限,包括向项目用户分配权限的能力。
贡献者 用户有权完全访问项目,但无法向项目用户分配权限。
Azure AI 管理员(预览) 此角色会自动分配给中心的系统分配托管标识。 Azure AI 管理员角色具有托管标识执行其任务所需的最低权限。 有关详细信息,请参阅 Azure AI 管理员角色(预览)
Azure AI 开发人员 用户可以执行大多数操作(包括创建部署),但无法向项目用户分配权限。
Azure AI 推理部署操作员 执行在资源组内创建资源部署所需的所有操作。
读取者 对项目的只读访问权限。

(例如,通过 Azure AI Foundry 门户权限管理)向用户授予对项目的访问权限时,系统还会自动向用户分配另外两个角色。 第一个角色是中心的读取者。 第二个角色是推理部署操作员角色,拥有该角色的用户可在项目所在的资源组上创建部署。 此角色包含下面两个权限:"Microsoft.Authorization/*/read""Microsoft.Resources/deployments/*"

若要完成端到端 AI 开发和部署,用户只需要具有这两个自动分配的角色,还具有项目的“参与者”或“Azure AI 开发人员”角色即可。

创建项目所需的最低权限是在中心上具有允许的操作 Microsoft.MachineLearningServices/workspaces/hubs/join 的角色。 Azure AI 开发人员内置角色具有此权限。

依赖项服务 Azure RBAC 权限

中心依赖于其他 Azure 服务。 下表列出了创建中心时这些服务所需的权限。 创建中心的人员需要这些权限。 从中心创建项目的人员不需要这些权限。

许可 目的
Microsoft.Storage/storageAccounts/write 使用指定的参数创建存储帐户、更新指定存储帐户的属性或标记,或者为其添加自定义域。
Microsoft.KeyVault/vaults/write 创建新的密钥保管库,或更新现有密钥保管库的属性。 某些属性可能需要更多的权限。
Microsoft.CognitiveServices/accounts/write 写入 API 帐户。
Microsoft.MachineLearningServices/workspaces/write 创建新工作区或更新现有工作区的属性。

示例企业 RBAC 设置

下表中的示例显示如何为企业的 Azure AI Foundry 设置基于角色的访问控制。

角色 角色 目的
IT 管理员 中心所有者 IT 管理员可以确保中心按照其企业标准进行设置。 如果他们希望管理者能够创建新的中心,他们可为管理者分配资源的参与者角色。 或者,他们可为管理员分配资源的 Azure AI 开发人员角色,以禁止创建新的中心。
经理 中心上的参与者或 Azure AI 开发人员 管理员可以管理中心、审核计算资源、审核连接以及创建共享连接。
团队主管/首席开发人员 中心上的 Azure AI 开发人员 首席开发人员可为其团队创建项目,并在中心级别创建共享资源(例如计算和连接)。 创建项目后,项目所有者可以邀请其他成员。
团队成员/开发人员 项目上的参与者或 Azure AI 开发人员 开发人员可以在项目中构建和部署 AI 模型,还可创建支持开发的资产,例如计算和连接。

访问中心外部创建的资源

创建中心时,内置的基于角色的访问控制权限向你授予使用资源的访问权限。 但是,如果你想要使用代表你创建的资源之外的资源,则需要确保下面两点:

  • 你尝试使用的资源已设置了权限,允许你访问它。
  • 允许中心访问该资源。

例如,如果尝试使用新的 Blob 存储,需要确保将中心的托管标识添加到 Blob 的 Blob 存储读取者角色。 如果尝试使用新的 Azure AI 搜索源,可能需要将中心添加到 Azure AI 搜索的角色分配中。

使用角色管理访问

如果你是中心的所有者,则可以为 Azure AI Foundry 添加和移除角色。 转到 Azure AI Foundry 中的“主页”,然后选择中心。 然后选择“用户”,以添加和移除中心的用户。 还可以在 Azure 门户的“访问控制(IAM)”下或通过 Azure CLI 管理权限。 例如,若要将 Azure AI 开发人员角色分配给资源组“this-rg”中的“joe@contoso.com”成员,并在订阅 ID 为00000000-0000-0000-0000-000000000000的情况下,可以使用以下 Azure CLI 命令:

az role assignment create --role "Azure AI Developer" --assignee "joe@contoso.com" --scope /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/this-rg 

创建自定义角色

如果内置角色不够,可以创建自定义角色。 自定义角色在该 Azure AI Foundry 中可能具有读取、写入、删除和计算资源权限。 可以在特定项目级别、特定资源组级别或特定订阅级别提供该角色。

注释

必须是该级别资源的所有者,才能在该资源中创建自定义角色。

以下 JSON 示例在订阅级别定义了一个自定义 Azure AI Foundry 开发人员角色:

{
    "properties": {
        "roleName": "Azure AI Foundry Developer",
        "description": "Custom role for Azure AI Foundry. At subscription level",
        "assignableScopes": [
            "/subscriptions/<your-subscription-id>"
        ],
        "permissions": [
            {
                "actions": [
                    "Microsoft.MachineLearningServices/workspaces/write",
                    "Microsoft.MachineLearningServices/workspaces/endpoints/write",
                    "Microsoft.Storage/storageAccounts/write",
                    "Microsoft.Resources/deployments/validate/action",
                    "Microsoft.KeyVault/vaults/write",
                    "Microsoft.Authorization/roleAssignments/read",
                    "Microsoft.Authorization/roleDefinitions/read",
                    "Microsoft.CognitiveServices/*/read"
                ],
                "notActions": [
                    "Microsoft.MachineLearningServices/workspaces/delete",
                    "Microsoft.MachineLearningServices/workspaces/write",
                    "Microsoft.MachineLearningServices/workspaces/listKeys/action",
                    "Microsoft.MachineLearningServices/workspaces/hubs/write",
                    "Microsoft.MachineLearningServices/workspaces/hubs/delete",
                    "Microsoft.MachineLearningServices/workspaces/featurestores/write",
                    "Microsoft.MachineLearningServices/workspaces/featurestores/delete"
                ],
                "dataActions": [
                    "Microsoft.CognitiveServices/accounts/OpenAI/*/read",
                    "Microsoft.CognitiveServices/accounts/OpenAI/engines/completions/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/engines/search/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/engines/generate/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/deployments/search/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/deployments/completions/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/deployments/chat/completions/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/deployments/extensions/chat/completions/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/deployments/embeddings/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/images/generations/action"
                ],
                "notDataActions": []
            }
        ]
    }
}

有关创建自定义角色的步骤,请使用以下文章之一:

有关一般创建自定义角色的详细信息,请访问 Azure 自定义角色一文。

在 Azure AI Foundry 门户中分配角色

可以在中心或项目级别直接从 Azure AI Foundry 添加用户和分配角色。 在管理中心中的中心或项目部分选择“用户”,然后选择“新建用户”以添加用户

注释

只能选择内置角色。 如果需要分配自定义角色,必须使用 Azure 门户Azure CLI,或 Azure PowerShell

Azure AI Foundry 中心概述的屏幕截图,其中突出显示了新用户按钮。

然后,系统会提示输入用户信息并选择内置角色。

“添加用户提示”的屏幕截图,其中将角色设置为 Azure AI 开发人员。

方案:使用客户管理的密钥

将中心配置为使用客户管理的密钥 (CMK) 时,将使用 Azure 密钥保管库来存储密钥。 用户或用于创建工作区的服务主体必须具有对密钥保管库的所有者或贡献者访问权限。

如果 Azure AI Foundry 中心配置了用户分配的托管标识,则必须向该标识授予以下角色。 这些角色允许托管身份在使用客户管理的密钥时,创建 Azure 存储、Azure Cosmos DB 和 Azure 搜索资源。

  • Microsoft.Storage/storageAccounts/write
  • Microsoft.Search/searchServices/write
  • Microsoft.DocumentDB/databaseAccounts/write

在密钥保管库中,用户或服务主体必须具有通过密钥保管库访问策略创建、获取、删除和清除对密钥的访问权限。 有关详细信息,请参阅 Azure Key Vault 安全性

场景:使用 Microsoft Entra ID 身份验证的连接

创建使用 Microsoft Entra ID 身份验证的连接时,必须为开发人员分配角色,以便他们可以访问资源。

资源连接 角色 DESCRIPTION
Azure AI 搜索 贡献者 列出用于列出 Azure AI Foundry 中的索引的 API 密钥。
Azure AI 搜索 搜索索引数据贡献者 索引场景需要
Azure AI 服务 / Azure OpenAI 认知服务 OpenAI 贡献者 从 Azure AI Foundry 调用公共引入 API。
Azure AI 服务 / Azure OpenAI 认知服务用户 从 Azure AI Foundry 列出 API 密钥。
Azure AI 服务 / Azure OpenAI 认知服务贡献者 允许调用控制平面。
Azure Blob 存储 存储 Blob 数据参与者 读取和并将数据写入 Blob 存储所必需。
Azure Data Lake Storage Gen 2 存储 Blob 数据参与者 读取并将数据写入 Data Lake 所必需。
Microsoft OneLake 贡献者 若要授予某人访问 Microsoft OneLake 的访问权限,必须 授予他们访问 Microsoft Fabric 工作区的访问权限

重要

如果将 Promptflow 与 Azure 存储(包括 Azure Data Lake Storage Gen 2)配合使用,则还必须分配 存储文件数据特权参与者 角色。

在聊天操场中使用经过 Microsoft Entra ID 进行身份验证的连接时,服务需要互相授权才能访问所需的资源。 执行配置的管理员需要拥有对这些资源的“所有者”角色才能添加角色分配。 下表列出了每个资源所需的角色分配。 “被分派人”列是指所列资源的系统分配的托管标识。 “资源”列是指被分派人需要访问的资源。 例如,Azure OpenAI 具有一个系统分配的托管标识,需要为其分配“搜索索引数据读取者”角色,以便访问 Azure AI 搜索资源

角色 受让人 资源 DESCRIPTION
搜索索引数据读取者 Azure AI 服务 / Azure OpenAI Azure AI 搜索 推理服务从索引中查询数据。 仅用于推理场景。
搜索索引数据贡献者 Azure AI 服务 / Azure OpenAI Azure AI 搜索 对索引中内容的读写访问权限。 导入、刷新或查询索引的文档集合。 仅用于数据引入和推理场景。
搜索服务参与者 Azure AI 服务 / Azure OpenAI Azure AI 搜索 对对象定义(索引、别名、同义词映射、索引器、数据源和技能组)的读写访问权限。 推理服务查询自动字段映射的索引架构。 数据引入服务创建索引、数据源、技能集、索引器并查询索引器状态。
认知服务 OpenAI 贡献者 Azure AI 搜索 Azure AI 服务 / Azure OpenAI 自定义技能
认知服务 OpenAI 用户 用于聊天模型的 Azure OpenAI 资源 用于嵌入模型的 Azure OpenAI 资源 仅当使用两个 Azure OpenAI 资源进行通信时才需要。
存储 Blob 数据参与者 Azure AI 搜索 Azure 存储帐户 读取 Blob 和写入知识存储。
存储 Blob 数据参与者 Azure AI 服务 / Azure OpenAI Azure 存储帐户 从输入容器读取,并将预处理结果写入输出容器。

注释

仅当使用两个 Azure OpenAI 资源时,才需要 认知服务 OpenAI 用户 角色:一个用于聊天模型,一个用于嵌入模型。 如果适用,请启用受信任的服务,并确保嵌入模型 Azure OpenAI 资源的连接已启用 Microsoft Entra ID。

方案:使用现有的 Azure OpenAI 资源

创建与现有 Azure OpenAI 资源的连接时,还必须向用户分配角色,以便他们可以访问资源。 应根据需要执行的任务,分配“认知服务 OpenAI 用户”或“认知服务 OpenAI 参与者”角色。 有关这些角色及其启用的任务的信息,请参阅 Azure OpenAI 角色

方案:使用 Azure 容器注册表

Azure 容器注册表实例是 Azure AI Foundry 中心的可选依赖项。 下表列出了在向 Azure 容器注册表验证某个中心的身份时的支持矩阵,具体取决于身份验证方法和 Azure 容器注册表的公用网络访问配置

身份验证方法 已禁用公用网络
访问
已启用 Azure 容器注册表
公用网络访问
管理员用户
Azure AI Foundry 中心的系统分配的托管标识
Azure AI Foundry 中心的用户分配的托管标识,
标识分配有 ACRPull 角色

创建中心时,系统分配的托管标识会自动分配给正确的角色。 如果你使用的是用户分配的托管标识,你必须向该标识分配 ACRPull 角色。

方案:使用 Azure Application Insights 进行日志记录

Azure Application Insights 是 Azure AI Foundry 中心的可选依赖项。 下表列出了在创建中心时需要使用 Application Insights 的情况下所需的权限。 创建中心的人员需要这些权限。 从中心创建项目的人员不需要这些权限。

许可 目的
Microsoft.Insights/Components/Write 写入到 Application Insights 组件配置。
Microsoft.OperationalInsights/workspaces/write 创建新的工作区,或通过提供现有工作区中的客户 ID 创建指向现有工作区的链接。

场景:预配的吞吐量单位获取器

以下示例定义了一个自定义角色,该角色可以获取预配的吞吐量单位 (PTU)

{
    "properties": {
        "roleName": "PTU procurer",
        "description": "Custom role to purchase PTU",
        "assignableScopes": [
            "/subscriptions/<your-subscription-id>"
        ],
        "permissions": [
            {
                "actions": [
                    "Microsoft.CognitiveServices/accounts/commitmentplans/read",
                    "Microsoft.CognitiveServices/accounts/commitmentplans/write",
                    "Microsoft.CognitiveServices/accounts/commitmentplans/delete",
                    "Microsoft.CognitiveServices/locations/commitmentTiers/read",
                    "Microsoft.CognitiveServices/accounts/commitmentplans/read",
                    "Microsoft.CognitiveServices/accounts/commitmentplans/write",
                    "Microsoft.CognitiveServices/accounts/commitmentplans/delete",
                    "Microsoft.Features/features/read",
                    "Microsoft.Features/providers/features/read",
                    "Microsoft.Features/providers/features/register/action",
                    "Microsoft.Insights/logDefinitions/read",
                    "Microsoft.Insights/metricdefinitions/read",
                    "Microsoft.Insights/metrics/read",
                    "Microsoft.ResourceHealth/availabilityStatuses/read",
                    "Microsoft.Resources/deployments/operations/read",
                    "Microsoft.Resources/subscriptions/operationresults/read",
                    "Microsoft.Resources/subscriptions/read",
                    "Microsoft.Resources/subscriptions/resourcegroups/deployments/*",
                    "Microsoft.Resources/subscriptions/resourceGroups/read"
                ],
                "notActions": [],
                "dataActions": [],
                "notDataActions": []
            }
        ]
    }
}

场景:Azure OpenAI 助手 API

以下示例使用 Azure OpenAI 助手为开发人员定义角色。

{
    "id": "",
    "properties": {
        "roleName": "Azure OpenAI Assistants API Developer",
        "description": "Custom role to work with Azure OpenAI Assistants API",
        "assignableScopes": [
            "<your-scope>"
        ],
        "permissions": [
            {
                "actions": [
                    "Microsoft.CognitiveServices/*/read",
                    "Microsoft.Authorization/roleAssignments/read",
                    "Microsoft.Authorization/roleDefinitions/read"
                ],
                "notActions": [],
                "dataActions": [
                    "Microsoft.CognitiveServices/accounts/OpenAI/*/read",
                    "Microsoft.CognitiveServices/accounts/OpenAI/engines/completions/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/engines/search/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/engines/generate/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/deployments/search/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/deployments/completions/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/deployments/chat/completions/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/deployments/extensions/chat/completions/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/deployments/embeddings/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/images/generations/action",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/write",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/read",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/delete",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/files/write",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/files/read",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/files/delete",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/threads/write",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/threads/read",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/threads/delete",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/threads/messages/write",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/threads/messages/read",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/threads/messages/files/read",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/threads/runs/write",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/threads/runs/read",
                    "Microsoft.CognitiveServices/accounts/OpenAI/assistants/threads/runs/steps/read"
                ],
                "notDataActions": []
            }
        ]
    }
}

故障排除

错误:主体无权访问 API/操作

症状

使用 Azure AI Foundry 门户聊天场时,会收到一条错误消息,指出“主体无权访问 API/操作”。 此错误还可能包括“Apim-request-id”。

原因

用于对 Azure OpenAI 或 Azure AI 搜索的请求进行身份验证的用户或服务主体没有访问资源所需的权限。

解决方案

将以下角色分配给用户或服务主体。 分配的角色取决于所使用的服务以及用户或服务主体所需的访问级别:

正在访问的服务 角色 DESCRIPTION
Azure OpenAI 认知服务 OpenAI 贡献者 从 Azure AI Foundry 调用公共引入 API。
Azure OpenAI 认知服务用户 从 Azure AI Foundry 列出 API 密钥。
Azure AI 搜索 搜索索引数据贡献者 索引场景需要。
Azure AI 搜索 搜索索引数据读取者 推理服务从索引中查询数据。 仅用于推理场景。

还原为参与者角色

如果创建新的中心,并且在为托管标识进行新的 Azure AI 管理员默认角色分配时遇到错误,可使用以下步骤将中心更改为参与者角色:

重要

除非遇到问题,否则不建议将中心还原为参与者角色。 如果还原操作确实解决了遇到的问题,请开立支持事件,并包含有关还原所解决问题的信息,以便我们可以进一步调查。

如果要将“参与者”角色还原为新中心的默认角色,可使用你的 Azure 订阅详细信息开立支持请求,并请求将订阅更改为将参与者角色用作新中心系统分配的托管标识的默认角色。

  1. 删除中心的托管标识的角色分配。 此角色分配的范围是包含中心的资源组,因此必须从资源组中删除该角色。

    小窍门

    该中心的系统分配托管标识与中心的名称相同。

    在 Azure 门户中,导航到包含该中心的资源组。 依次选择“访问控制(IAM)”、“角色分配”。 在角色分配列表中,找到托管标识的角色分配。 选择它,然后选择“删除”

    有关删除角色分配的信息,请参阅 “删除角色分配”。

  2. 在“资源组”上为“参与者”角色创建新的角色分配。 添加此角色分配时,选择中心的托管标识作为被分派人。 系统分配的托管标识的名称与该中心名称相同。

    1. 在 Azure 门户中,导航到包含该中心的资源组。 依次选择“访问控制(IAM)”、“添加角色分配”
    2. 在“角色”选项卡上,选择“参与者”
    3. 从“ 成员 ”选项卡中,选择 “托管标识”、“ + 选择成员”,并将 “托管标识 ”下拉列表设置为 Azure AI 中心。 在“选择”字段中,输入中心的名称。 从列表中选择该中心,然后选择“选择”。
    4. 在“查看 + 分配”选项卡上,选择“查看 + 分配”

后续步骤