以编程方式将机密附加到 credentials.yml.enc

Append secrets to credentials.yml.enc programmatically

有没有办法在 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 文件的内容移动到变量中的脚本)以从中获利。

您可以通过 EDITOR 环境变量的一些技巧来做到这一点。

通常,您会使用 EDITOR=nano rails credentials:edit 以便 Rails 将 credentials.yml.enc 的(临时解密副本)传递给 nano 进行修改,结果re-encrypted 当 nano 终止时。

如果我们将 nano 替换为 cat (EDITOR=cat rails credentials:edit),Rails 会将(解密的)文件传递给 cat,从而导致其内容待打印 on-screen。换句话说,Rails 实际上只是 运行 $EDITOR tempfile.name.

因此,如果我们这样做:

EDITOR='echo "foo: bar" >> ' rails credentials:edit

...那么结果将是这样的:

echo "foo: bar" >> tempfile.name

tl;dr: 你可以滥用 EDITOR 来(间接地)做任何你想为普通 plain-text 文件做的事情。