如果万能钥匙损坏,Rails的新凭证会产生更大的风险?

Max*_*nce 5 ruby-on-rails ruby-on-rails-5.2

直到现在,我仍以通常的方式处理我的应用程序秘密:

  • 开发中:我的机密未加密地存储在secrets.yml文件中。secrets.yml文件未提交到Github并保留在我的计算机上。

    根据AWS建议,我的角色可以让我拥有特定于开发的密钥。这样可以将我的开发键限制为某些功能,这些功能的范围与生产键不同。

  • 在生产中:我的密钥存储在Heroku中,就像ENV["AWS_SES_KEY"]在Windows中一样调用config/environments/production.rb

我非常喜欢它,因为万一我的计算机被盗了,可以在AWS上擦除开发密钥,然后这些密钥会损坏,而无需触摸生产密钥。并且由于开发密钥可以限制在AWS的特定操作范围内,因此可以防止任何危险的更改(完全删除存储桶...)

现在我们有了凭据,如果我没记错的话,所有密钥(开发和生产)都在同一个加密文件中。主密钥是现在播种到Heroku的唯一环境密钥。虽然我仍然需要在本地使用此密钥才能访问凭据。然后,如果我的计算机被盗,开发密钥和生产密钥都将损坏,并可能对我的生产应用程序产生更高的风险。

我的新凭证功能是否缺少某些功能?有什么办法可以避免上述问题?

secrets.yml用于开发人员密钥和credentials.yml.enc生产密钥的功能是什么,这是什么目的?

Jor*_*ell 0

正如Rails 5.2.0 的发行说明所述,未来的目的是将secrets.yml和替换secrets.yml.enccredentials.yml.enc

这最终将取代 Rails.application.secrets 和 Rails 5.1 中引入的加密密钥。

有一种非常明确的感觉,即credentials.yml.enc仅包含生产凭据,因为 Rails 建议不要在其中包含环境特定的密钥;IE,

# don't do this
development:
  # ...

production:
  # ...
Run Code Online (Sandbox Code Playgroud)

至于config/master.key“腐败”风险,我不知道如何回答。仅当在生产模式下运行时才需要主密钥。您还可以将主密钥存储在RAILS_MASTER_KEY环境变量中。在开发过程中,如果您想编辑credentials.yml.enc.