應用程式通常中有各種密碼和憑證,我們需要使用 API 密鑰、密碼等。對於這些機密,我們需要能夠方便、安全地管理憑證。
我們可以通過執行以下指定來編輯憑證:
$ 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"
要為 production
環境建立憑證,我們可以執行以下命令:
$ rails credentials:edit --environment production
上面的命令執行以下操作:
config/credentials/production.key
。 不要將此文件提交給 VCS。 config/credentials/production.yml.enc
。 將此文件提交到 VCS。讓我們添加以下憑證並保存:
aws:
access_key_id: 1f3649fe-ebbd-11e9-81b4-2a2ae2dbcce4
secret_access_key: 203060d3a5456fa6cd2da3c958001440
同樣,我們可以為不同的環境(如 staging)建立憑證。
對於任何環境,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`
© Copyrights 從想像到創造. All Rights Reserved.