公司新闻

使用 Amazon Verified Permissions 进行 SaaS 访问控制,并建立按租户

datetime

2026-01-27 12:48:34

阅读数量

8

使用 Amazon Verified Permissions 实现 SaaS 访问控制

关键要点

多租户 SaaS 应用程序的访问控制至关重要。开发者需要管理权限、细粒度的授权和租户隔离。本文演示如何使用 Amazon Verified Permissions 在多租户文档管理 SaaS 应用程序中实现访问控制,并使用每租户策略存储的方法来维护租户边界。此外,介绍了租户之间如何隔离资源的必要性。

在多租户 SaaS 应用中,开发者通常需要满足以下访问控制需求:

应用开发者需要定义适用于所有租户的策略。租户用户需要控制谁可以访问他们的资源。租户管理员需要管理租户的所有资源。

以下是实现租户隔离的最佳实践,这对于 SaaS 业务至关重要。

Verified Permissions 的优势

Verified Permissions 是一个可扩展的细粒度权限管理和授权服务,帮助您构建和现代化应用程序,而无需在应用程序代码中实现授权逻辑。它使用 Cedar 语言来定义策略,允许您具体声明哪些主体被明确允许或禁止对某一资源进行操作。

多租户文档管理 SaaS 应用程序

该应用程序允许用户添加、共享、访问和管理文档。其需要满足以下访问控制:

应用开发者定义适用于所有租户的策略。租户用户控制谁可以访问他们的文档。租户管理员管理所有文档。

接下来将描述应用的架构,然后深入设计细节。

应用程序架构概述

在 Verified Permissions 中,有两种多租户设计方法:单一共享策略存储和每租户策略存储。可以参考 Verified Permissions 用户指南 了解这些方法的考虑因素和建议。

我们选择每租户策略存储方法的原因如下:

租户策略隔离简单每个租户定制模板和架构的能力租户下线的低成本每租户策略存储资源配额

我们接受以下权衡:

实现全球策略管理的高工作量因为该应用程序用例不需要频繁更改这些策略实现授权流程的中等工作量因为在此上下文中,我们认为上述原因大于实现租户 ID 到策略存储 ID 的映射

下图展示了文档管理 SaaS 应用程序的架构。为了简化起见,我们省略了前端,专注于后端。

架构细节

租户用户通过身份提供者例如 Amazon Cognito登录,获取 JSON Web Token (JWT) 进行 API 请求。JWT 包含 userid 和 tenantid 等声明。租户用户使用 JWT 向应用程序发起 API 请求。Amazon API Gateway 验证 JWT 的有效性。如果 JWT 有效,API Gateway 会将请求转发给计算提供者,此处使用 AWS Lambda 函数来运行业务逻辑。Lambda 函数假设一个 AWS Identity and Access Management (IAM) 角色,IAM 策略允许访问提供租户到策略存储映射的 Amazon DynamoDB 表。Lambda 函数查找当前请求的 Verified Permissions policystoreid。该函数假设另一个 IAM 角色,IAM 策略允许访问 Verified Permissions 策略库及相关文档元数据。该策略根据 tenantid 和 policystoreid 限制访问。Lambda 函数在 DynamoDB 表中获取或存储文档的元数据。基于步骤5和6的信息,Lambda 函数调用 Verified Permissions 进行授权决策或创建 Cedar 策略。如果授权,应用程序就可以访问或存储文档。

应用程序架构深入分析

在明确用例架构后,接下来将详细回顾这些用例,从用户体验回溯到应用程序架构的相关部分。架构重点在于权限管理,而实际文档的访问和存储不在本次讨论范围内。

定义适用于所有租户的策略

应用开发者必须定义全球策略,包括所有租户的基本访问权限。我们使用 Cedar 策略来实现这些权限。租户入职时应创建每个新租户的这些策略。

确保租户无法编辑其他租户的策略

应用使用 IAM 机制隔离不同租户的资源,确保每个租户的策略库互不影响。

使用 Amazon Verified Permissions 进行 SaaS 访问控制,并建立按租户架构

添加文档

用户首次访问应用程序时并不拥有任何文档。要添加文档,前端调用 POST /documents 端点,并在请求体中提供 documentname。

Cedar 策略

我们需要一个全球策略,允许每个租户用户添加新文档。

plaintextpermit ( principal action == DocumentsAPIActionaddDocument resource)

这条政策允许任何主体添加文档。由于采用每租户策略存储方法,因此不需要将主体限制为某个租户。

将文档分享给同一租户的其他用户

创建了文档后,租户用户可能希望与同一租户的其他用户共享。要共享文档,前端调用 POST /shares 端点,并提供想要共享的文档的 documentid 和接收用户的 userid。

Cedar 策略

需要一条全球文档所有者策略,允许文档所有者管理文档,包括共享。租户入职过程中在租户的策略库中创建此策略。

plaintextpermit ( principal action resource) when { resourceowner == principal ampamp resourcetype == document}

该策略允许主体对可用资源文档执行操作,前提是主体是文档所有者。

访问共享文档

文档共享后,接收用户想要访问该文档。前端调用 GET /documents 端点并提供文档的 documentid。

速云梯Cedar 策略

如前所述,在共享过程中,应用程序创建的模板链接共享策略允许接收用户访问该文档。

管理租户的所有文档

用户注册 SaaS 应用程序时,应用程序会创建租户管理员用户。租户管理员必须拥有对所有文档执行所有操作的权限。

Cedar 策略

我们需要全球策略,允许租户管理员管理所有文档。

plaintextpermit ( principal in DocumentsAPIGroupltadmingroupidgt action resource)

该策略允许 ltadmingroupidgt 组内的所有成员对文档执行任意操作。

结论

在本文中,我们展示了如何利用 Amazon Verified Permissions 在多租户 SaaS 应用程序中实施细粒度的授权决策。你了解了如何将每租户政策存储方法应用于应用架构。想要了解更多,请访问 Verified Permissions 用户指南 以选择使用每租户政策存储还是共享政策存储。如果需要更多信息,请参考 Amazon Verified Permissions 文档 和 工作坊。

如果对本文有反馈,请在评论区留言。如果有问题,请在 Amazon Verified Permissions rePost 启动新讨论,或 联系 AWS 支持。

作者介绍

Manuel Heinkel 是 AWS 的解决方案架构师,他与德国的软件公司合作,构建创新且安全的云应用。他帮助客户解决业务挑战,实现与 AWS 的成功。他在安全和 SaaS 主题上有深入的研究,闲暇时喜欢与家人共度时光,探索山区。

Alex Pulver 是 AWS 的首席解决方案架构师,协助客户设计满足其业务需求的流程和解决方案。他目前的研究领域包括产品工程、开发者体验和平台战略。他是 应用设计框架 的创始人,旨在协调业务与技术、减少重复工作并促进演进架构。

标签:Amazon Verified Permissions、ISV、多租户、SaaS、安全、安全博客、租户隔离