kvm qcow2和ceph rbd虚拟机磁盘加密

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: kvm qcow2和ceph rbd虚拟机磁盘加密

kvm qcow2磁盘加密


关于luks加密


LUKS 实现了一种独立于平台的标准磁盘格式,用于各种工具。LUKS 用于加密块设备。加密设备的内容是任意的,因此可以加密任何文件系统,包括交换分区。加密卷的开头有一个未加密的标头,它允许存储多达 8 个 (LUKS1) 或 32 个 (LUKS2)加密密钥以及密码类型和密钥大小等加密参数。此标头的存在是 LUKS 和普通 dm-crypt 之间的主要区别,因为标头允许使用多个不同的密码短语,并且能够轻松更改和删除它们。但是,如果标头丢失或损坏,设备将不再可解密。LUKS (Linux Unified Key Setup)为提供了一个标准的磁盘加密格式,使得它不仅兼容性高,能通用于不同的 Linux 发行版本,还支持多用户/口令,并且由于它的加密密钥独立于口令,所以即使口令失密,我们也无需重新加密整个硬盘,只需要及时的改变口令即可重获安全。


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 中开始逐步淘汰。


fb2f0ddc30a3992310e7f75c5ba9311c.png


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


  1. 创建大小为20G的luks空磁盘。


qemu-img create -f luks --object secret,data=123,id=sec0      -o key-secret=sec0 fw.luks  20G


  1. 将要加密的qcow2磁盘转换为luks磁盘,目标磁盘不存在将无法转换。


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


7d53fd90f7935f09c7374a72e3efa035.png


  1. 创建一个secret xml文件,不添加UUID会自动生成。


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


  1. 定义secret

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


virsh secret-define volume-secret.xml


  1. 给secret设置密码值


# MYSECRET=`printf %s "123" | base64`
# virsh secret-set-value dc057b2b-6a7d-4dba-b76e-37a458448765 $MYSECRET
Secret value set


  1. 编辑虚拟机disk段加入secret的字段


<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.luks</name>
  <capacity unit='G'>5</capacity>
  <target>
    <path>/var/lib/libvirt/images/demo.luks</path>
    <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>


bbd529ae0d544a087a662582f3ffdc9b.png


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


ac2bc3664bb44cbcbc0cc8f4f81081c0.png


  • 加密后不能直接挂载
  • 加密后硬盘丢失也不用担心数据被盗
  • 加密后必须做映射才能挂载


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


cryptsetup luksOpen /dev/vdb fw


2a5dab7ea7181e0c8bcb9831d38abd86.png


kvm使用ceph rbd磁盘加密


定义secret


  1. 生成secret

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


cd /etc/libvirt/qemu
cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
        <usage type='ceph'>
                <name>client.libvirt secret</name>
        </usage>
</secret>
EOF


  1. 定义secret,生成的id号要记下来


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


  1. 获取client.libvirt密钥并将密钥字符串保存到文件中。


三台都执行下面的命令


ceph auth get-key client.libvirt | tee client.libvirt.key


  1. 设置secret的密码。


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


  1. 编辑虚拟机配置文件


<devices>
    <emulator>/usr/bin/kvm-spice</emulator>
    <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



相关文章
|
29天前
|
数据库 虚拟化 Windows
虚拟机数据恢复—XenServer虚拟机磁盘文件丢失的数据恢复案例
虚拟机数据恢复环境: 某品牌服务器通过同品牌某型号的RAID卡,将4块STAT硬盘为一组RAID10阵列。上层部署XenServer虚拟化平台,虚拟机安装Windows Server系统,每台虚拟机有两个虚拟机磁盘(系统盘 + 数据盘),虚拟机作为Web服务器使用。 虚拟机故障&分析: 机房异常断电导致服务器中一台VPS(XenServer虚拟机)不可用,虚拟磁盘文件丢失。
|
2月前
|
KVM 虚拟化
kvm虚拟机快照
这篇文章主要介绍了KVM虚拟机快照的创建、管理、恢复以及删除的详细步骤,包括查看快照信息、创建快照、模拟系统破坏后基于快照恢复虚拟机、使用快照的注意事项以及如何删除快照。
53 2
|
2月前
|
KVM 虚拟化
KVM虚拟机的桥接网络
文章主要介绍了KVM虚拟机的NAT和桥接网络类型的工作原理、配置方法以及如何进行网络模式的切换。
43 3
KVM虚拟机的桥接网络
|
2月前
|
KVM 虚拟化
KVM虚拟机的克隆
这篇文章介绍了如何使用KVM虚拟机进行完整克隆和链接克隆,包括手动克隆和使用virt-clone工具克隆的方法,以及如何编写脚本来实现自动化克隆和删除虚拟机。
65 3
KVM虚拟机的克隆
|
2月前
|
KVM 虚拟化
KVM虚拟机的热迁移
这篇文章详细介绍了KVM虚拟机的热迁移过程,包括临时迁移和永久迁移的步骤,以及可能遇到的故障和解决方案。
103 1
KVM虚拟机的热迁移
|
2月前
|
KVM 虚拟化
kvm虚拟机磁盘管理
文章详细介绍了KVM虚拟机磁盘管理,包括磁盘格式概述、创建虚拟机时如何指定磁盘格式、以及磁盘工具的常用命令,旨在帮助用户更好地理解和操作KVM虚拟机的磁盘管理。
76 1
kvm虚拟机磁盘管理
|
1月前
|
Kubernetes Linux 容器
解决删除快照后启动虚拟机显示指定的文件不是虚拟磁盘 打不开磁盘“路径”或它所依赖的某个快照磁盘。 模块“disk”启动失败。 未能启动虚拟
解决删除快照后启动虚拟机显示指定的文件不是虚拟磁盘 打不开磁盘“路径”或它所依赖的某个快照磁盘。 模块“disk”启动失败。 未能启动虚拟
119 0
|
2月前
|
KVM 虚拟化 数据安全/隐私保护
KVM虚拟机安装实战
本文讲述了如何创建并使用VNC连接KVM虚拟机的详细教程,包括安装图解和命令行参数说明。
99 8
|
2月前
|
KVM 虚拟化
KVM虚拟机的冷迁移
这篇文章详细描述了KVM虚拟机的冷迁移过程,包括无依赖环境迁移、有链接克隆虚拟机迁移、多块磁盘迁移的案例,以及可能遇到的错误和解决方案。
81 3
|
3月前
|
KVM 虚拟化
[kvm]创建虚拟机
[kvm]创建虚拟机

热门文章

最新文章