IBM Cloud Docs
复原密钥

复原密钥

您可以使用 IBM Cloud® Hyper Protect Crypto Services 来复原先前删除的密钥并访问云上的关联数据。

删除密钥时,该密钥将进入“已销毁”状态。 但是,仍可以查看有关密钥 (例如元数据) 的信息,并且您有 30 天时间将密钥复原到“活动”状态。 因此,将密钥删除视为 软删除,其中密钥仍然存在,但无法再用于访问由密钥加密的数据。 本主题描述复原密钥的过程以及密钥复原过程的限制。

此软删除时间段 (其中已删除密钥但仍可恢复) 持续 30 天。 在 30 天到 90 天之间,仍可访问密钥数据,但无法再恢复密钥。 90 天之后,密钥才有资格自动清除,这在 90 天之后的任何时候都可能发生。 与销毁的密钥不同,清除的密钥将永远消失。

表 1. 将密钥状态与从密钥删除到可对密钥执行的操作的时间相联系。
从密钥删除开始的时间 密钥状态的名称 可以查看或访问密钥数据吗? 可以复原吗?
1-30 天 已销毁
30-90 天 已销毁
90 天后 已清除 (在技术上不是密钥状态)

由于已清除的密钥不可访问且已销毁,因此在技术上不存在 已清除 密钥状态。 但是,将 已清除 视为状态可能很有用,因为不存在是密钥生命周期的一部分。

可以复原所有根密钥和标准密钥,无论是由 Hyper Protect Crypto Services 生成还是由您导入。

如何知道是否可以复原密钥?

要查看是否可以复原已销毁的密钥,请执行以下操作:

  1. 在 UI 中浏览到 Hyper Protect Crypto Services 实例。
  2. 在导航中,确保您位于“KMS 密钥”页面上。
  3. 查找要复原的密钥,并确保该密钥处于 已销毁 状态。
  4. 检查是否在 已销毁 状态旁边显示了 撤销 图标 "撤销" 图标。 该图标指示密钥符合复原条件。 您可以在删除后 30 天内复原密钥。 将鼠标指针悬停在图标上时,将显示复原到期日期。

使用 UI 复原已删除的密钥

如果您希望使用图形界面来复原密钥,那么可以使用 UI。

完成以下步骤以复原密钥:

  1. 登录 UI
  2. 转至 菜单 > 资源列表 以查看资源列表。
  3. 从 IBM Cloud 资源列表,选择 Hyper Protect Crypto Services 的已供应实例。
  4. 在“KMS 密钥”页面上,使用 密钥 表来浏览服务中的密钥。
  5. 选择要复原的密钥,然后单击 操作 图标 "操作" 图标 以打开密钥的选项列表。
  6. 从选项菜单中,单击 复原密钥
  7. 单击 复原密钥 以确认操作。

使用 API 复原已删除的密钥

通过对以下端点进行 POST 调用来复原密钥。

https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys/<key_ID>/restore
  1. 检索认证凭证以使用服务中的密钥

    要复原密钥,必须为您分配实例或密钥的 管理者 访问策略。 要了解 IAM 角色如何映射到 Hyper Protect Crypto Services 服务操作,请查看 服务访问角色

  2. 检索密钥管理服务 API 端点 URL。

    您可以通过 概述 > 连接 > 密钥管理端点 URL 从供应的服务实例仪表板获取 API 端点。 或者,您可以使用 API 调用动态 检索 API 端点 URL。 根据需要选择公用或专用密钥管理端点 URL。

  3. 检索要复原的密钥的标识。

    您可以通过发出 list keys API request或通过在 UI 中查看密钥来检索指定密钥的标识。

  4. 运行以下 curl 命令以复原密钥并重新获得对关联数据的访问权。 必须在删除密钥后等待 30 秒,才能将其复原。

    您无法复原具有当前或过去到期日期的密钥。

    curl -X POST \
      "https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys/<key_ID>/restore" \
      -H 'authorization: Bearer <IAM_token>' \
      -H 'bluemix-instance: <instance_ID>' \
      -H 'x-kms-key-ring: <key_ring_ID>'
    

    根据下表替换示例请求中的变量。

    表 1. 描述使用 Hyper Protect Crypto Services API 复原密钥所需的变量
    变量 描述
    region 必需。 区域缩写,例如 us-southeu-de,表示 Hyper Protect Crypto Services 服务实例所在的地理区域。 有关更多信息,请参阅区域服务端点
    port 必需。 API 端点的端口号。
    key_ID 必需。 要复原的密钥的唯一标识。
    IAM_token 必需。 您的 IBM Cloud 访问令牌。 在 cURL 请求中包含 IAM 令牌的完整内容,包括 Bearer 值。 有关更多信息,请参阅 检索访问令牌
    instance_ID 必需。 指定给您的 Hyper Protect Crypto Services 服务实例的唯一标识。 有关更多信息,请参阅 检索实例标识
    key_ring_ID 可选。 密钥所属的密钥环的唯一标识。 如果未指定,那么 Hyper Protect Crypto Services 将在与指定实例关联的每个密钥环中搜索密钥。 因此,建议为更优化的请求指定密钥环标识。 \n \n 注: 在没有 x-kms-key-ring 头的情况下创建的密钥的密钥环标识为 default

    有关更多信息,请参阅 管理密钥环

    成功的复原请求将返回 HTTP 201 Created 响应,该响应指示密钥已复原到“活动密钥”状态,现在可用于加密和解密操作。 还会复原先前与密钥关联的所有属性和策略。

    恢复密钥后,您将有权访问与密钥关联的数据。

  5. 可选: 通过检索有关密钥的详细信息来验证是否已复原密钥。

    curl -X GET \
      "https://<instance_ID>.api.<region>.hs-crypto.appdomain.cloud/api/v2/keys/<key_id>/metadata" \
      -H 'authorization: Bearer <IAM_token>' \
      -H 'bluemix-instance: <instance_ID>' \
      -H 'accept: application/vnd.ibm.kms.key+json'
    

    其中 <key_id> 是密钥的标识,<instance_ID> 是实例的名称,<IAM_token> 是 IAM 令牌。

    查看响应主体中的 state 字段,以验证密钥是否已进入“活动密钥”状态。 以下 JSON 输出显示活动密钥的元数据详细信息。

    “活动”键状态的整数映射为 1。 密钥状态基于 NIST SP 800-57。

    {
      "metadata": {
        "collectionType": "application/vnd.ibm.kms.key+json",
        "collectionTotal": 1
      },
      "resources": [
        {
          "type": "application/vnd.ibm.kms.key+json",
          "id": "02fd6835-6001-4482-a892-13bd2085f75d",
          "name": "...",
          "description": "...",
          "tags": [
            "..."
          ],
          "state": 1,
          "extractable": false,
          "crn": "crn:v1:bluemix:public:hs-crypto:us-south:a/f047b55a3362ac06afad8a3f2f5586ea:12e8c9c2-a162-472d-b7d6-8b9a86b815a6:key:02fd6835-6001-4482-a892-13bd2085f75d",
          "imported": true,
          "creationDate": "2020-03-10T20:41:27Z",
          "createdBy": "...",
          "algorithmType": "AES",
          "algorithmMetadata": {
            "bitLength": "128",
            "mode": "CBC_PAD"
          },
          "algorithmBitSize": 128,
          "algorithmMode": "CBC_PAD",
          "lastUpdateDate": "2020-03-16T20:41:27Z",
          "keyVersion": {
            "id": "30372f20-d9f1-40b3-b486-a709e1932c9c",
            "creationDate": "2020-03-12T03:37:32Z"
          },
          "dualAuthDelete": {
            "enabled": false
          },
          "deleted": false
        }
      ]
    }