Keystone 策略支持¶
https://bugs.launchpad.net/ironic/+bug/1526752
Keystone 和 oslo.policy 支持基于认证用户的信息来限制访问,允许运营商配置部分访问权限。本规范阐述了如何在 ironic 中实现此支持。
问题描述¶
Ironic 传统上采用“全有或全无”的访问系统,仅限制对密码的访问。当多个具有不同信任级别的人员和组希望与 ironic 交互时,这种模式受到严重限制。例如,硬件技术人员可能需要访问权限来设置或取消节点的维护状态,但不应具有配置节点的权限。
提议的变更¶
确保在通过 KeystoneMiddleware.auth_token 支持正确实现后,从 auth_token 中正确派生诸如角色等适当的元数据。
为每个 API 端点的每个 RESTful 操作定义策略规则,范围限定为 ‘baremetal’ 命名空间。
配置每个 API 端点以验证用户是否被策略允许访问它。
为敏感信息实施特定的限制,包括 configdrives 和密码。默认情况下隐藏所有敏感信息。
在代码中定义合理的默认策略 [0],随附的角色包括具有完全访问权限的 admin 角色和具有对非机密信息的只读访问权限的 observer 角色。这些角色的名称将在实施过程中确定。可以使用 oslopolicy-sample-generator 生成示例 policy.json [1]。
保持与先前随附的 policy.json 配置文件中所有角色的兼容性。
备选方案¶
部署者可以将 ironic 置于反向代理之后,并使用另一种身份验证方法来允许或禁止基于路径和 HTTP 方法的访问。这样做既繁琐,又不遵循其他 OpenStack 服务所设定的模式,并且无法提供正确实施策略支持所能提供的粒度。
数据模型影响¶
无。
状态机影响¶
用户可能受到策略的限制,无法在状态机内移动节点。但是,不会对状态机进行直接修改。
REST API 影响¶
如果用户无法使用请求的方法/端点组合,则可能会收到 403 错误。但是,REST API 不会在任何今天无法执行的情况下返回 403,例如,未经授权的用户今天可能会收到 403。这只是增加了配置此授权的粒度。
403 响应体应指示拒绝访问的是哪个资源。
客户端 (CLI) 影响¶
CLI 客户端用户需要拥有经过适当授权的用户才能执行任何请求的操作。
RPC API 影响¶
无。
驱动程序 API 影响¶
驱动程序现在可以在任何 driver_vendor_passthru 方法中根据需要强制执行策略。
Nova 驱动程序影响¶
现有的部署可以继续使用完全管理员用户,如在此功能之前所必需的。升级后,部署者可以使用权限较低的用户进行 nova-ironic 交互。
Ramdisk 影响¶
N/A
安全影响¶
此更改的主要影响在于提高系统的安全性。 ironic 的部署者不再需要提供管理员凭据来仅操作 ironic API 的一小部分。
其他最终用户影响¶
无。
可扩展性影响¶
无。
性能影响¶
策略支持是最小的开销增加。此外,大多数策略将在 API 层的早期实施,以防止 ironic 在用户被认为未授权之前执行过多的工作。
其他部署者影响¶
部署者现在能够配置策略,在 policy.json DSL [1] 中,以满足其特定需求。
开发人员影响¶
每当开发人员实施新的 API 方法时,他们都需要添加一个新的策略规则来表示该 API 端点或方法,定义默认规则,适当强制执行策略,并根据需要更新默认策略。
实现¶
负责人¶
- 主要负责人
devananda
- 其他贡献者
JayF
工作项¶
更新 devstack 以正确配置用户。
更改 devstack 中的 nova 配置以使用新的 baremetal_driver 角色。
记录如何使用策略,包括如何在 keystone 中创建用户并将它们分配给 baremetal 项目。
记录使用 Keystone API v2 与 v3 时存在的任何差异。
依赖项¶
无。
测试¶
Grenade 测试以确保我们不会破坏现有的部署。
单元测试以确保策略正在得到正确执行。
升级和向后兼容性¶
现有的部署者需要使用管理员用户来使用 ironic 的所有用途,这些用户将继续完全访问 ironic API,从而实现向后兼容性。
升级后,运营商必须定义新的 keystone 角色并将这些角色分配给用户,才能利用新的策略支持。这些角色的名称将在实施过程中确定。
运营商可以选择自定义其部署的策略设置。
文档影响¶
需要记录默认策略。
安装指南需要更新,其中包含有关如何创建具有适当角色和项目成员身份的用户说明。
必须编写文档,指导用户如何在升级后使用新的策略功能。