基于用户角色的资源条件暴露

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/heat/+spec/conditional-resource-exposure

根据实际用户角色暴露可用资源。

问题描述

目前,我们会无条件地注册并向用户展示所有在代码库中的资源插件。随着我们将一些需要特殊角色才能实例化的 contrib/ 资源(例如 Keystone 资源)移动到代码库中,所有用户都会看到它们可用,尽管用户可能由于 RBAC 限制而实际上无法使用它们。这会使用户感到困惑,并导致堆栈在创建时失败,而不是在验证时提前失败。

提议的变更

heat.conf (在 [clients] 部分,用于每个客户端,或在 [client_*] 部分,用于特定客户端) 中添加可选设置,指定实例化此服务受限资源所需的“特殊”角色列表。

在验证期间使用这些值,将角色与上下文中的角色进行比较,以检查特定用户是否可以使用资源。

新配置选项的默认值(空列表)意味着向任何用户显示资源可用。

备选方案

保持现状,继续让用户感到困惑,并导致模板在创建需要特殊角色才能创建的资源时失败,而不是提前失败。

长期的替代方案/改进是等待 Keystone 在 API 的一部分中实现细粒度的策略控制和查询。

实现

负责人

主要负责人

Pavlo Shchelokovskyy <pshchelo>

里程碑

完成目标里程碑

liberty-1

工作项

  • 添加描述所需特殊角色列表的客户端插件配置选项

  • 添加一个属性到需要特殊角色的资源,标记它们为需要特殊角色

  • 为资源添加一个额外的 SupportStatus 参数,提示该资源可能需要普通用户通常没有的特殊角色

    • 修改文档生成,标记此类资源

  • 添加验证步骤,比较配置中的选项与上下文中的角色

  • 单元测试

  • 功能测试

    • 修改 DevStack,以根据 DevStack 对新 Keystone 客户端选项的特殊角色的默认策略自动配置 Heat

    • 检查从非管理员用户调用时是否列出 Keystone 资源

    • 检查包含 Keystone 资源的模板是否验证失败

依赖项

  • blueprint keystone-based-resource-availability 已实现

  • 需要管理员权限的资源从 contrib/ 移动到代码库中