多租户应用中的租户隔离
租户隔离是多租户应用中的一个关键概念。在这篇文章中,我们将讨论它是什么以及如何实现。
大家好!在本章中,我们将建立在之前关于多租户主题的讨论基础上。如果你还没有阅读之前的文章,我们建议先从那些开始!
在讨论多租户应用时,重要的是考虑 租户隔离。这意味着在共享系统中(例如,云基础设施或多租户应用)保持不同租户的数据和资源分开和安全。
租户隔离的目标是确保每个租户的数据和操作在使用相同底层资源时仍然是独立和安全的。
在软件即服务 (SaaS) 场景中,租户隔离涉及在 SaaS 框架内创建严格管理资源访问的结构。这可以防止任何未经授权的尝试访问其他租户的资源。
虽然解释可能看起来很抽象,但我们将使用示例和关键细节来进一步说明隔离的心态。
租户隔离并不违背多租户的“共享”理念
这因为租户隔离不一定是一个基础设施资源级别的构造。在多租户和隔离的领域中,有些人将隔离视为实际基础设施资源之间的严格划分。 这通常导致模型的构建使得每个租户都有独立的数据库、计算实例、账户或私有云。在共享资源场景中,比如多租户应用,实现隔离的方式可以是一个逻 辑构造。
租户隔离专注于使用“租户”上下文来限制对资源的访问。它评估当前租户的上下文,并使用该上下文来确定哪些资源对该租户可访问。 它将这种隔离应用于该租户内的所有用户。任何对访问租户资源的尝试都应该仅限于属于该租户的资源。
隔离有不同的层次
当我们了解到隔离并不严格绑定到基础设施资源层面,也不是物理基础设施的明显分离时,得出的结论如下:
与其将隔离视为简单的“是”或“否”,不如将其视为一个光谱。你可以根据需要将系统的部分设置为更多或更少的隔离。
下图展示了这个隔离光谱。
身份验证和授权并不等同于“隔离”
使用身份验证和授权来控制你 SaaS 环境的访问很重要,但这不足以实现完全的隔离。这些机制只是安全拼图的一部分。
人们常常问一个问题,我可以使用通用的授权解决方案和基于角色的访问控制来实现租户隔离吗? 你可以建立一个多租户应用,但你不能说你实现并采用了租户隔离策略作为最佳实践。我们一般不推荐这样做,因为
举个例子,请考虑你为你的 SaaS 系统设置了身份验证和授权。当用户登录时,他们会收到一个包含他们角色信息的令牌,规定他们可以在应用程序中做什么。这种方法提高了安全性,但不确保隔离。
现在,说到这里:如果不加入“租户”上下文,例如租户 ID 来限制对资源的访问,单靠身份验证和授权无法防止具有合适角色的用户访问另一个租户的资源。
这就是租户隔离的作用。 它使用特定于租户的标识符来建立边界,就像墙、门和锁一样,确保租户之间的明确分隔。
多租户应用中的身份
我们讨论了租户隔离,但身份呢?你如何决定你的身份是否应该“隔离”?
对于“身份隔离”这个概念常常存在困惑。它可能指的是在人们的普遍理解中,一个现实世界的用户有两种身份的情况。
- 两个身份都可以存在于一个身份系统中。例如,Sarah 可能会注册一个个人邮箱,同时通过单点登录 (SSO) 连接一个公司邮箱。
- 用户在独立的身份系统中持有两种不同的身份,代表完全不相关的产品。这些产品彼此完全不相干。
有时,这些场景被称为“身份隔离”。然而,这个标签可能无助于做出决定。
与其决定你是否需要“身份隔离”,不如考虑你或你的业务或产品的一部分是否需要维持独立的身份系 统。这个答案可以指导你的身份和访问管理 (IAM) 系统设计。对于关于多租户应用的简短回答,
大多数情况下,在多租户应用中,身份是共享的,而每个租户的资源是隔离的。
在多租户应用中,身份与租户特定的资源和数据不同,是在多个租户之间共享的。把自己想象成大楼管理员;你不希望维护两张独立的身份名单来管理你的租户身份。
当寻求租户隔离时,你可能已经注意到对“组织”这个术语的反复强调,常常被认为是构建多租户应用的最佳实践。
通过使用“组织”这一概念,你可以在保持统一身份系统的情况下,在你的多租户应用中实现租户隔离。 这允许多个“组织”独立存在,但在应用中共享租户无关的资源。就像住在大楼里的居民一样,每个组织都能不必担心邻居,因为“组织”提供了所需的分隔形式,如墙、走廊、门和锁。他们共享整个建筑基础设施、室内设计系统以及各种有形或无形组件。
Logto 将在 11 月推出“组织”功能
Logto 目前正在积极开发“组织”功能,计划于 2023 年 11 月上线。该功能是专门为搭建 SaaS 产品所需的租户隔离要求而设计的,符合行业标准和最佳实践。
在接下来的章节中,我们将深入探讨“组织”功能,以及 Logto 如何促进搭建多租户应用的最佳实践。