使用 OPA 实现 PDP - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 OPA 实现 PDP

开放政策代理 (OPA) 是一个开源的通用策略引擎。OPA 有很多用例,但与 PDP 实现相关的用例是它能够将授权逻辑与应用程序分离。这称为政策脱钩。OPA 在实施 PDP 时很有用,原因有很多。它使用一种名为 Rego 的高级声明性语言来起草政策和规则。这些策略和规则与应用程序分开存在,可以在没有任何特定于应用程序的逻辑的情况下做出授权决策。OPA 还公开了一个 RESTful API,使检索授权决策变得简单明了。要做出授权决定,应用程序会使用 JSON 输入查询 OPA,然后 OPA 根据指定的策略评估输入,以 JSON 格式返回访问决策。OPA 还能够导入可能与做出授权决定相关的外部数据。

使用 OPA 实现 PDP

与自定义策略引擎相比,OPA 有几个优点:

  • OPA 及其对 Rego 的政策评估提供了一个灵活的、预先构建的策略引擎,它只需要插入策略和做出授权决策所需的任何数据。必须在自定义策略引擎解决方案中重新创建此策略评估逻辑。

  • OPA 使用声明性语言编写策略,从而简化了授权逻辑。您可以独立于任何应用程序代码修改和管理这些策略和规则,无需具备应用程序开发技能。

  • OPA 公开了一个 RESTful API,它简化了与策略执行点 (PEP) 的集成。

  • OPA 为验证和解码 JSON 网络令牌 (JWT) 提供了内置支持。

  • OPA 是一种公认的授权标准,这意味着如果您需要帮助或研究来解决特定问题,则可以获得大量文档和示例。

  • 采用诸如 OPA 之类的授权标准,无论团队的应用程序使用何种编程语言,都可以在团队之间共享以 Rego 编写的策略。

OPA 不会自动提供以下两项内容:

  • OPA 没有用于更新和管理策略的强大控制平面。OPA 确实提供了一些通过公开管理 API 来实现策略更新、监控和日志聚合的基本模式,但是与此 API 的集成必须由 OPA 用户处理。作为最佳实践,您应该使用持续集成和持续部署 (CI/CD) 管道来管理、修改和跟踪策略版本并管理 OPA 中的策略。

  • 默认情况下,OPA 无法从外部来源检索数据。授权决策的外部数据源可以是保存用户属性的数据库。向OPA提供外部数据的方式有一定的灵活性——可以提前在本地缓存这些数据,也可以在请求授权决定时从API动态检索——但是获取这些信息不是OPA可以代表你做的事情。