多租户模式米奇蛋糕 (Mickey Cake)
在当今互联互通的数字生态系统中,企业越来越多地采用多租户架构,以便使用单个实例的标识和访问管理(IAM)平台来服务于多个组织(或租户)。这种架构通过允许多个组织在同一基础设施上共存,提供了显著的优势,如可扩展性、成本效益和灵活性。然而,在确保认证和授权机制能够满足每个租户的多样化需求方面,这种方法带来了独特的挑战。
让我们从头开始。作为一名IAM架构师,我将从头开始,通过遵循开放标准并使用开源软件(OSS)来解决每个问题。本文基于以下文章中详细讨论的原则和理念。你可以参考这些文章来了解核心概念。
这里有一个高层次的示意图,展示了如何将IAM领域中的所有组件与相关的标准和开源工具连接。通常,我的方法是以标准为先,然后转向特定平台的具体实现。
让我们来逐一解释每个泡泡,并在多租户场景中添加一些参考——我不会在之前文章提到的那些点上添加太多细节。
所有事情都与身份有关,因此我们从这里开始。然后,我们进入认证环节,在此环节我们将采用OpenID Connect标准。Keycloak作为身份提供者(IdP),将负责处理认证、身份、组织和权限模型。在这一点上,Keycloak提供了一个称为组织的新功能,该功能有助于企业与企业(B2B)的业务场景。借助此功能,我们现在用组织模型来表示每个租户——更多细节请参见下一节。
在授权步骤,我们遵循OpenID AuthZEN工作组制定的标准。这就是为什么我们用‘P*P’组件来描述架构并通过策略决策点(PDP)提供的API来外部化授权。该组件使用OpenFGA实现这一功能,这是一款先进的细粒度授权平台,支持基于关系的访问控制(ReBAC),简称关系控制访问(ReBAC)。
ReBAC 允许基于关系动态做出访问决定,例如“用户 X 是组织 Y 的成员”或“用户 Z 担任审计员并且是组织 B 的成员”。通过 Keycloak 的新组织模型,OpenFGA 现在可以处理用户和组织之间的关系。所有事件同步由 Keycloak OpenFGA Event Publisher 扩展管理 — 它的工作原理已在之前的文章中详细说明过。
最后,通过采用解耦的授权架构并实施Policy as Code,我们利用Apache APISIX——一个与OpenFGA集成的云原生且身份感知的API网关——通过Authorization OpenFGA插件在API层面实现ReBAC策略的执行。
根据上面提到的几点,让我们首先概述一个多租户场景来应用这些概念,然后开始工作坊。
支付平台PayPlus B2B的用例:多租户场景 业务要求考虑一个支付平台——PayPlus,它为多个企业客户处理交易事务。每个客户有自己的用户集(例如,员工、财务团队、审计师等),并有不同的身份验证和授权需求。
在这个情况下,每个客户都表示为 Keycloak 中的一个机构。在这些机构中,用户被分配到各种全局角色,这些角色决定了他们可以访问哪些平台功能。
其中一个目标是探索如何利用组织和权限模型之间的关系,在授权策略中保护多租户API。为了这个用例,我们将公开事务API(例如:GET /api/orgs/{orgId}/transactions
)。只有拥有全局角色(如:Account Manager)的组织成员才能访问此端点并查看信息。
将Keycloak与OpenFGA集成,创建了一个更加灵活的身份验证和授权系统,能够适应每个客户的需求,并确保一致的访问权限。此外,API网关与OpenFGA集成后,使用基于ReBAC授权规则的保护机制,从而使整体授权流程更加简化。
考虑:写这篇文章的时候,Keycloak的组织功能刚刚发布。不过,许多功能仍在路线图中,将在未来的版本中实现,例如按组织分配认证流程和支持创建新的权限模型并将其与组织相关联。一旦Keycloak支持了这些功能,我打算进一步丰富这个工作坊的内容。目前,我的目标是为大家提供一个当前情况和未来可能性的概览。
支付平台PayPlus B2B架构设计(面向企业的支付平台)工作坊设计
为了检查组件的集成,你可以参考之前的文章。以下,我将向大家介绍支持此多租户环境的新功能。
Keycloak: 新功能简化来说,Keycloak 引入了 Organization 功能这一概念,用户可以通过邀请链接加入、通过身份联合(可以将组织与外部身份提供者关联起来)或由管理员手动添加。
因此,管理员可以管理每个组织的身份的生命周期和认证。另一个需要注意的点是认证是优先考虑身份的,并且可以为每个组织设置特定的声明。
好吧,让我们来看一下我们的示例情景:我们创建了两个组织,即 Org A
和 Org B
,来分别代表每个租户,并在 PayPlus
领域中将演示用户作为成员分配。
Keycloak组织架构
这是名为 paula.smith
的用户组织成员的可视化。
A组织的成员们
我们创建了一个全局角色 account manager
,该角色与权限 view:transaction:any
相关,从而形成这个模型。
工作坊模式
授权模型会实时从Keycloak同步更新到OpenFGA的ReBAC模型。
Keycloak 的 OpenFGA 扩展:新增支持组织模型同步为了支持Keycloak的组织模型,我们对Keycloak的OpenFGA事件发布器进行了扩展,使之能够处理组织相关的事件。当你在Keycloak中为用户分配组织时,这个动作会被同步到新的OpenFGA模型中。
带有组织功能支持的新OpenFGA模型现已推出
Apache APISIX OpenFGA 授权插件(策略):支持多个策略,每个策略都带有条件我们添加了一个功能,支持多个带有条件标准(如 AND
或 OR
)的授权请求。因此,我们可以提供更复杂的授权策略的 API,例如,用户不仅与某个角色相关,还是某个组织的成员。
在这种情况下,交易的API实现了业务需求中声明的授权规则——无需多做解释,因为这个理解起来非常简单。
带有基于角色的访问控制(ReBAC)策略的API网关
演示版应用:新PayPlus多租户版本这是另一个展示用例的漂亮 ❤️ 网络应用。它通过 Keycloak 平台与 OIDC 集成在一起,并显示身份信息和组织详情。此外,它通过 API 网关提供的交易相关 API 支持多租户模式。
动手实践工作坊:支付平台PayPlus(B2B)您可以在 GitHub 仓库中找到演示,只需点击一下即可部署所有组件。
使用案例:作为账户管理员访问PayPlus,代表组织A访问PayPlus,以组织A的账户管理员身份。
用 Paula(paula.smith@orga.com)的账户进入 Pay Plus 平台并点击登录。
PayPlus演示版应用
2. 使用 paula.smith 的账号登录 Keycloak 身份验证系统,通过身份优先体验进行操作。
3. Pay+演示显示了组织A的交易信息如下。
PayPlus 交易记录
让我们来看看背后都发生了些什么
- 在
步骤 1
里,应用程序与 OIDC 集成,并请求了组织
范围以获取组织信息。 - 在
步骤 3
,需要注意以下几点。首先,应用程序根据组织
声明在身份令牌中显示用户的所属组织。
- 接下来,应用程序请求列出组织A的交易(
GET /api/orgs/org-a/transactions
)。API网关实施的授权策略如下:验证访问令牌,并检查用户是否属于org-a
且具有view:transaction:any
权限。
授权政策
你可以看到,用户是被允许的,因为在下面的工作坊中详细解释的 OpenFGA 授权模型里,Paula(子声明值,sub claim value)被分配了 account-manager
角色,这个角色拥有 view:transaction:any
权限的父级关系,并且她也是 org-a
组织的成员。所有这些模型都是通过 Keycloak 的自定义扩展同步到 OpenFGA 的 ❤️。
OpenFGA 工作坊模式
结论部分只要遵循开放标准,一切都会变得更简单。你将实现互操作性的目标,避免被供应商绑定,最重要的是,不必重复造轮子。
通过使用开源软件(OSS)例如Keycloak、OpenFGA和Apache APISIX,以及我们开发并维护的Keycloak OpenFGA 事件发布器插件扩展和授权插件,您可以获得以下好处:
- 透明和灵活的特点:你可以检查代码,确保其符合你的安全和业务需求。
- 社区支持:活跃的社区提供改进、修复及新功能。
- 成本效益:避免昂贵的供应商许可,减少总体拥有成本。
总之,作为一名身份和访问管理专家,我坚信这是一种解决多租户等复杂场景的简单方法,首先考虑标准,使用开源软件(OSS),并遵循KISS(保持简单)的原则。
通过使用本文提到的现代标准和技术,我们可以实现:
- 将认证任务交给身份提供程序:Keycloak。
- 将细粒度授权交给OpenFGA平台。
- 通过API网关来解耦授权逻辑:Apache APISIX。
这让IAM和授权体系更加灵活、可扩展,并且易于维护。
保持联系吧。
这篇帖子就到这里吧!
谢谢你的阅读。要是你喜欢的话,就分享一下吧!
参考- Github 多租户工作坊页面: https://github.com/embesozzi/keycloak-openfga-multitenancy-workshop
- Keycloak 扩展插件: Keycloak OpenFGA 事件发布器 — 即将推出新版本。
- Apache APISIX 插件: Authorization OpenFGA — 即将推出新版本。
- 相关文章: Keycloak 与 OpenFGA 的集成(基于 Zanzibar 架构)实现大规模细粒度授权(ReBAC)
- 相关文章: 掌握访问控制: 低代码授权 ReBAC 以及解耦模式和策略即代码的方法
共同学习,写下你的评论
评论加载中...
作者其他优质文章