Шифрование тома Cinder в OpenStack

Одной из полезных опций работы с блочными устройствами является их шифрование. Настройка шифрования томов требуется со стороны двух служб: Nova и Cinder. Сделать это можно при помощи общего секрета или при помощи сервиса управления ключами Barbican. Пойдем по пути использования общего секрета. Нужно иметь в виду, что если он скомпрометирован, то злоумышленник получит доступ ко всем зашифрованным томам.
Зададим ключ на узле Cinder и всех вычислительных узлах:
[root@compute ~]# crudini --set /etc/nova/nova.conf keymgr fixed_key 123456789
[root@compute ~]# systemctl restart openstack-nova-compute
[root@controller ~]# crudini --set /etc/cinder/cinder.conf keymgr fixed_key 123456789
[root@controller ~]# systemctl restart openstack-cinder-volume
Нам необходимо создать новый тип тома. Назовем его LUKS, поскольку для шифрования будет использоваться соответствующая спецификация:
$ source keystonerc_admin
$ cinder type-create LUKS
+--------------------------------------+------+-------------+-----------+
| ID | Name | Description | Is_Public |
+--------------------------------------+------+-------------+-----------+
| 7d5d38a3-ce84-4dfb-b184-74fed0309cef | LUKS | - | True |
+--------------------------------------+------+-------------+-----------+
Следующим шагом нужно создать тип шифрования:
$ cinder encryption-type-create --cipher aes-xts-plain64 --key_size 512 --control_location front-end LUKS nova.encryptors.luks.LuksEncryptor
+----------------+------------------------------------+-----------------+----------+------------------+
| Volume Type ID | Provider | Cipher | Key Size | Control Location |
+----------------+------------------------------------+-----------------+----------+------------------+
| 7d5d38a3-ce8.. | nova.encryptors.luks.LuksEncryptor | aes-xts-plain64 | 512 | front-end |
+----------------+------------------------------------+-----------------+----------+------------------+
Теперь у нас все готово для создания зашифрованного тома. Обратите внимание на свойство encrypted при выводе команды:
$ source keystonerc_demo
$ cinder create --display-name myvolumeEncr --volume-type LUKS 1
+---------------------------------------+--------------------------------------+
| Property | Value |
+---------------------------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| consistencygroup_id | None |
| created_at | 2015-12-23T09:21:43.000000 |
| description | None |
| encrypted | True |
| id | 21cc946b-51ea-4806-adc1-46d42113af14 |
| metadata | {} |
| multiattach | False |
| name | myvolumeEncr |
| os-vol-tenant-attr:tenant_id | eca00feab38e4aa5b462bd31af0b9dca |
| os-volume-replication:driver_data | None |
| os-volume-replication:extended_status | None |
| replication_status | disabled |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| user_id | 924c18c923654d7c930bcb1044580d8b |
| volume_type | LUKS |
+---------------------------------------+--------------------------------------+