Rails 6 裡設定環境變數與憑證

Home Ruby on Rails Rails 6 裡設定環境變數與憑證
Rails 6 裡設定環境變數與憑證
Ruby on Rails

應用程式通常中有各種密碼和憑證,我們需要使用 API 密鑰、密碼等。對於這些機密,我們需要能夠方便、安全地管理憑證。

如何新增/更新環境變數與憑證(credentials)

我們可以通過執行以下指定來編輯憑證:

$ EDITOR=vim rails credentials:edit

這將打開 vim 編輯器,其中包含憑證文件的解密版本。

我們可以添加 YAML 格式的新憑證。 讓我們添加以下行,保存更改並退出。

aws:
  access_key_id: 123
  secret_access_key: 345
github:
  app_id: 123
  app_secret: 345

當我們保存它時,它會使用相同的主密鑰再次加密。

如果沒有設置預設編輯器並且我們沒有指定編輯器,那麼我們會收到以下消息:

$ rails credentials:edit
No $EDITOR to open file in. Assign one like this:

EDITOR="mate --wait" bin/rails credentials:edit

For editors that fork and exit immediately, it's important to pass a wait flag,
otherwise the credentials will be saved immediately with no chance to edit.

如何讀取憑證

我們現在可以通過以下方式取得憑證:

> Rails.application.credentials.config
#=> {:aws=>{:access_key_id=>"123", :secret_access_key=>"345"}, :github=>{:app_id=>"123", :app_secret=>"345"}}
> Rails.application.credentials.github
#=> {:app_id=>"123", :app_secret=>"345"}
> Rails.application.credentials.github[:app_id]
#=> "123"

在 Rails 6 裡管理多環境變數、憑證

要為 production 環境建立憑證,我們可以執行以下命令:

$ rails credentials:edit --environment production

上面的命令執行以下操作:

  • 如果缺少,則建立 config/credentials/production.key。 不要將此文件提交給 VCS。
  • 如果缺少,則建立 config/credentials/production.yml.enc。 將此文件提交到 VCS。
  • 在預設編輯器中解密並打開生產憑證文件。
  • 我們與可以進行生產部署的有限團隊成員共享 production.key。

讓我們添加以下憑證並保存:

aws:
  access_key_id: 1f3649fe-ebbd-11e9-81b4-2a2ae2dbcce4
  secret_access_key: 203060d3a5456fa6cd2da3c958001440

同樣,我們可以為不同的環境(如 staging)建立憑證。

在 Rails 裡使用憑證

對於任何環境,Rails 都會自動檢測要使用的憑證集。 特定於環境的憑據將優先於全局憑據。 如果存在特定於環境的憑據,則將使用它們,否則 Rails 將預設使用全局憑據。

對於 development:

$ rails c
> Rails.application.credentials.config
#=> {:aws=>{:access_key_id=>"123", :secret_access_key=>"345"} }}
> Rails.application.credentials.aws[:access_key_id]
#=> "123"

對於 production:

$ RAILS_ENV=production rails c
> Rails.application.credentials.config
#=> {:aws=>{:access_key_id=>"1f3649fe-ebbd-11e9-81b4-2a2ae2dbcce4", :secret_access_key=>"203060d3a5456fa6cd2da3c958001440"}}
> Rails.application.credentials.aws[:access_key_id]
#=> "1f3649fe-ebbd-11e9-81b4-2a2ae2dbcce4"

將加密密鑰儲存在環境變數中

我們還可以在 RAILS_MASTER_KEY 環境變數中設置加密密鑰的值。

如果設置了 RAILS_MASTER_KEY,我們不需要建立 *.key 文件。 Rails 將自動檢測此環境變量並使用它來加密/解密憑證文件。

例如,環境變量可以在 Heroku 或類似平台上使用。

# Setting master key on Heroku
heroku config:set RAILS_MASTER_KEY=`cat config/credentials/production.key`

相關文章