Elastic Beanstalk 的环境变量是否适合存储秘密值?

M. *_*ler 16 security deployment python elastic-beanstalk

我已将我的 Django 应用程序部署到 Elastic Beanstalk,目的是使用其环境变量配置接口来存储我的 API 密钥,而不是将它们存储在我的源中(如此处所述/sf/answers/1251502031/)。

这样做之后,我发现 Beanstalk 所称的环境变量实际上并不是 shell 环境变量(如这里提到的/sf/answers/1719538271/),而是存储在配置文件中的实例上(如此处描述/sf/answers/1719639841/)。

这对我来说似乎是一个安全问题。这不是违背了将密钥隐藏在源头之外的目的吗?我知道它们不再在 repo 中,但它们仍然可以在实例上访问。

我误解了风险吗?我是继承系统管理员,所以请原谅我的无知。我应该通过配置文件将 Beanstalk 变量作为 shell 环境变量加载并继续,因为该文件只能通过 root 访问,还是我的担忧有效?谢谢你。

Nei*_*gan 13

对源代码保密的目的是使它们不会进入源代码控制。这在开源项目中特别有用。

部署时,秘密是在文件中还是在 envvar 中都没有关系。重要的是只有您的程序正在运行的操作系统用户才能读取它。这是 envvars 的默认设置,很方便。

Root 可以随时读取所有内容。因此,如果亚马逊愿意,他们可以知道您的秘密值,因为它们是根用户(尽管他们有禁止阅读您内容的政策)。

不过,它们确实支持昂贵的硬件安全模块 (HSM),这会使您的密钥无法读取。当然,他们仍然可以使用HSM 来解密你的东西,只是永远不会得到实际的密钥。

还有来自 AWS 的密钥管理服务,就像一个软件 HSM

因此,您要么需要信任亚马逊,要么自己托管东西,要么托管。