View a markdown version of this page

Multi-Region 用户池的复制 - Amazon Cognito

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

Multi-Region 用户池的复制

通过多区域复制 (MRR),您可以另外创建一个副本用户池, AWS 区域 为您的身份验证基础架构提供业务连续性和灾难恢复功能。借助 MRR,即使您与区域中资源的连接断开,注册用户也可以继续使用您的应用程序进行身份验证,从而确保您的应用程序保持可用状态。

配置 MRR 时,Amazon Cognito 会使用共享的用户池 ID 创建单独的用户池。每个副本用户池都托管共享用户目录的身份验证服务。主用户池是管理配置和写入操作(例如密码重置和用户注册)的权威来源。次要用户池无法创建用户。它们从主用户池继承大多数设置,并且在故障转移状态下,可以处理用户登录和令牌生成等身份验证操作。

重要

Multi-Region 目前,并非所有用户池都可进行复制。 Multi-Region 复制需要具有增强功能和可扩展性的现代 Amazon Cognito 基础设施。一些用户池仍在以前的基础架构上,并将升级 AWS 到新的基础架构,这将解锁此功能。在 Amazon Cognito 控制台中,符合条件的用户池显示多区域复制配置选项,不符合条件的用户池显示异常消息。有关更多信息,请参阅 AWS 安全博客中的 Amazon Cognito 通过下一代基础设施解锁高级功能。

关于多区域复制的注意事项

  • Multi-Region 复制有单独的附加费用,需要您的用户池使用基本版或增强版功能套餐。您无法使用 Lite 功能套餐在用户池上启用 MRR。

  • 在启用复制 AWS KMS 之前,您必须使用多区域客户管理的密钥配置用户池。该密钥必须在所有具有用户池副本 AWS 区域 的用户中可用。有关更多信息,请参阅 数据加密

  • 为了实现跨区域一致的代币验证,我们建议您使用更新的发行者配置用户池。有关更多信息,请参阅 作为 OIDC 发行人的 Amazon Cognito 用户池

  • 新的二级用户池在该INACTIVE州启动。在激活用户池以供生产使用之前,请检查和配置区域设置。

  • 副本之间的区域配置可能有所不同。您可以在副本中单独配置以下设置。所有其他设置都在主用户池中设置,并自动同步到辅助用户池。

    • 电子邮件配置

    • 威胁防护通知的电子邮件配置

    • 短信配置

    • 拉姆达触发器

    • 标签

    • 日志导出配置

    • AWS WAF 网络 ACL

  • 区域间的数据复制可能会带来短暂的延迟。主用户池将设置和用户目录更新同步到辅助用户池,此过程最终保持一致。

多区域复制的局限性

  • 无论是通过注册还是通过创建管理员,您都无法在二级用户池中生成新用户。联合用户只有先前登录过主用户池,才能登录到处于故障转移状态的辅助用户池。

  • 用户无法在辅助用户池中重置密码或修改其个人资料。在故障转移状态下,在用户界面中禁用这些操作,并在运行状况检查恢复对主用户池的访问权限后将其设为可用。

  • 在每个用户目录的额外区域中,您最多可以有一个辅助副本。任何符合条件的用户池都可以拥有辅助副本。

  • 辅助副本不支持 TOTP MFA。当主区域的用户池为请求提供服务时,配置了 TOTP MFA 的用户必须进行身份验证。

  • 锁定前基于密码的身份验证尝试次数不同区域同步。每个副本都有自己的失败身份验证尝试次数。

配置多区域复制

在启用多区域复制之前,请确保您的用户池满足先决条件:Essentials 或 Plus 功能计划以及多区域客户管理的 KMS 密钥。

AWS 管理控制台
为用户池配置多区域复制
  1. 登录 Amazon Cognito 控制台

  2. 选择用户池

  3. 从列表中选择现有用户池,或创建新的用户池

  4. 选择设置选项卡。

  5. 在左侧导航菜单中,选择Multi-Region复制

  6. 选择创建副本用户池

  7. 对于区域,选择要创建副本用户池 AWS 区域 的位置。

  8. 查看配置摘要并选择创建副本

  9. 创建副本后,查看比较表中的区域配置设置。根据需要为副本区域配置任何 Region-specific 设置,例如电子邮件配置、短信设置或 Lambda 触发器。

  10. 要为您的域配置 Route 53 运行状况检查,请导航到域服务菜单,编辑或添加自定义域,并配置 Route 53 运行状况检查 ID

  11. 当你准备好使用副本获取生产流量时,将副本状态从 “非活动” 更改为 “活动”

API

要创建副本用户池,请使用CreateUserPoolReplica操作。以下示例在us-west-2区域中为中的主用户池创建副本us-east-1

{ "UserPoolId": "us-east-1_EXAMPLE", "RegionName": "us-west-2", "UserPoolTags": { "Environment": "Production", "Application": "MyApp" } }

响应包含副本信息:

{ "Replica": { "RegionName": "us-west-2", "UserPoolArn": "arn:aws:cognito-idp:us-west-2:111122223333:userpool/us-east-1_EXAMPLE", "Status": "PENDING_CREATE", "Role": "SECONDARY" } }

您还必须为域名配置故障转移。在 Route 53 中设置运行状况检查,然后在UpdateUserPoolDomain请求中将其应用到您的域名:

{ "CustomDomainConfig": { "CertificateArn": "arn:aws:acm:us-east-1:111122223333:certificate/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" }, "Domain": "auth.example.com", "ManagedLoginVersion": 2, "Routing": { "Failover": { "SecondaryRegion": "us-west-2", "PrimaryRoute53HealthCheckId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" } }, "UserPoolId": "us-east-1_EXAMPLE" }

要激活副本以供生产使用,请使用以下UpdateUserPoolReplica操作:

{ "UserPoolId": "us-east-1_EXAMPLE", "RegionName": "us-west-2", "Status": "ACTIVE" }

响应确认更新的副本状态:

{ "Replica": { "RegionName": "us-west-2", "UserPoolArn": "arn:aws:cognito-idp:us-west-2:111122223333:userpool/us-east-1_EXAMPLE", "Status": "ACTIVE", "Role": "SECONDARY" } }

辅助区域支持的 API 操作

亚马逊 Cognito 支持二级区域中的一部分 API 操作。可用的操作取决于副本的状态。处于INACTIVE状态的副本支持有限的读取和配置操作。处于ACTIVE状态的副本支持额外的身份验证和会话管理操作。此处未列出的操作仅在主要区域可用。

非活跃二级区域的操作

处于INACTIVE状态的辅助区域中的副本用户池允许以下 Amazon Cognito API 操作。

活跃二级区域的其他操作

处于ACTIVE状态的辅助区域中的副本用户池允许所有前面的操作,以及以下身份验证和会话管理操作。

多区域用户池中的故障转移

使用多区域用户池,您可以对托管登录、联合登录和两 AWS 区域者之间的直接 API 调用进行故障切换。使用用户池配置的自定义域或前缀 (Cognito) 域均可进行管理登录和联合故障转移。您无法使用副本用户池配置其他自定义域。

管理登录、联合和机器间授权的故障转移

当您的主用户池具有自定义域前缀域时,可以进行故障转移。您的用户池域提供包括授权令牌端点在内的 OAuth 2.0 资源,并处理来自第三方联合提供商(包括 OIDC、SAML 和社交提供商)的 IdP 响应。

要启用故障转移,请在 Route 53 中设置运行状况检查并在您的域上设置该Routing字段。您可以确定触发健康或不健康状态的因素。当运行状况检查处于不健康状态时,Amazon Cognito 会通过辅助副本用户池提供托管登录页面和身份验证操作。当运行状况检查进入正常状态时,Amazon Cognito 开始将流量路由回主副本。

您的自定义域名的 DNS 记录可以使用 Route 53 或任何第三方 DNS 提供商。确保您的 DNS 提供商中有指向目标别名(即 CloudFront 分配)的有效 CNAME 记录。您可以在亚马逊 Cognito 控制台的域名页面上找到别名目标。

在控制台中更新运行状况检查 ID
  1. 登录 Amazon Cognito 控制台

  2. 选择用户池,然后选择您的用户池。

  3. 从菜单中选择 “品牌” 下的 “域名”。

  4. 自定义域部分下,选择编辑选项并选择编辑多区域故障转移

  5. 切换 “启用多区域故障转移” 选项。

  6. 从可用的运行状况检查中选择您的 Route 53 运行状况检查 ID。

  7. 选择保存更改

Amazon Cognito API 和软件开发工具包的故障转移

如果您使用亚马逊 Cognito API 或软件开发工具包,则不使用自定义域,您的应用程序负责将流量路由到亚马逊 Cognito 服务区域终端节点,以处理身份验证和其他 API 调用。

如果您的应用程序前端仅使用公共客户端,例如单页应用程序 (SPA) 或移动应用程序,则您的应用程序需要动态才能相应地路由 API 调用。考虑使用无服务器应用程序后端来帮助确定应从哪个区域开始使用 Amazon Cognito 进行身份验证。

如果您的应用程序带有后端,则可以在这里确定确定要对哪个用户池进行身份验证的逻辑。

如果您同时使用托管登录终端节点和 API,请使用相同的 Route 53 运行状况检查来确定您的应用程序将 Amazon Cognito API 调用定向到哪个区域。