无法理解将私钥存储在何处

Having trouble understanding where to store private keys

我在确定如何正确存储 API 密钥或其他私人信息时遇到问题。我有一个帮助程序库,用于大量面向内部的公司应用程序,这些应用程序调用外部 API 来发送电子邮件,并且必须有权访问 API 密钥。我将此密钥存储在这些应用程序使用的共享配置文件中。如果我想通过加密或将其移动到 Azure Key Vault 之类的服务来进一步保护密钥,那么我就会陷入将问题复杂化的困境,因为我现在拥有用于该加密的私钥或要访问的密钥我现在需要保护的 Azure Key Vault。因为这类问题很常见,所以我假设我在这里遗漏了一些东西。每次我尝试进一步加密或以其他方式保护密钥时,我只是在添加另一层相同的问题。我最终还是得到了一个以纯文本形式存放在某处的私钥。在其他安全的环境中拥有纯文本密钥毕竟不是问题吗?

我想指出,我不能使用环境变量或我见过的其他一些工具来保护机器上的密钥,因为这些应用程序可以 运行 在任意数量的终端服务器或本地整个公司的机器。大多数是用 .Net 4.5 编写的单击一次的 Dot Net 应用程序,可以 运行 我们环境中的任何地方,有些可以由我们域中的任何用户使用。

我不使用 azure,但我认为 Azure Key Vault 与 AWS Secrets Manager which is exactly the thing I would use (I wrote about one use case for storing Amplitude API keys on my blog) 非常相似。

为什么这比简单地将密钥放在文件中更好?

  • 简化密钥分发:您不需要在所有机器上下载密钥
  • 提高安全性:您只需在运行时加载密钥,无需将密钥永远放在磁盘上

请注意,double-encrypting 您提到的密钥没有多大意义。这只会增加复杂性,而不会大大提高解决方案的安全性。 此外,在 AWS 的情况下,您将指定一个非常精细的 IAM policy/permissions 来访问特定的秘密,并将策略附加到分配给需要使用密钥的实例的 IAM 角色。