IBM Cloud Docs
保护数据

保护数据

连接到 Hyper Protect Virtual Server for VPC 实例的数据卷受从部署期间提供的种子派生的 Linux 统一密钥设置 (LUKS) 加密口令保护。 您可以使用 Hyper Protect Crypto Services中您自己的密钥,向静态数据添加更高级别的加密保护和控制。

如何加密数据卷

没有 您自己的密钥时,您连接到实例的数据卷将使用合同的 workload- volumesenv- volumes 部分中提供的 两个 种子自动加密。 种子在内部转换为 UTF8 序列,然后并置。 并置序列的散列 (SHA256) 计算为十六进制数,用作 LUKS 口令以加密数据卷。 有关更多信息,请参阅 关于合同

使用自己的密钥保护敏感数据

ibm-hyper-protect-container-runtime-1-0-s390x-11 开始,Hyper Protect Virtual Servers for VPC 支持与密钥管理服务 (KMS) Hyper Protect Crypto Services集成。 Hyper Protect Crypto Services 生成随机值作为第三个种子,并使用 CRK (客户根密钥) 对其进行包装。 有关 CRK 的更多信息,请参阅 根密钥。 打包的种子将存储在数据卷的元数据分区中。 LUKS 口令是使用 三个 种子生成的-元数据分区中的种子 (首先解包) 和合同中的两个种子。

背景知识: 从 HPCR 映像版本 ibm-hyper-protect-container-runtime-1-0-s390x-9 开始,对于新的 Hyper Protect Virtual Servers for VPC 实例,数据卷分为两个部分。 第一个分区 (100 Mib) 仅保留用于内部元数据 ( 由工作负载访问); 第二个分区保留为工作负载的数据卷。 仅对新卷进行分区。

与密钥管理服务集成
与密钥管理服务集成

目前,仅支持 Hyper Protect Crypto Services 作为密钥管理服务。

下表是种子的摘要。 第三种种子是您的密钥管理服务提供的种子。

用于生成 LUKS 加密口令的种子
种子 提供者 发件人 必需或可选
seed1 部署者角色 a env- volumes 合同部分 必需
seed2 工作负载角色 a workload- volumes 合同部分 必需
seed3 Hyper Protect Crypto Services 仅当合同中提供了 kms 详细信息时,Hyper Protect Crypto Services 才会生成第三个种子,并使用 CRK 对其进行包装。 这是由 Hyper Protect Virtual Servers 调用打包 API 完成的。 打包种子存储在数据卷的元数据分区中。 可选

LUKS 口令生成
LUKS 口令生成

如果卷受到来自 KMS 实例的保护,那么将启动密钥守护程序。 它负责响应 CRK 的状态更改 (将在本文档中稍后介绍)。

关于客户管理的密钥

Hyper Protect Virtual Servers for VPC 使用 包络加密使用数据加密密钥加密数据,然后使用可完全管理的根密钥对该密钥进行加密的过程。 来实现客户管理的密钥。 包络加密是指用一个加密密钥对另一个加密密钥进行加密(包络)。 在我们的案例中,打包的密钥是第三个种子,用于打包种子的密钥是来自 Hyper Protect Crypto Services的 CRK。

您在 Hyper Protect Crypto Services中拥有 CRK。 Hyper Protect Virtual Server for VPC 从不看到 CRK。 它的存储、管理以及用于包装和拆卸种子的功能完全由密钥管理服务完成。

Hyper Protect Crypto Services 由 FIPS 140-2 Level 4 认证的硬件提供支持,这是业内任何云提供商提供的最高版本。 有关更多信息,请参阅 Hyper Protect Crypto Services

为 Hyper Protect Virtual Servers for VPC 启用客户管理的密钥

是否可以启用此功能取决于 Hyper Protect Virtual Server 实例 (分区布局和 LUKS 加密) 的历史记录以及合同信息。 请参阅下表以了解可能的方案和结果。 如果您不知道合同中的 kms 详细信息 是什么意思,请参阅 步骤 中的指示信息。 表显示了虚拟服务器在启动期间的行为,在启动期间连接到分区的卷数以及在合同文件中指定的输入。

场景
数据卷中的分区数 元数据分区 合同 分区/第二个分区是否已加密 LUKS Hyper Protect Virtual Server 的行为
0 不适用 具有 kms 个详细信息 未加密 LUKS 该实例在数据卷中创建两个分区,调用 Hyper Protect Crypto Services 以生成第三个种子,并使用 CRK 将其打包。 包装的种子将存储在元数据分区中。 然后,该实例会生成 LUKS 口令,其中包含种子 (先解包) 和合同中的两个种子,以加密第二个分区。
0 不适用 具有 kms 个详细信息 LUKS 已加密 实例将关闭。 您需要除去合同中的 kms 详细信息。
1 不适用 不支持。 实例将关闭。
2 无加密种子 具有 kms 个详细信息 (一个条目) 未加密 LUKS 该实例调用 Hyper Protect Crypto Services 以生成第三个种子,并使用 CRK 将其打包。 包装的种子将存储在元数据分区中。 然后,该实例会生成 LUKS 口令,其中包含种子 (先解包) 和合同中的两个种子,以加密第二个分区。
2 无加密种子 具有 kms 个详细信息 (一个条目) LUKS 已加密 与上一个流类似,用于重新加密第二个分区。 将替换旧的 LUKS 口令。 请注意,来自 env 和工作负载的两个种子需要与以前相同; 否则,重新加密将失败,并且实例将关闭。 请提供正确的种子,然后重试。
2 无加密种子 具有 kms 个详细信息 (多个条目) 未加密 LUKS 与先前方案类似的流程,用于合并第三个种子并加密第二个分区。 只有第一个条目中的配置用于合并第三个种子。
2 具有加密种子 具有 kms 个详细信息 (一个条目) 未加密 LUKS 可能是在先前供应中使用了该卷,但加密失败,或者您为该卷提供了两个分区,并且 手动 创建了一个随机值作为第三个种子,将其打包并将其存储在元数据分区中。 在任一情况下,实例都会检查分区是否正确。 如果没有,那么实例将关闭。 如果分区正确,那么实例会调用 Hyper Protect Crypto Services 来解包加密种子,并生成 LUKS 口令,其中包含种子和合同中的两个种子,以加密第二个分区。
2 具有加密种子 具有 kms 个详细信息 (一个条目) LUKS 已加密 该实例调用 Hyper Protect Crypto Services 以解包加密种子并打开数据分区上的 LUKS 层。
2 具有加密种子 具有 kms 个详细信息 (多个条目) 实例调用 Hyper Protect Crypto Services 以使用第一个 kms 条目解包加密种子。 如果失败,那么将使用下一个条目。 成功时,它将使用第一个配置来重新包装种子。 如果所有条目都不起作用,那么实例将关闭。
2 具有加密种子 kms 详细信息 实例将关闭。 您需要在合同中提供 kms 详细信息。

如果实例关闭,请在 " Log Analysis " 中检查日志。

步骤

  1. 供应 Hyper Protect Crypto Services 实例并创建根密钥。 有关更多信息,请参阅 创建根密钥

    为了增强安全性,建议将 虚拟专用端点 与 Hyper Protect Crypto Services配合使用。

  2. 准备 合同 时,请在 env- volumes 部分中添加 kms 详细信息,然后使用该合同为 VPC 实例 创建 Hyper Protect Virtual Server。 例如:

    env: |
      logging:
        logDNA:
          hostname: syslog-a.eu-gb.logging.cloud.ibm.com
          ingestionKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
          port: 6514
      volumes:
        test:
          kms:
            - apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
              crn: "crn:v1:bluemix:public:hs-crypto:us-south:a/xxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:key:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"
              type: "public"
            - apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
              crn: "crn:v1:bluemix:public:hs-crypto:us-south:a/xxxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx:key:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
              type: "private"
          seed:"seed1"
          kmsTimeout: 10
          apiKey: "L4SsSE32xxxxxjAgfHCVkdW8xl_CiqMn4Lpc1dzTD"
      signingKey: "xxxxxxxxx"
    
    workload: |
      volumes:
        test:
          mount: "/mnt/data"
          seed: "seed2"
          filesystem: "ext4"
    

为了避免攻击者滥用 KMS 详细信息,强烈建议部署者 (提供 env 部分) 加密签署 合同。 有关加密的更多信息,请参阅 合同加密。 对于签名,请向 env 部分添加公用签名密钥 (signingKey 字段),并通过向合同添加 envWorkloadSignature 部分来签署整个合同。 签名的目的是确保 workloadenv 部分始终一起使用,并且不会被第三方篡改。 有关更多信息,请参阅 合同签名

  • kms

    kms 字段中,始终放置要用作第一个条目的 KMS 配置。 以下条目是较旧的 KMS 配置 (用于在迁移到当前配置之前对包装种子进行解密)。 最多支持 5 个条目。 有关更改 KMS 配置的更多信息,请参阅 更改为不同的 Hyper Protect Crypto Service 实例或根密钥

    如果合同中的 kms 详细信息无效,那么实例将立即关闭。

  • kmsTimeout

    您可以在合同中指定 kmsTimeout (介于 0-1000 分钟之间)。 如果未指定,那么缺省超时值为 10 分钟。 此值确定实例在初始引导或重新引导期间尝试解包种子的时间长度。 当此超时到期时,将记录消息并关闭实例。

  • type

    使用此字段将实例指定为“专用”(当它在专用网络中时) 和“公用”(当它在公用网络中时)。 这用于支持切换到其他 Hyper Protect Crypto Services 实例或 CRK。

如果卷是新卷,那么实例会在数据卷中创建两个分区,调用 Hyper Protect Crypto Services 以生成第三个种子,并使用 CRK 将其打包。 包装的种子将存储在元数据分区中。 然后,该实例会生成 LUKS 口令,其中包含种子 (先解包) 和合同中的两个种子,以加密第二个分区。

您还可以选择 手动 在卷中创建两个分区,创建随机值作为第三个种子,将其打包,并将其存储在元数据分区中:

  1. 使用 linux 命令 parted 在块设备上创建两个分区。

    • 1st 分区标记为 metadata,长度为 100 MiB (请注意,元数据分区仅保留供内部元数据使用, 供工作负载访问)。 在使用分区之前创建文件系统 (ext4)。 使用名称 keyfile 创建文件。
    • 2nd 分区被标记为 data,并填充了完整的磁盘空间。
  2. 使用 Hyper Protect Crypto Services KMS API Wrap a key 来生成根植于 HSM 的随机纯文本,并在不传递值的情况下将其打包。

  3. 使用 linux 命令将从响应对象返回的密文复制到 keyfile

  4. 使用 KMS 信息准备合同,并使用包含打包种子的手动分区卷创建 Hyper Protect Virtual Server 实例。

当实例正在运行时,密钥守护程序会定期联系 Hyper Protect Crypto Services 实例。 相同的超时 kmsTimeout 适用。 如果无法访问 Hyper Protect Crypto Services 实例,CRK 的状态不是 Active,或者访问参数 (kms 详细信息) 不再匹配,那么守护程序将触发重新引导。

如果实例关闭,请在 " Log Analysis " 中检查日志。

使用 Hyper Protect Virtual Servers for VPC 的客户管理的密钥

旋转根密钥

如果 手动 或根据 密钥轮换策略 自动轮换 CRK,那么密钥守护程序将检测密钥轮换并重新包装种子。

更改为其他 Hyper Protect Crypto Service 实例或根密钥

如果要使用其他 Hyper Protect Crypto Service 实例或其他根密钥标识,请将新的 KMS 配置作为合同中的第一个条目,然后重新创建 Hyper Protect Virtual Server 实例。 将旧的 KMS 配置 (当前正在使用) 保留在合同中。 在实例化期间,Hyper Protect Virtual Server for VPC 使用旧配置解包加密种子,并使用新配置来重新打包种子。 合同中最多支持 5 个条目。

完成更改后,可以从下一次交互中除去旧条目。

禁用根密钥

如果 禁用根密钥,那么密钥的状态将变为 已暂挂。 Hyper Protect Virtual Servers for VPC 的密钥守护程序定期检查 CRK 的状态。 如果状态不是 活动,那么虚拟服务器将重新引导。 在重新引导期间,密钥守护程序会继续通过轮询来检查状态,当所花费的时间超过 kmsTimeout 时,虚拟服务器会关闭。 您需要 启用根密钥 以将密钥恢复为 活动

请确保您的 CRK 未到期。 否则,其状态将变为 已取消激活,并且虚拟服务器将重新引导并最终关闭。 有关密钥状态的更多信息,请参阅 监视加密密钥的生命周期