Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

6.7. 块存储

OpenStack Block Storage (cinder)是一种向自助服务提供软件(服务和库)的服务,用于管理永久的块级存储设备。这会创建按需访问块存储资源,以用于 Compute (nova)实例。这通过将块存储池虚拟化为各种后端存储设备(可以是软件实施或传统硬件存储产品)来创建软件定义型存储。这的主要功能是管理块设备的创建、附加和分离。消费者不需要了解后端存储设备的类型或其所在的位置。

计算实例使用行业标准存储协议(如 iSCSI、ATA over Ethernet 或 Fibre-Channel)存储和检索块存储。这些资源可使用 OpenStack 原生标准 HTTP RESTful API 管理和配置。

6.7.1. 卷 Wiping

擦除块存储设备的方法有多种。传统方法是将 lvm_type 设置为 thin,然后使用 volume_clear 参数。或者,如果卷加密功能我们已描述,如果删除了卷加密密钥,则不需要卷加密功能。

注意

在以前的版本中,lvm_type=default 用于表示擦除。虽然此方法 仍可以正常工作,但不建议 设置 secure delete。

volume_clear 参数可以接受 zeroshred 作为参数。 可将单个从零写到设备。shred 操作将写入预定的位模式的三个通过。

6.7.2. 将配置文件的用户/组所有权设置为 root/cinder

配置文件包含组件可以平稳运行所需的关键参数和信息。如果非特权用户被有意或意外地修改或删除任何 par ater 或文件本身,则会导致严重可用性问题导致拒绝服务到其他最终用户。因此,此类关键配置文件的用户所有权必须设置为 root,并且组所有权必须设置为 cinder

主机上不存在 cinder 组。使用 ls -l 将显示组所有者的 GID。

sudo ls -l /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf
-rw-r-----. 1 root 42407 188012 Dec 11 09:34 /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf

sudo stat -L -c "%U %G" /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf
root UNKNOWN

使用以下命令,检查 cinder.conf 配置文件的用户和组所有权是否已分别设置为 root 和 cinder:

sudo docker exec -it cinder_api stat -L -c "%U %G" /etc/cinder/cinder.conf
root cinder

6.7.3. 为配置文件设置严格的权限

检查 cinder.conf 配置文件的权限是否已设置为 640 或 stricter。

$ stat -L -c "%a" /var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf

6.7.4. 使用 keystone 进行身份验证

/var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf 中,检查 [DEFAULT] 部分下的 auth_strategy 的值是否已设置为 keystone,而不是 noauth

6.7.5. 为身份验证启用 TLS

/var/lib/config-data/puppet-generated/cinder/etc/cinder/cinder.conf 中,检查 [keystone_authtoken] 部分下的 auth_uri 的值设置为一个以 https:// ' 开头的身份 API 端点,以及 [keystone_authtoken] 下参数 'insecure 的值 是否设为 False

6.7.6. 确保块存储使用 TLS 与 Compute 通信

cinder.conf 中,检查 [DEFAULT] 部分下的 glance_api_servers 的值是否已设置为以 https:// 开头,并且参数 glance_api_insecure 的值设置为 False

6.7.7. 设置请求的正文的最大大小

如果没有定义每个请求的最大正文大小,攻击者可以制作一个大容量的任意 OSAPI 请求,从而导致服务崩溃,最终导致服务攻击。分配 t he maximum 值可确保任何恶意的超值被禁止确保服务持续可用。

查看 cinder.conf 中的 [oslo_middleware] 部分下的 max_request_body_size 是否已设置为 114688

6.7.8. 启用卷加密

未加密的卷数据使卷托管平台对于攻击者而言尤为高值目标,因为它允许攻击者为许多不同的虚拟机读取数据。此外,物理存储介质库来自其他计算机被盗、重新挂载和访问。加密卷数据和卷备份可帮助缓解这些风险,并为卷托管平台提供防御性。块存储(c inder)可以在写入磁盘前对卷数据进行加密,因此请考虑启用卷加密,并使用 Barbican 进行私钥存储。