用户池组多租户最佳实践 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

用户池组多租户最佳实践

当您的架构需要带有身份池的 Amazon Cognito 用户池时,基于群组的多租户效果最佳。

用户池 ID 和访问令牌包含cognito:groups声明。此外,ID 令牌包含cognito:rolescognito:preferred_role声明。当您的应用程序中身份验证的主要结果是来自身份池的临时 Amazon 证书时,您的用户的群组成员资格可以决定他们获得的 IAM 角色和权限。

例如,假设三个租户,每个租户都将应用程序资产存储在自己的 Amazon S3 存储桶中。将每个租户的用户分配到关联的群组,为该群组配置首选角色,并授予该角色对其存储桶的读取权限。

下图显示租户共享应用程序客户端和用户池,以及用户池中的专用群组来确定他们是否有资格担任 IAM 角色。

many-to-one 多租户模型示意图,其中每个租户在共享用户池中都有自己的用户组。
何时实施群组多租户

当 Amazon 资源访问是您的首要考虑时。Amazon Cognito 用户池用户池中的群组是一种基于角色的访问控制 (RBAC) 机制。您可以在用户池中配置多个群组,并根据群组优先级做出复杂的 RBAC 决策。身份池可以为优先级最高的角色、群组中的任何角色或用户令牌中的其他声明分配证书。

工作量水平

仅凭群组成员资格,维护多租户的工作量很低。但是,要将用户池组的角色扩展到内置的 IAM 角色选择容量之外,您必须构建应用程序逻辑来处理用户令牌中的群组成员资格,并确定要在客户端中执行的操作。您可以将 Amazon 验证权限与您的应用程序集成,以做出客户端授权决策。当前未在 Verified Permissions IsAuthorizedWithTokenAPI 操作中处理群组标识符,但您可以开发解析令牌内容的自定义代码,包括群组成员资格声明。