我已经将我的Django应用程序部署到了Elastic Beanstalk,目的是使用其环境variablesconfiguration接口来存储我的API密钥,而不是将它们存储在我的源代码中(如以下https://stackoverflow.com/a/17878600所述 )。
这样做后,我发现Beanstalk调用环境variables实际上并不是shell环境variables(如这里提到的https://stackoverflow.com/a/24564832/378638 ),并在实例中存储在一个configuration文件(如这里描述https://stackoverflow.com/a/24566283/378638 )。
这对我来说似乎是一个安全问题。 这难道不会破坏保密密钥的目的吗? 我知道他们不再在回购,但他们仍然可以访问的实例。
我误解了风险? 我是inheritance的系统pipe理员,请原谅我的无知。 我是否应该通过configuration文件加载Beanstalkvariables作为shell环境variables,并继续前进,因为文件只能通过root访问,或者我关心的是否有效? 谢谢。
保持源代码秘密的一点是,它们不会进入源代码pipe理 。 这在开源项目中特别有用。
部署时,秘密在文件或envvar中无关紧要。 重要的是,只有你的程序正在运行的操作系统用户可以读取它。 这是envvars的默认值,这很方便。
Root可以随时读取所有内容。 所以亚马逊可以知道你的秘密价值,因为它们是根源。
他们确实支持昂贵的硬件安全模块(HSM),这将使您的密钥不可读。 当然,他们仍然可以使用 HSM解密你的东西,只是从来没有得到实际的密钥。
所以要么你需要信任亚马逊,要么自己托pipe东西,要么共处。