Key Protect 集成

第2代

您存储在 Cloud Databases 中的数据默认会使用随机生成的密钥进行加密。 为了控制加密密钥,您可以通过“自带密钥”(BYOK)功能 IBM Key Protect,并使用您自己的密钥之一对数据库和备份进行加密。

要开始使用,请在 Key Protect 您的 IBM Cloud 账户。

在 Key Protect

访问您的 Key Protect 实例,并 生成或输入密钥

在用户界面中授予服务授权

授权 Key Protect 用于 Cloud Databases 的部署:

  1. 打开 IBM Cloud 仪表板。
  2. 在菜单栏中,点击“管理”→“访问(IAM)”。
  3. 在侧边导航中,单击授权
  4. 单击创建
  5. “源服务”菜单中,选择该部署的服务。 例如,Databases for PostgreSQL 或者 Databases for MongoDB
  6. “源”服务资源菜单中,选择“所有资源”。
  7. 目标服务菜单中,选择 Key Protect
  8. 选择或保留默认值 “Account”作为目标服务的资源组
  9. 在“目标服务实例 ID”菜单中,选择要授权的服务实例。
  10. 启用读取者角色。
  11. 要使用“自带密钥”(BYOK),请在 “授权从属服务” 部分中选中 “启用授权委托”复选框。
  12. 单击授权

如果在为部署分配密钥之前未获得服务授权,则配置将失败。

如果您想设置更严格的授权策略,请将策略配置为针对显式的根密钥 CRN 或特定的 Key Protect 实例。 目前不支持针对 Key Protect 钥匙扣设置的限制。

在 CLI 中授予服务授权

  1. 创建一项授权策略,允许“Cloud Databases”服务访问 CLI 上的“Key Protect”服务实例。 有关完整参数列表,请参阅 IAM CLI 参考 文档。
ibmcloud iam authorization-policy-create <SERVICE-NAME> kms "Reader,AuthorizationDelegator"

如果在为部署分配密钥之前未获得服务授权,则配置将失败。

如果您想设置更严格的授权策略,请将策略配置为针对显式的根密钥 CRN 或特定的 Key Protect 实例。 目前不支持针对 Key Protect 钥匙扣设置的限制。

通过 REST API 授予服务授权

  1. 创建一项授权策略,允许“Cloud Databases”服务通过 IAM REST API 访问“Key Protect”服务实例。

如需完整的 API 参考文档,请参阅 IAM 策略管理 API

curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -d '{
  "type": "authorization",
  "subjects": [
      {
          "attributes": [
              {
                  "name": "accountId",
                  "value": "CUSTOMER_ACCOUNT_ID"
              },
              {
                  "name": "serviceName",
                  "value": "<SERVICE-NAME>"
              }
          ]
      }
  ],
  "roles": [
      {
        "role_id": "crn:v1:bluemix:public:iam::::serviceRole:Reader"
      },
      {
        "role_id": "crn:v1:bluemix:public:iam::::role:AuthorizationDelegator"
      }
    ],
    "resources": [
        {
            "attributes": [
                {
                    "name": "accountId",
                    "operator": "stringEquals",
                    "value": "CUSTOMER_ACCOUNT_ID"
                },
                {
                    "name": "serviceName",
                    "operator": "stringEquals",
                    "value": "kms"
                }
            ]
        }
    ]
}'

如果在为部署分配密钥之前未获得服务授权,则配置将失败。

如果您想设置更严格的授权策略,请将策略配置为针对显式的根密钥 CRN 或特定的 Key Protect 实例。 目前不支持针对 Key Protect 钥匙扣设置的限制。

使用 Key Protect 键

在授予您的 Cloud Databases 部署使用密钥的权限后,您在配置部署时需提供 密钥名称或 CRN。 该部署使用您的加密密钥对您的数据进行加密。

在配置过程中,在用户界面中使用 Key Protect 键

如果从目录页面进行配置,请从下拉菜单中选择“Key Protect”实例和密钥。

在 CLI 中进行配置时使用 Key Protect 键

在命令行界面(CLI)中,请在参数 JSON 对象中使用 dataservices.encryption.disk 参数,为您的服务实例分配一个根密钥 CRN。

ibmcloud resource service-instance-create <INSTANCE-NAME> <SERVICE-NAME> <PLAN-NAME> REGION -p '{"dataservices":{"encryption":{"disk":"KMS_KEY_CRN"}}}'

Key Protect 键必须通过其完整的CRN来识别,而不仅仅是其ID。 Key Protect 的CRN格式为 crn:v1:<...>:key:<id>

在 API 的配置过程中使用 Key Protect 密钥

在 API 中,请在请求正文中使用 dataservices.encryption.disk 参数。

  curl -X POST https://resource-controller.cloud.ibm.com/v2/resource_instances -H "Authorization: Bearer <IAM token>" -H 'Content-Type: application/json' -d '{
    "name": "<INSTANCE-NAME>",
    "target": "ca-mon",
    "resource_group": "<A RESOURCE GROUP GUID>",
    "resource_plan_id": "<A PLAN ID>",
    "parameters": {
      "dataservices": {
          "encryption": {
            "disk": "KMS_KEY_CRN"
          }
      }
    }

Key Protect 键必须通过其完整的CRN来识别,而不仅仅是其ID。 Key Protect 的CRN格式为 crn:v1:<...>:key:<id>

密钥轮换

Key Protect 提供手动和自动 密钥轮换功能,且 Cloud Databases 部署支持密钥轮换。 当您旋转密钥时,该过程会启动一个 _KMS 状态同步_任务,并使用新密钥对您的部署进行重新加密。 该任务会显示在您部署的 “概览”页面中的 “任务” 页面上,并且相关的 Key Protect 和 Cloud Databases 事件会被发送至 Activity Tracker。

如需了解更多信息,请参阅 “手动或自动旋转”

删除部署

如果您删除了一个受 Key Protect 密钥保护的部署,在软删除期间(最长9天),该部署仍会与该密钥保持关联。 若要在软删除期间删除该键,请 强制删除 该键。 软删除期结束后,无需强制操作即可删除该键。 要确定何时可以删除该密钥,请检查 该密钥与您的部署之间的关联

加密粉碎

加密粉碎是一种破坏性操作。 一旦删除该密钥,您的数据将无法恢复。

Key Protect 允许您 强制删除正在 被 IBM Cloud® 服务(包括您的第2代 Cloud Databases 部署)使用的键。 这种行为被称为“加密粉碎”。 删除部署中正在使用的密钥会锁定包含您数据的磁盘,并使您的部署失效。 您仍然可以通过用户界面(UI)、命令行界面(CLI)和API访问用户界面以及某些元数据(例如安全设置),但无法访问任何数据库或其中包含的数据。 该键的删除请求已作为 kms.secrets.delete发送至 Activity Tracker Event Routing

请自备钥匙以备不时之需

如果您使用 Key Protect,在配置数据库时,还可以指定一个密钥来加密存储您部署备份的 IBM® Cloud Block Storage for Virtual Private Cloud 磁盘。

该备份继承了与数据库相同的加密密钥。 从数据库创建备份时,无法提供不同的加密密钥。

授予代表团授权

要使您的部署能够使用 Key Protect 密钥,您需要在授予服务授权时 启用“允许授权委托” 选项。 如果在为部署分配密钥之前未提供委托授权,则配置将失败。

启用委托并完成部署配置后,IAM 中的 “授权”部分将显示两条条目。 其中一项是该部署的条目,其中将其状态列为“委托方”。 这是“用户创建的”。

Key Protect 授权的委托人示例
角色 目标 类型
AuthorizationDelegator, 阅读器 <cloud-databases> 服务 Key Protect 服务 用户定义

此外,还需为服务实例及其备份(如有)的 Block Storage for VPC 卷分配一个,其中部署方是发起者。

来自 Cloud Databases 的 Cloud Object Storage 的 Key Protect 授权示例
角色 目标 类型
读取者 Block Storage for VPC 服务 Key Protect 服务 创建者 <cloud-databases-crn>

删除密钥

IAM/ Key Protect 不会阻止您删除键与 Block Storage for VPC 之间的策略(第二个示例),但这样做可能会导致您的主题/分区无法恢复。

常见误区

删除密钥和授权时请务必小心。 如果您有多个使用相同密钥的部署,撤销委托授权可能会无意中导致所有这些部署的数据丢失。 如果可能的话,请不要在多个部署中使用同一把密钥。

如果您想销毁与实例相关的数据,可以删除该密钥。Block Storage for VPC 确保存储空间既不可读也不可写。 然而,任何其他使用该密钥的部署(或其备份)都将随后出现故障。

如果您确实需要将同一密钥用于多个部署和/或备份,则删除密钥和授权可能会产生以下副作用。 如果您删除了 Block Storage for VPC 卷授权(如表2所示),不仅显示为创建者的部署会受到影响,任何也使用该密钥的部署都会受到影响。 在您提交支持工单并请求重新创建该策略之前,这些部署将会出现故障。

如果要重复使用密钥,请务必谨慎。