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

我已经将我的Django应用程序部署到Elastic Beanstalk,并打算使用其环境变量配置界面来存储我的API密钥,而不是将它们存储在我的源代码中(如此处所述https://stackoverflow.com/a/17878600)。 在这样做之后,我发现Beanstalk所谓的环境变量实际上并不是shell环境变量(如此处所提到https://stackoverflow.com/a/24564832/378638),而是存储在实例上的配置文件中(如此处所述https://stackoverflow.com/a/24566283/378638)。 对我来说,这似乎是一个安全问题。这难道不会破坏将密钥保持在源代码之外的目的吗?我知道它们不再在代码库中,但它们仍然可以在实例上访问。 我是否误解了风险?我是通过继承成为系统管理员的,所以请原谅我在这方面的无知。我应该只是通过配置文件将Beanstalk变量加载为shell环境变量并继续前进,因为该文件只能通过root访问,还是我的担忧是合理的?谢谢。
1个回答

保持秘密不进入源代码的目的是为了防止它们进入源代码控制。这在开源项目中特别有用。 在部署时,无论秘密是在文件还是环境变量中都无关紧要。重要的是只有作为您的程序运行的操作系统用户才能读取它。这是环境变量的默认设置,非常方便。 Root用户始终可以读取所有内容。因此,如果他们愿意,亚马逊可以知道您的秘密值,因为他们是root用户(尽管他们有阅读您的内容的政策)。 然而,他们确实支持价格昂贵的硬件安全模块(HSM),这将使您的密钥无法读取。当然,他们仍然可以使用HSM来解密您的内容,只是无法获取实际密钥。 此外,AWS还提供了类似软件HSM的密钥管理服务。 因此,您要么需要信任亚马逊,要么自己托管,或者进行合作放置。