

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

# 用户组多租户最佳实践
<a name="group-based-multi-tenancy"></a>

当您的架构需要 Amazon Cognito 用户池和身份池时，基于组的多租户效果更好。

用户池 [ID 令牌和访问令牌](amazon-cognito-user-pools-using-tokens-with-identity-providers.md#amazon-cognito-user-pools-using-tokens-with-identity-providers.title)包含 `cognito:groups` 声明。此外，ID 令牌包含 `cognito:roles` 和 `cognito:preferred_role` 声明。当您的应用程序中身份验证的主要结果是来自身份池的临时 AWS 凭证时，您的用户的组成员资格可以决定他们获得的 [IAM 角色](iam-roles.md#iam-roles.title)和权限。

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

下图显示租户共享应用程序客户端和用户池，且用户池中的专用组用来确定他们是否有资格代入 IAM 角色。

![\[many-to-one多租户模型示意图，其中每个租户在共享用户池中都有自己的用户组。\]](http://docs.aws.amazon.com/zh_cn/cognito/latest/developerguide/images/multi-tenancy-group.png)


**何时实施组多租户**  
当 AWS 资源访问是您的首要考虑时。Amazon Cognito 用户池中的组是一种基于角色的访问控制（RBAC）机制。您可以在用户池中配置许多组，并根据组优先级作出复杂的 RBAC 决策。身份池可以为优先级最高的角色、组声明中的任何角色或来自用户令牌中其他声明的角色分配凭证。

**工作量水平**  
仅通过组成员身份来维持多租户架构的工作量很低。但是，要将用户池组的角色扩展到内置的 IAM 角色选择容量之外，必须构建应用程序逻辑来处理用户令牌中的组成员身份，并确定要在客户端中执行的操作。可以将 Amazon Verified Permissions 与应用程序集成，从而作出客户端授权决策。当前未在 Verified Permissions [IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html)API 操作中处理群组标识符，但您可以[开发解析令牌内容的自定义代码](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/identity-providers.html#identity-providers_other-idp)，包括群组成员资格声明。