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

时间:2019-08-01 10:20:08

标签: authorization xacml abac alfa open-policy-agent

我有一个项目,要求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 个答案:

答案 0 :(得分:2)

也许最具体的答案是detailed description of how Chef Automate uses OPA to implement application authorization

更一般地说,我们正在计划一个指南,描述如何使用OPA进行应用程序授权-它需要比SO答案更详细的信息。但是,使用OPA(或任何策略引擎)进行应用程序授权在一定程度上取决于您的应用程序,其体系结构,您的SLA等。但是,这里有一些要考虑的关键问题:

  • 政策:您的最终用户政策需要多少表达能力?他们只是定义用户属性或用户角色,还是将用户属性/角色映射到权限? OPA使您可以将那些最终用户策略作为JSON对象进行请求,然后编写使用这些JSON对象进行决策的策略规则。为了提高效率,您可以compile those JSON objects into bona-fide OPA rules
  • 强制执行:您需要在哪里强制执行授权策略(例如网关,微服务,数据库)?您对延迟,数据大小,数据库查询语言的表达能力的要求都会影响此决策。 OPA具有足够的灵活性来帮助解决所有这些问题,并且具有几个特定的​​集成将有帮助:Envoy and similar service-mesh systems for microservicesSQL/ElasticSearch for databases
  • 数据:存在多少属性数据,它多久更改一次,您需要什么一致性保证,将数据放入OPA的机制(例如缓存,事件流) )。这是guide for injecting data into OPA;它使用LDAP / AD作为示例数据源,但是原理对于任何数据源都是相同的。

我们总是很乐意与您讨论应用程序的详细信息,并帮助您找到最适合OPA的产品。随时联系OPA slack channel

答案 1 :(得分:0)

  

OPA看起来可能比authzforce复杂

这两种方法各有利弊。首先,您意识到OPA和AuthZForce都是ABAC实现(您可以在ABAC herehere上阅读更多内容)。

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的实现的示例,但是我什么都没找到。

看看work they did at Netflix。这是我所知道的主要实现。您还可以联系OPA背后的公司Styra,他们将能够提供帮助。

AuthZForce

AuthZForce是XACML(可扩展访问控制标记语言)标准的开源Java实现。它提供了完整的ABAC实施(PAP,PEP,PDP,PIP)。它是Fiware(开放源代码计划)的一部分,并由team at Thales积极开发。

AuthZForce缺点

  • 它似乎没有用于创作策略的图形界面。我找到了对KEYROCK PAP的引用,但看不到任何屏幕截图
  • 它不支持ALFA(授权的缩写语言)。

实施

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

  • AT&T XACML
  • SunXACML
  • WSO2-WSO2 Identity Server平台的一部分-它称为Balana
  • Axiomatics(商业化-这是我的工作)-我们使用的平台拥有大量客户,从财富50强公司到敏捷创业公司。

XACML和ALFA的好处

XACML / ALFA的主要优点之一是它们是标准的并且被广泛采用。该标准自2001年以来一直存在,并且可以与其他标准互操作。 SAML,OAuth和SCIM。