API7 企业版 v3.2.14.4 现已正式发布,此次更新重点引入了权限边界功能,以响应企业对更为精细化的用户权限管理的需求。
什么是权限边界?
权限边界,顾名思义,就像是一道权限的围墙,它定义了用户可以拥有的最大权限范围,用于限制用户或角色在系统中能执行的操作。其主要作用是增强系统的安全性,防止权限的滥用。通过设置这道“围墙”,我们可以确保用户仅能在其职责范围内进行操作,无法越权访问或修改系统中的数据。
权限边界可以复用系统中已有的权限策略,也可以为其单独创建新的权限策略。当用户或角色被分配了权限边界时,它会限制其权限,但并不会直接为其提供任何权限。
示例
假设我们创建了一个权限策略,该策略具有所有网关组中的服务操作权及查看权,并将此策略作为权限边界赋予用户 Tom。
1{
2 "statement": [
3 // 所有网关组的查看权
4 {
5 "effect": "allow",
6 "resources": [
7 "arn:api7:gateway:gatewaygroup/<.*>"
8 ],
9 "actions": [
10 "<.*>Get<.*>"
11 ]
12 },
13 // 所有网关组中已发布服务的操作权
14 {
15 "effect": "allow",
16 "resources": [
17 "*"
18 ],
19 "actions": [
20 "arn:api7:gateway:gatewaygroup/<.*>/publishedservice/<.*>"
21 ]
22 }
23 ]
24}
此时,Tom 的最大权限被限制在这个权限策略内。尽管设置了权限边界,但这并不意味着 Tom 已经拥有了这些权限。接下来,我们为 Tom 分配了一个具有以下权限策略的角色:
1{
2 "statement": [
3 // 所有网关组的查看权
4 {
5 "effect": "allow",
6 "resources": [
7 "arn:api7:gateway:gatewaygroup/<.*>"
8 ],
9 "actions": [
10 "<.*>Get<.*>"
11 ]
12 },
13 // 所有网关组中已发布服务的操作权
14 {
15 "effect": "allow",
16 "resources": [
17 "arn:api7:gateway:gatewaygroup/<.*>/publishedservice/<.*>"
18 ],
19 "actions": [
20 "<.*>"
21 ]
22 },
23 // 自定义插件的操作权
24 {
25 "effect": "allow",
26 "resources": [
27 "arn:api7:gateway:gatewaysetting/*"
28 ],
29 "actions": [
30 "gateway:<.*>CustomPlugin<.*>"
31 ]
32 }
33 ]
34}
尽管 Tom 被赋予了所有网关组的服务操作权、查看权以及自定义插件的操作权,但当他尝试编辑自定义插件时,会发现自己没有操作权限。这是因为我们为 Tom 设置了权限边界,除非调整 Tom 的权限边界以增加自定义插件相关的权限,否则超出权限边界的额外权限都是无效的。
如何使用权限边界功能?
创建权限策略
权限边界可以直接复用系统中的权限策略。在为用户分配权限边界前,需要先创建权限策略。在系统组织菜单中点击“权限策略”进入列表页。
然后点击列表右上角的“添加权限策略”进入创建表单。
在表单中填写权限策略的基础信息并配置对应的策略规则既可创建权限策略。理论上同一个权限策略可以既关联多个角色,又作为多个用户的权限边界,但不推荐这个用法。
关于权限策略的更多概念介绍可以查看这篇文章:API7 企业版 v3.2.14 通过 IAM 策略模型实现更精细的权限管理,一些常用的策略配置示例可以参考此文档 Permission Policy Examples。关于 resources 与 actions 有哪些取值,对应了哪些 API 可以查看此文档 Permission Policy Actions and Resources。
分配权限边界
权限策略创建完成后,即可进行权限边界的分配。在组织菜单中点击“用户”进入用户列表页。
我们可以在邀请用户时直接为新用户分配权限边界,邀请用户的表单中新增了权限边界的字段,当用户登录系统后默认就被分配了这个权限边界。
对于存量的用户,我们可以在用户详情页中点击权限边界的编辑按钮,即可为其配置权限边界。
当为用户配置权限时,可以在特定的操作权限中添加permission_boundaries条件。例如,在 iam:InviteUser
(邀请用户)或 iam:UpdateUserBoundary
(更新用户权限边界)的 actions 中,通过增加 permission_boundaries
条件来进一步细化权限控制。在此条件下,可以指定必须为用户设置的权限策略 ID。这样,当执行邀请新用户或更新其他用户权限边界的操作时,系统将强制要求根据这些预设规则为被操作的用户分配相应的权限边界。
以下是一个示例策略,展示了如何在策略中实现这一点:
1{
2 "statement": [
3 {
4 "effect": "allow",
5 "resources": ["arn:api7:iam:user/<.*>"],
6 "actions": [
7 "iam:InviteUser",
8 "iam:UpdateUserBoundary" <-- 语义: userA 可以更新用户的权限边界
9 ],
10 "conditions": {
11 "permission_boundaries": {
12 "type": "AllOfStrings",
13 "options": [
14 "d3698967-1d28-4e37-b5e7-ef00a93304cc",
15 "f863a233-f732-4af0-bb21-3fbe4013be69"
16 ]
17 }
18 }
19 }
20 ]
21}
权限边界映射
除了直接在系统内进行具体权限边界的配置,API7 企业版还支持通过权限边界映射功能,根据用户在 IdP(身份提供者)中的身份和权限自动为其分配相应的权限边界。在组织设置页面中,点击“新增登录选项”,无论选择哪种 Provider,在配置表单最下方都新增了“Permission Boundary Mapping”开关。开启此开关后,即可配置权限边界映射。
权限策略(Permission Policy):这是 API7 企业版中定义的权限策略资源,用于控制用户的访问权限和操作范围。在权限边界映射中,我们可以将外部 IdP 中的配置项映射到这些权限边界上,以便在登录时为用户分配相应的权限边界。
映射的权限边界属性 (Permission Boundary Attribute):IdP 返回的用户权限边界信息的标识符,用于在 IdP 的响应中定位用户的权限边界数据。假设指定一个属性名,例如 "role" 或 "groups",系统将根据此属性名从 IdP 的响应中提取权限边界的值。
查找方式(Operation):用于确定如何从 IdP 的权限边界属性中匹配到权限边界值的方法。支持精确匹配、模糊匹配,数组匹配等多种方式。假设 IdP 返回的权限边界值是字符串数组,我们可以选择 "数组中的精确匹配" 来找到匹配项。
映射的权限边界值(Permission Boundary Value):IdP 中代表用户权限边界的具体值。
总结
总的来说,权限边界是确保系统安全、防止权限滥用的重要工具。通过明确设定用户的权限范围,我们不仅可以保护系统的关键资源不被未授权访问,还能确保每个用户都只能在其被授权的范围内进行操作。在复杂的系统环境中,合理利用权限边界功能,将为企业的数据安全提供坚实的保障。