Ceph Broker CephX 支持¶
问题描述¶
目前 ceph/ceph-mon charm 为拥有集群中所有池的读写权限的客户端提供 cephx 密钥;这存在问题,因为这意味着任何客户端都可以读取/写入/删除任何池中的数据,因此如果服务受到破坏(可能直接可被最终用户访问,例如 cinder、glance 或 ceph-radosgw),整个集群将受到破坏,直到被破坏的密钥被撤销。
提议的变更¶
Ceph 支持对密钥进行细粒度的访问控制,因此我们需要利用此功能来提高部署的整体安全性,例如(直接引用 Ceph 文档)
ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images'
ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups'
ceph/ceph-mon 将提供新的 broker 方法,以允许
客户端请求的池在创建时被放置到“组”中
例如,多个 cinder 后端池将被放置到“volumes”组中。
客户端还可以请求访问一组池
例如,cinder charm 将获得“volumes”组中池的“rwx”权限,并将请求“images”组中池的“rx”权限。
客户端可以选择性地请求额外的权限
这支持“allow class-read object_prefix rbd_children”用例,其中密钥需要能够从不同池中的复制写入克隆中读取。
备选方案¶
安全性可以开放并在部署后由操作员保护,但这既不可重复也不符合操作角度的需求。
实现¶
负责人¶
- 主要负责人
xfactor973 (Chris Holcombe)
Gerrit Topic¶
对于与此规范相关的所有补丁,请使用 Gerrit 主题“cephx-keys”。
git-review -t cephx-keys
工作项¶
在 ceph-broker 中实现组 -> 池映射和维护
在 ceph-broker 中实现 cephx 密钥 -> 组 ACL 映射
实现关系 API 上的方法以支持将池映射到组。
实现 broker 关系 API 上的方法以支持使用正确的权限将池的访问权限授予 cephx 密钥。
实现当池组的成员资格发生变化时,cephx 密钥更新机制。
更新 cinder、glance、nova-compute 和 ceph-radosgw charms,以向 ceph/ceph-mon charm 发出适当的池访问请求。
仓库¶
这项工作不需要新的存储库。
文档¶
由于 broker 关系接口是自文档化的,因此不需要额外的文档。
安全性¶
这项工作可以缓解现有的安全风险。
测试¶
现有的 charm 功能测试将自动涵盖这项工作,因为它们应该在使用 ceph 资源的服务的功能;不正确的密钥权限将导致功能中断。
应编写单元测试以验证 charms.ceph 中密钥和组管理函数;此外,ceph/ceph-mon charm 功能测试应更新,以验证当前测试用例中创建的密钥的权限。
依赖项¶
这项工作没有外部依赖项。