

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

# 多租户 SaaS 授权和 API 访问控制：实施选项和最佳实践
<a name="introduction"></a>

*Tabby Ward、Thomas Davis、Gideon Landeman 和 Amazon Web Services 的 Tomas Riha ()AWS*

*2024 年 5 月*（[文档历史记录](doc-history.md)）

授权和 API 访问控制是许多软件应用程序面临的挑战，尤其是多租户软件即服务 (SaaS) 应用程序。当你考虑到必须保护的微服务 APIs 激增以及来自不同租户、用户特征和应用程序状态的大量访问条件时，这种复杂性就显而易见了。为了有效地解决这些问题，解决方案必须对微服务、前端后端 (BFF) 层和多租户 SaaS 应用程序的其他组件实施访问控制。 APIs 这种方法必须辅之以一种能够根据许多因素和属性做出复杂的访问决策的机制。

传统上，API 访问控制和授权由应用程序代码中的自定义逻辑处理。这种方法容易出错且不安全，因为有权访问此代码的开发人员可能会意外或故意更改授权逻辑，从而导致未经授权的访问。审计应用程序代码中的自定义逻辑做出的决策很困难，因为审计员必须全身心投入到自定义逻辑中，才能确定其在维护任何特定标准方面的有效性。此外，API 访问控制通常是不必要的，因为 APIs 需要保护的次数不多。应用程序设计向偏向于微服务和面向服务的架构的范式转变增加了必须使用某种形式的授权和访问控制的数量。 APIs 此外，需要在多租户 SaaS 应用程序中维护基于租户的访问权限，这给保留租赁带来了额外的授权挑战。本指南中概述的最佳实践具有以下几个好处：
+ 授权逻辑可以集中化，并使用高级声明性语言编写，该语言不适用于任何编程语言。
+ 授权逻辑是从应用程序代码中抽象出来的，可以作为可重复的模式应用于应用程序 APIs 中的所有内容。
+ 抽象可以防止开发人员意外更改授权逻辑。
+ 与 SaaS 应用程序的集成既一致又简单。
+ 通过抽象，无需为每个 API 端点编写自定义授权逻辑。
+ 由于审计员不再需要审查代码来确定权限，因此简化了审计。
+ 本指南中概述的方法支持根据组织的要求使用多种访问控制范例。
+ 这种授权和访问控制方法为在 SaaS 应用程序的 API 层维护租户数据隔离提供了一种简单明了的方法。
+ 在授权方面，最佳实践为租户的入职和离职提供了一种一致的方法。
+ 这种方法提供了不同的授权部署模型（池化或孤岛），它们既有优点也有缺点，如本指南所述。

## 目标业务成果
<a name="business-outcomes"></a>

本规范性指南描述了可重复的授权和 API 访问控制设计模式，这些模式可以用于多租户 SaaS 应用程序。本指南适用于任何开发具有复杂授权要求或严格的 API 访问控制需求的应用程序的团队。该架构详细说明了策略决策点 (PDP) 或策略引擎的创建以及策略执行点 (PEP) 的集成。 APIs讨论了创建 PDP 的两个具体选项：在 Cedar SDK 中使用亚马逊验证权限，以及使用带有 Rego 策略语言的开放政策代理 (OPA)。该指南还讨论了根据基于属性的访问控制 (ABAC) 模型或基于角色的访问控制 (RBAC) 模型或两种模型的组合做出访问决策。我们建议您使用本指南中提供的设计模式和概念来指导和标准化您在多租户 SaaS 应用程序中实现授权和 API 访问控制。本指南有助于实现以下业务成果：
+ **适用于多租户 SaaS 应用程序的标准化 API 授权**架构 — 该架构区分了三个组件：存储和管理策略的策略管理点 (PAP)、用于评估这些策略以做出授权决策的策略决策点 (PDP) 以及执行该决策的策略执行点 (PEP)。托管的授权服务 “已验证权限” 既是 PAP 又是 PDP。或者，您可以使用 Cedar 或 OPA 等开源引擎自己构建 PDP。
+ 将@@ **授权逻辑与应用程序分离 — 授权逻辑嵌入到**应用程序代码中或通过临时强制机制实现时，可能会受到意外或恶意更改的影响，从而导致无意的跨租户数据访问或其他安全漏洞。为了帮助减少这些可能性，您可以使用 PAP（例如 Verified Permissions）来存储独立于应用程序代码的授权策略，并对这些策略的管理进行强有力的监管。策略可以用高级声明性语言集中维护，这使得维护授权逻辑比在应用程序代码的多个部分中嵌入策略要简单得多。这种方法还可以确保以一致的方式应用更新。
+ **灵活的访问控制模型方法** ——基于角色的访问控制 (RBAC)、基于属性的访问控制 (ABAC) 或两种模型的组合都是有效的访问控制方法。这些模型试图通过使用不同的方法来满足企业的授权要求。本指南对这些模型进行了比较和对比，以帮助您选择适合您的组织的模型。该指南还讨论了这些模型如何应用于不同的授权策略语言，例如 OPA/Rego 和 Cedar。本指南中讨论的架构可以成功采用其中一个或两个模型。
+ **严格的 API 访问控制** — 本指南提供了一种在应用程序中以最少的努力实现 APIs 一致且普遍安全的方法。这对于面向服务的应用程序架构或微服务应用程序架构特别有价值，因为这些架构通常使用大量 APIs来促进应用程序内部通信。严格的 API 访问控制有助于提高应用程序的安全性，使其不易受到攻击或利用。

## 租户隔离和多租户授权
<a name="definitions"></a>

本指南介绍了租户隔离和多租户授权的概念。*租户隔离*是指您在 SaaS 系统中使用的明确机制，用于确保每个租户的资源（即使它们在共享基础架构上运行）是隔离的。*多租户授权*是指授权入站操作并防止在错误的租户上实施这些操作。假设的用户可以经过身份验证和授权，但仍然可以访问其他租户的资源。身份验证和授权不会阻止此访问——您需要实施租户隔离才能实现此目标。有关这两个概念之间差异的更广泛讨论，请参阅《[SaaS 架构基础知识](https://docs.aws.amazon.com/whitepapers/latest/saas-architecture-fundamentals/tenant-isolation.html)》白皮书的 “*租户隔离*” 部分。