IBM Cloud Docs
创建加密的定制映像

创建加密的定制映像

当您具有满足 IBM Cloud® Virtual Private Cloud 基础结构需求的 qcow2 定制映像时,可以对其进行加密。 以下过程描述了如何使用 QEMU 和您自己的唯一口令通过 LUKS 加密来加密定制映像。 加密映像后,使用客户根密钥 (CRK) 包装口令。 当您将包装 (或加密) 数据加密密钥导入到 IBM Cloud VPC时,会将其与映像元数据一起存储。

创建加密定制映像的快速方法是使用来自卷的映像。 您可以使用此功能从实例的引导卷创建定制映像,并指定客户管理的加密。 有关更多信息,请参阅 关于从卷创建映像

不能在专用目录或裸机服务器上使用加密的定制映像。

有关更多信息,请参阅 SSH 密钥入门

加密定制映像的工作方式

使用自己的口令加密定制映像后,将其上载到 IBM Cloud Object Storage。 在将加密映像导入到 IBM Cloud VPC之前,需要设置密钥管理服务 (KMS) 并创建客户根密钥 (CRK)。 然后,使用 CRK 来保护用于加密映像的口令。 通过将密钥口令与 CRK 合并,可以创建 KMS 所指的合并数据加密密钥 (WDEK)。 包装口令数据会对其进行加密并保护其安全,以便您无需以纯文本方式共享口令。

导入映像时,必须指定存储在 KMS 中的客户根密钥 (CRK) 的云资源名称 (CRN)。 您还必须指定打包数据加密密钥 (WDEK) 的密文。 口令始终存储在 WDEK 中加密。 仅当启动使用加密映像的虚拟服务器时,才会将其解包。

当您准备好使用加密映像供应虚拟服务器时,不需要加密信息。 WDEK 和 CRK 的 CRN 作为元数据与图像一起存储。 有关更多信息,请参阅 关于加密的定制映像

加密映像进程概述

以下步骤总结了创建和导入加密映像时需要完成的高级过程。 后续部分提供了有关如何完成这些步骤的详细信息。

  1. 使用 QEMU 和您选择的口令创建加密映像,以使用 LUKS 加密对 qcow2 文件进行加密。
  2. 将加密的映像文件上载到 IBM Cloud Object Storage。
  3. 供应密钥管理服务,创建客户根密钥 (CRK),然后使用 CRK 打包口令以生成打包数据加密密钥 (WDEK)。
  4. 确保您具有必需的 IBM Cloud Identity and Access Management 授权,以便可以从 IBM Cloud Object Storage 导入映像,并且可以将 WDEK 用于数据加密。
  5. 将映像导入到 IBM Cloud VPC。 必须指定 IBM Cloud Object Storage 位置,存储在 KMS 中的 CRK 以及 WDEK 密文。

对映像进行加密

在此步骤中,使用 QEMU 指定您自己的口令,并使用 LUKS 加密对定制映像进行加密。

您计划加密的定制映像必须满足 IBM Cloud VPC 基础结构的定制映像需求。 确认您已完成以下主题中的映像准备需求:

要完成加密任务,必须安装 QEMU V 2.12 或更高版本。

必须使用 Linux 或 Windows 操作系统来完成 QEMU 加密指示信息。 不支持Mac操作系统。

通过使用 QEMU 创建定制映像的第二个加密 qcow2 文件,完成以下步骤。

  1. 确定要用于对映像进行加密的您自己的口令。 此任务中的样本命令使用口令 abc123。 保持口令可用。 稍后需要打包口令以创建打包的数据加密密钥 (WDEK)。 将映像导入到 IBM Cloud VPC时需要 WDEK。

  2. 使用以下命令验证当前 qcow2 定制映像:

    qemu-img info my_100G_custom_image.qcow2
    

    对于此示例,您会看到类似于以下输出的响应:

    image: my_100G_custom_image.qcow2
    file format: qcow2
    virtual size: 100 GiB (107374182400 bytes)
    disk size: 1.28 GiB
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false
        refcount bits: 16
        corrupt: false
    
  3. 创建大小完全相同的新空 qcow2 文件,并使用 LUKS 加密对其进行加密。 使用您选择的口令 (例如,abc123) 对文件进行加密:

    qemu-img create --object secret,id=sec0,data=abc123 -f qcow2 -o encrypt.format=luks,encrypt.key-secret=sec0 my_100G_custom_image-encrypted.qcow2 100G
    
  4. 将 qcow2 映像 my_100G_custom_image.qcow2 转换为加密映像 my_100G_custom_image-encrypted.qcow2

    qemu-img convert --object secret,id=sec0,data=abc123 --image-opts driver=qcow2,file.filename=my_100G_custom_image.qcow2 --target-image-opts driver=qcow2,encrypt.key-secret=sec0,file.filename=my_100G_custom_image-encrypted.qcow2 -n -p
    
  5. 比较这两个文件以验证它们是否完全相同。

    qemu-img compare --object secret,id=sec0,data=abc123 --image-opts driver=qcow2,file.filename=my_100G_custom_image.qcow2  driver=qcow2,encrypt.key-secret=sec0,file.filename=my_100G_custom_image-encrypted.qcow2 -p
    
  6. 检查文件是否存在错误。

    qemu-img check --object secret,id=sec0,data=abc123 --image-opts driver=qcow2,encrypt.key-secret=sec0,file.filename=my_100G_custom_image-encrypted.qcow2
    

    对于此示例,您会看到类似于以下输出的响应:

    No errors were found on the image.
    16343/1638400 = 1.00% allocated, 0.00% fragmented, 0.00% compressed clusters
    Image end offset: 1074790400
    
  7. 对新的加密文件运行 info,以验证它是否为您期望的大小和加密级别。

    qemu-img info my_100G_custom_image-encrypted.qcow2
    

    对于此示例,您会看到类似于以下输出的响应:

    image: my_100G_custom_image-encrypted.qcow2
    file format: qcow2
    virtual size: 100 GiB (107374182400 bytes)
    disk size: 1.27 GiB
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false
        refcount bits: 16
        corrupt: false
    

将加密映像上载到 IBM Cloud Object Storage

使用 LUKS 加密和唯一口令对映像文件进行加密时,可以通过完成以下步骤将其上载到 IBM Cloud Object Storage:

  1. 确保定制的映像文件具有描述性名称,以便日后可以轻松识别到该文件。
  2. 在 IBM Cloud Object Storage 存储区的对象页面上,单击上传。 可以使用 Aspera 高速传输插件来上传大于 200 MB 的映像。

设置密钥管理服务和密钥

要将加密的定制映像导入到 IBM Cloud VPC,您需要供应密钥管理服务。 您还需要客户根密钥 (CRK) 和打包数据加密密钥 (WDEK)。 WDEK 是用于加密使用 CRK 包装的映像的口令,以便您的口令仅为您所知。 WDEK 用于在启动使用加密映像的虚拟服务器实例时访问加密映像。

以下列表是密钥管理先决条件的摘要:

  • 供应受支持的密钥管理服务: Key ProtectHyper Protect Crypto Services
  • 将客户根密钥 (CRK) 导入到密钥管理服务或在密钥管理服务中创建一个密钥。
  • 打包 (保护) 用于使用客户根密钥加密映像的口令,以创建打包的数据加密密钥 (WDEK)。

以下示例步骤特定于 Key Protect,但一般流程也适用于 Hyper Protect Crypto Services。 如果使用的是 Hyper Protect Crypto Services,请参阅 Hyper Protect Crypto Services 信息以获取相应的指示信息。

  1. 供应 Key Protect 服务。

    创建新的 Key Protect 服务实例,确保其包含客户管理加密所需的最新更新。

  2. 在 IBM Key Protect中创建导入 客户根密钥 (CRK)。

    通过查看创建和加密密钥资料的选项提前计划导入密钥。 为了增强安全性,您可以在将关键材料上传到云端之前,使用 导入令牌 对关键材料进行加密,从而实现安全导入。

  3. 使用客户根密钥 (CRK) 来打包或保护用于使用 LUKS 加密对映像进行加密的唯一口令。 在映像加密示例中,我们使用了口令 abc123

    1. 确保已安装 Key Protect CLI 插件,以便您可以生成 WDEK。 有关更多信息,请参阅安装 Key Protect CLI 插件

    2. 使用 Base64 编码对口令进行编码,以准备使用 CRK 进行回绕。 运行以下命令,将口令替换为 abc123-n 参数是必需的,这样您就不会对换行符进行编码,这将导致换行口令不起作用。

      echo -n "abc123"|base64
      

      对于此示例,您会看到类似于以下输出的响应:

      YWJjMTIz
      
    3. 通过运行 ibmcloud kp key wrap 命令,将编码后的口令与 CRK 合并。 虽然用于生成加密映像的口令在技术上不是数据加密密钥,但它是 Key Protect 用于包装和解包中的数据的术语。 从 Key Protect 返回的数据称为 WDEK。 有关更多信息,请参阅 kp key wrap

      ibmcloud kp key wrap KEY_ID -i INSTANCE_ID -p PLAINTEXT
      

      其中 KEY_ID 是要用于包装的根密钥的标识,INSTANCE_ID 是标识 Key Protect 服务实例的实例标识,PLAINTEXT 是编码的口令。 例如,YWJjMTIz

      对于此示例,您会看到类似于以下输出的响应:

      Wrapping key...
      SUCCESS
      Ciphertext
      eyJjaXBoZXJ0ZXh0IjoiKzhjbHVqcUNP ...<redacted>... NmY3MTJjNGViIn0=
      
    4. 保存 WDEK 的密文或将其保存到存储器。 当您将加密的图像导入到 IBM Cloud VPC 时,必须指定WDEK密码。

IAM 授权先决条件

确保在 IBM Cloud Identity and Access Management中创建了必需的权限。

  1. Cloud Identity and Access Management (IAM) IBM,在 Cloud Block Storage (源服务)和密钥管理服务 (目标服务)之间 创建授权。 授权允许 IBM Cloud 底板服务使用 WDEK 进行数据加密。
  2. 确保在 Image Service for VPCIBM Cloud Object Storage 之间创建了 IAM 授权。 指定 基础架构服务 作为源服务。 指定 Image Service for VPC 作为资源类型。 指定 IBM Cloud Object Storage 作为目标服务。 授权使 Image Service for VPC 可以访问 IBM Cloud Object Storage中的映像。 有关更多信息,请参阅 授予对 IBM Cloud Object Storage 的访问权以导入映像

后续步骤

成功加密映像后,将设置 KMS,并创建所需的密钥,您可以将映像 导入 到 IBM Cloud VPC。 当该映像在 IBM Cloud VPC中可用时,可以使用它来供应实例。 确保您具有 授予对 IBM Cloud Object Storage 的访问权以导入映像

当您准备好使用加密映像供应新的虚拟服务器实例时,不需要加密信息。 打包的数据加密密钥 (WDEK) 和客户根密钥 (CRK) 的 CRN 存储为具有映像的元数据。