我已将 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 始终可以读取所有内容。因此,如果 Amazon 愿意,他们可以知道您的机密值,因为他们是 root(尽管他们有禁止读取您资料的政策)。
他们做支持昂贵的硬件安全模块 (HSM),这会使你的密钥无法读取。当然,他们仍然可以使用使用 HSM 解密你的东西,只是永远拿不到真正的密钥。
AWS 还提供密钥管理服务,类似于软件 HSM
因此,您要么需要信任亚马逊,要么自己托管,要么进行共置。