浅谈统一权限管理服务的设计与开发

作者 | 天地练心

导读

本文详细探讨了统一权限管理服务(MPS)的设计与开发,针对企业内部多平台权限管理混乱的问题,提出了一套综合RBAC、ACL、DAC权限模型的解决方案。文章从需求分析、技术选型、功能设计等方面全面介绍了MPS的构建过程。在平台&节点管理方面,MPS支持多种业务平台接入方式,同时提供节点管理和组织管理功能。权限管理模块涵盖历史权限导入、权限分配、鉴权服务等。申请&授权模块实现了线上申请、审批流程和自动授权功能。权限审计&回收模块支持权限数据下载、操作日志记录以及权限续期与回收。MPS的成功应用于百度内部展示了其卓越性能与潜力,有望为未来实现更高效的企业权限管理提供强有力的支持。

全文6171字,预计阅读时间16分钟。

01 背景

在当今信息技术高速发展的时代,企业内部的应用系统和数据平台日益增多,这些平台负责的业务、功能设计不尽相同,各平台权限系统自建,没有统一的权限设计和规范的权限管理,导致出现权限管理混乱和层级划分不明的问题。为了解决这一问题,移动数据中台决定开发一套统一权限管理服务(MEDD Permission Service,以下简称MPS),旨在整合数据中台所有平台权限,实现打通平台权限、业务、用户的集中管理,为未来实现全面的数据权限和平台工具互通的权限管理方式提供强有力的管理服务。

本文将详细介绍统一权限管理服务的设计与实现,包括需求分析、技术选型、功能设计、平台&节点管理、权限管理、申请&授权、权限审计与回收等方面的内容。

02 需求分析

在需求分析阶段,需要与相关的业务平台和数据平台团队沟通,了解他们的权限系统特点、权限管理问题以及他们对统一权限管理服务的期望。需求分析主要包括:

平台权限整合:确定需要整合的业务平台和数据平台,了解它们的权限系统架构和功能,以便确保MPS能够与它们无缝集成。

权限层级划分:明确权限的层级划分,包括用户角色、组织结构、资源类型等,以便建立合理的权限模型。

统一认证:确定是否需要引入统一的认证机制,以提高用户体验和安全性。

审批流程:定义权限的申请、审批和回收流程,确保安全性和灵活性,同时考虑审批流程的可定制性。

API接口:考虑业务平台如何接入MPS,设计简洁且易于集成的API接口,同时确保接口的安全性。

03 技术选型

MPS选择使用GDP(Go Develop Platform)框架开发,GDP作为百度内部研发的Go开发框架,具备以下优势:

厂内基础设施支持:GDP在百度内部得到广泛应用,因此可以更好地与百度内部的基础设施和生态系统进行集成,提供更稳定和高效的服务。

易配置、易组装:权限管理服务可能需要根据不同业务平台的要求进行灵活的组装和配置,GDP的易配置、易组装特性能够帮助实现这一点。

RPC能力和通用基础库:权限管理服务需要与其他系统进行通信和集成,GDP提供了完善的RPC Client和RPC Server能力,同时配备通用基础库,有助于快速开发和集成。

支持标准化监控:GDP支持基于Prometheus的标准化监控解决方案,这有助于对MPS进行全面监控和运维。

04 权限模型设计

完成了业务平台的需求分析之后,我们要基于确定接入的业务平台的业务场景确定使用的权限模型,MPS采用了综合RBAC和ACL、DAC的权限模型,以实现灵活、精确的权限控制。这种综合模型结合了三种访问控制的优点,为业务平台权限管理提供了更多的灵活性和粒度控制。

MPS将业务平台的权限分为两大类:

业务权限:业务平台用户对某个节点或者权限包的权限,分为业务读权限、业务写权限和自定义权限类型。例如,用户在业务平台查看报表时所需要的读权限。

管理权限:在MPS系统业务平台界面进行操作的权限,具体分为以下操作:

  • 操作业务平台用户并授予其节点或权限包的权限。

  • 操作业务平台权限包变更。

  • 操作业务平台节点上、下线和属性及结构变更。

MPS通过将权限分类后灵活运用到ACL、DAC和RBAC三种权限模型中。

ACL(Access Control List):ACL是一种基于资源的访问控制模型,它将资源的访问权限授予用户或用户组的列表。每个资源都有一个ACL,其中列出了允许或拒绝访问该资源的主体及其对应的权限。ACL模型适用于细粒度的访问控制,可以实现针对单个资源的精确权限管理。ACL模型在MPS中体现为支持授予用户特点节点的权限,从而实现对节点的细粒度访问控制。

DAC(Discretionary Access Control):DAC是一种基于资源所有者的访问控制模型,资源的所有者有权自主决定谁有权访问其资源。在DAC模型中,资源的访问权限由资源的所有者设置,他们可以授权其他用户或用户组来访问自己的资源,并可以随时撤销这些授权。结合DAC模型的思想,MPS基于业务平台定义了不同用户角色,如超级管理员、节点管理员、普通用户等,每个用户角色拥有不同的菜单和节点管理权限, 有用户角色的用户可以自主的授予所属业务平台其他用户的业务权限。

RBAC(Role-Based Access Control):RBAC是一种基于角色的访问控制模型,它将权限授予角色,再将角色授予用户。在RBAC模型中,角色代表一组相关的权限,而用户通过被分配到相应的角色来获取权限。RBAC模型适用于大规模的访问控制,通过角色的管理可以简化权限分配和维护,提高了权限管理的效率和可维护性。MPS支持用户将多个节点组合为权限包,再将用户加入到权限包的方式授权。

05 功能设计

根据需求分析的结果,对MPS进行功能划分,将权限管理服务划分为四大模块,每个模块负责不同的功能。

1、平台&节点管理:

  • 支持多个平台的接入,支持使用默认模板参数和定制化参数

  • 支持节点的接入和组织管理。节点定义:业务平台抽象的需要进行权限管理的资源,例如报表、按钮、页面链接等

2、权限管理:

  • 历史权限导入

  • 平台管理权限的增删改查功能

  • 平台业务权限的增删改查功能

  • 鉴权服务

3、申请&授权:

  • 用户线上申请、定制审批流程、审批通过自动授权

  • 权限变更后回调业务平台,可自定义回调方法

4、权限审计&回收:

  • 权限到期、用户离职转岗等场景下权限自动回收

  • 业务平台操作记录推送

  • 权限审计数据下载

06 平台&节点管理

业务平台接入MPS需要提供以下初始化参数:

  1. 平台基本信息,存储在图表 1中的平台基础信息表

  2. 平台的自定义权限类型,MPS默认为每个平台生成业务读、写权限,平台可以自定义更多的业务权限类型,存储在图表 1中的平台权限类型表

  3. 平台定制化菜单栏,MPS默认提供通用的菜单栏,平台可以选择使用其中一部分,存储在图表 1中的平台菜单表

△图表 1 业务平台管理

初始化参数确定之后,MPS会创建一个基础业务平台(见图表 3)。MPS为每个业务平台初始化一个初始节点,同时生成openapi访问密匙,存储在图表 1中的平台密匙表,MPS提供了完善的openapi接口,密匙分为主密匙和次密匙,主密匙可以访问MPS提供的所有openapi接口,次密匙在生成的时候需要指定访问的openapi接口范围,访问超出范围的api会鉴权失败。

平台初始化完成之后,业务平台开发工程师可以将业务节点同步到MPS了,MPS提供了两种节点同步方案:

:业务平台将业务中需要进行权限管控的资源抽象为树结构,并通过MPS提供的节点相关openapi接口将业务节点树同步到MPS平台。

:业务平台需要按照MPS指定返回数据格式提供一个获取节点树结构的接口,MPS会实时获取业务节点数据,并将其挂载在初始节点下。

方案一MPS会在本地存储节点数据,分为两张表存储,基础信息存储在节点信息表,树结构关系存储在节点树组织表(见图表 2)。

△图表 2 节点管理

方案一当业务节点变化的时候,例如报表下线,需要业务方将变化同步到MPS,如果同步失败会导致数据不一致问题,可以通过定时全量同步和错误报警解决,优势在于MPS存储了节点数据,可以提供稳定的权限管理服务。

方案二优势在于实时去获取业务方的节点数据,可以第一时间感知节点变化,劣势在于如果获取数据失败,只能使用缓存数据,可能和实时节点数据有差异,影响部分功能的使用。

综上,考虑到业务平台的节点变化频率有限,权限管理服务更注重系统的可用性和可靠性,MPS推荐使用方案一。

△图表 3 MPS基础业务平台

07 权限管理

业务平台接入MPS之后,为了不影响现有用户使用体验,需要将已有的用户业务权限数据导入到MPS中,MPS为此提供了批量添加权限的openapi接口。

历史用户权限数据导入完成后,对于增量业务权限,需要先添加平台管理员,管理员再通过MPS界面对用户进行授权操作。

业务平台的平台管理员分为两种类型:

超级管理员:有所有菜单权限和所有节点的管理权限

节点管理员:有部分菜单权限和部分节点的管理权限,将用户设置为某个节点的节点管理员,用户可以管理此节点和下面的所有子节点。

一般来说,一个平台的超级管理员控制在2-3人,作为兜底的负责人使用,具体授权操作由业务平台下各个节点管理员负责。

为了实现同一个用户在MPS中多个业务平台之间的权限隔离,用户需要在MPS建立一个业务平台账号。平台管理员可以先搜索一个用户,如果这个用户不是当前平台的用户,需要先将用户添加到平台,MPS在用户基础信息表存储用户的基本信息,在用户平台账户表存储用户在每个平台的账户信息,这样纵向通过用户账户将用户在每个平台数据隔离开,横向又可以通过用户名总览用户跨平台的权限,方便权限review使用。

MPS支持两种权限授权管理方式:

  • 直接给用户添加节点的权限

  • 将多个节点添加到权限包(见图表 4),再将用户添加到权限包

第一种方式在权限review时更加清晰,第二种方式在批量添加权限时更方便。

△图表 4 权限包创建

添加完用户权限之后,业务平台开发工程师需要在业务系统内部接入MPS的鉴权服务,当用户登录业务平台访问资源时,调用MPS的鉴权接口计算用户权限,MPS鉴权服务支持多种权限计算参数:

继承父级权限:计算用户对于某个节点的权限时,可以只计算当前节点权限,也可以选择继承模式,从当前节点递归寻找父节点权限,直到寻找到或者到达根节点为止。

权限包或节点权限优先:支持权限包权限和节点权限哪个计算优先级更高,也可以混合计算。

△图表 5 用户权限管理

08 申请&授权

业务平台用户添加权限可以通过平台管理员手动授权,但是这种方法的劣势很明显:

  • 用户需要和管理员沟通并邮件或者IM备案,效率低下

  • 权限管理占用了管理员大量时间且可能误操作

  • 权限review时,查找权限开通的全流程记录成本高

为了提升工作效率,减少用户和管理员负担,设计了如图表 6的线上授权流程

△图表 6 用户线上申请流程

MPS平台设计了两种线上申请的接入模式:

完全托管模式:MPS提供了一套通用的权限审批模型和申请页面(如图表 7),业务平台在用户访问资源无权限时跳转到MPS权限申请页面。对于用户来说只需要关心填写工单内容和选择申请的节点或者权限包,对于平台只需要定制好每个节点的审批人。

自建页面模式:如果通用的权限申请页面不满足业务平台的需求,可以自行开发前端页面,之后调用MPS的申请单提交接口即可,后续的审批和授权由MPS负责。

△图表 7 MPS申请页面

MPS使用百度内部流程系统来提供审批能力,审批流程可以理解为如图表 8的链式步骤。通过调研接入的业务平台,发现不同平台的审批流程需求差异性较大,有些平台所有节点都只需要一位负责人审批,有些平台根据节点的不同设置不同的审批流程。对于流程系统需要先确定好审批流程,之后用户申请就生成一个审批流程的实例。可以把审批流程理解为程序代码开发中的一个实体类,如果对于需要多种审批流程的平台每个审批流程的节点都定制一个类,管理成本较高且扩展不灵活。

为此,MPS调研了平台的已有审批流程,设计了如图表 8所示的通用审批流程类,为每个节点设置是否需要的参数,相当于为通用审批流程类设置了一个多个参数的构造函数。数据审批人就是业务平台设置到节点上的审批人,业务平台可以在同步节点的时候指定审批人,也可以管理员在图表 10中配置。业务平台的节点需要设置一个新的审批流程时只需要提供定制化的参数,就可以生成符合需求的审批实例。

△图表 8 通用审批流程

△图表 9 线上申请管理

△图表 10 节点属性变更

用户提交申请之后,由审批人进行审批,审批结束会回调MPS给用户进行授权,根据一些业务平台的需求MPS支持了事件回调,业务平台可以配置回调方法,当自动授权后可触发业务平台回调。

09 权限审计&回收

对于业务平台来说,经常会以季度或者月为周期对某些节点的权限进行review,判断用户权限是否符合预期,并回收不符合预期的用户权限,延长部分快到期的用户权限。

MPS提供了完善的权限审计能力:

  • 用户权限下载:业务平台可以在报备之后下载节点用户权限数据。

  • 每日操作日志:MPS会记录业务平台上管理员的所有权限操作和节点操作并发送邮件给配置的接收人。

  • MPS提供了完善的权限续期&回收能力:

  • 通过每天的定时任务检测用户,收集有效期少于10天的用户权限,并向用户发送续期邮件,邮件中带有续期申请的链接,用户可以跳转到申请页面申请权限续期。

  • 每天定时获取离职和转岗的用户,对于离职用户,MPS会将该用户帐号的状态设置为失效,业务平台鉴权时会判断用户状态,用户状态为失效时,直接返回该用户无权限。对于转岗用户,MPS会将该用户置于观察名单,并发送邮件给用户的上级,由用户的上级来判断是否保留该用户的权限,上级确认保留,用户从观察名单移出,反之将该用户的账号冻结。如果需要恢复用户权限时,也只需要恢复用户账号的状态即可。

MPS同时支持邮件订阅服务,管理员只需要订阅相关邮件,MPS会每天发送平台相关的权限变更邮件和抄送发送给平台用户的邮件。

△图表 11 权限回收和审计

10 总结

经过接入平台推广效应的推动,结合使用用户的反馈意见进行升级和性能提升,MPS已成为数据中心的核心权限系统,并在百度MEG内部获得广泛应用。其接入已覆盖近40个业务平台,有效管理超过10万个权限节点,涵盖50多个审批模型。每月处理约2000至3000条权限申请工单,服务超过2万名用户。每日API调用峰值高达130万次,并能够提供每日30万次的鉴权服务。

MPS的卓越性能源于明确的管理功能划分和通用权限审批模型的巧妙应用。这为系统提供了强大的权限管理、申请和授权功能,解决了过去权限管理混乱和层级不明确的问题。同时,它还保障了数据的安全性与合规性,显著提升了用户体验和工作效率。

展望未来,MPS具备进一步扩展和通用化的潜力,可以为更多业务平台接入提供支持,实现全面的一体化权限管理,促进平台工具之间的互通。这必将进一步增强移动数据中心的权限管理体系,为企业提供更高效可靠的权限管理服务。

------END------

推荐阅读

百度APP iOS端包体积50M优化实践(五) HEIC图片和无用类优化实践

百度知道上云与架构演进

百度APP iOS端包体积50M优化实践(四)代码优化

百度App启动性能优化实践篇

扫光动效在移动端应用实践

相关推荐
难以触及的高度7 分钟前
mysql中between and怎么用
数据库·mysql
山海青风14 分钟前
使用 OpenAI 进行数据探索性分析(EDA)
信息可视化·数据挖掘·数据分析
Jacky(易小天)21 分钟前
MongoDB比较查询操作符中英对照表及实例详解
数据库·mongodb·typescript·比较操作符
Karoku0661 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
小技与小术2 小时前
数据库表设计范式
数据库·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer2 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体2 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
刘大浪3 小时前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis