暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基于OpenLDAP的统一用户SaaS设计与开发

GBOps 2022-04-22
734


一、背景

运维工作涉及到的系统众多,例如蓝鲸zabbix、Grafana知识库等等,每一个系统都拥有各自的用户管理与认证功能,随着系统不断增加,用户信息的管理成本不断提高,同时也会导致多个系统之间用户信息冗余、不同步的问题。此外,对于运维人员来说,需要记住每个系统的账户信息也是一件十分令人头疼的事情。一直搭建一套OpenLDAP到蓝鲸6.0出来后开始支持用户目录了,我们便开始搭建企业内部OpenLDAP,如何管理OpenLDAP的数据呢phpldapadmin实在是丑无比,用户体验太差了既然我们在用蓝鲸,何不在蓝鲸开发一个基于openLDAP的统一用户SaaS。

       

二、设计思路

 


 

1.数据来源

首先要解决的是数据来源问题。公司内部有HR系统对员工信息进行管理,每天会组织架构和人员信息卸数文本文件文件交换服务器。我们便以此为源数据,对其进行解析入库,具体如下:

通过调用蓝鲸作业平台快速分发文件api,将HR系统卸数文件传输到我们的SaaS服务器上,确认传输成功后,将文件进行解析并入库。通过celery设定定时任务,每日同步一次数据,进而保证了数据的每日同步

 

2.数据展示

接下来先是对获取的数据进行展示,这里主要设计了三个页面。

(1)首页:通过地图、饼图、柱状图等形式将机构数量、机构分布地区、员工数量等信息进行数据可视化展示。

 


(2)机构信息页:左侧展示树状组织架构,右侧展示对应机构员工列表。

 


3)人员信息页:展示单个员工的详细信息。

 

 

3.主要功能

1)管理员批量开通ldap账户

为员工开通ldap账户,并设置默认密码为员工身份证的后六位。具体实现:首先我们搭建了ldap服务,这里我们需要存储用户id、所在组织架构、密码、姓名、邮箱几个字段信息。然后SaaS后端将新建ldap账户操作进行封装,前端页面设计为可勾选多名员工,批量开通ldap账户。可以设置自动开通部门下所有员工LDAP账户后续部门新员工加入便自动开通开通自动发送邮件告知用户

(2)员工自助开通ldap账户

开通账户并非必须通过管理员操作,于是设计了一个自助页面,员工可以自行通过匹配的工号与手机号,获取短信验证码后进行开通账户以及密码重置操作。

 


3)员工ldap账户的删除

我们的SaaS主要是对ldap账户的密码属性进行管理,在每日同步数据时,会将离职状态的员工ldap账号进行删除,也可以通过手动将员工密码置空的操作删除其ldap账户。

 

4.对接系统

对接蓝鲸平台,在蓝鲸用户管理中进行用户目录相关配置后,可将OpenLDAP的用户同步至蓝鲸

在对接蓝鲸系统过程中,我们碰到几个问题,一是ITSM流程我们组织架构需要最小组织层级--团队级别,但是HR系统组织架构部门中心级别,ITSM需要用到直接上级于是我们在统一用户SaaS组织架构新增了负责人字段,组织员工的直接上级就是这个组织负责人蓝鲸用户管理中直接上级是需要一个一个用户设置并且添加了新增、编辑组织架构的功能这样中心下面继续新建团队同时每日同步数据逻辑也进行了相应调整确保同步不能我们在saas新增组织架构调整下面的员工信息恢复HR系统架构也要确保员工在部门能够信息能够同步至SaaS。

 

 


 

第二问题是蓝鲸6.0的用户目录同步不支持自定义字段,我们需要的企业微信ID直接上级无法通过用户目录OpenLDAP直接同步蓝鲸,解决方法便是通过统一用户管理SaaS直接修改蓝鲸用户管理数据库数据,统一用户管理SaaS蓝鲸用户管理数据后台都在一个Mysql上,不同的database而已,实现起来还是很方便的。

最后上线还需要原来蓝鲸本地目录的用户切换OpenLDAP用户,需要OpenLDAP用户的权限设置成和原来用户一样。新增加的OpenLDAP用户默认是没有什么权限的,我们需要将蓝鲸本地用户的权限同步到对应的OpenLDAP用户里。首先我们同步权限中心的用户组,在bkiam库的subject_relation表中先找出所有本地用户及所加入的用户组,再通过姓名找到对应的工号(也为ldap的用户名),如果对应ldap的用户存在,则也将这个ldap的用户加入到老用户所有的用户组中。其次更新cmdb中维护人等字段,通过cmdb的api更新业务信息,将新ldap的用户也加入到CMDB业务运维人员字段中。

蓝鲸对接成功后,又陆续对接了我们的知识库、zabbixgrafana……未来还可以对接更多运维管理系统。

 

5.扩展功能

原先我们的企业微信账号管理也是手工管理,较为麻烦,初始导入一批新增用户需要手工维护部门、手机号、邮箱信息,且账户id设置为姓名拼音,会出现重名情况员工离职也需要手工删除,这项“手工活”繁琐、容易出错且不易于同步管理。

既然做了统一用户管理SaaS,当然应该企业微信用户管理起来,因此我们将新建企业微信用户操作也放到我们的SaaS里,通过调用企业微信提供的api新建用户与部门,并将现存企业微信用户id同步到SaaS端。企业微信申请加入设置不允许加入,所有的账户创建通过统一用户管理SaaS开通,今后开通企业微信ID使用员工号员工离职后自动删除企业微信,这样一来,SaaS就有最全最准员工信息LDAP信息、企业微信id信息虽然之前开通企业微信ID姓名全拼SaaS上线开通的企业微信id员工号SaaS所有ID信息,为了方便其它系统给员工发送企业微信告警通知信息,我们开发了一个员工号发送企业微信通知的api蓝鲸不存在这个问题,因为saas企业微信id同步至蓝鲸用户管理)。页面设计上,我们直接在原来的机构页面,添加了一个开通企业微信的按钮,与开通ldap账户逻辑相同,同样是可以勾选员工进行批量开通。

 

三、总结

至此,本SaaS第一个版本基本完成。本文简要介绍了该项目的设计与开发过程。项目具体的设计开发过程是由多人协作共同完成的,本人原本是一个编程萌新,在小伙伴们的带领下一点点开始这个项目。目前这个版本的页面设计也比较简陋,后续还会进行不断改进。回顾整个过程,自己学习了很多新的知识,基础的编程知识、蓝鲸平台的使用、系统的设计思路、ldap相关知识、各类工具的运用等等,也发现一个系统并不是一天两天就能设计完备的,需要在做的过程中,不断学习不断探索不断改进。

 

 


文章转载自GBOps,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论