Klu*_*mbe 5 credentials production-environment ruby-on-rails-5.2
有没有办法以编程方式向 Rails 5.2 中的 config/credentials.yml.enc 添加机密?
将credentials.yml.enc 推送到存储库供内部使用可能没问题,但是一旦其他人使用该应用程序,他们就需要在他们的环境中使用不同的秘密。就像每个实现的 Oauth2 凭据都会有所不同。
在 docker 中运行应用程序(例如)将需要比平时更多的手动交互和 Docker 专有技术。在大多数情况下,更安全的方式只有在不费力的情况下才会使用。
一个人需要先运行docker exec <app-name> -it /bin/bash才能运行rails credentials:edit。
能够以编程方式填充凭据文件会更好。例如,可以提供一个临时凭证文件,例如:
production:
postgresql:
username: 'admin'
password: 'very_insecure'
Run Code Online (Sandbox Code Playgroud)
然后可能有一个脚本将文件的内容添加到凭据文件中,然后删除临时文件。
当然,RAILS_MASTER_KEY必须设置环境变量(也可以是将 master.key 文件的内容移动到变量中的脚本)以获得任何利润。
GoB*_*sto 10
您可以通过EDITOR环境变量的一些技巧来做到这一点。
通常,您可以使用EDITOR=nano rails credentials:editRails 传递(临时解密的副本)进行credentials.yml.enc修改nano,并在终止时对结果进行重新加密nano。
如果我们nano用cat( EDITOR=cat rails credentials:edit) 替换,Rails 将传递(解密的)文件cat,使其内容打印在屏幕上。换句话说,Rails 实际上只是在运行$EDITOR tempfile.name。
因此,如果我们这样做:
EDITOR='echo "foo: bar" >> ' rails credentials:edit
Run Code Online (Sandbox Code Playgroud)
...那么结果将是这样的:
echo "foo: bar" >> tempfile.name
Run Code Online (Sandbox Code Playgroud)
tl;dr:您可以滥用EDITOR(间接)做您对常规纯文本文件所做的几乎任何事情。