LoginSignup
26
12

More than 3 years have passed since last update.

Rails 5 から 6 にかけての secretes / credentials 周りの変遷

Posted at

概要

  • Rails で秘匿情報を扱うための機能 (secrets.yml.enc / credential.yml.enc) は、直近の数バージョンでかなり動きがあり、情報が錯綜していたので、自分なりに整理してみました

歴史

Rails 5.1

  • secrets 機能が実装された
    • config/secrets.yml.env と config/master.key がペアになっている
      • config/master.key の代わりに RAILS_MASTER_KEY 環境変数でも OK

Rails 5.2

  • credentials 機能が実装された
    • ほぼ secrets と同じ
    • config/credentials.yml.enc と config/master.key がペアになっている
      • config/master.key の代わりに RAILS_MASTER_KEY 環境変数でも OK
    • config/credentials/環境名.yml.enc を用意することもできるが、encrypted メソッド を使ってファイルをいちいち明示する必要があった

Rails 6.0

  • credentials を RAILS_ENV から類推できるようになった
    • 例えば production 環境のとき:
      • config/credentials/production.yml.enc があればそれをロード
      • 無かったら config/credentials.yml.enc をロード
    • 上記のように、フォールバックはあくまで yml 単位なので注意!
      • ある項目が config/credentials/production.yml.enc に無かったら config/credentials.yml.enc を探索、ではない
      • つまり環境間で共通の項目はすべての yml に重複して書く必要がある
  • 鍵を環境ごとに用意できるようになった

どうしたらいいの

  • 環境ごとに変わるものは環境変数で与えて、共通のものは config/credential.yml で与える、というのがいいのではないか
password: <%= ENV['DB_PASSWORD'] || Rails.application.secrets.database_password %>

参考

26
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
12