角色与权限策略
本文档将介绍 API7 企业版中的高级功能:角色和权限策略的概念。
概述
- 角色:定义具有特定访问级别的用户组。你可以创建自定义角色,对具有相似权限需求的用户进行分类。一个角色可以与多个权限策略相关联。
- 权限策略:它们可以被视为一种蓝图,用来概括 API7 企业版中特定资源(例如,网关组、已发布的服务)的允许操作(权限)。单个权限策略可以被多个角色同时关联,也可以被直接用作某些用户的权限边界,从而防止用户越权。
角色和权限策略工作原理
考虑这样一种场景:你创建了一个名为 网关组管理员
的自定义角色,并为其关联名为 网关组基本操作
的权限策略。
此权限策略将 GetGatewayGroups
操作授予所有网关组资源(资源范围为 *
),允许用户在控制台上查看网关组列表,并直接使用 Get all gateway groups
API 或利用 API7 工具(如 ADC 和 API7 Ingress Controller)检索网关组列表。
关键点:
- 角色用于根据用户的共享权限要求对用户进行分类。对角色的关联权限策略的更改将影响该角色关联的所有用户。
- 权限策略指定了 API7 企业版(包括 API7 网关 和 API7 门户)内指定资源的授权操作。
- 将权限策略关联到多个角色会将关联的权限授予这些角色中的所有用户。
- 权限策略可以根据需要进行详细或广泛的定义。建议从基本设置开始,然后随着访问控制要求的发展对其进行细化。
使用案例
内置超级管理员角色
API7 企业版在初始系统设置时提供了一个预定义的角色,名为 超级管理员
。此角色与内置的 super-admin-permission-policy
相关联,该策略授予对 API7 企业版内所有操作和资源的完全访问权限。内置的角色和策略都是不可编辑的,以确保核心系统安全。
初始 admin
帐户永久绑定到 超级管理员
角色,并且其角色无法更改。
使用自定义角色扩展访问控制
API7 企业版中还能够创建具有精细权限的自定义角色。对于需要完全访问的场景,你也可以直接将 super-admin-permission-policy
关联到你的自定义角色。
示例场景:隔离环境和定制安全性
通过将权限策略限定在特定网关组的资源范围内,你可以为每个环境定义精细的安全控制。与测试或 UAT 等开发环境中更宽松的权限设置相比,你可以在生产等环境中实施更严格的访问限制。
- 定义权限策略
为每个网关组创建特定的权限策略,例如 测试网关组完全操作
、UAT网关组完全操作
和 生产网关组网完全操作
。这些策略分别定义了每个网关组(对应不同环境)中允许的操作和资源。
- 分配角色
创建自定义角色以对具有相似访问需求的用户进行分类,然后将适当的权限策略关联到每个角色:
- 开发团队成员:关联
测试 网关组完全操作
策略,允许他们仅在测试环境中进行更改。 - 开发团队领导:关联
测试网关组完全操作
和UAT网关组完全操作
策略。这使他们能够在测试和 UAT 环境中工作,还包括将服务版本从测试同步到 UAT 的能力。 - 测试工程师:关联
UAT网关组完全操作
和生产网关组完全操作
策略。这将他们的访问权限限制在 UAT 和生产环境,专注于新的 API 测试和发布任务。
防止用户越权
用户的角色可能经常发生变化,因此你可能需要一种保障措施来确保边界限制。 例如,权限边界可用于防止 A 部门用户访问 B 部门拥有的资源。权限边界还可用于防止意外访问关键系统组件,例如许可证或组织设置。 通过明确拒绝访问这些区域,你可以维持一个强大的安全层,保护敏感配置免遭未经授权的修改。
如何配置权限策略
API7 企业版目前将权限策略存储为 JSON 文件。
// PermissionPolicy 示例
{
"statement": [
{
"resources": [
"arn:gatewaygroup:<[^:]*>" // 必填字段,可操作的资源范围,通过资源 ID 指定,可使用通配符。此示例中指所有网关组资源。
],
"actions": [
"GatewayGroup:DeleteGatewayGroup" // 必填字段,允许的操作,从预定义好的操作集合中选择,注意和资源类型要配套。此示例中指删除网关组的操作。
],
"conditions": { // 可选字段,用标签筛选可操作的资源范围。此示例中指所有带“环境类型:生产”标签的网关组。
"gateway_group_label": {
"type": "MatchLabel",
"options": [
{
"key": "环境类型",
"operator": "exact_match",
"value": "生产"
}
]
}
},
"effect": "allow" // 必填字段,指定 actions 的效果,只能是 allow 或者 deny。
}
]
}
- API7 企业版中的单个权限策略可以包含多个语句(Statement),这些语句定义的资源和操作可以重叠, 它们之间是 OR 的关系。
- API7 企业版对权限策略执行“拒绝覆盖允许”的原则。
- 对某个具体角色来说,如果关联了多个权限策略,只要有任意一个策略中有任意一个语句(Statement)定义为“拒绝”(deny),则其他关联的权限策略中所有语句中对同一个资源及操作的“允许”(allow)都将无效。
- 对某个用户来说,如果被授权了多个角色,只要有任意一个角色或该用户的权限边界策略最终拒绝了对某一个资源及操作的“拒绝”(deny),则无论其他角色是否允许,该用户都无法对这个资源进行指定的操作。
示例
假设有三个网关组:
- 名称:测试网关组,带有标签
环境类型:测试
、部门: A
- 名称:蓝色网关组,带有标签
环境类型:生产
、部门: B
- 名称:绿色网关组,带有标签
环境类型:生产
、部门: A
假设一个自定义角色,关联了上一个小节中示例权限策略,有一个用户被授予了这个角色。此用户可以通过控制台或 API7 工具删除 蓝色网关组
和 绿色网关组
,但不能删除 测试网关组
。
但是,如果