亚马逊 Cognito 多租户最佳方法

12

我正在AWS上开发一个多租户应用程序。我正在努力在Cognito上实现多租户。我的第一种方法是使用一个Cognito用户池和一个身份池来为整个应用程序提供支持。

目前,我们每个租户有两种类型的用户(管理员和普通用户),因此我希望为它们分配不同的IAM角色。

想法是为每个用户角色创建一个Cognito组,并将它们与相应的IAM角色关联起来。这样做挺好的。当使用组进行角色分配时,我将身份池已认证的角色选择配置为“从令牌中选择角色”。

然而,对于20个租户,需要40个组,而Cognito组的限制是每个用户池25个。

对于每个租户使用一个Cognito用户池也有同样的缺点,因为Cognito用户池的限制是50个(而我们预计会有超过25个租户)。

这些都是软限制,所以我知道可以要求增加限制。事实上,我请求增加Cognito组限制,但是回复时间太长了。

作为Cognito组的替代方案,我可以将身份池已认证的角色选择配置为“使用规则选择角色”。

通过这种方式,我添加了一个Cognito用户池自定义属性(custom:role),并配置了身份池Cognito身份验证提供程序,其中包括以下规则:

if custom:role equals 'tenant1_admin' then assign TENANT_1_ADMIN_IAM_ROLE

if custom:role equals 'tenant1_regular' then assign TENANT_1_REGULAR_IAM_ROLE

...

if custom:role equals 'tenant20_admin' then assign TENANT_20_ADMIN_IAM_ROLE

if custom:role equals 'tenant20_regular' then assign TENANT_20_REGULAR_IAM_ROLE

这样在Cognito上实现多租户的方式正确吗?据我所知,身份池身份验证提供程序规则数量没有限制。

3个回答

10

我知道这个问题已经有答案并且有点旧了,但是我认为对于其他遇到这个问题的人来说可能会有用。AWS实际上为在AWS上创建多租户SaaS应用程序编写了一份白皮书和快速入门指南,可在https://aws-quickstart.s3.amazonaws.com/saas-identity-cognito/doc/saas-identity-and-isolation-with-cognito-on-the-aws-cloud.pdf找到。

它具有基本的Web前端(AngularJS在S3上),Cognito(每个租户一个池),处理用户租户查找的逻辑和ECS配置,以托管服务。非常详细,应该能够回答一些初学者或想了解这些问题的人的疑问。


1
抱歉,此内容已不再可用。 - milan

6

如你之前提到的,你可以联系AWS支持来请求增加您的组限制。明确说明您的用例将使得限制增加更容易。您正在使用SAML还是Cognito登录您的用户池?


感谢您的回复。我请求在Cognito组中增加限制,但出于基础设施原因,他们更喜欢增加UserPools数量的限制。然而,我仍然在考虑是选择每个租户一个Userpool还是为应用程序使用一个UserPool:第二个选项允许使用JWT声明(具有自定义声明custom:role)和Identity Pool Cognito Authenticate Provider规则进行用户分割。 - bertie
2
两种解决方案都可以,取决于您期望有多少用户以及这些租户之间的差异。一般来说,我更喜欢使用多个用户池。使用单独的用户池将更容易管理您的用户,并根据不同的租户自定义要求。此外,如果您总共有很多用户,使用单独的用户池也可以帮助控制流量。 - Summer Guo
好的,Summer Guo。我会选择每个租户一个用户池。非常感谢您的评论。 - bertie

2

2022更新:SaaS快速入门不再可用。现在有一个研讨会,而Cognito开发者指南讨论了多租户

  1. 用户池的默认限制现在是1000(可调整为10000)。
  2. 池中组的最大数量为1000(不可调整!)。
  3. 一个用户最多可以属于100个组。

其余内容可以在配额部分找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接