12 января 2016

Шифрование тома 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                 |
+---------------------------------------+--------------------------------------+