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

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

内置角色

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

下表提供内置角色的简短说明。 可以使用 Azure 门户或 Azure PowerShell、Azure 命令行接口REST API 等其他工具分配这些角色。 有关如何分配内置角色的详细信息,请参阅使用角色分配管理对 Azure 订阅资源的访问权限

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

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

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

*将所有管理 UI 从现有发布者门户迁移到 Azure 门户后,将提供“服务编辑者”角色。将发布者门户重构为只包含与管理开发人员门户相关的功能后,将提供“内容管理员”角色。

自定义角色

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

创建自定义角色时,从某个内置角色着手会更方便。 编辑属性以添加 Actions、NotActions 或 AssignableScopes,然后将所做的更改保存为新角色。 以下示例从“Azure API 管理服务读者”角色着手,创建名为“计算器 API 编辑者”的自定义角色。 只能将该自定义角色分配到特定 API,因此它只对该 API 拥有访问权限。

$role = Get-AzureRmRoleDefinition "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.AssignableScopes.Clear()
$role.AssignableScopes.Add('/subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.ApiManagement/service/<service name>/apis/<api ID>')
New-AzureRmRoleDefinition -Role $role
New-AzureRmRoleAssignment -ObjectId <object ID of the user account> -RoleDefinitionName 'Calculator API Contributor' -Scope '/subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.ApiManagement/service/<service name>/apis/<api ID>'

后续步骤