API7 企业版 v3.2.14 通过 IAM 策略模型实现更精细的权限管理

更新时间 7/11/2024

引言

API7 企业版过往版本提供了一套简单易用、功能完善的 RBAC(基于角色的访问控制)管理机制,该机制在保障系统安全的同时,也赋予了用户灵活的角色权限配置能力。随着 API7 企业版的功能不断丰富以及资源类型的持续扩展,传统的 RBAC 管理逐渐显现出其在权限细粒度控制方面的局限性。同时,越来越多的企业开始追求更加精细化的权限管理策略,以满足其复杂多变的业务需求。

为了进一步提升 API7 企业版的权限管理能力,我们对现有的角色权限体系进行全面升级,引入更加灵活且强大的 IAM 策略模型,为用户将提供更细粒度的权限控制和更高的灵活性,能够更好地满足现代企业对于复杂多变的权限管理需求。

什么是 IAM 策略模型?

IAM(Identity and Access Management,身份与访问管理)策略模型代表了一种更为精细化和高效的权限管理方式。它允许管理员定义具体的策略,每个策略包含了一组规则(Statement),这些规则详细指定了哪些用户或角色可以对哪些资源执行哪些操作。这种模型相比传统的 RBAC 机制具有更高的灵活性和细粒度。

IAM, Identity and Access Management

IAM 相比 RBAC 的优势:

  • 细粒度控制:IAM 可以精确到资源级别,甚至是对资源中的特定属性或操作进行权限控制,而 RBAC 往往基于角色来分配权限,粒度相对较粗。

  • 灵活性:IAM 允许管理员直接管理策略和权限,而不需要通过创建和管理大量的角色来间接实现权限分配,使得权限配置更加直接和灵活。

  • 扩展性:随着系统功能的增加和资源类型的丰富,IAM 可以更容易地适应变化,通过新增新的策略来满足新的权限需求,而 RBAC 可能需要调整或新增大量角色来适应变化。

如何在 API7 企业版中使用 IAM 策略

1. 创建权限策略

登录 API7 企业版后,点击右上角组织按钮,从下拉菜单中选择权限策略菜单项。

Permission Policies

进入权限策略后,你可以在这里查看管理所有的策略,默认会存在 super-admin-permission-policy 策略,用于附加给初始的管理员。

Built-in Super Admin Permission Policy

点击右上角的新增策略进入新增策略的表单,在这里你需要填写 Policies 的基础信息及在 Policy Editor 中编辑 Policy 的权限的配置,这个配置我们称为 Statements。

Edit 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 企业版后,点击右上角组织按钮,在下拉菜单中点击角色菜单项:

Roles

进入角色列表后,你可以在这里查看管理所有的角色,默认会存在 Super Admin 角色作为内置管理员角色。

Built-in Super Admin Role

点击右上角的新增自定义角色弹出新增角色的表单,在这里你需要填写角色的基础信息,创建完成后我们会进入角色详情页面。

Add Custom Role

在角色详情页,点击关联策略按钮,即可将先前创建的权限策略分配给该角色。

Attach Policies to Roles

创建后的策略可跨多个角色重复使用。当一个角色关联了多条策略时,这些策略之间默认是取并集的。也就是说,角色拥有的权限是所有关联策略中声明的权限的总和。角色创建完成并关联策略后,我们可以为具体的用户分配角色。

3. 为用户分配角色

在进入 API7 企业版后,点击右上角组织按钮,在下拉菜单中点击用户菜单项:

Users

进入用户列表后,你可以在这里查看管理所有的用户,默认会存在 admin 角色作为内置管理员。

User List

在角色列表的右侧操作栏中,点击更新角色即可弹出为某个用户更新角色的表单抽屉。

Update Roles for Users

用户可以拥有多个角色,当一个用户授权了多个角色时,这些权限是取并集的。也就是说,用户拥有的权限是所有角色权限的总和。

4. 角色映射的调整

随着用户角色模型的优化升级,SSO 角色映射流程得以简化。现在配置登录选项的角色映射时,无需地为每个角色单独设定资源级别的匹配规则。资源和操作的权限直接继承自所选的内置角色,使得权限配置更加直观,简化了权限管理的复杂度。

Role Mapping

总结与展望

IAM 策略的引入实现了更灵活的权限配置与管理。这一调整不仅提升了系统的安全性,还为户提供了更大的自定义空间。未来我们将持续扩展 IAM 策略所支持的资源类型,确保所有系统资源都能纳入精细的权限管理范畴,并且不断优化策略编辑与管理界面,为用户带来更加完善,高效的权限管理体验。

微信咨询

获取方案