Nova-安全更新
- Launchpad 条目: Nova 实现安全性的改进
- 创建时间: 2011 年 10 月 02 日
- 贡献者: Ray Hookway
总结
对 Nova 实现进行多项更改以提高安全性:1. 在 Nova API 服务器上启用 HTTPS,2. 对 Nova 组件之间的消息进行签名,3. 加密存储在数据库中的敏感用户数据,4. 实现特定组件类型的数据库访问权限。
原理
提供 Nova 实现的改进安全性。
设计
1. Nova API 服务器 SSL 配置
目前 Nova API 服务器仅支持 HTTP 通信,不支持 HTTPS,即未使用 SSL(安全套接层)来加密网络流量。提供启用 SSL 的选项将提高安全性。
我们建议添加更改以在 API 服务器中启用 SSL。无需更改客户端工具,只需使用以 HTTPS 开头的 URL 而不是 HTTP 即可自动实现 SSL 的使用。命令行客户端使用环境变量中指定的 URL。
建议的变更
- 通过 nova.conf 中的选项启用/禁用 SSL
- 证书/密钥也通过 nova.conf/glance-registry.conf 指定
- 单元测试更改以验证 http/https
- 对 'glance' cli 命令的更改以支持连接到 http/https 服务器。
2. 实现对提交到消息队列的消息签名
目前任何 Nova 组件都可以访问任何消息队列并提交任何请求。这意味着任何获得任何 Nova 组件访问权限的攻击者都可以向任何其他 Nova 组件提交请求。
我们建议对发送到消息服务器的消息添加签名,并由接收者验证签名。接收者可以根据发送者的身份限制接受的请求类型。
建议的变更
- 在 nova .conf 中添加标志以启用消息签名。
- Nova 中的每个组件都将颁发一个签名密钥(在 nova.conf 中指定)
- 对提交到消息队列的消息进行签名
- 消息消费者验证签名
- 消息消费者确定发送者是否有权发出此请求
- 使用时间戳或 nonce 值来防止重放攻击
- 单元测试更改以验证已签名和未签名的消息
3. 数据库中访问/密钥的加密(可能不需要 Keystone)
目前用户访问和密钥以未加密的形式存储在数据库中。
我们建议在将这些密钥存储到数据库之前对其进行加密。
建议的变更
- 在 nova .conf 中添加标志以包含加密密钥。(请注意,必须仔细控制对 nova.conf 的访问。)
- 修改数据库访问例程,以便在写入数据库时加密密钥,并在读取数据库时解密密钥
- 提供数据库升级/降级支持
4. 实现特定组件类型的数据库服务器访问权限
目前所有 Nova 组件在访问数据库时都共享相同的用户身份。
我们建议为每种类型的 Nova 组件实现不同的用户身份。
建议的变更
- 每个 Nova 组件将获得不同的用户身份和凭据,用于从 nova.conf 访问数据库
- 修改数据库权限,以限制授予每个用户的访问权限,使其仅限于执行其预期功能所需的子集
- 提供数据库升级/降级支持
UI 变更
UI 不需要任何更改。
代码变更
待定
迁移
待定
测试/演示计划
待定
BoF 议程和讨论
使用本节记录 BoF 期间的笔记;如果将其保留在批准的规范中,请用于总结讨论内容并记录任何被拒绝的选项。