隐藏参数加密

https://blueprints.launchpad.net/heat/+spec/encrypt-hidden-parameters

在将标记为隐藏的模板参数存储到数据库之前对其进行加密。

问题描述

Heat 模板参数可以标记为隐藏,但目前这些值以明文形式存储在数据库中。

模板作者当前将参数标记为隐藏,以便不在日志中记录或在用户界面中向用户显示。

问题在于这些可能是敏感数据,因此,如果数据库遭到攻击,对数据库中的数据进行加密可以提供一些安全性。

将敏感客户数据以未加密的形式静置会为数据落入错误手中或被带出公司提供更多选择。 如果 DB Linux 系统受到损害,执行 MySQL 转储非常快速且容易,这与 Heat 存在漏洞无关。 加密数据有助于在 Heat 中出现任意数据库数据泄露时提供帮助。

提议的变更

  • 提供一个配置选项以启用/禁用隐藏参数加密。(默认情况下禁用参数加密)

  • 在将 Stack 数据存储到数据库之前,加密标记为隐藏的参数。

  • 在从数据库读取 Stack 数据后立即解密参数,并使用解密后的参数创建 Stack 对象。

  • 此实现使用与当前用于加密/解密用户凭据、信任令牌和资源数据的相同密钥和加密机制。(加密密钥在 Heat 配置文件中定义)

备选方案

  • 与其加密隐藏参数,不如将所有参数作为字典进行加密。

  • 加密整个 MySQL 数据库存储的磁盘或加密存储特定表的文件的磁盘。

  • 另一种选择是使用 CryptDB

    www.cs.berkeley.edu/~istoica/classes/cs294/11/papers/sosp2011-final53.pdf

  • 将 Barbican 与 Heat 集成,并使用 Barbican 存储密钥。

实现

负责人

主要负责人

vijendar-komalla

里程碑

完成目标里程碑

Juno-2

工作项

  • 修改 Stack 的 ‘store’ 方法,以便在存储到数据库之前加密参数

  • 修改 Stack 的 ‘load’ 方法以解密参数

  • 创建一个迁移脚本来加密已存储的参数

  • 创建一个工具/脚本来更改加密密钥并重新加密所有参数

依赖项