環境
- Rails 5.2
要点
- 今までのsecrets.yml および rails secrets:xxxx方法は非推奨
- 今後は rails credentials:edit で秘匿情報の編集ができる
- 暗号化されたファイルはconfig/credentials.yml.enc 複合キーはconfig/master.key
- 秘匿情報の取得は Rails.application.secrets.xxxx ではなく、今後は Rails.application.credentials.xxxx
以下は詳細
非推奨になったencrypted secrets
rails 5.1ではパスワードやAPIキーなどの秘匿情報を今までのsecrets.ymlでの管理から暗号化されたファイルconfig/secrets.yml.encと複合キーconfig/secrets.yml.keyのセットでの管理方法になった。
が、なんとRails5.2では廃止 railsのCHANGELOG曰く、
This will eventually replace Rails.application.secrets and the encrypted secrets introduced in Rails 5.1.
わずか1バージョンの人生とか短すぎるでしょ。。。
実際に叩くと怒られる。
$rails secrets:setup Encrypted secrets is deprecated in favor of credentials. Run: bin/rails credentials:help
悲しい
やり方
秘匿情報の追加/編集するには以下
rails credentials:edit
これで今までのsecrets.ymlのように編集できる。保存すると自動でconfig/credentials.yml.encが暗号化された形で更新される。
ここでは仮に以下のようにしたとする
my_api_key: hogehoge secret_key_base: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
以下のように怒られたらMacの場合は~/.bash_profileとかに export EDITOR="vim"
を追記してターミナルを開き直せばおk
$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 c
すると実際にRailsから見れているか確認できる。先程セットしたhogehogeが取得できている。 Rails.application.secretsからRails.application.credentialsに変わっているので注意
$rails c Running via Spring preloader in process 83264 Loading development environment (Rails 5.2.0.rc2) [1] pry(main)> Rails.application.credentials.my_api_key => "hogehoge"
config/master.keyがあればRailsが自動でを見に行くようなので自分で環境変数をセットする必要はない
その他
5.1のencrypted secretsとの違い
x | encrypted secrets(5.1) | Credentials(5.2〜) |
---|---|---|
セットアップ方法 | rails secrets:setup | 特になし |
編集 | rails secrets:edit | rails credentials:edit |
表示 | rails secrets:show | rails credentials:show |
使う | Rails.application.secrets.xxxx | Rails.application.credentials.xxxx |
暗号化されたファイル | config/secrets.yml.enc | config/credentials.yml.enc |
複合キー | config/secrets.yml.key | config/master.key |
production環境にデプロイするときは
Capistranoでデプロイするときには先にshared/config/master.keyにmaster.keyをアップして
set :linked_files, fetch(:linked_files, []).push("config/master.key")
すればおk
環境ごとに秘匿情報を出し分けたい
現状できないっぽいので先人様のGemに頼るしかない
これでそろそろ落ち着いてほしい。。。