任何在云上部署的应用都离不开持久化盘或者说是数据盘,在的虚拟机的使用场景里面,云服务提供商都会提供这样的一个服务。很多人可能不会理解为什么我创建的虚拟机不可以直接在上面写数据,而需要单独的去创建额外的磁盘进行数据的读写。
以OpenStack为例,其虚拟机的配置由Flavor 来决定。
可以看到其中定义了该VM的vCPU、内存以及root磁盘大小可以理解为sda。另外有一项比较特殊的是 ephemeral, 如果定义了该值后,在操作系统当中会额外的有一个存储设备sdb. 但是如果虚拟机所在的物理机或者由于删除该虚拟机的话,那么其上所写入的数据也会随之删除。所以有了个数据盘(Persistent Disk)的产生,该存储设备可以通过挂载的方式添加到虚拟机里面,OpenStack 里面有Cinder提供这样的服务,对于其它的云服务提供商来说,会有不同的服务。但是无论是那种,无论以什么协议添加到了虚拟机当中,其上面的数据如果不是人为的删除的话,可以放心使用。
虽然persistent disk 解决了数据存储持久化的问题,但是也随之带来了另外的问题。
其上存储的数据如何保护? 如果后端的存储服务器被黑客攻陷的话,那么其上的所有客户数据都会收到威胁, 如何防护云存储(对象 & 块存储)的安全变得直观重要。

下面提供一种简单的但是有效的方式进行数据盘加密,即使是云服务提供商也无法任意的查看你的数据。
该方法主要通过Linux 提供的LUKS进行磁盘的加密, 其全称为 Linux Unified Key Setup-on-disk-format (or LUKS). 对于移动设备或者可插拔的设备来说尤其的重要。LUKS允许多个用户用其Key 去解密 Master的Key。

配置过程:
1、将fixed_key的值设置为cinder-volume-key和一组十六进制的秘钥(控制节点和计算节点)
(1)nova.conf

[keymgr]
fixed_key=cinder-volume-key
fixed_key=0000000000000000

(2)cinder.conf

[KEYMGR]
fixed_key=cinder-volume-key
fixed_key=0000000000000000

2、重启服务

systemctl restart openstack-nova-compute
systemctl restart openstack-cinder-volume

3、创建加密卷类型

[root@xiandian ~]# cinder type-create luks
+--------------------------------------+------+-------------+-----------+
|                  ID                  | Name | Description | Is_Public |
+--------------------------------------+------+-------------+-----------+
| a45d8fdf-0f4b-41d8-89f0-f08d8d8cc868 | luks |      -      |    True   |
+--------------------------------------+------+-------------+-----------+
[root@xiandian ~]# cinder encryption-type-create --cipher aes-xts-plain64 --key_size 512 --control_location front-end luks nova.volume.encryptors.luks.LuksEncryptor
+--------------------------------------+-------------------------------------------+-----------------+----------+------------------+
|            Volume Type ID            |                  Provider                 |      Cipher     | Key Size | Control Location |
+--------------------------------------+-------------------------------------------+-----------------+----------+------------------+
| a45d8fdf-0f4b-41d8-89f0-f08d8d8cc868 | nova.volume.encryptors.luks.LuksEncryptor | aes-xts-plain64 |   512    |    front-end     |
+--------------------------------------+-------------------------------------------+-----------------+----------+------------------+

4、创建卷
(1)未加密

[root@xiandian ~]# cinder create --name unencrypted 1

(2)加密

[root@xiandian ~]# cinder create --name encrypted --volume-type luks 1