使用 keystoneclient 会话

https://blueprints.launchpad.net/python-glanceclient/+spec/session-objects

Keystoneclient 会话正被用作一个通用的基础库,以标准化处理令牌和身份验证凭据,超越基本的用户名和密码。

这提高了安全性,因为这些问题只有一个更新点,并且可以透明地向各个客户端添加额外的身份验证机制。

Glanceclient 应该采用会话,就像其他客户端一样。

问题描述

OpenStack 客户端都是比较有机地发展起来的。每个客户端都自行处理身份验证,并且这种方式被复制粘贴到每个服务中。这导致

  • 客户端之间接受的参数不一致。

  • 当发现错误需要修补时,出现安全问题,需要在每个客户端中进行修复。

  • 服务目录、区域等的使用不一致。

  • 添加 keystone 中可用新功能时出现问题。

Glanceclient 的结构与其他客户端不同。它是少数几个很好地分离 CLI 和库职责的客户端之一。但是,它确实执行自定义 HTTPS 处理和其他安全相关修复,这些修复不能在其他组件中重用。

由于卸载到 CLI,它无法处理令牌刷新等问题,并将操作服务目录的责任放在用户身上——通常是其他服务。

提议的变更

我想使 glanceclient 更符合其他客户端。现在已经有了诸如服务目录之类的东西可以由其他库一致管理,glanceclient 避免使用这些信息就更没有借口了。

这将涉及在检测到会话和其他选项时创建不同类型的 HTTPClient。这将允许 glanceclient 继续像今天一样运行,除非用户选择使用新参数。这些新参数由 keystoneclient Adapter 对象管理,因此只需传递 kwargs 即可。

glanceclient 的 CRUD 层和请求路径不受影响。

备选方案

Glanceclient 可以继续像现在一样运行。这不如其他客户端糟糕,因为它将此配置推回到服务上,而不是错误地在内部处理选项。但是,这使其成为一个特殊案例,glanceclient 将无法从其他服务获得标准化身份验证流程和选项所做的努力。

数据模型影响

REST API 影响

安全影响

此更改将重新实现 glanceclient 处理身份验证、令牌管理和选择端点的方式。它通过将这些概念卸载到 keystoneclient 来处理,以便可以在那里处理任何安全问题。

它将弃用 glanceclient 执行的自定义 HTTPS 处理。我的理解是,这种自定义处理主要是为了通过防止客户端通告 SSL 压缩功能来禁用 BEAST 风格的攻击。虽然将为当前客户端保持兼容性,但在使用通用处理逻辑时,可能无法保持此功能。

通知影响

其他最终用户影响

性能影响

其他部署者影响

这里的后续影响是,其他服务在配置文件中具有用于与 glance 通信的凭据和参数,这些凭据和参数将与其他服务标准化。

开发人员影响

这将更改建立 glanceclient 时提供的参数。新的参数在所有其他 OpenStack 客户端库中都是标准化的。现有的参数将显而易见地保留,并随着时间的推移被弃用。

这将极大地帮助服务到服务之间的集成,因为 auth_token 中间件提供了一个可以直接使用的身份验证插件,并标准化了所有客户端使用的选项。

实现

负责人

谁在编写代码?或者这是一个蓝图,您正在将其抛出以查看谁会接受它?

如果有多个人正在进行实现,请指定主要作者和联系人。

主要负责人

jamielennox

其他贡献者

评审人员

我希望有人愿意作为审查的联系人。

核心评审人

目前没有

工作项

  • 有一些初始的测试更改是必需的,以适应新模型。这些通常被认为是很有用的,不一定是特定于此审查的。

  • 将会话处理和现有参数的处理添加到 glanceclient。

  • 将 glanceclient CLI 转换为使用标准参数和选项处理。在其他我做过的项目中,我们并不总是完成这一步。大多数客户端正在转向 OpenStackClient 项目进行 CLI,并且不担心对其 CLI 应用程序进行重大重构。

依赖项

测试

我们可以对这些更改进行单元测试。还应该能够使用测试场景方法,以便使用传统方式创建的客户端和使用会话创建的客户端运行现有的 CRUD 测试。

文档影响

更新有关如何实例化客户端的文档。

参考资料