跳转到主要内容
Chinese, Simplified

有许多方法可以实现API访问控制和授权。本指南重点介绍三种对多租户SaaS架构有效的设计模型。这些设计为策略决策点(PDP)和策略执行点(PEP)的实现提供了一个高级参考,从而为应用程序形成了一个连贯且普遍的授权模型。

设计模型:

  • 具有API上PEP的集中式PDP
  • API上带有PEP的分布式PDP
  • 作为库的分布式PDP

具有API上PEP的集中式PDP

在API模型上具有策略执行点(PEP)的集中式策略决策点(PDP)遵循行业最佳实践,为API访问控制和授权创建一个有效且易于维护的系统。该方法支持几个关键原则:

  • 授权和API访问控制在应用程序的多个点应用。
  • 授权逻辑独立于应用程序。
  • 访问控制决策是集中的。

该模型使用集中式PDP来做出授权决策。PEP在所有API中实现,以向PDP发出授权请求。下图显示了如何在假设的多租户SaaS应用程序中实现此模型。


          A sample multi-tenant SaaS application that uses a centralized PDP with PEPs on
            APIs
一个示例多租户SaaS应用程序,该应用程序使用带有PEP的集中式PDP

应用程序流程:


                  Application flow - step 1

具有JWT令牌的认证用户向AmazonCloudFront生成HTTP请求。


                  Application flow - step 2

CloudFront将请求转发到配置为CloudFront源的Amazon API网关。


                  Application flow - step 3

调用API网关Lambda授权器来验证JWT令牌。


                  Application flow - step 4

微服务响应请求。

授权和API访问控制流程:


                  Authorization flow - step 1

PEP调用授权服务并传递请求数据,包括任何JWT令牌。


                  Authorization flow - step 2

授权服务(PDP)接收请求数据并查询作为sidecar运行的OPA代理REST API,请求数据作为查询的输入。


                  Authorization flow - step 3

OPA根据查询指定的相关策略评估输入。必要时导入数据以做出授权决定。


                  Authorization flow - step 4

OPA向授权服务返回决定。


                  Authorization flow - step 5

授权决定返回给PEP并进行评估。

在此架构中,PEP在CloudFront和API网关以及每个微服务的服务端点请求授权决策。授权决策由具有OPA侧车的授权服务(PDP)做出。您可以将此授权服务作为容器或传统服务器实例来操作。OPA sidecar在本地公开其RESTful API,因此该API只能由授权服务访问。授权服务公开了一个单独的API,可供PEP使用。授权服务充当PEP和OPA之间的中介,允许在PEP与OPA之间插入任何必要的转换逻辑,例如,当PEP的授权请求不符合OPA期望的查询输入时。

您还可以将此架构与自定义策略引擎一起使用。然而,从OPA获得的任何优势都必须用定制策略引擎提供的逻辑来代替。

在API上使用PEP的集中式PDP为为API创建一个健壮的授权系统提供了一个简单的选择。它易于实现,还提供了一个易于使用的幂等接口,用于为API、微服务、前端后端(BFF)层或其他应用程序组件做出授权决策。然而,这种方法可能会在应用程序中造成太多延迟,因为授权决策需要调用单独的API。如果网络延迟是一个问题,您可以考虑使用分布式PDP。

API上带有PEP的分布式PDP

 

基于API模型的分布式策略决策点(PDP)和策略执行点(PEP)遵循行业最佳实践,以创建有效的API访问控制和授权系统。与API模型上带有PEP的集中式PDP一样,该方法支持以下关键原则:

  • 授权和API访问控制在应用程序的多个点应用。
  • 授权逻辑独立于应用程序。
  • 访问控制决策是集中的。

您可能会想知道,当分发PDP时,为什么访问控制决策是集中的。尽管PDP可能存在于应用程序中的多个位置,但它必须使用相同的授权逻辑来做出访问控制决策。给定相同的输入,所有PDP提供相同的访问控制决策。PEP在所有API中实现,以向PDP发出授权请求。下图显示了如何在假设的多租户SaaS应用程序中实现此分布式模型。


          A sample multi-tenant SaaS application that uses a distributed PDP with PEPs on
            APIs
一个示例多租户SaaS应用程序,该应用程序使用带有PEP的分布式PDP

Application flow:


                  Application flow - step 1

具有JWT令牌的认证用户向AmazonCloudFront生成HTTP请求。


                  Application flow - step 2

CloudFront将请求转发到配置为CloudFront源的Amazon API网关。


                  Application flow - step 3

调用API网关Lambda授权器来验证JWT令牌。


                  Application flow - step 4

微服务响应请求。

Authorization and API access control flow:


                  Authorization flow - step 1

PEP调用授权服务并传递请求数据,包括任何JWT令牌。


                  Authorization flow - step 2

授权服务(PDP)接收请求数据并查询作为sidecar运行的OPA代理REST API,请求数据作为查询的输入。


                  Authorization flow - step 3

OPA根据查询指定的相关策略评估输入。必要时导入数据以做出授权决定。


                  Authorization flow - step 4

OPA向授权服务返回决定。


                  Authorization flow - step 5

授权决定返回给PEP并进行评估。

在此架构中,PEP在CloudFront和API网关以及每个微服务的服务端点请求授权决策。微服务的授权决策是由授权服务(PDP)做出的,它作为应用程序组件的侧车运行。该模型适用于在容器或Amazon Elastic Compute Cloud(Amazon EC2)实例上运行的微服务(或服务)。API网关和CloudFront等服务的授权决策仍需要联系外部授权服务。无论如何,授权服务公开了PEP可用的API。授权服务充当PEP与OPA之间的中介,允许在PEP和OPA之间插入任何必要的转换逻辑,例如,当PEP的授权请求不符合OPA期望的查询输入时。

您还可以将此架构与自定义策略引擎一起使用。然而,从OPA获得的任何优势都必须用定制策略引擎提供的逻辑来代替。

在API上具有PEP的分布式PDP提供了为API创建健壮授权系统的选项。它易于实现,并提供了一个易于使用的幂等接口,用于为API、微服务、前端后端(BFF)层或其他应用程序组件做出授权决策。这种方法还具有减少集中式PDP模型中可能遇到的延迟的优点。

作为库的分布式PDP

您还可以向PDP请求授权决策,该PDP可以作为库或包在应用程序中使用。OPA可以用作Go第三方库。对于其他编程语言,采用此模型通常意味着您必须创建自定义策略引擎。

原文地址
https://docs.aws.amazon.com/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/design-models.html
本文地址
Article

微信

知识星球

微信公众号

视频号