在 OPA 中检索 PDP 的外部数据 - AWS 规范性指导

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

在 OPA 中检索 PDP 的外部数据

对于 OPA,如果授权决策所需的所有数据都可以作为输入提供,或者作为查询组成部分传递的 JSON Web Token (JWT) 的一部分提供,则无需进行其他配置。(将 SaaS 上下文数据作为查询输入的一部分传递 JWTs 给 OPA 相对简单。) OPA 可以通过所谓的重载输入方法接受任意 JSON 输入。如果 PDP 需要的数据超出了可以作为输入或 JWT 包含的范围,OPA 会提供多种检索这些数据的选项。其中包括捆绑、推送数据(复制)和动态数据检索。

OPA 捆绑销售

OPA 捆绑功能支持以下外部数据检索流程:

  1. 政策执行点 (PEP) 要求做出授权决定。

  2. OPA 下载新的政策包,包括外部数据。

  3. 捆绑服务从数据源复制数据。

当您使用捆绑功能时,OPA 会定期从集中式捆绑服务中下载策略和数据包。(OPA 不提供捆绑服务的实现和设置。) 从捆绑服务中提取的所有策略和外部数据都存储在内存中。如果外部数据大小太大而无法存储在内存中,或者数据变化过于频繁,则此选项将不起作用。

有关捆绑功能的更多信息,请参阅 OPA 文档。

OPA 复制(推送数据)

OPA 复制方法支持以下外部数据检索流程:

  1. PEP 要求做出授权决定。

  2. 数据复制器将数据推送到 OPA。

  3. 数据复制器复制来自数据源的数据。

在捆绑方法的这种替代方案中,数据被推送到OPA,而不是由OPA定期提取。(OPA 不提供复制器的实现和设置。) 推送方法与捆绑方法具有相同的数据大小限制,因为 OPA 将所有数据存储在内存中。推送选项的主要优点是,您可以使用增量更新 OPA 中的数据,而不必每次都替换所有外部数据。这使得推送选项更适合频繁变化的数据集。 

有关复制选项的更多信息,请参阅 OPA 文档

OPA 动态数据检索

如果要检索的外部数据太大而无法缓存在OPA的存储器中,则可以在评估授权决策期间从外部来源动态提取数据。使用这种方法时,数据始终是最新的。这种方法有两个缺点:网络延迟和可访问性。目前,OPA 只能通过 HTTP 请求在运行时检索数据。如果转到外部数据源的调用无法以 HTTP 响应的形式返回数据,则它们需要自定义 API 或其他机制才能向 OPA 提供这些数据。由于 OPA 只能通过 HTTP 请求检索数据,而且检索数据的速度至关重要,因此我们建议您尽可能使用 AWS 服务 诸如 Amazon DynamoDB 之类的设备来保存外部数据。

有关拉取方法的更多信息,请参阅 OPA 文档

使用授权服务与 OPA 一起实施

当您使用捆绑、复制或动态拉取方法获取外部数据时,我们建议授权服务为这种交互提供便利。这是因为授权服务可以检索外部数据并将其转换为 JSON,以便 OPA 做出授权决策。下图显示了授权服务如何使用这三种外部数据检索方法发挥作用。

使用 OPA 检索外部数据

检索 OPA 流程的外部数据 — 在决策时进行捆绑数据或动态数据检索(图中用红色编号标注说明):

  1. OPA 调用授权服务的本地 API 端点,该服务被配置为捆绑端点或在授权决策期间用于动态数据检索的端点。

  2. 授权服务查询或调用外部数据源来检索外部数据。(对于捆绑终端节点,此数据还应包含 OPA 策略和规则。 Bundle 更新会替换 OPA 缓存中的所有内容(包括数据和策略)。)

  3. 授权服务对返回的数据执行任何必要的转换,以将其转换为预期的 JSON 输入。

  4. 数据将返回到 OPA。它被缓存在内存中用于捆绑包配置,并立即用于动态授权决策。

检索 OPA 流程的外部数据 — replicator(图中用蓝色编号的标注说明):

  1. 复制器(授权服务的一部分)调用外部数据源并检索要在 OPA 中更新的任何数据。这可能包括策略、规则和外部数据。此调用可以按设定的节奏进行,也可以响应外部源中的数据更新。

  2. 授权服务对返回的数据执行任何必要的转换,以将其转换为预期的 JSON 输入。

  3. 授权服务调用 OPA 并将数据缓存在内存中。授权服务可以有选择地更新数据、策略和规则。