将 glance-replicator 迁移到 requests 以支持 HTTPS

https://blueprints.launchpad.net/glance/+spec/migrate-replicator-to-requests

随着操作员和用户对安全性意识的提高,支持仅通过 HTTPS 提供服务的 Glance 部署至关重要。目前,glance-replicator 使用 httplib,因此无法正确验证 HTTPS 连接。这使得在 glance-replicator 用户尝试与 Glance 通信时,可以执行各种非常严重的攻击。

问题描述

许多部署目前支持到 Glance API 的 HTTP 和 HTTPS 连接。随着最佳实践的演变,Glance 和其他 OpenStack 服务仅通过 HTTPS 提供服务,并使用有效的 X.509 证书将变得越来越普遍。目前,如果操作员部署 Glance 并仅使用 HTTPS 提供服务,glance-replicator 由于无法验证服务器提供的证书,仍然允许观察者进行各种攻击。

其中,用户与 Glance 的连接很容易被中间人拦截,该中间人提供虚假证书,然后代理甚至更改通过连接发送的数据。由于 glance-replicator 的典型用户是管理员,他们拥有的任何服务令牌都可能被拦截和使用,这鉴于管理员的权限,是非常危险的。

提议的变更

本规范建议将 glance-replicator 中使用 httplib 的代码重写为使用 requestsrequests 支持所有 HTTPS 连接上的自动证书验证,并允许用户为自签名证书提供自定义证书包。

鉴于操作员可以选择为其 Glance 部署签名自己的证书,本规范还建议向 glance-replicator 添加一个命令行选项,允许操作员指定在验证证书时要使用的自定义证书包。

备选方案

一个替代 requests 的方案,并且已经用于其他 OpenStack 项目的是 httplib2。该库提供与 httplib 几乎相同的 API,并执行证书验证。然而,该库正被许多相同项目积极地替换为 requests。减少操作员需要安装的依赖项也很有利。

一个替代让用户指定其自定义证书包的方案是提供一个 glance-replicator.conf 文件。这将是一个全新的文件。添加另一个配置文件可能会增加对部署 Glance 时需要哪些文件的困惑。

数据模型影响

REST API 影响

安全影响

对于通过 HTTPS 提供服务的 Glance 部署,这将提高用户连接的安全性。

通知影响

其他最终用户影响

未正确配置 HTTPS 的用户可能会收到错误。由于 glance-replicator 以前不会生成错误,这对于用户来说可能是一个令人不快的体验。本规范的作者认为,以不安全的方式连接到 Glance 的选项是一个糟糕的选择,因为这些错误会鼓励操作员正确配置 Glance 以通过 HTTPS 提供服务。

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

icordasc

其他贡献者

junhongl

评审人员

核心评审人

flaper87 flwang

其他审核员

nikhil-komawar kragniz

工作项

  • 重构 glance-replicator 以删除其围绕 httplib 的一些约定。

  • httplib 替换为 requests

  • 添加指定自定义证书包的选项

  • 添加关于新选项和功能的 glance-replicator 文档

依赖项

测试

requests-mock 将用于编写 glance-replicator 的单元测试,以确保获得适当的覆盖率。

文档影响

glance-replicator 的 man 页面需要更新,以说明新的配置选项。我们应该注意设置自定义证书的两种当前方式

  1. requests 将查找 REQUESTS_CA_BUNDLECURL_CA_BUNDLE 环境变量

  2. 新的 glance-replicator 选项。

参考资料

缺陷