使 Cinder 具备一致性和安全性,并支持 RBAC¶
https://blueprints.launchpad.net/cinder/+spec/s-rbac-ready-x
修改 Cinder 的策略定义,以支持社区范围内的“一致且安全 RBAC”工作。
问题描述¶
Cinder 策略目前仅依赖于角色,不识别范围,而范围是在 Queens 中引入 Keystone 的。因此,实现例如只能执行非破坏性操作的管理员非常复杂且容易出错。(例如,请参阅 策略配置 HOWTO 在 Cinder 文档中。)
使用令牌范围以及 Keystone Queens 时代的其他改进,例如角色继承,可以定义识别一组有用“角色”的策略规则。如果所有 OpenStack 服务都定义策略规则以支持这一点(“一致”的部分),则操作员无需重写策略来尝试创建这些角色,而是可以使用经过测试的默认策略(“安全”的部分)。
用例¶
一些示例
操作员希望拥有一个只能执行非破坏性操作的管理员。
操作员希望在每个项目中使用不同级别的最终用户(例如,一个可以比仅仅“项目成员”做更多事情的“项目管理员”)。
提议的变更¶
修改 cinder 默认策略,以便默认配置识别 keystone ‘reader’ 角色并对其进行适当处理。这将涉及重写所有不管理“Admin API”调用的策略。
对于 Xena,我们将仅使用项目范围实现三种角色。这意味着任何 cinder 用户都必须在项目上拥有角色才能通过策略检查。这基本上就是我们现在的情况,除了我们将区分项目上的‘member’角色和项目上的‘reader’角色。
注意
“角色”的具体含义以及它们相对于块存储 API 可以执行的操作在 策略角色和权限 文档中描述。
此外,我们将解决以下问题
需要添加新的测试,因为以前我们只需要区分“cinder 管理员”和“最终用户”,而现在我们将不得不区分可以发出 API 调用的更多“角色”。
我们当前有一些未受限制的策略(即,检查字符串为空
"")。它们的检查字符串将被重写为更具体和适当的内容。我们当前有一些单一策略管理 cinder 资源上的创建、读取、更新和删除操作。这些需要拆分为更细粒度的策略,以便仅具有‘reader’角色的用户可以在不修改资源的情况下读取资源。
有关更多详细信息,请参阅 策略角色和权限 中概述的“实施策略”。
备选方案¶
不执行任何操作。然而,这实际上不是一个选项,因为为了与旧策略配置保持向后兼容,有些项目无法使用范围,而另一些项目可以忽略它。因此,如果我们不升级我们的策略定义,我们将阻止所有 OpenStack 云使用一致且安全的策略。
数据模型影响¶
无。
REST API 影响¶
各种块存储 API 调用的权限已经由策略管理。
安全影响¶
总体而言,这应该通过向操作员提供一套合适的“角色”来提高安全性,这些角色将在项目范围内一致地工作,并且可以开箱即用,而不是实现自己的角色。
Active/Active HA 影响¶
无。
通知影响¶
无。
其他最终用户影响¶
无。
性能影响¶
没有,我们已经需要向 keystone 发出调用以验证令牌并检索用户权限。
其他部署者影响¶
无。
开发人员影响¶
没有,除了完成实施工作之外。
实现¶
负责人¶
- 主要负责人
lbragstad rosmaita
- 其他贡献者
tosky enriquetaso abishop eharney geguileo whoami-rajat jobernar
工作项¶
默认配置的自然语言描述。这将对操作员有所帮助,但也发现了一些当前 cinder 策略中的不足。它还为我们提供了一些可以用来验证默认策略测试的东西。 https://review.opendev.org/c/openstack/cinder/+/763306
策略更新补丁: https://review.opendev.org/q/project:openstack/cinder+topic:secure-rbac
测试补丁。基础补丁是 https://review.opendev.org/c/openstack/cinder/+/805316
我们将使用 cinder 中 policies 目录中各个文件用于特定策略集的当前结构,并将测试添加到重新定义策略的相同补丁中。
Tempest 测试。基础补丁是 https://review.opendev.org/c/openstack/cinder-tempest-plugin/+/772915
初始测试补丁: https://review.opendev.org/q/project:openstack/cinder-tempest-plugin+topic:secure-rbac
依赖项¶
没有,Keystone 和 oslo.policy 中所需的更改早已合并。
测试¶
我们需要一个灵活的测试框架,因为我们正在从 Wallaby 中的 2 个角色到 Xena 中的 3 个角色再到 Yoga 中的 5 个角色,我们需要确保弃用的策略检查字符串继续正常工作,直到它们被删除。因此,基于 ddt 的方法,我们有一些基本测试,并将所有不同类型的用户都运行通过它们,非常有意义。
作为扩展目标,由于策略配置的复杂性,在 cinder-tempest-plugin 中进行测试,以便可以针对真实的 Keystone 实例测试每个角色,这将很好。这还将允许使用 tempest 来测试 OpenStack 项目中安全且一致的 RBAC 的一致性。
文档影响¶
Cinder 的主要文档将是: https://review.opendev.org/c/openstack/cinder/+/763306
我们预计由于这项工作的 OpenStack 范围,Keystone 文档中会有更多针对操作员的通用文档。
参考资料¶
在 Xena PTG 时的努力的一般状态摘要,包括更多信息的链接: http://lists.openstack.org/pipermail/openstack-discuss/2021-April/022117.html
角色以及它们如何在 Cinder 中工作在 https://review.opendev.org/c/openstack/cinder/+/763306 中描述。