

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用者集區的多區域複寫
<a name="user-pool-multi-region"></a>

透過多區域複寫 (MRR)，您可以在額外的 中建立複本使用者集區 AWS 區域 ，為您的身分驗證基礎設施提供業務持續性和災難復原功能。使用 MRR 時，即使您失去與區域中資源的連線，已註冊使用者可以繼續與您的應用程式進行身分驗證，以確保您的應用程式保持可用狀態。

當您設定 MRR 時，Amazon Cognito 會使用共用的使用者集區 ID 建立個別的使用者集區。每個複本使用者集區都會託管共用使用者目錄的身分驗證服務。主要使用者集區可做為管理組態和使用者目錄寫入操作的授權來源，例如密碼重設和使用者註冊。次要使用者集區無法建立使用者、從主要使用者集區繼承大部分設定，而且處於容錯移轉狀態時，可以處理身分驗證操作，例如使用者登入和權杖產生。

**重要**  
多區域複寫目前不適用於所有使用者集區。多區域複寫需要具有增強功能和可擴展性的現代 Amazon Cognito 基礎設施。有些使用者集區仍在先前的基礎設施上，將由 升級至 AWS 新的基礎設施，以解鎖此功能。在 Amazon Cognito 主控台中，符合資格的使用者集區會顯示多區域複寫組態選項，而不符合資格的集區會顯示例外狀況訊息。如需詳細資訊，請參閱 AWS 安全部落格中的 [Amazon Cognito 使用新一代基礎設施解鎖進階功能](https://aws.amazon.com/blogs/security/amazon-cognito-unlocks-advanced-capabilities-with-next-generation-infrastructure/)。

## 多區域複寫須知事項
<a name="user-pool-multi-region-things-to-know"></a>
+ 多區域複寫有個別的附加元件成本，並要求您的使用者集區在 Essentials 或 Plus [功能計劃](cognito-sign-in-feature-plans.md)中。您無法在具有 Lite 功能計劃的使用者集區上啟用 MRR。
+ 您必須先使用來自 [的多區域客戶受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)來設定使用者集區， AWS KMS 才能啟用複寫。金鑰必須可用於 AWS 區域 具有使用者集區複本的所有 。如需詳細資訊，請參閱[資料加密](data-protection.md#data-encryption)。
+ 您的使用者集區必須使用多區域 OIDC 發行者，以確保跨區域進行一致的字符驗證。如需詳細資訊，請參閱[作為 OIDC 發行者的 Amazon Cognito 使用者集區](federation-endpoints.md#user-pool-oidc-issuer)。
+ 新的次要使用者集區會在 `INACTIVE` 狀態開始。為生產用途啟用使用者集區之前，請檢閱並設定區域設定。
+ 每個複本的區域組態可能不同。您可以在複本中獨立設定下列設定。所有其他設定都會在主要使用者集區中設定，並自動同步到次要使用者集區。
  + 電子郵件組態
  + 威脅防護通知的電子郵件組態
  + SMS 組態
  + Lambda 觸發條件
  + Tags (標籤)
  + 日誌匯出組態
  + AWS WAF Web ACLs
+ 區域之間的資料複寫可能會導致短暫的延遲。主要使用者集區會同步次要 的設定和使用者目錄更新，此程序最終會保持一致。

## 多區域複寫的限制
<a name="user-pool-multi-region-limitations"></a>
+ 您無法透過註冊或建立管理員，在次要使用者集區中產生新使用者。新的聯合身分使用者只有在先前已登入主要使用者集區時，才能登入處於容錯移轉狀態的次要使用者集區。
+ 使用者無法重設其密碼或修改次要使用者集區中的設定檔。在容錯移轉狀態下，在使用者介面中停用這些操作，並在運作狀態檢查還原主要使用者集區的存取權後提供這些操作。
+ 每個使用者目錄在額外區域中最多可以有一個次要複本。任何使用者集區都可以有次要複本。
+ 次要複本不支援 TOTP MFA。已設定 TOTP MFA 的使用者必須在主要區域中的使用者集區為 服務請求時進行身分驗證。
+ 在鎖定區域之間未同步之前，密碼型身分驗證嘗試的計數。每個複本會維護自己的失敗身分驗證嘗試計數。
+ 您只能設定具有[自訂網域](cognito-user-pools-add-custom-domain.md)的多區域使用者集區的自動容錯移轉。

## 設定多區域複寫
<a name="user-pool-multi-region-configure"></a>

在啟用多區域複寫之前，請確定您的使用者集區符合先決條件：Essentials 或 Plus 功能計劃、多區域客戶受管 KMS 金鑰，以及多區域 OIDC 發行者組態。

------
#### [ AWS 管理主控台 ]

**設定使用者集區的多區域複寫**

1. 登入 [Amazon Cognito 主控台](https://console.aws.amazon.com/cognito/home)。

1. 選擇 **User pools** (使用者集區)。

1. 從清單中選擇現有的使用者集區，或[建立新的使用者集區](getting-started-user-pools.md)。

1. 選擇 **Settings** (設定) 標籤。

1. 在左側導覽功能表中，選擇**多區域複寫**。

1. 選擇**建立複本使用者集區**。

1. 針對**區域**，選取您要建立複本使用者集 AWS 區域 區的 。

1. 檢閱組態摘要，然後選擇**建立複本**。

1. 建立複本之後，請檢閱比較表中的區域組態設定。視需要為您的複本區域設定任何區域特定的設定，例如電子郵件組態、簡訊設定或 Lambda 觸發。

1. 若要為您的網域設定 Route 53 運作狀態檢查，請導覽至**網域服務**選單、編輯或新增自訂網域，以及設定 **Route 53 運作狀態檢查 ID**。

1. 當您準備好將複本用於生產流量時，請將複本狀態從**非作用中**變更為**作用中**。

------
#### [ API ]

若要建立複本使用者集區，請使用 [CreateUserPoolReplica](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolReplica.html) 操作。下列範例會在 區域中`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](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolDomain.html) 請求中的網域：

```
{
   "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": "ca-central-1_EXAMPLE"
}
```

若要啟用複本以供生產使用，請使用 [UpdateUserPoolReplica](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolReplica.html) 操作：

```
{
   "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"
   }
}
```

------

## 多區域使用者集區中的容錯移轉
<a name="user-pool-multi-region-failover"></a>

受管登入、聯合登入和使用者集區的直接 API 使用 AWS 區域 可能會發生兩個之間的容錯移轉。受管登入和聯合需要使用主要使用者集區設定的自訂網域。您無法使用複本使用者集區設定不同的自訂網域。

### 受管登入、聯合和machine-to-machine授權的容錯移轉
<a name="user-pool-multi-region-failover-managed-login"></a>

當您的主要使用者集區具有[自訂網域](cognito-user-pools-add-custom-domain.md)時，即可進行容錯移轉。當兩個使用者集區都有[字首網域](cognito-user-pools-assign-domain-prefix.md)時，您可以直接存取次要字首網域，在次要複本上手動測試操作。自訂網域可以從主要或額外的複本和區域提供。

自訂網域是必要的，因為它是提供 OAuth 2.0 資源的端點，例如[授權](authorization-endpoint.md)和[字符](token-endpoint.md)端點，並處理來自第三方聯合的 IdP 回應，包括 OIDC、SAML 和社交提供者。

若要設定容錯移轉，請在 Route 53 中設定[運作狀態檢查](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html)。您要負責決定此運作狀態檢查狀態的因素。運作狀態檢查不會直接與自訂網域的 DNS CNAME 記錄建立關聯。不過，這是決定傳送至自訂網域的流量是否路由至主要或複本使用者集區的指標。

自訂網域的 DNS 記錄可以使用 Route 53 或任何第三方 DNS 供應商。請確定您的 DNS 供應商中有指向目標別名的有效 CNAME 記錄，這是 CloudFront 分佈。您可以在 Amazon Cognito 主控台的**網域**頁面上找到別名目標。

當運作狀態檢查處於不良狀態時，Amazon Cognito 會從次要複本使用者集區為自訂網域提供受管登入頁面和身分驗證操作。當運作狀態檢查進入良好狀態時，Amazon Cognito 會開始將流量路由回主要複本。

每個使用者集區都有自己的字首網域，因為這些是區域隔離的。您仍然可以直接呼叫這些端點來處理身分驗證。不過，如果聯合設定了第三方 IdPs，則每個字首端點都必須有兩個應用程式組態。最佳實務是使用自訂網域，以確保 Amazon Cognito 根據 Route 53 運作狀態檢查狀態自動處理往返受管登入的路由。

**在 主控台中更新運作狀態檢查 ID**

1. 在 Amazon Cognito 主控台中導覽至您的使用者集區。

1. 從功能表中選擇**品牌**下的**網域**。

1. 在**自訂網域**區段下，選擇編輯選項，然後選取**編輯多區域容錯移轉**。

1. 切換**啟用多區域容錯移轉**選項。

1. 從可用的運作狀態檢查中選取您的 Route 53 運作狀態檢查 ID。

1. 選擇**儲存變更**。

### Amazon Cognito APIs 和 SDKs容錯移轉
<a name="user-pool-multi-region-failover-api"></a>

如果您使用 Amazon Cognito APIs 或 SDKs，則不會使用自訂網域，而且您的應用程式負責將流量路由到 Amazon Cognito 服務區域端點，以處理身分驗證和其他 API 呼叫。

如果您只有使用公有用戶端的應用程式前端，例如單頁應用程式 (SPA) 或行動應用程式，您的應用程式需要動態以相應地路由 API 呼叫。考慮無伺服器應用程式後端，以協助判斷 Amazon Cognito 應該開始哪個區域身分驗證。

如果您有具有後端的應用程式，可以在這裡決定要對哪些使用者集區進行身分驗證的邏輯。

如果您同時使用受管登入端點和 APIs，您可以使用相同的 Route 53 運作狀態檢查做為應用程式指標，以決定對 Amazon Cognito 的 API 呼叫應該發生的目標區域。