Rails 5.2用于生产环境的加密凭据

时间:2018-06-27 08:35:44

标签: ruby-on-rails ruby gitlab-ci ruby-on-rails-5.1 ruby-on-rails-5.2

我用5.2版创建了新的Rails应用程序。 Rails 5.2引入了机密的加密功能。

我已在devise.rb文件中配置了密钥

  

config.secret_key = Rails.application.credentials [Rails.env.to_sym] [:secret_key_base]

,还使用

在所有环境中添加了secret_key。
  

EDITOR = vim rails凭证:编辑

const init  = (params) => (<div> <HtmlComponent/> </div>);

const HtmlComponent = (props) = > {
return(
  <div>
    //do whatever you want to do
  </div>
  );
}

保存凭据后,我可以在本地的rails控制台中获取secret_key

在Rails控制台中输出:

development:
 secret_key_base: absdss

test:
 secret_key_base: 123232

production:
 secret_key_base: 123456

凭据在生产服务器上不起作用,当我运行

时,我们在gitlab中使用CI / CD进行部署
  

rails db:create db:migrate

我遇到以下错误

Running via Spring preloader in process 44308
Loading development environment (Rails 5.2.0)
2.5.1 :001 > Rails.application.credentials.development[:secret_key_base]
=>     "absdss" 

现在的问题是如何将RAILS_MASTER_KEY设置为生产服务器?

3 个答案:

答案 0 :(得分:2)

您可以在Gitlab CI / CD设置中将主密钥作为MASTER_KEY秘密变量,然后放置

echo "$MASTER_KEY" > config/master.key

before_script文件的.gitlab-ci.yml部分中。

答案 1 :(得分:1)

我分享的一些观点可能会对您有所帮助

与纯文本凭据或环境变量相比,加密凭据具有一些优势

发布了5.1引入的加密机密

  

config / secrets.yml.key
  config / secrets.yml.enc

Rails 5.2使用加密的凭据替换两个机密

  

config / credentials.yml.enc
  config / master.key

在创建Rails项目时创建

config / master.key文件

加密密钥(master.key)被忽略git

生产中

config / environments / production.rb

config.require_master_key = true

没有密钥就无法解密您的凭据

管理密​​钥

a。 scp或sftp文件

b。如果您需要向开发人员提供密钥的副本,则可以使用密码管理器,因为他们使用加密。

c。我使用最后一遍来管理主密钥文件

用于加密凭据的密钥与秘密密钥库不同。

master.key上的密钥用于加密和解密所有凭据。它不会替代密钥库。

Rails需要密钥库。如果您要生成新的密钥库运行,

bin/rails secret

,然后通过运行bin / rails certificate:edit将其添加到您的凭据中。

答案 2 :(得分:0)

Rails.application.credentials.development&.dig(:secret_key_base)

试试这个。