以编程方式将机密添加到凭据.yml.enc

时间:2019-05-13 19:48:33

标签: credentials production-environment ruby-on-rails-5.2

有没有办法在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文件的内容移入该变量的脚本)以获取任何收益。

1 个答案:

答案 0 :(得分:1)

您可以使用EDITOR环境变量通过一些技巧来实现此目的。

通常,您将使用EDITOR=nano rails credentials:edit来使Rails将credentials.yml.enc(临时解密的副本)传递给nano进行修改,并且在{ {1}}终止。

如果我们将nano替换为nanocat),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 (间接地)执行与常规纯文本文件差不多的任何事情。