引言
API7 企业版过往版本提供了一套简单易用、功能完善的 RBAC(基于角色的访问控制)管理机制,该机制在保障系统安全的同时,也赋予了用户灵活的角色权限配置能力。随着 API7 企业版的功能不断丰富以及资源类型的持续扩展,传统的 RBAC 管理逐渐显现出其在权限细粒度控制方面的局限性。同时,越来越多的企业开始追求更加精细化的权限管理策略,以满足其复杂多变的业务需求。
为了进一步提升 API7 企业版的权限管理能力,我们对现有的角色权限体系进行全面升级,引入更加灵活且强大的 IAM 策略模型,为用户将提供更细粒度的权限控制和更高的灵活性,能够更好地满足现代企业对于复杂多变的权限管理需求。
什么是 IAM 策略模型?
IAM(Identity and Access Management,身份与访问管理)策略模型代表了一种更为精细化和高效的权限管理方式。它允许管理员定义具体的策略,每个策略包含了一组规则(Statement),这些规则详细指定了哪些用户或角色可以对哪些资源执行哪些操作。这种模型相比传统的 RBAC 机制具有更高的灵活性和细粒度。
IAM 相比 RBAC 的优势:
细粒度控制:IAM 可以精确到资源级别,甚至是对资源中的特定属性或操作进行权限控制,而 RBAC 往往基于角色来分配权限,粒度相对较粗。
灵活性:IAM 允许管理员直接管理策略和权限,而不需要通过创建和管理大量的角色来间接实现权限分配,使得权限配置更加直接和灵活。
扩展性:随着系统功能的增加和资源类型的丰富,IAM 可以更容易地适应变化,通过新增新的策略来满足新的权限需求,而 RBAC 可能需要调整或新增大量角色来适应变化。
如何在 API7 企业版中使用 IAM 策略
1. 创建权限策略
登录 API7 企业版后,点击右上角组织按钮,从下拉菜单中选择权限策略菜单项。
进入权限策略后,你可以在这里查看管理所有的策略,默认会存在 super-admin-permission-policy
策略,用于附加给初始的管理员。
点击右上角的新增策略进入新增策略的表单,在这里你需要填写 Policies 的基础信息及在 Policy Editor 中编辑 Policy 的权限的配置,这个配置我们称为 Statements。
Statements 是策略的核心组成部分,它们由一个或多个声明(Statement)构成,每个声明定义了一个具体的访问权限规则。
Effect:指定声明的效果,通常是
"Allow"
(允许)或"Deny"
(拒绝)。一个资源可能同时受到多个策略的影响,IAM系统会根据声明的顺序和逻辑来决定最终的访问权限。Action:定义了一系列允许或拒绝的操作,如
"gateway:DeleteGatewayGroup"
、"iam:GetUser"
等。这些操作必须与资源(Resource)配合使用才有意义。Resource:指定了声明适用的资源,如特定的网关组,服务等。可以使用通配符(如
<.*>
)来匹配多个资源。Condition(可选):定义了声明生效的条件,例如只允许匹配到某个网关组标签的时候才允许操作。
1"conditions": { 2 "gateway_group_label": { 3 "type": "MatchLabel", 4 "options": { 5 "key": "type", 6 "operator": "exact_match", 7 "value": "production" 8 } 9 } 10 },
这代表只有网关组标签为 production 的时候才允许 statement 中定义的操作生效。
若需创建一个策略,以限定用户仅能编辑特定网关组内的所有已发布服务,可按以下方式编写:
1{
2 "statement": [
3 {
4 "resources": [
5 "arn:api7:gateway:gatewaygroup/{gateway group id}"
6 ],
7 "actions": [
8 "<.*>Get<.*>" // 允许执行以'Get'开头的所有操作,针对指定的网关组,Get 方法代表查看的权限
9 ],
10 "effect": "allow" // 允许执行上述 actions 中定义的操作
11 // 注释:此策略声明允许对指定的网关组执行所有以'Get'开头的操作,如获取网关组信息、获取网关组中的服务列表等。
12 },
13 {
14 "resources": [
15 "arn:api7:gateway:gatewaygroup/{gateway group id}/publishedservice/<.*>",
16 ],
17 "actions": [
18 "<.*>" // 允许执行所有操作
19 ],
20 "effect": "allow" // 允许执行上述 actions 中定义的操作
21 // 此策略声明允许对指定网关组下的所有已发布服务执行所有操作。这包括创建、读取、更新、删除等操作。
22 }
23 ]
24}
在这个例子中,我们定义了两组资源(网关组和网关组下的已发布服务),并为它们分别设置了允许执行的操作。一些常用的策略配置示例可以参考 Permission Policy Examples 文档。关于 resources 与 actions 有哪些取值,对应了哪些 API 可以查看 Permission Policy Actions and Resources 文档。
策略创建完成后,还不能直接为用户授权,我们需要先将策略分配给指定的角色。
2. 创建角色并关联策略
在进入 API7 企业版后,点击右上角组织按钮,在下拉菜单中点击角色菜单项:
进入角色列表后,你可以在这里查看管理所有的角色,默认会存在 Super Admin 角色作为内置管理员角色。
点击右上角的新增自定义角色弹出新增角色的表单,在这里你需要填写角色的基础信息,创建完成后我们会进入角色详情页面。
在角色详情页,点击关联策略按钮,即可将先前创建的权限策略分配给该角色。
创建后的策略可跨多个角色重复使用。当一个角色关联了多条策略时,这些策略之间默认是取并集的。也就是说,角色拥有的权限是所有关联策略中声明的权限的总和。角色创建完成并关联策略后,我们可以为具体的用户分配角色。
3. 为用户分配角色
在进入 API7 企业版后,点击右上角组织按钮,在下拉菜单中点击用户菜单项:
进入用户列表后,你可以在这里查看管理所有的用户,默认会存在 admin 角色作为内置管理员。
在角色列表的右侧操作栏中,点击更新角色即可弹出为某个用户更新角色的表单抽屉。
用户可以拥有多个角色,当一个用户授权了多个角色时,这些权限是取并集的。也就是说,用户拥有的权限是所有角色权限的总和。
4. 角色映射的调整
随着用户角色模型的优化升级,SSO 角色映射流程得以简化。现在配置登录选项的角色映射时,无需地为每个角色单独设定资源级别的匹配规则。资源和操作的权限直接继承自所选的内置角色,使得权限配置更加直观,简化了权限管理的复杂度。
总结与展望
IAM 策略的引入实现了更灵活的权限配置与管理。这一调整不仅提升了系统的安全性,还为户提供了更大的自定义空间。未来我们将持续扩展 IAM 策略所支持的资源类型,确保所有系统资源都能纳入精细的权限管理范畴,并且不断优化策略编辑与管理界面,为用户带来更加完善,高效的权限管理体验。