基于用户角色的资源条件暴露¶
包含您的 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/ 移动到代码库中