加密 VHD 映像
要使用 E2E 加密功能,必须先使用 vhd-util 工具对虚拟硬盘驱动器 (VHD) 映像进行加密,然后再将其导入到映像模板中以供应加密实例。 支持两个级别的 AES 加密 :AES 256 位和 AES 512 位。
加密 VHD 映像需求
加密 VHD 映像必须满足以下需求:
- VHD 格式。
- 与 IBM Cloud® 控制台基础架构环境兼容。
- 使用支持的操作系统供应。
- 已启用 Cloud-init。
- 使用 vhd-util 工具进行了加密。
加密 VHD 映像
执行这些步骤以创建加密 VHD 映像:
-
选择 V7 或更高版本的 CentOS 系统,为 IBM Cloud 加密虚拟磁盘映像(VHD 文件)。 如果您无法访问安装了 CentOS 的物理硬件,那么可以使用公共或专用主机在 IBM Cloud 中使用 CentOS 7 供应虚拟服务器实例。 用于加密 VHD 文件的 CentOS 系统本身不需要加密。
-
从 IBM Cloud 下载加密工具,然后使用最合适的选项来加密 VHD。
选项 1:如果 CentOS 系统不在 IBM Cloud 中运行,请登录并连接到客户 VPN。 有关如何设置 VPN 的更多信息,请参阅设置 SSL VPN 连接。 连接到 VPN 后, 转至 IBM Cloud 下载站点 ,然后选择 vhd-util 工具 RPM 软件包文件:
vhd-util-standalone-3.5.0-xs.2+1.0_71.2.2.x86_64.rpm
。选项 2 如果无法将 RPM 软件包文件直接下载到 CentOS 系统,请连接到客户 VPN 并将该文件下载到您正在处理的工作站。 然后,使用安全复制 (scp) 命令,将其上传到 CentOS 系统。 如果使用的是 IBM Cloud 中的虚拟服务器实例,请执行以下命令,利用系统的公共 IP 地址来上传。
scp vhd-util-standalone-3.5.0-xs.2+1.0_71.2.2.x86_64.rpm root@<vsi_public_ip>:
选项 3:如果在步骤 1 中选择在 IBM Cloud 内供应 CentOS 虚拟服务器实例,那么可以在不连接到客户 VPN 的情况下使用以下 curl 命令:
curl -O http://downloads.service.softlayer.com/citrix/xen/vhd-util-standalone-3.5.0-xs.2+1.0_71.2.2.x86_64.rpm
-
使用以下命令安装 RPM:
rpm -iv vhd-util-standalone-3.5.0-xs.2+1.0_71.2.2.x86_64.rpm
-
确定并选择加密和解密磁盘映像所需的 AES 数据加密密钥 (DEK),然后将其写入密钥文件。 此 DEK 是使用密钥管理服务提供的客户根密钥打包的 base64-encoded DEK ,该密钥与 准备环境中的客户根密钥相同。 写入密钥文件的密钥材料必须是解包的,并且不得进行编码。
因为密钥文件不是 base64 编码的,所以无法使用标准 ASCII 字符从命令行打印或查看密钥文件内容。
使用以下命令创建具有 AES 256 位 或 AES 512 位 加密密钥的密钥文件:
echo <data_key> | base64 -d - > <keyfile_name>
示例命令:
echo Nrfen98EpMxF2B+wdgLfagzrqvgUZfMK4vL2T0NsT20ihrsNC9pUUHtizF6218pze8RLCgQ6kwxuE58IWLzgDA== | base64 -d - > aes512.dek
-
使用以下命令,验证在先前步骤中创建的密钥文件:
vhd-util key -C -k <keyfile_name>
示例命令及输出:
vhd-util key -C -k aes512.dek vhd_util_read_key: using keyfile aes512.dek, Size (bytes) 64 21681bba94f04b33b112f5f90a0faa885a6d1dbf1bd68ed16c5b995143088eda
上一个示例命令的输出的第一行指示名为
aes512.dek
的密钥文件包含 64 字节密钥。 第二行上列出的数字是相应加密密钥的 SHA256 散列或安全散列。 包含 AES 256 位加密密钥的文件的输出指示 32 字节密钥。 -
使用以下命令来创建 VHD 文件的加密副本。
target_vhd
表示包含source_vhd
加密版本的文件的名称。vhd-util copy -n <source_vhd> -N <target_vhd> -k <keyfile_name>
示例命令:
vhd-util copy -n debian8-ne.vhd -N debian8-aes512.vhd -k aes512.dek
-
使用以下命令验证 VHD 文件是否已加密。
vhd-util key -p -n <vhd_filename>
示例命令及输出:
vhd-util key -p -n debian8-aes512.vhd 0000000000000000000000000000000000000000000000000000000000000000 21681bba94f04b33b112f5f90a0faa885a6d1dbf1bd68ed16c5b995143088eda
如果 VHD 文件已加密,那么会在输出中看到两个散列值,如先前示例中所示。 第一个散列全部为零。 第二个散列为 SHA256 散列,由 AES 加密密钥用于加密和解密 VHD。 确保 VHD 文件的 SHA256 散列与步骤 5 中显示的散列相同。
步骤 7 中的示例命令创建名为“debian8-aes512.vhd”的新的加密 VHD 文件。 此文件使用来自名为“aes512.dek”的密钥文件的 AES 512 位加密密钥进行加密。 用于加密的 SHA256 散列为 21681bba94f04b33b112f5f90a0faa885a6d1dbf1bd68ed16c5b995143088eda
。