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

如何在 Azure API 管理中使用基于角色的访问控制

适用于:所有 API 管理层级

Azure API 管理依赖于 Azure 基于角色的访问控制 (Azure RBAC) 来为 API 管理服务和实体(例如,API 和策略)启用精细访问管理。 本文概述 API 管理中的内置角色和自定义角色。 有关 Azure 门户中的访问管理的详细信息,请参阅 Azure 门户中的访问管理入门

注意

建议使用 Azure Az PowerShell 模块与 Azure 交互。 若要开始,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

内置服务角色

API 管理目前提供了三个内置角色,不久之后会再添加两个角色。 可在不同的范围(包括订阅、资源组和单个 API 管理实例)分配这些角色。 例如,如果在资源组级别将“API 管理服务读者”角色分配给某个用户,则该用户将对该资源组中的所有 API 管理实例拥有读取访问权限。

下表提供内置角色的简短说明。 可以使用 Azure 门户或其他工具(包括 Azure PowerShellAzure CLIREST API)分配这些角色。 若要详细了解如何分配内置角色,请参阅分配 Azure 角色以管理对 Azure 订阅资源的访问权限

角色 读取访问权限[1] 写入访问权限[2] 服务创建、删除、缩放,VPN 和自定义域配置 对旧版发布者门户拥有访问权限 说明
API 管理服务参与者 超级用户。 对 API 管理服务和实体(例如,API 和策略)拥有完全 CRUD 访问权限。 对旧版发布者门户拥有访问权限。
API 管理服务读者 对 API 管理服务和实体拥有只读访问权限。
API 管理服务操作员 可以管理 API 管理服务,但不能管理实例。

[1] 对 API 管理服务和实体(例如,API 和策略)拥有读取访问权限。

[2] 对 API 管理服务和实体拥有写入访问权限,但以下操作除外:实例创建、删除和缩放;VPN 配置;以及自定义域设置。

内置工作区角色

API 管理为 API 管理实例的工作区中的协作者提供以下内置角色。

必须为工作区协作者分配工作区范围角色和服务范围角色。

角色 范围 说明
API 管理工作区参与者 工作区 可以管理工作区和视图,但不能修改其成员。 应在工作区范围内分配此角色。
API 管理工作区读者 工作区 对工作区中的实体具有只读访问权限。 应在工作区范围内分配此角色。
API 管理工作区 API 开发人员 工作区 对工作区中的实体具有读取访问权限,并对用于编辑 API 的实体具有读写访问权限。 应在工作区范围内分配此角色。
API 管理工作区 API 产品经理 工作区 对工作区中的实体具有读取访问权限,并对用于发布 API 的实体具有读写访问权限。 应在工作区范围内分配此角色。
API Management 服务工作区 API 开发人员 服务 对标记和产品具有读取访问权限,并且具有写入访问权限,可允许:

▪️ 将 API 分配给产品
▪️ 将标记分配给产品和 API

应在服务范围内分配此角色。
API 管理服务工作区 API 产品经理 服务 具有与 API 管理服务工作区 API 开发人员相同的访问权限,对用户具有读取访问权限,并且具有写入访问权限,可允许将用户分配给组。 应在服务范围内分配此角色。

根据工作区协作者使用或管理工作区的方式,我们还建议在工作区网关范围分配以下 Azure 提供的 RBAC 角色之一:读取者参与者所有者

内置开发人员门户角色

角色 范围 说明
API 管理开发人员门户内容编辑者 service 可以自定义开发人员门户、编辑其内容,并使用 Azure 资源管理器 API 发布它。

自定义角色

如果没有任何内置角色可以满足具体需要,可以创建自定义角色,针对 API 管理实体提供更精细的访问管理。 例如,可以创建一个对 API 管理服务拥有只读访问权限,但只对某个特定 API 拥有写入访问权限的自定义角色。 若要详细了解自定义角色,请参阅 Azure RBAC 中的自定义角色

注意

若要在 Azure 门户中查看 API 管理实例,自定义角色必须包含 Microsoft.ApiManagement/service/read 操作。

创建自定义角色时,从某个内置角色着手会更为轻松。 编辑属性以添加 ActionsNotActionsAssignableScopes,然后将所做的更改保存为新角色。 以下示例从“API 管理服务读者”角色着手,创建名为“计算器 API 编辑者”的自定义角色。可以在特定 API 的范围分配自定义角色。 因此,此角色仅有权访问该 API。

$role = Get-AzRoleDefinition "API Management Service Reader Role"
$role.Id = $null
$role.Name = 'Calculator API Contributor'
$role.Description = 'Has read access to Contoso APIM instance and write access to the Calculator API.'
$role.Actions.Add('Microsoft.ApiManagement/service/apis/write')
$role.Actions.Add('Microsoft.ApiManagement/service/apis/*/write')
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add('/subscriptions/<Azure subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.ApiManagement/service/<APIM service instance name>/apis/<API name>')
New-AzRoleDefinition -Role $role
New-AzRoleAssignment -ObjectId <object ID of the user account> -RoleDefinitionName 'Calculator API Contributor' -Scope '/subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.ApiManagement/service/<APIM service instance name>/apis/<API name>'

Azure 资源管理器资源提供程序操作一文提供了可以在 API 管理级别授予的权限的列表。

后续步骤

若要详细了解 Azure 中基于角色的访问控制,请参阅以下文章: