首页 > 其他分享 >权限管理之多租户隔离授权

权限管理之多租户隔离授权

时间:2023-12-06 10:33:55浏览次数:28  
标签:Group 隔离 项目 租户 用户 压测 授权 权限

想要做好权限管理,并不是一件容易的事情,既要考虑授权的粒度保证安全,也要考虑授权的方式足够便捷。之前有篇文章权限管理系统设计介绍过我们的权限设计,整体上是采用RBAC+资源隔离的方式,仅对小部分非常敏感的数据再通过对象授权的方式做管控。在实际的使用中也验证了这样的授权方式非常有效,尤其是多租户模式-基于项目的资源隔离,授权方式足够便捷,同时也有一定的粒度控制,毕竟大多数的情况下我们都是基于项目在管理资源,那基于项目去授权资源就很合适了

这样的授权方案没有问题,但是在授权方式上不够完善,不完善的地方主要是在RBAC的授权上,由于后端采用Django框架,RBAC的授权就使用了Django的Auth模块来实现,只是把Group替换成了Role的概念,这样就是User属于Group/Role,Group拥有权限,从而用户也就有了相应的权限。但这里有一个问题,默认的Group没有资源隔离的Project标识,这就导致了授权是全局的,例如我给用户A授予了主机查看的权限,他加入项目A就能查看项目A下的主机,此时加入项目B同样就会拥有项目B下资源查看的权限,这显然是不合适的,需要能做到按项目的授权

举一个实际的例子:用户A是压测中心的员工,会通过压测系统对其他项目进行压测,我们建个压测的项目A,他是压测项目A的owner,对压测项目A拥有所有的权限,例如资源查看、发布不熟等等。项目B有压测的需求,用户A就通过压测系统对项目B进行压测,此时用户A需要查看项目B被压资源的监控数据,用户A加入项目B,由于全局权限的存在,用户A对项目B也就有了所有的权限,这就是非常危险不可接受的,如何做到用户A对压测项目A拥有所有的权限,而对被压项目B仅有监控查看的权限呢?需要做到按项目去授权

道理都懂,如何实现?直接抛弃Django的Auth权限认证系统自己实现,当然可以,不过改动太大,费时费力,当初使用Django就是看中了这些开箱即用的好功能。既然要结合项目去授权,那首先想到的实现方式跟我们做资源隔离一样,默认的Group表加一个project字段来标识项目,然后重写权限校验的has_perm方法,翻了下源码,扩展Group表不太好做,改动较大,同时也不是特别的合理。还是要抛弃空想,从实际出发看下系统和代码,仔细看了看,并不是所有的授权都适合与项目绑定,例如用户系统相关的用户管理权限、多云系统的多云账号管理权限,这个本身就是全局的,跟项目没有什么关系,那加个项目标识就没有必要了,只有那些按项目做隔离的资源权限适合与项目绑定,例如备份系统的备份任务权限、多云系统的资源管理权限等

除此之外,在实际使用中还会有全局授权的需求,例如部门经理对所有项目有所有权限、监控工程师对所有项目有查看监控的权限。想清楚了这些使用场景,那就考虑,默认对权限系统保持不变,作为全局授权,同时扩展一个新的针对项目的权限系统,作为项目授权,最终的权限校验会同时校验全局权限和项目权限,只要有其中之一为True,则就有权限,实现起来也较为简单

参考Django默认的Auth模块授权机制:User->Group->Permission,对于项目来说也是一样的,项目成员表Member,Member关联User表,项目角色表Role,Role也只是比Group表多了project字段用来记录所属项目,权限依然复用了Django默认Auth下的Permission表,此时的项目授权就是项目成员拥有项目角色,项目角色拥有相应权限,这样就能根据数据关系列出项目用户拥有的项目权限了

项目owner是一种特殊的角色,他拥有项目下的所有权限,同时他也可以创建角色,为项目下的其他用户赋权。这样同时也做到了项目权限管理的自助化,项目成员的权限由项目owner负责,不需要再麻烦系统管理员,一个完整的用户加入系统及授权流程如下

至此,RBAC+资源隔离,全局授权+项目授权的机制趋于完善

标签:Group,隔离,项目,租户,用户,压测,授权,权限
From: https://www.cnblogs.com/37Y37/p/17878972.html

相关文章

  • RBAC权限控制 (Role Based Access Control)
    ACL和RBAC对比之前的ACL权限控制是直接给用户分配权限的。而RBAC是这样的:RBAC是先分开角色,然后把角色分给指定的用户通过在用户和权限之间多加一层“角色”来做权限管理给角色分配权限,然后给用户分配角色这样有什么好处呢?  比如说:管理员有a、b、c3个权限,而张三李四......
  • 网络隔离后文件如何交换,推荐一款专业全能的数据摆渡系统!
    随着网络技术的迅猛发展,信息安全系统的脆弱性已经展现在人们眼前,为了保证涉密信息和重要数据不被泄露,一些重要部门比如政府部门、军队单位、大型企业及科研单位以及银行业金融机构等都建立了自己独有的内部网络。采用内外网隔离的策略,各个网络之间不互通,每个网络形成一个网络安全......
  • Linux p14 组管理和权限管理
    组管理和权限管理一、组管理Linux组的基本介绍Linux组:在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、所在组、其它组的概念。文件/目录所有者(User):一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者。文件/目录所在组(Gro......
  • 【MySQL】回收普通用户对其他库的查询权限,普通用户只能看见自己的表
    如何解决已回收权限的普通用户对其他库的查看权限?正常来说,普通用户自己创建的数据库表的权限无法被回收,如果用户曾经被授权过所有权限,取消权限后,依然可以看见其他库。其原因就是被授予了grantoption权限,需要手动取消"WITHGRANTOPTION"是MySQL中的一个选项,用于将授予权限给其......
  • 深入了解Linux文件权限
     在Linux系统中,文件权限是保障系统安全性和数据完整性的关键之一。本文将深入讨论Linux文件权限的各个方面,包括基本权限(UGO权限)、基本权限以外的ACL权限、高级权限、文件属性(chattr)以及客户端查询方法。基本权限(UGO权限)在Linux中,每个文件和目录都有一个拥有者(User)、一个用户组(Gro......
  • 基于ACL (Access Control List)实现权限控制
    ACL是直接给用户分配权限:比如用户1有权限A、B、C,用户二有权限A,用户3有权限A、B。 这种记录每个用户有什么权限的方式,叫做访问控制表(AccesscontrolList);用户和权限是多对多的关系,存储这种关系需要用户表、角色表、用户-角色的中间表。我们来实践一下:在数据库中创建a......
  • Linux 文件属性与权限
    1、使用ls-al可以查看文件的属性和权限,包括文件所属的用户、用户组、修改日期。 d代表的是文件夹的意思:若为:-代表的是文件l代表的是链接文件b代表的设备文件中可以提供存储的周边设备(可按块随机读写的设备)c则表示的是设备文件里面的串行端口设备,例......
  • Linux权限维持1
    本次学习Linux SSH软连接后面的利用实验原理sshd服务配置启用PAM认证,PAM配置文件中控制标志为authsufficientpam_rootok.so时,只要pam_rootok模块检测uid为0(root)即可直接登录。 所以利用起来有2个条件:一是sshd服务启用PAM认证机制,在/etc/ssh/sshd_config文件中,设置UsePAM......
  • umask永久修改用户创建文件权限
    Linux里永久设置用户创建文件权限的配置文件是/etc/profile。可以在该文件中添加umask命令来设置默认权限。具体操作步骤如下:打开/etc/profile文件:sudovi/etc/profile在文件末尾添加umask命令并设置默认权限例如设置默认权限为022:umask022保存文件并退出使配置文件生效:so......
  • 文件权限
    在Linux系统中,文件权限是保护文件安全性的重要机制之一。正确地设置文件权限可以确保只有授权用户能够访问文件,从而保障系统的安全性。本文将深入探讨Linux中文件权限的各个方面,包括基本权限UGO、基本权限ACL、高级权限、文件属性chattr以及进程掩码umask。1.基本权限UGOLinux系......