Security/Juno/Marconi
本页面记录了 OpenStack Juno 版本中 Marconi 项目的安全相关细节。
已实现的加密
目前没有。不过,我们希望在 K 周期实现消息签名。(待定)
使用的加密
库
Marconi 的唯一加密是在 keystone 中间件和后端驱动程序使用的库中。
Keystone
Marconi 使用标准的 Keystone WSGI 中间件进行身份验证。
后端
Marconi 目前依赖 pymongo 和 SQLAlchemy 来实现存储驱动程序。pymongo 使用 Python 的标准 "ssl" 包 (源代码)。
在 Juno 期间,我们也在试验 Redis、AMQP 和 Kafka 驱动程序。
- AMQP 驱动程序将使用 qpid-proton 的 Python 绑定,后者使用 OpenSSL。
- Redis 本身不支持 TLS。可以通过代理添加支持,但我们目前不计划将支持添加到 Marconi 驱动程序中。
- Kafka 似乎也不支持 TLS。
加密算法
| 算法 | 目的 | 可配置 | 实现 | 详情 | 源代码 |
|---|---|---|---|---|---|
| TLS | 加密的 MongoDB 连接 | Yes | pymongo | 可以通过在 marconi.conf 中配置的 mongodb 连接字符串中设置一个标志来启用 SSL。我们计划也通过 marconi.conf 使证书选项可配置。 | https://github.com/mongodb/mongo-python-driver/blob/master/pymongo/pool.py |
| TLS | 加密的 AMQP Broker 连接 | 待定 | qpid-proton | 待定 | https://svn.apache.org/repos/asf/qpid/proton/trunk/proton-c/src/ssl/ |
哈希算法
| 算法 | 目的 | 可配置 | 实现 | 详情 | 源代码 |
|---|---|---|---|---|---|
| CRC32 | 在多个 MongoDB 数据库中分散队列 | 数据库数量“分区”是可配置的。 | binascii.crc32 | 由于我们预计操作员只会使用少量分区(2-4 个),因此认为 CRC32 可以提供相对均匀的分布。攻击者可能会创建许多队列,命名方式使其最终位于同一分区上。此威胁 将在 j-2 中进行检查。 | GitHub 链接 |
敏感数据
密钥/证书
API:无
后端:见下文
密码
API:传递给 Marconi 的唯一内容是 Keystone 身份验证令牌。
后端:MongoDB 驱动程序不支持 Mongo 的身份验证功能。我们正在考虑在 Juno 中添加此支持 (bug),但这项工作可能会推迟到 K 周期。目前没有计划为任何其他后端支持身份验证。
潜在改进
我们可以进行改进的潜在列表,顺序不限
- 提交补丁到 pymongo,以利用 Py3K ssl 模块的改进
- 迁移到 mmh3 替代 crc32,或迁移离开在多个数据库中分散队列
- 支持 MongoDB 的身份验证功能
- 支持对本机不支持 TLS 的后端使用 TLS 代理
- 实现消息签名,可能还包括加密
- 如果决定支持 AMQP 后端,则添加对用户/密码身份验证的支持