代码源缺少权限控制

目前有两个关于代码源方面的问题,希望可以评估相关的改进。

一.代码源缺少项目层面的权限控制

按照 GitLab 集成 | Zadig 文档 (koderover.com) 使用Zadig管理员用户添加几个GitLab的代码源admin-gitlab(集成GitLab中admin用户创建的应用)、tesr-user-gitlab(集成GitLab中test-user-gitlab用户创建的应用)、apple-user-gitlab(集成GitLab中apple-user-apple用户创建的应用)、admin-pmwb(其他类型的代码源)。

Zadig中使用管理员创建test-project项目,给项目添加账户test-user-zadig为管理员。

tesr-user-gitlab和test-user-zadig为项目的拥有者TEST在两个平台的账户。

一般来讲,Zadig中项目创建结束后,这个项目应该由项目组来管理,即这里的TEST。这个test-project项目是归属于TEST所在团队的,项目应该只有访问与之对应的test-user-gitlab代码源的权限,这样才能满足我们企业的安全要求,然而Zadig中缺少这方面的控制。

切换为test-user-zadig用户登录Zadig,进入项目,新建构建,选择代码源时下拉列表可以看到所有已配置的代码源(admin-gitlab、test-user-gitlab、app-user-gitlab、admin-pmwb),也就是说test-user-zadig账户可以获取到所有配置的代码源所有仓库的所有代码,这是不满足企业风控要求的。

另外在创建环境时,选择镜像仓库时也有类似的问题。风险点是有可能把大量垃圾镜像推送到核心镜像仓库,导致核心镜像仓库被撑满。

虽然有提议说可以给不同的项目部署不同的Zadig实例,但这样会大大增加我们平台维护团队的管理难度和维护难度,而且Zadig既然考虑了多租户和协同运作模式,应该具备相应的权限控制能力。

虽然也可以创建一个项目角色,屏蔽所有跟代码库相关的功能,但同时也屏蔽了服务和构建的编辑功能,这样各个项目组每次有服务脚本和构建脚本的变更时都要找平台维护团队来处理,对平台维护团队来说是不合理的。

所以这里希望代码源和镜像仓库增加项目层面的权限控制。或者可以直接在项目中配置代码源和镜像仓库。

二.集成GitLab代码源授权问题

在使用过程中发现集成GitLab代码源时很奇怪。

这里举例有两个人:平台管理员A具有Zadig和GitLab的管理员权限、项目人员W作为Zadig和GitLab的普通用户。

  1. 当项目人员W按照 GitLab 集成 | Zadig 文档 (koderover.com) 在GitLab中创建个人应用后,把ApplicationID和Secret提供给平台管理员A。

A在Zadig的系统设置代码源中添加GitLab代码源,标识为W-gitlab,输入W提供的认证信息,点击前往授权,跳转到GItLab,登录A的GitLab账户,点击授权后跳转回Zadig,显示授权成功。

这时W用户选择代码源W-gitlab访问代码库,发现其可以访问GitLab中所有项目的代码仓库,即具有A的GitLab账户的权限。回到GitLab查看两个用户的授权的应用,发现被添加到了A用户下面。

  1. 清除GitLab和Zadig的授权信息,人员W在GitLab中创建个人应用后,把ApplicationID和Secret提供给平台管理员A。

A在Zadig的系统设置代码源中添加GitLab代码源,标识为W-gitlab,输入W提供的认证信息,点击前往授权,跳转到GItLab。登录W的GitLab账户,点击授权后跳转回Zadig,显示授权成功。

选择代码源W-gitlab访问代码库,其仅可以访问W的GitLab账户有权访问的代码库。回到GitLab查看两个用户的授权的应用,被添加到了W用户下面。

  1. 清除GitLab和Zadig的授权信息,人员W在GitLab中创建个人应用后,把ApplicationID和Secret提供给平台管理员A。

A在Zadig的系统设置代码源中添加GitLab代码源,标识为W-gitlab,输入W提供的认证信息,点击前往授权,跳转到GItLab。拷贝浏览器URL发送给W,W访问后进入授权页面,点击授权后,跳转到了Zadig的系统集成代码源页面,然而W用户在Zadig中是没有系统管理员权限的,不应该有权访问这个页面 ( ╯□╰ )。

经过这个过程得到如下结论:

  • GitLab应用被授权到了点击授权按钮的用户下面,而不是提供ApplicationID和Secret的用户下面,这里个人认为是GitLab那边授权逻辑的问题。
  • 如果代码源集成全部由管理员A来做,A需要登录W的GitLab账户,这是不合理的。
  • 如果代码源集成的授权阶段由W来做,A在输入代码源信息后应该有一个用于拷贝的授权链接,而不是只能点击前往授权,然后拷贝浏览器URL。W在GitLab中点击授权按钮跳转到Zadig时,需要鉴权,屏蔽其进入系统设置页面。

内容较多,希望Zadig团队有时间可以评估下文中提到的问题,看能否得出比较合理的解决方案。

1 个赞

非常非常非常感谢建议反馈 :sunflower:,我们会认真评估

@shuhe Hi~
v1.18.0 版本中将会支持:没有权限的用户直接在浏览器里输入系统设置相关 URL,系统会拦截掉。

感谢答复 :blossom:
这样来说非管理员越权的问题很快就能解决了。 代码源缺少项目层面权限控制 的问题目前有没有什么评估方案。

嗯,项目层面的权限控制我们也在思考,如有进展会同步