首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设计一个快速实现和理解的、可维护的、足够灵活的访问控制系统?

如何设计一个快速实现和理解的、可维护的、足够灵活的访问控制系统?
EN

Security用户
提问于 2019-08-27 08:15:26
回答 2查看 699关注 0票数 5

我们目前正在为我们的SaaS启动重新设计我们的访问控制系统(在过去的两年中,它已经与业务一起成长,并决定在这一点上清理它)。访问控制系统应该为客户提供服务,每个用户有500-10,000人。

它应支持:

  1. 只读用户(即一些用户可能只登录和查看项)
  2. 只有少数用户可以更改全局设置(如管理集成、计费信息等)。
  3. 只有少数用户可以更改我们三个产品模块之一的设置。
  4. 对于每个创建的资源(例如,一个项目、一个团队、.),只有项目成员/团队成员可以更改资源。
  5. 默认情况下,所有用户都可以查看所有项目,但是应该可以“隐藏”项目,以便只有项目成员可以查看隐藏的项目。

现在的挑战是,基于角色的访问控制似乎只满足1-3,而不是4或5。ABAC现在是要走的路吗?

总的来说,我认为我们有类似于JIRA的要求,它似乎提供了一个非常灵活但也非常复杂(不直观)的权限系统。

您对如何最好地设计一个访问控制系统有什么建议吗?例如,我们应该问自己哪些问题,以及我们可能需要做哪些权衡?

EN

回答 2

Security用户

发布于 2019-08-28 12:42:48

背景

其他评论和回答以及你的帖子都指向了你正确的方向。您需要一个足够灵活的框架,以满足当前和未来的授权需求。该框架(或模型)确实是基于属性的访问控制(abac)。它也被称为动态授权管理和基于策略的访问控制。Gartner、Kuppinger Cole和公理学(我工作的地方)都就这一主题撰写了大量文章:

尽管如此,考虑到您的需求,ABAC只解决了一半的等式:授权策略和逻辑。它不能解决属性管理问题。您仍然需要考虑用户或资源的元数据或属性(在您的情况下的项目),这些元数据或属性将驱动您拥有的授权策略。

您的用例

只读用户(即一些用户可能只登录和查看项)

您需要定义一个角色或角色,您可以分配给用户,以表示他们是只读的。也许这是你系统中的基线角色。也许是因为没有这个角色,但事实是你成功地通过了认证。

只有少数用户可以更改全局设置(如管理集成、计费信息等)。

是什么让这些用户与众不同?“管理员”或“超级用户”等角色?您需要定义该角色,并且需要一个流程将该角色分配给用户。

只有少数用户可以更改我们三个产品模块之一的设置。

和上面一样的故事。

对于每个创建的资源(例如,一个项目、一个团队、.),只有项目成员/团队成员可以更改资源。

就像你自己说的,这是针对ABAC的。您需要编写一个简单的策略(或规则--单词是可互换的),状态(伪代码)可以是也要用阿尔法

代码语言:javascript
复制
A user with role=="..." can do action=="edit" on object of type=="record" if record.assignedProject == user.assignedProject.

默认情况下,所有用户都可以查看所有项目,但是应该可以“隐藏”项目,以便只有项目成员可以查看隐藏的项目。

参见下面阿尔法中的一个例子。

强制执行ABAC

思考策略和用例是很棒的,但是您也需要考虑决策的执行。ABAC有一个策略执行点(PEP)和策略决策点(PDP)的概念。PEP是橡胶击中道路的地方:你在保护什么?一个门户网站?一个业务流程?API?无论哪种方式,您都需要有一个PEP或拦截器,能够应用正确的授权。从高层来看,这个体系结构是什么样的:

样本ALFA代码

ALFA是授权的缩写语言,与XACML一起是授权的两个主要标准之一。ALFA是XACML遵循的相同模型(策略集、策略、规则)的简化表示法。我根据您的用例编写了一些示例:

代码语言:javascript
复制
namespace com.axiomatics.examples{
    /**
     * Projects
     */
     policyset projects{
         target clause objectType == "project"
         apply firstApplicable
         /**
          * View Projects
          */
         policy viewProjects{
             target clause action == "view"
             apply firstApplicable
             /** Anyone can view a project */
             rule viewVisibleProjects{
                 target clause project.hidden == false
                 permit
             }
             /**
              * Only members can view hidden projects - it should be possible to "hide" projects so that only the project members may view the hidden project.
              */
              rule viewHiddenProjects{
                  target clause project.hidden == true
                  permit
                  condition stringAtLeastOneMemberOf(user.name, project.members)
              }
         }
     }

     /**
      * For each created resource (e.g. a project, a team, ...), only the project members / team members may change the resource.
      */
      policyset records{
         target clause objectType == "record"
         apply firstApplicable
         /**
          * Edit records
          */
         policy editRecord{
             target clause action == "edit"
             apply firstApplicable
             /** Project members can edit a record in their project */
             rule viewVisibleProjects{
                 permit
                 condition record.project == user.assignedProject
             }
         }          
      }

     /**
      * Global settings - Only a few users may change global settings (like managing integrations, billing information etc.)
      */
     policy globalSettings{
         target clause objectType == "global settings"
         apply firstApplicable
         /**
          * Administrators can view and change global settings
          */
         rule administrators{
             target clause user.role=="administrator"
                     clause action=="view" or action=="edit"
             permit
         }
     }
}

Implementations

ABAC有几个很好的实现:

  • 开源
    • AuthZForce为您提供了一个符合XACML的授权引擎。
    • 开放策略代理(OPA)为您提供了与REGO一致的授权引擎.OPA侧重于基础设施(Kubernetes,Istio.)

  • 商业
    • 公理学(我工作的地方)可能是名单上最古老的公司。自2006年以来,我们一直在实施ABAC。一切都基于XACML和ALFA,我们可以将授权应用于门户、API和数据库。
    • Oracle、IBM和其他大型供应商也有自己的解决方案。
票数 1
EN

Security用户

发布于 2019-08-27 09:11:04

您可以创建权限,例如:

  • 查看指定的项目
  • 编辑指定的项目
  • 查看非隐藏项目
  • 查看所有项目

从用户的角度来看,这是相当简单和可以理解的。从开发人员的角度来看,检查权限有点复杂,但仍然可以管理。

如果您这样做,那么您就在技术上执行ABAC,因为这些权限比固定角色更具有动态性。但它看起来仍然很像RBAC。

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/216004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档