使 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

工作项

依赖项

没有,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 中描述。