IBM Cloud Docs
了解 App ID 的高可用性和灾难恢复

了解 App ID 的高可用性和灾难恢复

高可用性服务或工作负载根据预先定义的服务级别承受故障并继续提供处理能力的能力。 对于服务,可用性在服务水平协议中进行了定义。 可用性包括计划内和计划外事件,例如维护、故障和灾难。 (HA)是指服务在出现意外故障时仍能保持运行和访问的能力。 灾难恢复服务或工作负载从罕见重大事故和大规模故障(如服务中断)中恢复的能力。 这包括影响整个地区的自然灾害、数据库损坏或导致工作负荷增加的服务中断。 这种影响超出了高可用性设计所能承受的范围。是将服务实例恢复到工作状态的过程。

IBM Cloud® App ID 是一种区域性服务,可实现标准计划中规定的 服务水平目标(SLO)。 有关 App ID 可用 IBM Cloud 地区和数据中心的更多信息,请参阅“按位置划分的服务和基础设施可用性”。

高可用性架构

App ID 服务实例可在多区区域的多个区域内配置,没有单点故障。 如果实例节点或可用性区域发生故障,服务将继续运行,API 请求将通过全局负载平衡器路由到尚存的高可用实例节点。 从中断到全局负载平衡器识别故障之间可能会有很短的一段时间(秒),在这段时间内,请求可能会被发送到故障实例。 以编程方式访问服务实例的工作负载应遵循 客户端可用性重试逻辑,以保持可用性。 在分区故障期间,服务不会明显降低。

灾后恢复架构

要从服务实例中断中恢复,就应在恢复区域内建立恢复服务实例。 一般来说,恢复服务实例应配置与源服务实例相同的数据。 确保在潜在灾难发生前在恢复区域创建备份实例,并定期维护,以确保与源实例同步。

灾难恢复功能

计划恢复到恢复区域。 恢复实例应与 IBM Cloud 中的工作负载灾难恢复方法保持一致。 恢复实例应跟踪主服务实例的数据变更,包括密码策略、用户和 SAML 配置。

备份和恢复实例

备份和复原 App ID 实例以确保跨区域可用性需要一些基本步骤。 贵方必须:

  1. 定义用于配置 App ID 实例备份的存储的策略。 此配置包括规划如何将数据 (例如,用户概要文件和 Cloud Directory 用户) 存储在实例的备份中。

    在主位置发生中断事件之前创建备份系统。 要根据建议保持持续保护,请自动执行生成备份并定期运行备份的过程。

  2. 在另一个区域创建并配置 App ID 实例。

  3. 设置一个进程以存储备份并将其复原到位于辅助位置的 App ID 实例中。

使用 API 备份实例

要使用 管理 API 备份 App ID 实例,请编写脚本,向 App ID API 发送请求,生成包含 App ID 实例设置信息的文件。 将这些文件存储在安全位置,因为需要这些文件才能在辅助区域中复原 App ID 实例。

根据 App ID 实例中的设置来定义备份设置,例如用例所需的设置。 例如,在以下场景中,使用以下设置配置 App ID 实例:

  • 密码策略,例如,如果用户连续三次输入错误密码,那么将用户概要文件锁定 60 分钟
  • SAML 配置

要使用管理 API 检索这些用户设置,请发送:

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>'
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 导出 Cloud Directory 用户的更多详细信息,请阅读 导出所有用户 文档。
  • 要导出用户概要文件,请使用 users/export 端点。
  • 这两个导出 API 会生成两个备份文件,您必须安全地存储这些文件,以便稍后在复原过程中使用这些文件。

使用 Terraform 和 API 备份实例

要使用 Terraform 备份 App ID 设置,可以编写 Terraform 脚本以生成包含 App ID 实例设置信息的文件。 将这些文件存储在安全位置,因为您必须使用它们在辅助区域中复原 App ID 实例。

根据 App ID 实例中的设置来定义备份设置,例如用例所需的设置。 例如,在以下场景中,使用以下设置配置 App ID 实例:

  • 密码策略,例如,如果用户连续三次输入错误密码,那么将用户概要文件锁定 60 分钟
  • SAML 配置

通过以下 Terraform 脚本,您可以检索当前配置并将其存储到文件中。

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 导出 Cloud Directory 用户的更多详细信息,请参阅 导出所有用户
  • 要导出用户概要文件,请使用 users/export 端点。
  • 这两个导出 API 将生成两个备份文件,您必须将其存储以稍后在复原过程中使用。

使用 API 复原 App ID 实例

首先,必须在辅助区域中手动供应 App ID 的新实例。 然后,可以通过读取备份文件并使用管理 API 请求在辅助区域中设置 App ID 实例来复原 App ID 设置。

继续执行备份部分中包含的方案,您可以通过将以下内容发送到管理 API 来复原 SAML 配置和密码策略:

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>'
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:

使用 Terraform 和 API 复原 App ID 实例

当您使用 Terraform 和管理 API 的组合来复原 App ID 实例时,第一步是编写 Terraform 脚本以在辅助区域中供应 App ID 的新实例。 然后,可以通过读取备份文件并使用 terraform 命令在辅助区域中设置 App ID 实例来复原 App ID 设置。

继续执行 backup 部分中包含的方案,可以使用以下脚本复原 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:

您对 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 和密钥 ID(如果有的话

请参阅《从意外丢失密钥中恢复授权》、《从意外丢失密钥中恢复授权》、《从意外丢失密钥中恢复授权》和 HPCS 文档。Key ProtectHPCS 文档

变更管理

变更管理包括升级、配置变更和删除等任务。

建议向用户和进程授予其工作所需的最少权限的 IAM 角色和操作。 例如,限制删除生产资源的能力。

IBM® 如何帮助确保灾难恢复

IBM® 在发生灾难时采取具体的恢复行动。

IBM® 如何从区域故障中恢复

如果区域出现故障,IBM Cloud 将解决区域中断问题,当区域重新上线后,全局负载平衡器将恢复向恢复的实例节点发送 API 请求,无需客户操作。

IBM® 如何从地区失败中恢复过来

当发生故障后恢复区域时,IBM 会尝试从区域状态恢复服务实例,这样就不会丢失数据,服务实例也会以相同的连接字符串恢复。

如果区域状态已损坏,服务将恢复到上次内部备份时的状态。 与服务相关的所有数据均由服务每天两次备份到由服务管理的跨区域 Cloud Object Storage 数据桶中。 有可能丢失价值 24 小时的数据。 这些备份不能用于客户管理的灾难恢复。 当服务从备份中恢复时,实例 ID 也会随之恢复,因此使用该端点的客户端无需更新新的连接字符串。

  • RTO = 4 小时
  • RPO = 最多 12 小时

如果 IBM 无法恢复服务实例,客户必须按照灾难恢复部分的描述进行恢复。

IBM® 如何维护服务

所有升级均遵循 IBM® 服务最佳实践,并制定了恢复计划和回滚流程。 新功能的定期升级和维护是正常运行的一部分。 这种维护偶尔会造成短暂的中断,客户端可用性重试逻辑 会处理这些中断。 更改是按区域和区域内各区域的顺序推出的。 一旦出现缺陷,更新就会被退回。

通过功能标志启用和禁用复杂的更改,以控制曝光率。

影响客户工作负载的变更将在通知中详细说明。 有关详细信息,请参阅计划维护的 监控通知和状态、公告以及影响此服务的发布说明。