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 角色并将这些角色分配给用户,才能利用新的策略支持。这些角色的名称将在实施过程中确定。

运营商可以选择自定义其部署的策略设置。

文档影响

  • 需要记录默认策略。

  • 安装指南需要更新,其中包含有关如何创建具有适当角色和项目成员身份的用户说明。

  • 必须编写文档,指导用户如何在升级后使用新的策略功能。

参考资料