默认管理员角色

bug #1951622

在 Rocky 版本中,keystone 添加了一个 默认角色层级。这是更大规模的改进 OpenStack 所有项目 RBAC 的举措的一部分。在采用 Rocky 中实现的默认角色过程中,OpenStack 开发人员和操作员已经认识到需要在 adminmember 之间增加另一个默认角色。

本规范详细说明了为什么我们需要层级中添加另一个角色,如何扩展 keystone-manage bootstrap 以干净地实现它,以及其他 OpenStack 服务如何有效地使用它。

问题描述

目前,keystone-manage bootstrap 提供三个默认角色,adminmemberreader。这些角色构建了一个基本层级,其中 admin 意味着 member,而 member 意味着 reader。这项工作的原理在原始规范中详细说明。

在 OpenStack 项目中采用系统范围和默认角色之后,很明显我们需要在层级中添加另一个角色。

基于 Yoga PTG 讨论 关于如何在所有 OpenStack 组件中集成默认角色和系统范围,开发人员和操作员决定为给定范围的最高授权级别保留 admin 角色是一个好主意。这意味着操作员永远不会向其最终用户授予项目上的 admin 角色。他们允许用户拥有的最高授权级别将是项目上的 member 角色。

这对于最终用户所需的绝大多数权限来说是可以的。例如,在项目内创建和删除实例、卷、快照和网络。但是,在审计 OpenStack 策略的过程中,我们确实看到了将某些权限暴露给最终用户的益处,但并非每个项目成员(例如,拥有项目上 member 角色的任何人)。

正是在这时,我们开始意识到需要在 member 之上添加另一个默认角色,并且该角色旨在授予最终用户。

以下是项目经理(例如,拥有项目上 manager 角色的任何人)可以执行的一些很好的示例

  • 锁定和解锁实例

  • 将镜像与其他项目共享

  • 为项目设置默认卷类型

  • 为项目设置默认密钥存储

提议的变更

扩展 keystone-manage bootstrap 工具以创建一个名为 manager 的新角色。应优雅地处理冲突,允许具有该名称的现有角色优先。不应删除然后重新创建现有角色,以免破坏依赖于该角色 ID 的任何内容。

更新角色含义,使 admin 角色意味着 manager,并且 manager 角色意味着 member。我们还应更新角色含义,以便 admin 不再直接意味着 member,因为它通过 manager 角色间接意味着。

希望暴露项目经理角色的 OpenStack 服务应编写如下检查字符串

policy.DocumentedRuleDefault(
    name='foo',
    check_str='role:manager',
    scope_types=['project']
)

备选方案

我们依赖部署工具在安装时部署此角色。但是,这仍然会给 OpenStack 安装程序带来不一致性。

keystone-manage bootstrap 中添加正式支持更干净、更一致,并与现有部署工具集成,而无需额外操作。

安全影响

这个新角色默认情况下不用于 OpenStack 策略,因此在策略更新以使用它之前,它不会携带任何特定的授权。

操作员会立即注意到的唯一变化是,他们的令牌中将有一个额外的角色,名为 manager。最初,授予某人项目上的 manager 角色不会产生任何影响,并且这些用户将仅限于项目成员可访问的权限。

通知影响

其他最终用户影响

这项工作不需要任何客户端代码,因为它使用 keystone-manager 完成。

性能影响

这只是在角色表中添加另一行并将一个额外的角色放入令牌响应中的微不足道的更改。性能影响可以忽略不计。

其他部署者影响

如果操作员或部署者有一个创建 manager 角色的实用程序,那么他们可以更新该实用程序以删除该 API 调用,并且他们可以依赖于 keystone-manage bootstrap 中的功能。

此外,如果他们对 adminmember 之间的授权层有使用案例,而我们试图用 manager 来解决,他们应该将这些使用案例带到上游策略弹出团队 会议

这将帮助开发人员了解哪些策略应将 manager 角色应用于。它还将帮助操作员将他们自定义的策略合并到 manager 角色中,并减少部署中所需的自定义覆盖量。

开发人员影响

开发人员将拥有另一个角色可供编写默认策略。他们应该被用来了解 manager 角色的影响,并确保他们只将其与具有特权最终用户一起使用,至少最初是这样。

实现

负责人

主要负责人

<lbragstad>

工作项

  • 更新 keystone-manage bootstrap 以创建一个名为 manager 的新角色

  • 更新角色含义,使 manager 处于角色层级中

  • 将相应的经理角色(系统经理、域经理、项目经理)添加到 指南

  • 将经理角色添加到开发人员 文档

  • 将经理角色添加到描述安全 RBAC 角色的任何 OpenStack 范围的文档

依赖项

这项工作对于推进一套社区范围内的 目标 以改进 OpenStack 中的授权是必需的。

文档影响

工作项目 部分中列出。

参考资料

内联引用。