有没有办法在Rails 5.2中以编程方式向config / credentials.yml.enc中添加机密?
将凭据.yml.enc推送到存储库以供内部使用可能很好,但是一旦其他人使用该应用程序,他们就需要在其环境中使用不同的秘密。就像Oauth2凭据对于每个实现而言都会有所不同。
例如,在docker中运行应用程序将需要更多的手动交互以及Docker专有技术。在大多数情况下,只有在不付出更多努力的情况下,才会使用更安全的方式。
一个人首先需要运行docker exec <app-name> -it /bin/bash
才能运行rails credentials:edit
。
最好能够以编程方式填充凭据文件。 例如,可以提供一个临时凭证文件,例如:
production:
postgresql:
username: 'admin'
password: 'very_insecure'
然后可能会有一个脚本,将文件的内容添加到凭据文件中,然后再删除临时文件。
确保必须设置RAILS_MASTER_KEY
环境变量(可以再次是将master.key文件的内容移入该变量的脚本)以获取任何收益。
答案 0 :(得分:1)
您可以使用EDITOR
环境变量通过一些技巧来实现此目的。
通常,您将使用EDITOR=nano rails credentials:edit
来使Rails将credentials.yml.enc
(临时解密的副本)传递给nano
进行修改,并且在{ {1}}终止。
如果我们将nano
替换为nano
(cat
),Rails会将(解密的)文件传递给EDITOR=cat rails credentials:edit
,从而使其内容显示在屏幕上。换句话说,Rails实际上只是在运行cat
。
因此,如果我们这样做:
$EDITOR tempfile.name
...那么结果将是这样:
EDITOR='echo "foo: bar" >> ' rails credentials:edit
tl; dr::您可以滥用echo "foo: bar" >> tempfile.name
(间接地)执行与常规纯文本文件差不多的任何事情。