环境变量如何比secrets.yml更安全

时间:2015-05-14 18:38:34

标签: ruby-on-rails git security secret-key

在rails中,secrets.yml文件有一个默认注释,声明您不应该在存储库中保留生产机密,而应该从环境中读取值。我几乎无处不在地阅读,以便为环境文件中的各种API保密密钥,以确保它们的安全。

我的问题是,这怎么更安全?如果您有一个公共回购,那么有人可以查看您的production.rb文件以获取您的密钥而不是查看secrets.yml吗?我不明白如何将它们放在同一个仓库中的不同文件中更安全。

最后,如果您没有将环境文件放入您的仓库,那么如果您从github仓库构建这些文件,您的服务器如何获取这些文件?

我意识到我可能在这个过程中遗漏了一些东西,所以任何关于帮助我理解这个过程的建议都会被贬低。

2 个答案:

答案 0 :(得分:1)

你是正确的把它们放在secretts.yml vs production.rb中是零差异。将它们放入任何检入源代码控制的文件中是" no no"你正在读书。

至于如何将它们放到服务器上,这取决于您的设置。我自己使用Ansible来管理我的服务器,并将环境变量作为其中的一部分进行部署。您不必这样做,您只需要一些方法在服务器上提供该文件。

答案 1 :(得分:1)

您会混淆environment variables和名称不佳的"环境文件"。

您所指的YAML文件并未说明从环境文件"中读取机密信息,而是从环境中读取它们所指的环境变量:

# Do not keep production secrets in the repository,
# instead read values from the environment.

秘密在环境中是安全的(r),因为:

  1. 你不会意外地将它们检查到源代码管理中,因为你无法
  2. 你不小心搞砸了文件权限,因为没有文件
  3. O / S env vars只能由其用户或root
  4. 读取

    在将环境传递给任何子进程之前,您应该清除秘密envvars。