18.8.2. 从 IBM Secure Execution 的主机配置虚拟机
您可以使用 guestfs-tools 软件包直接从主机配置 IBM Secure Execution,而无需引导虚拟机。但是,此方法仅适用于快速配置多个虚拟机或自动设置过程的测试和开发环境。
对于保护生产环境,请参阅 有关使用安全执行完全保护工作负载的 IBM 文档,其解释了如何进一步保护您的工作负载。
先决条件
系统硬件是以下之一:
- IBM z15 或更高版本
- IBM LinuxONE III 或更高版本
为您的系统启用安全执行功能。要验证,请使用:
# grep facilities /proc/cpuinfo | grep 158如果这个命令显示任何输出,代表您的 CPU 与安全执行兼容。
内核包含对安全执行的支持。要确认,请使用:
# ls /sys/firmware | grep uv如果命令生成任何输出,那么内核支持安全执行。
主机 CPU 型号包含
解包功能。要确认,请使用:# virsh domcapabilities | grep unpack <feature policy='require' name='unpack'/>如果命令生成上述输出,则您的 CPU 主机型号与安全执行兼容。
虚拟机的 CPU 模式设置为
host-model。# virsh dumpxml <vm_name> | grep "<cpu mode='host-model'/>"如果命令生成任何输出,则虚拟机的 CPU 模式设置正确。
主机上必须安装 s390utils-base 软件包,它提供
pvimg工具。# dnf install s390utils-base如果要直接从主机修改虚拟机镜像,
guestfs-tools软件包需已安装在主机上。# dnf install guestfs-tools- 您已获取并验证了 IBM Z 主机密钥文档。详情请参阅 IBM 文档中的 验证主机密钥文档 。
流程
将
prot_virt=1内核参数添加到主机的引导配置中。# grubby --update-kernel=ALL --args="prot_virt=1"更新引导菜单:
# zipl
-
使用
virsh edit修改您要保护的虚拟机的 XML 配置。 将
<launchSecurity type="s390-pv"/>添加到</devices>行下。例如:[...] </memballoon> </devices> <launchSecurity type="s390-pv"/> </domain>-
如果配置的
<devices>部分包含了一个virtio-rng设备 (<rng model="virtio">),请删除<rng> </rng>块的所有行。 可选:如果要保护的虚拟机使用 32 GiB RAM 或更多 RAM,请将 <
async-teardown enabled='yes'/> 行添加到主机的 XML 配置中的 <features></features> 部分。这提高了重启或停止此类安全执行客户机的性能。
在主机上,创建一个包含主机密钥文档的脚本,并将现有虚拟机配置为使用安全执行。例如:
#!/usr/bin/bash echo "$(cat /proc/cmdline) swiotlb=262144" > parmfile cat > ./HKD.crt << EOF -----BEGIN CERTIFICATE----- 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 1234569901234569901234569901234569901234569901234569901234569900 xLPRGYwhmXzKDg== -----END CERTIFICATE----- EOF version=$(uname -r) kernel=/boot/vmlinuz-$version initrd=/boot/initramfs-$version.img pvimg create -k ./HKD.crt -p ./parmfile -i $kernel -r $initrd -o /boot/secure-linux --no-verify cat >> /etc/zipl.conf<< EOF [secure] target=/boot image=/boot/secure-linux EOF zipl -V shutdown -h now- 确保虚拟机已关闭。
在主机上,使用
guestfs-tools将脚本添加到现有虚拟机镜像中,并将其标记为 在第一次引导时运行。# virt-customize -a <vm_image_path> --selinux-relabel --firstboot <script_path>使用添加的脚本从镜像引导虚拟机。
脚本在第一次引导时运行,然后再次关闭虚拟机。因此,虚拟机现在被配置为在具有相应主机密钥的主机上使用安全执行运行。
-
可选: 如果您需要为虚拟机启用 IBM 控制程序识别(CPI),请将
CPI_PERMIT_PVGUEST=1行添加到客户端操作系统中的/etc/sysconfig/cpi文件中。
验证
在主机上,使用
virsh dumpxml工具确认受保护虚拟机的 XML 配置。配置必须包含<launchSecurity type="s390-pv"/>元素,且没有 <rng model="virtio"> 行。# virsh dumpxml vm-name [...] <cpu mode='host-model'/> <devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none' io='native'> <source file='/var/lib/libvirt/images/secure-guest.qcow2'/> <target dev='vda' bus='virtio'/> </disk> <interface type='network'> <source network='default'/> <model type='virtio'/> </interface> <console type='pty'/> <memballoon model='none'/> </devices> <launchSecurity type="s390-pv"/> </domain>