瞭解 App ID 的高可用性及災難回復
高可用性服務或工作負載承受故障並根據某些預先定義的服務等級繼續提供處理能力的能力。 對於服務而言,可用性是在服務等級協議中定義的。 可用性包括計劃內和計劃外的事件,例如維護、故障和災難。 (HA) 是指服務在發生意外故障時仍能維持運作和存取的能力。 災難復原服務或工作負載從罕見的重大事故和大規模故障(如服務中斷)中恢復的能力。 這包括影響整個區域的實體災難、資料庫損毀或對工作負載有貢獻的服務遺失。 其影響超出了高可用性設計的處理能力。是將服務實例還原到工作狀態的過程。
IBM Cloud® App ID 是符合「標準」計畫的區域性服務,可達到所定義的「服務等級目標」(SLO)。 如需 App ID 可用 IBM Cloud 區域和資料中心的詳細資訊,請參閱 依地點列出的服務和基礎架構 可用性。
高可用性架構
App ID 服務實例在多區域中的多個區間進行配置,沒有單點故障。 如果實例節點或可用性區域發生故障,服務會繼續執行,API 請求會透過全局負載平衡器路由到倖存的高可用性實例節點。 從停機到全局負載平衡器識別到故障之間可能有一段很短的時間(秒),在這段時間內,可能會向故障的實例傳送請求。 以程式方式存取服務實體的工作負載應遵循 用戶端可用性重試邏輯,以維持可用性。 在區域故障期間,服務不會明顯下降。
災難復原架構
若要從服務實體中斷中恢復,應該在恢復區域中建立恢復服務實體。 一般而言,復原服務實體應配置與來源服務實體相同的資料。 請務必在可能發生災難之前,在復原區域中建立備份實體,並定期維護它們,以確保它們與來源實體同步。
災難復原功能
計劃復原至復原區域。 復原執行個體應與 IBM Cloud 中的工作負載災難復原方法保持一致。 恢復實體應追蹤主要服務實體的資料變更,包括密碼政策、使用者和 SAML 設定。
備份和還原您的實例
備份及還原 App ID 實例以確保跨地區可用性需要幾個基本步驟。 您必須:
-
定義原則以配置 App ID 實例備份的儲存體。 此配置包括規劃如何將資料 (例如使用者設定檔及 Cloud Directory 使用者) 儲存在實例的備份中。
在主要位置發生中斷事件之前建立備份系統。 為了維護持續保護,根據建議,將產生備份的處理程序自動化,並定期執行。
-
在另一個區域建立並設定 App ID 的實例。
-
設定處理程序以將備份儲存並還原在次要位置的 App ID 實例中。
使用 API 來備份實例
若要使用 管理 API 備份您的 App ID 實例,請撰寫腳本,向 App ID API 傳送請求,以產生包含 App ID 實例設定資訊的檔案。 將這些檔案儲存在安全位置,因為在次要地區中還原 App ID 實例需要它們。
根據 App ID 實例中的設定來定義備份的設定,例如使用案例所需的設定。 例如,在下列實務範例中,您使用下列設定來配置 App ID 實例:
- 密碼原則,例如,如果使用者連續輸入錯誤密碼三次,則鎖定使用者設定檔 60 分鐘
- SAML 配置
若要使用管理 API 來擷取這些使用者設定,請傳送:
- 一個 GET 請求到
/management/v4/<tenantId>/config/cloud_directory/advanced_password_management端點來取得進階密碼管理的設定。
curl -X 'GET' \
'https://<region>.appid.cloud.ibm.com/management/v4/<tenantId>/config/cloud_directory/advanced_password_management' \
--header 'accept: application/json' \
--header 'Authorization: Bearer <IAM_Token>'
- 一個 GET 請求到
/management/v4/<tenantId>/config/idps/saml端點取得 SAML 身份提供者組態,其中包括狀態和憑證。
curl -X 'GET' \
'https://<region>.appid.cloud.ibm.com/management/v4/<tenantId>/config/idps/saml' \
--header 'accept: application/json' \
--header 'Authorization: Bearer <IAM_Token>'
除了保留 App ID 實例的配置設定備份之外,您還必須產生 Cloud Directory 使用者和使用者設定檔的備份。 若要達到此作業,建議您使用管理 API。
- 若要匯出 Cloud Directory 使用者,請使用 cloud_directory/export/all API 端點。 若要下載匯出,請使用 cloud_directory/export/download API。 如需如何使用「管理 API」來匯出「雲端目錄」使用者的詳細資料,請閱讀 匯出所有使用者 文件。
- 若要匯出使用者設定檔,請使用 users/export 端點。
- 這兩個匯出 API 會產生兩個備份檔,您必須安全地儲存這些備份檔,以便稍後在還原程序中使用。
使用 Terraform 和 API 來備份實例
若要使用 Terraform 備份 App ID 設定,您可以撰寫 Terraform Script 來產生檔案,其中包含 App ID 實例的設定資訊。 將這些檔案儲存在安全位置,因為您必須使用它們來還原次要地區中的 App ID 實例。
根據 App ID 實例中的設定來定義備份的設定,例如使用案例所需的設定。 例如,在下列實務範例中,您使用下列設定來配置 App ID 實例:
- 密碼原則,例如,如果使用者連續輸入錯誤密碼三次,則鎖定使用者設定檔 60 分鐘
- SAML 配置
使用下列 Terraform Script,您可以擷取現行配置並將它儲存在檔案中。
terraform {
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
version = ">= 1.12.0"
}
}
}
variable "tenant_id" {
type = string
default = "<<YOUR TENANT ID>>"
}
variable "region" {
type = string
default = "<<THE REGION YOUR TENANT IS LOCATED>>"
}
provider "ibm" {
region = var.region
ibmcloud_api_key = "<<API KEY TO ACCESS APP ID INSTANCE>>"
}
##### ---------- Getting the configuration from your App ID instance ---------- #####
# Get Settigs about Password's rules
data "ibm_appid_apm" "app" {
tenant_id = var.tenant_id
}
# Get SAML config
data "ibm_appid_idp_saml" "saml" {
tenant_id = var.tenant_id
}
##### ---------- Saving the App ID configuration to files ---------- #####
resource "local_file" "app_config" {
content = jsonencode(data.ibm_appid_apm.app)
filename = "${path.module}/backup_configurations/app_config.json"
}
resource "local_file" "saml_config" {
content = jsonencode(data.ibm_appid_idp_saml.saml)
filename = "${path.module}/backup_configurations/saml_config.json"
}
在前一個實務範例中,包含備份的檔案儲存在本端。 但是,您可以將它們存放在您喜歡的任何其他儲存位置,例如 IBM Cloud Object Storage.
若要產生 Cloud Directory 使用者及使用者設定檔的備份,建議您使用管理 API。
- 若要匯出 Cloud Directory 使用者,請使用 cloud_directory/export/all API 端點。 若要下載匯出,請使用 cloud_directory/export/download API。 如需如何使用「管理 API」匯出「雲端目錄」使用者的詳細資料,請參閱 匯出所有使用者。
- 若要匯出使用者設定檔,請使用 users/export 端點。
- 這兩個匯出 API 會產生兩個備份檔,您必須儲存這些備份檔,以便稍後在還原程序中使用。
使用 API 還原 App ID 實例
首先,您必須在次要地區中手動佈建新的 App ID 實例。 然後,您可以透過讀取備份檔並使用管理 API 要求在次要地區中設定 App ID 實例,來還原 App ID 設定。
繼續備份部分所包含的情況,您可以透過傳送下列內容至管理 API 來還原 SAML 設定和密碼政策:
- 一個 PUT 請求到
/management/v4/<tenantId>/config/cloud_directory/advanced_password_management端點更新進階密碼管理組態。 傳送儲存於備份中的資料作為 HTTP 請求體。
curl -X 'PUT' \
'https://<region>.appid.cloud.ibm.com/management/v4/<tenantId>/config/cloud_directory/advanced_password_management' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <IAM_Token>' \
-d '<Data_from_your_backup_file>'
- 一個 PUT 請求到
/management/v4/<tenantId>/config/idps/saml端點更新 SAML IdP 配置。 傳送儲存於備份中的資料作為 HTTP 請求體。
curl -X 'PUT' \
'https://<region>.appid.cloud.ibm.com/management/v4/<tenantId>/config/idps/saml' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <IAM_Token>' \
-d '<Data_from_your_backup_file>'
若要還原 Cloud Directory 使用者及其設定檔的備份 (如果有的話),建議您使用管理 API:
- 若要匯入 Cloud Directory 使用者,請使用 cloud_directory/import/all API 端點。 如需如何使用「管理 API」匯入 Cloud Directory 使用者的詳細資料,請閱讀 匯入所有使用者 文件。
- 若要匯入使用者設定檔,請使用 users/import 端點。
使用 Terraform 和 API 還原 App ID 實例
當您使用 Terraform 與管理 API 的組合來還原 App ID 實例時,首要步驟是撰寫 Terraform Script,以在次要地區中佈建新的 App ID 實例。 然後,您可以透過讀取備份檔並使用 terraform 指令在次要地區中設定 App ID 實例,來還原 App ID 設定。
繼續使用 備份 部分所包含的方案,您可以使用下列腳本還原 SAML 設定和密碼政策:
terraform {
required_providers {
ibm = {
source = "IBM-Cloud/ibm"
version = ">= 1.12.0"
}
}
}
variable "backup_region" {
type = string
default = "<<REGION WHERE TO CREATE THE NEW APPID INSTANCE>>"
}
variable "backup_appid_instance_name" {
type = string
default = "<<THE NAME OF THE NEW APPID INSTANCE>>"
}
provider "ibm" {
region = var.backup_region
ibmcloud_api_key = "<<API KEY TO ACCESS APP ID INSTANCE>>"
}
##### ---------- Creating an AppID instance in a secondary location ---------- #####
data "ibm_resource_group" "group" {
name = "Default"
}
resource "ibm_resource_instance" "backup_appid_instance" {
name = var.backup_appid_instance_name
service = "appid"
plan = "graduated-tier"
location = var.backup_region
resource_group_id = data.ibm_resource_group.group.id
tags = ["backup_instance", "backup_of_appid_from_primary_region"]
}
##### ---------- Getting the configuration from the local backups ---------- #####
locals {
app_config = jsondecode(file("${path.module}/backup_configurations/app_config.json"))
saml_config = jsondecode(file("${path.module}/backup_configurations/saml_config.json"))
}
##### ---------- Restoring the App ID configuration into the new App ID instance ---------- #####
# Setting SAML config in the new App ID Instance
resource "ibm_appid_idp_saml" "saml" {
tenant_id = resource.ibm_resource_instance.backup_appid_instance.guid
is_active = local.saml_config.is_active
config {
entity_id = local.saml_config.config[0].entity_id
sign_in_url = local.saml_config.config[0].sign_in_url
display_name = local.saml_config.config[0].display_name
encrypt_response = local.saml_config.config[0].encrypt_response
sign_request = local.saml_config.config[0].sign_request
certificates = [local.saml_config.config[0].certificates[0]]
}
}
# Setting password policies config in the new App ID Instance
resource "ibm_appid_apm" "apm" {
tenant_id = resource.ibm_resource_instance.backup_appid_instance.guid
enabled = local.app_config.enabled
prevent_password_with_username = local.app_config.prevent_password_with_username
password_reuse {
enabled = local.app_config.password_reuse[0].enabled
max_password_reuse = local.app_config.password_reuse[0].max_password_reuse
}
password_expiration {
enabled = local.app_config.password_expiration[0].enabled
days_to_expire = local.app_config.password_expiration[0].days_to_expire
}
lockout_policy {
enabled = local.app_config.lockout_policy[0].enabled
lockout_time_sec = local.app_config.lockout_policy[0].lockout_time_sec
num_of_attempts = local.app_config.lockout_policy[0].num_of_attempts
}
min_password_change_interval {
enabled = local.app_config.min_password_change_interval[0].enabled
min_hours_to_change_password = local.app_config.min_password_change_interval[0].min_hours_to_change_password
}
}
若要還原 Cloud Directory 使用者及使用者設定檔,建議您使用管理 API:
- 若要匯入 Cloud Directory 使用者,請使用 cloud_directory/import/all API 端點。 如需如何使用管理 API 匯入 Cloud Directory 使用者的詳細資料,請參閱 匯入所有使用者。
- 若要匯入使用者設定檔,請使用 users/import 端點。
您對 HA 和 DR 的責任
以下資訊可協助您建立並持續實作 HA 和 DR 的計劃。 災難復原步驟必須定期演練。 在建立您的計劃時,請考慮下列故障情況和解決方案。
客戶從 BYOK 損失中恢復
如果您的服務實體是使用 IBM® Key Protect for IBM Cloud® 或 Hyper Protect Crypto Services 的根金鑰佈建的,而您不小心刪除了根金鑰,請針對相關服務開啟支援個案,並包含下列資訊:
- 您服務實例的 CRN
- 您的備份 Key Protect 或 HPCS 實例的 CRN
- 新的 Key Protect 或 HPCS 根金鑰 ID
- 原始 Key Protect 或 HPCS 範例的 CRN 和 key ID (如果有的話)
請參閱 HPCS 和 HPCS 說明書中的「從意外遺失金鑰中恢復授權」。Key Protect 和 HPCS 文件。
變更管理
變更管理包括升級、組態變更和刪除等工作。
建議您賦予使用者和程序 IAM 角色及其工作所需的最少權限。 例如,限制刪除生產資源的能力。
IBM® 如何協助確保災難復原
IBM® 在發生災難時採取特定的復原行動。
IBM® 如何從區域故障中復原
如果區域發生故障,IBM Cloud 將解決區域中斷的問題,當區域恢復連線時,全局負載平衡器將恢復向恢復的實例節點發送 API 請求,而無需客戶採取任何行動。
IBM® 如何從區域故障中復原
當區域在故障後還原時,IBM 會嘗試從區域狀態還原服務實體,結果是資料不會遺失,服務實體也會以相同的連線字串還原。
如果區域狀態已損毀,服務將還原為最後一次內部備份的狀態。 所有與服務相關的資料都會由服務每天備份兩次,存放在由服務管理的跨區域 Cloud Object Storage 資料桶中。 有可能造成 24 小時的資料遺失。 這些備份無法用於客戶管理的災難復原。 當服務從備份中復原時,實體 ID 也會一併復原,因此使用端點的用戶端不需要更新新的連線字串。
- RTO = 4 小時
- RPO = 最多 12 小時
如果 IBM 無法還原服務實例,則客戶必須按照災難復原部分所述的方式進行還原。
IBM® 如何維護服務
所有升級都遵循 IBM® 服務最佳實務,並有復原計劃和回滾程序。 新功能的定期升級和維護是正常作業的一部分。 此類維護偶爾會造成短暫的中斷間隔,由用 戶端可用性重試邏輯 處理。 變更會依序推出,在區域內依區域逐一推出。 只要一有缺陷的跡象,更新就會被退回。
使用功能旗標啟用或停用複雜變更,以控制曝光。
影響客戶工作負載的變更會在通知中詳細說明。 如需詳細資訊,請參閱計劃維護的 監控通知與狀態、公告,以及影響此服務的發行說明。