

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

# 多租户应用程序最佳实践
<a name="multi-tenant-application-best-practices"></a>

Amazon Cognito 用户池适用于生成大量请求的多租户应用，这些请求必须保持在 Amazon Cognito 的配额范围内。要在客户群增长时纵向扩展此容量，您可以[购买额外的配额容量](quotas.md#managing-request-rate-quotas.title)。

**注意**  
Amazon Cognito [配额](https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html)按和适用。 AWS 账户 AWS 区域这些配额在应用程序中的所有租户之间共享。请查看 Amazon Cognito 服务配额，并确保配额符合您应用程序中的预期容量和预期租户数量。

本节介绍您可以实施的方法来区分同一区域内的 Amazon Cognito 资源和。 AWS 账户您也可以将租户分配到多个 AWS 账户 或多个区域，并为每个租户分配自己的配额。多区域多租户的其他优势包括尽可能高的隔离级别、为全球分布的用户实现更短的网络传输时间，以及遵守组织中现有的分发模式。

单区域多租户也可为客户和管理员带来好处。

以下列表介绍了使用共享资源的多租户的一些优势。多租户的优势

**通用用户目录**  
多租户支持客户在多个应用程序中拥有账户的模式。您可以将[来自第三方提供者的身份关联](cognito-user-pools-identity-federation.md#cognito-user-pools-identity-federation.title)到单个一致的用户池配置文件中。如果用户配置文件是其租户所独有的，则任何具有单个用户池的多租户策略都有一个用户管理的切入点。

**通用安全性**  
在共享用户池中，您可以创建单一的安全标准，并将相同的[威胁防护](cognito-user-pool-settings-threat-protection.md#cognito-user-pool-settings-threat-protection.title)、[多重身份验证](user-pool-settings-mfa.md#user-pool-settings-mfa.title)（MFA）和 [AWS WAF](user-pool-waf.md#user-pool-waf.title) 标准应用于所有租户。由于 AWS WAF Web ACL 必须与您关联的资源 AWS 区域 相同，因此多租户提供对复杂资源的共享访问权限。如果您想在多区域 Amazon Cognito 应用程序中保持一致的安全配置，则必须应用操作标准，在资源之间复制配置。

**通用自定义**  
您可以使用自定义用户池和身份池 AWS Lambda。用户池中的 [Lambda 触发器](cognito-user-pools-working-with-lambda-triggers.md#cognito-user-pools-working-with-lambda-triggers.title)和身份池中的 [Amazon Cognito 事件](cognito-events.md#cognito-events.title)的配置会变得复杂。Lambda 函数必须与您的用户池或身份池位于同一个 AWS 区域 中。共享 Lambda 函数可为一个区域内的自定义身份验证流程、用户迁移、令牌生成和其他功能强制执行标准。

**通用消息发送**  
Amazon Simple Notification Service（Amazon SNS）需要在区域中进行额外配置，然后才能向用户发送[短信](user-pool-sms-settings.md#user-pool-sms-settings.title)。您可以使用 Amazon Simple Email Service（Amazon SES）已验证的身份和区域中包含的域来发送[电子邮件消息](user-pool-email.md#user-pool-email.title)。  
借助多租户，您可以在所有租户之间共享此配置和维护开销。由于 Amazon SNS 和 Amazon SES 并非在所有 AWS 区域均可用，因此在不同区域之间分配资源需要额外考量。  
使用[自定义消息传递提供方](user-pool-lambda-custom-sender-triggers.md#user-pool-lambda-custom-sender-triggers.title)时，您可以通过单个 Lambda 函数的*通用自定义*来管理您的消息传送。

[托管登录](cognito-user-pools-managed-login.md#cognito-user-pools-managed-login.title)在浏览器中设置会话 Cookie，以便它识别已经过身份验证的用户。当您对用户池中的*本地用户*进行身份验证时，用户的会话 Cookie 会在同一用户池中针对所有应用程序客户端对用户进行身份验证。本地用户仅存在于您的用户群体目录中，无需通过外部 IdP 进行联合身份验证。会话 Cookie 的有效期为 1 小时。您无法更改会话 Cookie 的持续时间。

有两种方法可以防止使用托管 UI 会话 Cookie 跨应用程序客户端登录。
+ 将用户分配到按租户划分的用户池。
+ 将托管 UI 登录替换为 Amazon Cognito 用户池 API 登录。

**Topics**
+ [用户池多租户最佳实践](bp_user-pool-based-multi-tenancy.md)
+ [应用程序客户端多租户最佳实践](application-client-based-multi-tenancy.md)
+ [用户组多租户最佳实践](group-based-multi-tenancy.md)
+ [自定义属性多租户最佳实践](custom-attribute-based-multi-tenancy.md)
+ [自定义范围多租户最佳实践](scope-based-multi-tenancy.md)
+ [多租户安全建议](multi-tenancy-security-recommendations.md)