在rails中,secrets.yml文件有一个默认注释,声明您不应该在存储库中保留生产机密,而应该从环境中读取值。我几乎无处不在地阅读,以便为环境文件中的各种API保密密钥,以确保它们的安全。
我的问题是,这怎么更安全?如果您有一个公共回购,那么有人可以查看您的production.rb文件以获取您的密钥而不是查看secrets.yml吗?我不明白如何将它们放在同一个仓库中的不同文件中更安全。
最后,如果您没有将环境文件放入您的仓库,那么如果您从github仓库构建这些文件,您的服务器如何获取这些文件?
我意识到我可能在这个过程中遗漏了一些东西,所以任何关于帮助我理解这个过程的建议都会被贬低。
答案 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),因为:
在将环境传递给任何子进程之前,您应该清除秘密envvars。