存储/检索敏感密钥文件的最佳方式?

信息安全 密码 Python django
2021-09-11 07:45:30

我们的 Web 服务器在 AWS EC2 中运行。我们在环境中设置了大约 30 个 API 密钥/密码/等(敏感数据),供我们的应用程序使用。每当我们部署时,我们都会启动一个新的服务器实例,拉下我们的 repo 并构建我们的应用程序。我需要一种方法来获取服务器的密钥以放入应用程序的环境中。由于我们每周部署多次,因此这不能是手动过程。我也不想将密钥放在我们的存储库中。即使我们用我们所有的密钥加密了一个文件,我们仍然需要一个密钥来在另一端解密它。我有一个解决方案,但是每当我们需要添加/更改密钥时,它都不是很简单。

谁能想到让我将这些钥匙带入环境的好方法?谢谢!

4个回答

我知道我在这方面迟到了,但现在可能会让其他面临这个问题的人受益。

您可以执行以下操作: - 将主密钥放入数据库 - 在代码仓库中签入实际密钥,但由主密钥加密。此签入密钥可能位于受密码保护的文件中。

几个月前,AWS 推出了一项名为 KMS(密钥管理服务)的新服务。他们负责以安全和合规的方式管理实际密钥及其主密钥。

如果我了解所有内容,我认为您有两种情况(或更多!)

方案 1

您可以创建一个脚本来不断检查新的(加密的)密钥。每当它发现一个新的(通过散列检测到?)时,它就会下载它们并为构建设置一切。如果用 python 做的话,不到 30 行,甚至可能不到 20 行。

Obs 1:包含新密钥的文件需要加密。您可以使用像 AES 这样的对称算法,并且可以将秘密保存在代理中。

Obs 2:检查的最佳方法是 Web 服务器生成哈希并在代理请求时将其输出。

Obs 3:代理不应将密钥直接解密到磁盘。它可能会给您带来一些额外的麻烦,但是如果它只解密内存的密钥然后在必要的文件中进行更改会更好。

方案 2

代理检查本地磁盘而不是 Web 位置,寻找新密钥。只要它可用,这个机器人就会把它放在正确的地方并清理“检查”位置,让它为下一次密钥更新做好准备。

您可以通过 SCP/SFTP/OTHER_ENCRYPTED_OPTION 更新此密钥,并且此上传过程可以根据您的需要自动进行。

在这种方法中,除了新的密钥上传之外,不需要加密任何东西。

您可以将密钥留在专用系统上并通过网络提供加密服务他们访问此类加密服务的密钥可以与开发人员共享,因为它只能从特定 IP 使用。一个著名的 Internet 提供商为 SSL 证书做了这个(我忘记了它的名字)。

面对同样的问题,我最终决定在应用程序要求时通过 API 提供加密密钥。

这有几个优点和缺点:

  • 你依赖某种遏制/限制。在我的例子中,IP 文件串对我们所处的架构来说是最佳的。
  • 存在需要加权的 IP 欺骗风险
  • API 还允许我提供集中配置(根据要求与密钥一起发送)