【问题标题】:Append secrets to credentials.yml.enc programmatically以编程方式将机密附加到 credentials.yml.enc
【发布时间】:2019-05-13 19:48:32
【问题描述】:

有没有办法在 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'

然后可能会有一个脚本将文件的内容添加到凭据文件中,然后删除临时文件。

肯定必须设置 RAILS_MASTER_KEY 环境变量(可能又是一个将 master.key 文件的内容移动到变量中的脚本)才能从中获利。

【问题讨论】:

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


    【解决方案1】:

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

    通常,您会使用EDITOR=nano rails credentials:edit 让Rails 将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
    

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

    echo "foo: bar" >> tempfile.name
    

    tl;dr:您可以滥用EDITOR 来(间接)执行您对常规纯文本文件所做的任何事情。

    【讨论】:

    • 谢谢。实际上,我希望有一个专门的命令来完成这项任务,但是您的建议运行良好,因此它是一个很好的解决方法,仅使用一个“>”有助于在基于存根创建新凭据文件的情况下。我希望在未来的 Rails 版本中看到这样的命令,以便可以提供输入文件,甚至可以在命令执行后立即删除它,就像只是加密它一样。
    猜你喜欢
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多