使用开放策略代理(OPA)作为ABAC系统

13

我有一个项目需要使用ABAC做访问控制来保护我的项目资源。我一直在寻找OPA和authzforce作为实现ABAC的选项,看起来OPA比authzforce要简单一些。我看到OPA将自己与其他系统和范例进行比较,但它提供的ABAC示例还有很多需要改进的地方。主要是因为ABAC需要使用执行策略的点,对策略进行决策,并获取主题和对象属性以便进行策略决策。我感觉OPA有了除了最后一部分之外的所有内容,但很难判断这是否正确,因为它的ABAC示例只是一个单独的示例。

我在网上搜索了关于OPA作为ABAC实现的示例,但是没有找到。

我的项目是一个Web应用程序,允许终端用户创建资源并创建其资源的策略。我计划为终端用户创建UI以创建他们的策略。我的计划是将编码方面的细节抽象出来,而是给他们下拉菜单和按钮,这个UI将在幕后使用一种自定义语法,我将将其解释为OPA策略。

我遇到的主要问题是如何将其实现为ABAC,是否像构建获取主题、对象和环境属性并在其与OPA之间创建连接(本质上是创建一个PIP)那样直截了当,因为OPA本身似乎是默认的PEP和PDP?

我觉得自己深陷于文档之中,而且OPA自己的文档似乎缺少了许多说明如何做到这一点。

2个回答

11

OPA看起来可能比AuthZForce更简单

无论采用哪种方法,都有一些利弊。首先,正如您所意识到的那样,OPA和AuthZForce都是ABAC实现(您可以在这里这里阅读更多关于ABAC的内容)。

OPA

Open Policy Agent是一个相对较新的模型,主要(但不仅限于)解决基础设施(例如Kubernetes)的细粒度授权问题。他们甚至为Istio和Kubernetes提供了预构建的集成点。 OPA提供PEP(执行/集成)和PDP(策略决策点),尽管它不一定称之为这样。它使用的语言称为REGO(DATALOG的派生语言)。

OPA本身似乎是一个事实上的PEP和PDP

是的,您完全正确,这将使您负担起为PIP实施替代方案的责任。

我感觉自己淹没在文档中,而且OPA自己的文档似乎缺少很多解释如何完成这项工作。
联系Styra - 他们销售围绕OPA的服务。或者重新考虑你的选择,研究XACML(见下文)。
缺点:
- 语言(REGO)不易理解。 - 该语言没有标准化。 - OPA不支持策略信息点(PIP) - 这是设计上的问题。
实现:
我已经在互联网上寻找了OPA作为ABAC实现的示例,但我什么也没找到。
看看Netflix所做的工作。那是我所知道的主要实现。您还可以联系OPA背后的Styra公司,他们将能够提供帮助。
AuthZForce AuthZForce是XACML(可扩展访问控制标记语言)标准的开源Java实现。它提供了完整的ABAC实现(PAP,PEP,PDP,PIP)。它是Fiware(一个开源倡议)的一部分,并由Thales团队积极开发。

AuthZForce缺点

  • 它似乎没有图形界面来编写策略。我找到了关于KEYROCK PAP的参考,但没有看到任何截图。
  • 它不支持ALFA,这是授权的缩写语言。

其他实现

您可以考虑许多其他XACML实现(包括开源和商业):

  • AT&T XACML(一种访问控制语言)
  • SunXACML(另一种访问控制语言)
  • WSO2 - 其WSO2身份服务器平台的一部分 - 名为Balana
  • Axiomatics(商业产品 - 这是我工作的地方) - 我们拥有广泛的客户群,从财富50强公司到敏捷初创公司都在使用我们的平台。

XACML和ALFA的好处

XACML / ALFA的关键优点之一是它们是标准并且被广泛采用。该标准已经存在于2001年,并与其他标准(例如SAML,OAuth和SCIM)进行互操作。


在进一步研究Authzforce后,我发现它没有提供开箱即用的P​​IP,而是需要您创建一个(它称之为属性提供程序),以便可以使用它来获取未在请求中提供的属性。这意味着OPA和Authzforce具有相同的缺点。 - zero
不,AuthZForce的架构计划适用于PIP。它是否带有预构建的PIP是另一回事。如果您想要OOTB,请查看Axiomatics,他们确实具有jdbc、rest等连接器。 - David Brossard
1
很棒的帖子!我想补充一下,这篇文章中链接的Netflix示例也很有趣,因为它展示了一个类似于问题描述中所述的策略编写UI。 - scottysseus
OPA主要(但不仅限于)解决基础设施(例如Kubernetes)的细粒度授权问题。我对此感到困惑。为什么只针对基础设施?为什么不能用于普通用户授权? - Maria Ines Parnisari
现在它可以同时处理两种情况,但历史上它的目标是基础设施使用案例。 - David Brossard

6
也许最具体的答案是详细描述Chef Automate如何使用OPA实现应用程序授权
更普遍地说,我们正在计划一份指南,描述如何使用OPA进行应用程序授权——它需要比SO答案更详细的信息。但是,对于应用程序授权,使用OPA(或任何策略引擎)取决于您的应用程序、其架构、您的SLA等因素。但是有几个关键问题需要考虑:
  • 策略: 您的最终用户策略需要多少表达力?它们只是定义用户属性或用户角色,还是将用户属性/角色映射到权限?OPA允许您将这些最终用户策略作为JSON对象获取,然后编写策略规则,使用这些JSON对象进行决策。为了提高效率,您可以将这些JSON对象编译成真正的OPA规则
  • 执行: 您在哪里需要执行授权策略(例如网关、微服务、数据库)?您对延迟、数据大小、数据库查询语言的表达能力的要求都会影响此决策。 OPA足够灵活,可以帮助处理所有这些问题,并具有一些特定的集成,可帮助:Envoy和类似的微服务系统以及SQL / ElasticSearch用于数据库
  • 数据: 有多少属性数据,更改频率如何,您需要什么一致性保证,您有哪些机制可用于将数据传输到OPA(例如缓存、事件流)。这里有一个将数据注入OPA的指南;它以LDAP / AD作为示例数据源,但原则适用于任何数据源。

我们很乐意与您讨论应用程序的细节,并帮助您找到适合 OPA 的正确解决方案。欢迎在 OPA slack 频道 上联系我们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接