4.2. 加密 Block Storage (cinder)卷
您可以使用 barbican 管理 Block Storage (cinder)加密密钥。此配置使用 LUKS 对连接到您的实例的磁盘进行加密,包括引导磁盘。密钥管理对用户是透明的;当您使用 luks 作为加密类型创建新卷时,cinder 为卷生成对称密钥 secret,并将其存储在 barbican 中。当引导实例时(或附加加密卷)时,nova 从 barbican 检索密钥,并将 secret 存储在本地作为 Compute 节点上的 Libvirt 机密。
流程
在运行
cinder-volume和nova-compute服务的节点上,确认 nova 和 cinder 都配置为使用 barbican 进行密钥管理:$ crudini --get /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf key_manager backend castellan.key_manager.barbican_key_manager.BarbicanKeyManager $ crudini --get /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf key_manager backend castellan.key_manager.barbican_key_manager.BarbicanKeyManager创建使用加密的卷模板。当您创建新卷时,可以在这里定义的设置中建模:
$ openstack volume type create --encryption-provider nova.volume.encryptors.luks.LuksEncryptor --encryption-cipher aes-xts-plain64 --encryption-key-size 256 --encryption-control-location front-end LuksEncryptor-Template-256 +-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Field | Value | +-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | description | None | | encryption | cipher='aes-xts-plain64', control_location='front-end', encryption_id='9df604d0-8584-4ce8-b450-e13e6316c4d3', key_size='256', provider='nova.volume.encryptors.luks.LuksEncryptor' | | id | 78898a82-8f4c-44b2-a460-40a5da9e4d59 | | is_public | True | | name | LuksEncryptor-Template-256 | +-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+创建一个新卷,并指定它使用
LuksEncryptor-Template-256设置:$ openstack volume create --size 1 --type LuksEncryptor-Template-256 'Encrypted-Test-Volume' +---------------------+--------------------------------------+ | Field | Value | +---------------------+--------------------------------------+ | attachments | [] | | availability_zone | nova | | bootable | false | | consistencygroup_id | None | | created_at | 2018-01-22T00:19:06.000000 | | description | None | | encrypted | True | | id | a361fd0b-882a-46cc-a669-c633630b5c93 | | migration_status | None | | multiattach | False | | name | Encrypted-Test-Volume | | properties | | | replication_status | None | | size | 1 | | snapshot_id | None | | source_volid | None | | status | creating | | type | LuksEncryptor-Template-256 | | updated_at | None | | user_id | 0e73cb3111614365a144e7f8f1a972af | +---------------------+--------------------------------------+生成的 secret 会自动上传到 barbican 后端。
注意确保创建加密卷的用户在项目上具有
创建者barbican 角色。如需更多信息,请参阅Grant 用户访问 creator 角色部分。获取 barbican secret UUID。这个值显示在
encryption_key_id字段中。$ cinder --os-volume-api-version 3.64 volume show Encrypted-Test-Volume +------------------------------+-------------------------------------+ |Property |Value | +------------------------------+-------------------------------------+ |attached_servers |[] | |attachment_ids |[] | |availability_zone |nova | |bootable |false | |cluster_name |None | |consistencygroup_id |None | |created_at |2022-07-28T17:35:26.000000 | |description |None | |encrypted |True | |encryption_key_id |0944b8a8-de09-4413-b2ed-38f6c4591dd4 | |group_id |None | |id |a0b51b97-0392-460a-abfa-093022a120f3 | |metadata | | |migration_status |None | |multiattach |False | |name |vol | |os-vol-host-attr:host |hostgroup@tripleo_iscsi#tripleo_iscsi| |os-vol-mig-status-attr:migstat|None | |os-vol-mig-status-attr:name_id|None | |os-vol-tenant-attr:tenant_id |a2071ece39b3440aa82395ff7707996f | |provider_id |None | |replication_status |None | |service_uuid |471f0805-072e-4256-b447-c7dd10ceb807 | |shared_targets |False | |size |1 | |snapshot_id |None | |source_volid |None | |status |available | |updated_at |2022-07-28T17:35:26.000000 | |user_id |ba311b5c2b8e438c951d1137333669d4 | |volume_type |LUKS | |volume_type_id |cc188ace-f73d-4af5-bf5a-d70ccc5a401c | +------------------------------+-------------------------------------+注意您必须使用带有 Cinder CLI 的
--os-volume-api-version 3.64参数来显示encryption_key_id值。没有等同的 OpenStack CLI 命令。使用 barbican 确认存在磁盘加密。在本例中,时间戳与 LUKS 卷创建时间匹配:
$ openstack secret list +------------------------------------------------------------------------------------+------+---------------------------+--------+-------------------------------------------+-----------+------------+-------------+------+------------+ | Secret href | Name | Created | Status | Content types | Algorithm | Bit length | Secret type | Mode | Expiration | +------------------------------------------------------------------------------------+------+---------------------------+--------+-------------------------------------------+-----------+------------+-------------+------+------------+ | https://192.168.123.169:9311/v1/secrets/0944b8a8-de09-4413-b2ed-38f6c4591dd4 | None | 2018-01-22T02:23:15+00:00 | ACTIVE | {u'default': u'application/octet-stream'} | aes | 256 | symmetric | None | None | +------------------------------------------------------------------------------------+------+---------------------------+--------+-------------------------------------------+-----------+------------+-------------+------+------------+将新卷附加到现有实例。例如:
$ openstack server add volume testInstance Encrypted-Test-Volume然后,卷会呈现在客户端操作系统中,并可使用内置工具挂载。
4.2.1. 将块存储卷迁移到 OpenStack Key Manager 复制链接链接已复制到粘贴板!
如果您之前使用 ConfKeyManager 管理磁盘加密,您可以通过在迁移到 barbican 范围内扫描用于 encryption_key_id 条目的数据库将卷迁移到 OpenStack Key Manager。每个条目获取一个新的 barbican 密钥 ID,并且保留现有的 ConfKeyManager secret。
-
在以前的版本中,您可以使用
ConfKeyManager为加密卷重新分配所有权。对于由 barbican 管理的密钥的卷,无法做到这一点。 -
激活 barbican 不会中断现有的
keymgr卷。
前提条件
在迁移前,请查看 Barbican-managed 加密卷和使用 ConfKeyManager 的卷之间的以下区别:
- 您无法转让加密卷的所有权,因为目前无法传输 barbican 机密的所有权。
- barbican 对允许读取和删除 secret 的限制性更严格,这可能会影响一些 cinder 卷操作。例如,用户无法附加、分离或删除其他用户的卷。
流程
- 部署 barbican 服务。
将
creator角色添加到 cinder 服务。例如:#openstack role create creator #openstack role add --user cinder creator --project service重新启动
cinder-volume和cinder-backup服务。cinder-volume和cinder-backup服务会自动开始迁移过程。您可以检查日志文件以查看迁移的状态信息:-
cinder-volume- 迁移存储在 Cinder 的卷和快照表中的密钥。 -
cinder-backup- migrates 键(在 Backups 表中)。
-
-
监控日志显示迁移已完成的信息,检查没有更多卷使用
ConfKeyManagerall-zeros 加密密钥 ID。 -
从
cinder.conf和nova.conf中删除fixed_key选项。您必须确定哪些节点配置了此设置。 -
从 cinder 服务中删除
creator角色。
验证
启动这个过程后,日志文件中会出现其中一个条目。这表示迁移是否已正确启动,还是标识它遇到的问题:
-
因为 ConfKeyManager 仍在使用,所以不会迁移加密密钥。 -
没有迁移加密密钥,因为 ConfKeyManager 的 fixed_key 没有被使用。 -
不支持迁移加密密钥,因为迁移到 'XXX' key_manager 后端不被支持。这个消息不太可能出现;这是一个安全检查,用于处理 barbican 以外的另一个密钥管理器后端。这是因为代码只支持一个迁移场景: 从 ConfKeyManager 到 barbican。 -
不迁移加密密钥,因为没有与此主机关联的卷。当cinder-volume在多个主机上运行时,一个特定主机没有关联的卷。这是因为每个主机都需要负责处理自己的卷。 -
开始迁移 ConfKeyManager 键。 将卷 <UUID> 加密密钥迁移到 Barbican- 迁移期间,将检查所有主机的卷;如果卷仍在使用 ConfKeyManager 的密钥 ID (它只包括零 (00000000-0000-0000-0000-000000000000),则会出现这个消息。-
对于
cinder-backup,此消息使用稍有不同的大小写:Migrating Volume [...]或Migrating Backup [...]
-
对于
-
每个主机检查其所有卷后,主机会显示一个概述状态消息:
`No volumes are using the ConfKeyManager's encryption_key_id.` `No backups are known to be using the ConfKeyManager's encryption_key_id.`您可能还会看到以下条目:
-
ConfKeyManager 的 all-zeros 加密密钥 ID 仍有 %d 卷。 ConfKeyManager 的 all-zeros 加密密钥 ID 仍然有 %d 备份。这两个消息都可能出现在
cinder-volume和cinder-backup日志中。每个服务仅处理其自身条目的迁移,但该服务知道另一个条目的状态。因此,cinder-volume知道cinder-backup是否仍有要迁移的备份,cinder-backup知道cinder-volume服务是否有要迁移的卷。
-
虽然每个主机仅迁移自己的卷,但摘要信息基于全局评估,了解是否有任何卷仍然需要迁移。这可让您确认所有卷的迁移是否都已完成。
cleanup
将密钥 ID 迁移到 barbican 后,固定密钥会保留在配置文件中。这可能会对某些用户造成安全问题,因为 fixed_key 值没有在 .conf 文件中加密。
要解决这个问题,您可以从 nova 和 cinder 配置手动删除 fixed_key 值。但是,在进行前,首先进行测试并查看日志文件的输出,因为仍依赖于此值的磁盘无法访问。
encryption_key_id 最近只添加到 Backup 表中,作为 Queens 发行版本的一部分。因此,加密的卷的预先存在的备份可能已存在。全零 encryption_key_id 存储在备份本身上,但不出现在 Backup 数据库中。因此,迁移过程不知道加密卷的备份是否仍依赖于全零 ConfKeyMgr 密钥 ID。
检查现有的
fixed_key值。值必须与这两个服务匹配。crudini --get /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf keymgr fixed_key crudini --get /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf keymgr fixed_key重要备份现有的
fixed_key值。如果出现错误,或者需要恢复使用旧加密密钥的备份,则可以恢复该值。删除
fixed_key值:crudini --del /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf keymgr fixed_key crudini --del /var/lib/config-data/puppet-generated/nova_libvirt/etc/nova/nova.conf keymgr fixed_key
故障排除
只有在请求者具有 creator 角色时,才能创建 barbican secret。这意味着,cinder 服务本身需要创建者角色,否则会出现类似如下的日志序列:
-
开始迁移 ConfKeyManager 键。 -
将卷 <UUID> 加密密钥迁移到 Barbican -
迁移加密密钥时出错: Forbidden: Secret 创建尝试不允许 - 查看您的用户/项目权限 -
ConfKeyManager 的 all-zeros 加密密钥 ID 仍有 %d 卷。
key 消息是第三个消息: 不允许创建 Secret。要解决这个问题,请更新 cinder 帐户的权限:
-
运行
openstack role add --project service --user cinder creator -
重新启动
cinder-volume和cinder-backup服务。
因此,迁移的下一次尝试应该会成功。