

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

# 使用 OPA 实现 PDP
<a name="opa"></a>

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

![\[使用 OPA 实现 PDP\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/images/opa.png)


与自定义策略引擎相比，OPA 有几个优点：
+ OPA 及其对 Rego 的政策评估提供了一个灵活的、预先构建的策略引擎，只需插入策略和做出授权决策所需的任何数据即可。必须在自定义策略引擎解决方案中重新创建此策略评估逻辑。
+ OPA 使用声明性语言编写策略，从而简化了授权逻辑。您可以独立于任何应用程序代码修改和管理这些策略和规则，无需具备应用程序开发技能。
+ OPA 公开了一 RESTful 个 API，它简化了与策略实施点 () PEPs 的集成。
+ OPA 为验证和解码 JSON Web 令牌 () 提供了内置支持。JWTs
+ OPA 是一种公认的授权标准，这意味着如果您需要帮助或研究来解决特定问题，则可以获得大量文档和示例。
+ 采用诸如 OPA 之类的授权标准，无论团队的应用程序使用何种编程语言，都可以在团队之间共享以 Rego 编写的策略。

OPA 不会自动提供以下两项内容：
+ OPA 没有用于更新和管理策略的强大控制平面。OPA 确实提供了一些通过公开管理 API 来实现策略更新、监控和日志聚合的基本模式，但是与此 API 的集成必须由 OPA 用户处理。作为最佳实践，您应该使用持续集成和持续部署 (CI/CD) 管道来管理、修改和跟踪策略版本并管理 OPA 中的策略。
+ 默认情况下，OPA 无法从外部来源检索数据。授权决策的外部数据源可以是保存用户属性的数据库。向OPA提供外部数据的方式有一定的灵活性——可以提前在本地缓存这些数据，也可以在请求授权决定时从API动态检索——但是获取这些信息不是OPA可以代表你做的事情。