KVM虚拟机磁盘加密

最近在找虚拟机磁盘加密的资料,发现网上资料还是比较少,在这里汇总一下。
之前qcow2格式的磁盘默认加密方式似乎已经不再支持,官方推荐luks或dm-crypt加密。

$ man qemu-img
...
Use of qcow / qcow2 encryption is thus strongly discouraged.
Users are recommended to use an alternative encryption
technology such as the Linux dm-crypt / LUKS system.
...

1.创建新的luks虚拟磁盘(若选择1则跳过2)

  1. 创建luks格式磁盘,data为要设置的磁盘密码。luks好像不支持空洞模式,申请的空间大小会完全预分配。(如有错误,欢迎指正。)
$ qemu-img create -f luks --object secret,data=123456,id=sec0 -o key-secret=sec0 demo.luks 10G

2.从已有qcow2磁盘镜像转换(若选择2则忽略1)

  1. 有一个qcow2的镜像,且是shutdown状态
  2. 新建一个luks镜像,并且与上述qcow2相等大小
$ qemu-img create -f luks --object secret,data=123456,id=sec0 \
-o key-secret=sec0 demo.luks 10G
  1. 将qcow2转换为luks
$ qemu-img convert --target-image-opts --object secret,data=123456,id=sec0 \
-f qcow2 demo.qcow2 -n driver=luks,file.filename=demo.luks,key-secret=sec0

3.在本地创建一个秘钥xml secret.xml

此处uuid可以通过qemu-img info demo.luks查看
KVM虚拟机磁盘加密_第1张图片
修改uuid

<secret ephemeral='no' private='yes'>
    <uuid>fbae4c81-0d6c-4ed1-9e73-581eb8b7131f</uuid>
</secret>

4. 定义密钥文件

$ virsh secret-define secret.xml 
Secret fbae4c81-0d6c-4ed1-9e73-581eb8b7131f created

5. 给secret设置密码值

(这里的密码就是给磁盘加密时使用的密码123456)

$ virsh secret-set-value 7d195d98-6a06-4bb9-a0e9-6a2fde302f31 $MYSECRET

注:密值是base64的(MYSECRET=printf %s "123456" | base64
注:产生的secret以及密码在/etc/libvirt/secrets/中存在

6. 复制虚拟机xml文件,在disk段中加入secret

默认kvm虚拟机配置文件目录/etc/libvirt/qemu/
KVM虚拟机磁盘加密_第2张图片
如果是从cdrom引导项就启用加密,则需要修改boot引导设备
在这里插入图片描述

7. 定义、启动虚拟机

启动虚拟机。虚拟启动后就是使用的加密的磁盘

$ virsh define file.xml
$ virsh start domain

附:通过qemu-system-x86_64启动虚拟机

  1. 通过qemu-system-x86_64可以创建qcow2格式的磁盘,并采用luks加密
$ qemu-img create --object secret,id=sec0,data=123456 -f qcow2 \
-o encrypt.format=luks,encrypt.key-secret=sec0 base.qcow2 10G
  1. 通过qemu-system-x86_64安装虚拟机,可通过vnc安装。
qemu-system-x86_64 --object secret,id=sec0,data=123456 \
-drive driver=qcow2,file.filename=base.qcow2,encrypt.key-secret=sec0 \
-cdrom ./iso/ubuntu-16.04.6-desktop-amd64.iso \
-boot d -m 1024 -enable-kvm -vnc :1

此处应有通过virt-install 安装加密磁盘的虚拟机的命令,博主暂时没有找到可用的命令,如果有可用的virt-install安装方案,欢迎留言!!!


参考文章

https://cloud.tencent.com/developer/article/1162145
https://libvirt.org/formatstorageencryption.html#StorageEncryption
http://blog.leanote.com/post/7wlnk13/%E5%88%9B%E5%BB%BAKVM%E8%99%9A%E6%8B%9F%E6%9C%BA
https://bugzilla.redhat.com/show_bug.cgi?id=1406803
https://bugzilla.redhat.com/show_bug.cgi?id=1575578

你可能感兴趣的:(kvm)