文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一篇学会 Kvm 虚拟机磁盘使用 Luks 加密

2024-12-13 21:55

关注

luks加密kvm虚拟机磁盘的实现

在libvirt 4.5版本之前,除了luks加密之外,还支持qcow加密的。qcow磁盘加密。

qemu-img convert -O qcow2 --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 -f qcow2 test.qcow2 fw-encry.qcow2

加密格式default和qcow可能不再用于创建加密卷。在 QEMU 中使用 qcow 加密卷在 QEMU 2.3 中开始逐步淘汰。

下面还是主要来介绍怎么使用luks来实现磁盘加密吧 将现有的虚拟机磁盘转为加密的磁盘,如果直接创建加密磁盘的新虚拟机不需要执行第二步转换磁盘的操作。

qemu-img create -f luks --object secret,data=123,id=sec0      -o key-secret=sec0 fw.luks  20G
qemu-img convert --target-image-opts \
> --object secret,data=123,id=sec0 -f qcow2 fw.qcow2 -n \
> driver=luks,file.filename=fw.luks,key-secret=sec0

vim volume-secret.xml
<secret ephemeral='no' private='yes'>
<uuid>92f35b9e-c845-47e1-b5a6-f2036a706866uuid>
<description>Super secret name of my first puppydescription>
<usage type='volume'>
<volume>/home/kvm/images/fw.luksvolume>
usage>
secret>

产生的secret以及base64的密码在/etc/libvirt/secrets/中存在。

virsh secret-define volume-secret.xml


# MYSECRET=`printf %s "123" | base64`
# virsh secret-set-value dc057b2b-6a7d-4dba-b76e-37a458448765 $MYSECRET
Secret value set
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/home/kvm/images/fw.luks'/>
<target dev='vda' bus='virtio'/>
<encryption format='luks'>
<secret type='passphrase' uuid='dc057b2b-6a7d-4dba-b76e-37a458448765'/>
encryption>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
disk>

对于卷创建,可以指定用于加密 luks 卷的加密算法。可以为此目的提供以下两个可选元素cipher和ivgen。支持哪些算法取决于管理程序。使用 qemu-img 创建卷时,存储驱动后端使用的默认算法是 'aes-256-cbc',使用 'essiv' 生成初始化向量,使用 'sha256' 哈希算法生成密码和初始化向量。官网例子,只做参考。

<volume>
<name>twofish.luksname>
<capacity unit='G'>5capacity>
<target>
<path>/var/lib/libvirt/images/demo.lukspath>
<format type='raw'/>
<encryption format='luks'>
<secret type='passphrase' uuid='f52a81b2-424e-490c-823d-6bd4235bc572'/>
<cipher name='twofish' size='256' mode='cbc' hash='sha256'/>
<ivgen name='plain64' hash='sha256'/>
encryption>
target>
volume>

之后启动虚拟机就可以了。

virsh start vm

如果想把加密的磁盘拷贝到其他宿主机上使用,直接执行上面的创建secret之后的操作就可以了。

注意:设置的密码一定要与之前宿主机定义的密码一样。

如果我们把虚拟机加密引导磁盘的encryption字段去掉,不在虚拟化层进行解密,会怎么样呢,会找不到磁盘引导。

<encryption format='luks'>
<secret type='passphrase' uuid='dc057b2b-6a7d-4dba-b76e-37a458448765'/>
encryption>

如果数据盘不在虚拟化层解密,将不能直接挂载。

LUKS 也是一种基于 device mapper(dm) 机制的加密方案。如果要使用加密后的分区,就必须对加密后的分区做一个映射,映射到 /dev/mapper 这个目录下。映射完成之后,我们也只能挂载这个映射来进行使用,并且在做映射的时候还需要输入加密分区的加密密码。我们使用Cryptsetup工具对数据盘做映射,映射文件将放到 /dev/mapper 目录中。需要输入之前磁盘加密的密码。

cryptsetup luksOpen /dev/vdb fw

kvm使用ceph rbd磁盘加密

定义secret

所有ceph节点都要执行 生成secret。

cd /etc/libvirt/qemu
cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
<usage type='ceph'>
<name>client.libvirt secretname>
usage>
secret>
EOF
root@node1:/etc/libvirt/qemu# virsh secret-define --file secret.xml
Secret 01a0ba00-f277-48bb-b937-9001ec91f53e created
root@node2:/etc/libvirt/qemu# virsh secret-define --file secret.xml
Secret 533b5d06-0525-4da3-bddf-907f70c0a31b created
root@node3:/etc/libvirt/qemu# virsh secret-define --file secret.xml
Secret 1740698e-abb9-4502-b801-1ede074f1ce1 created

三台都执行下面的命令。

ceph auth get-key client.libvirt | tee client.libvirt.key
root@node1:/etc/libvirt/qemu# virsh secret-set-value --secret  01a0ba00-f277-48bb-b937-9001ec91f53e --base64 $(cat client.libvirt.key) 
Secret value set
root@node2:/etc/libvirt/qemu# virsh secret-set-value --secret 533b5d06-0525-4da3-bddf-907f70c0a31b --base64 $(cat client.libvirt.key)
Secret value set
root@node3:/etc/libvirt/qemu# virsh secret-set-value --secret 1740698e-abb9-4502-b801-1ede074f1ce1 --base64 $(cat client.libvirt.key)
Secret value set
<devices>
<emulator>/usr/bin/kvm-spiceemulator>
<disk type='network' device='disk'>
<driver name='qemu' type='raw'/>
<auth username='libvirt'>
<secret type='ceph' uuid='01a0ba00-f277-48bb-b937-9001ec91f53e'/>
auth>
<source protocol='rbd' name='libvirt-pool/fw-system'>
<host name='node1' port='6789'/>
<host name='node2' port='6789'/>
<host name='node3' port='6789'/>
source>
<target dev='vdb' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
disk>

启动虚拟机

定义并启动虚拟机

virsh define vm.xml
virsh start vm

来源:运维开发故事内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯