25
13

More than 3 years have passed since last update.

Rails 秘密情報管理機能の変遷

Posted at

Rails での秘密情報の管理機能がバージョンごとに大きく違っている件について、まとめておきます。

Rails 4.1

  • config/secrets.yml

秘密情報を格納する設定ファイルとして config/secrets.yml が追加されました。

このファイルの設定値は Rails.application.secrets で取得できます。

この設定ファイルの設定値は、同一ファイル内で、環境別に分けられており、本番環境での設定値は VCS へコミットされても問題ないよう、通常、環境変数を参照するようにします。

development:
  secret_key_base: a4f6336a67817352a26e098403561530cdecdea6f9031deac218a8369b13fb39ba5e9663d59a3a379d88b5609d56e83457dc6b04ef11ce90d7e3cbcd98814199

test:
  secret_key_base: 7c0558816ee4552593e89a69184771b4b254bfc64af4fcd3e0299b2877c98ac67ba625b305fb9886c0bd8b50e9881423eebfcc4180bffd5c42f05503f779a7c2

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

デフォルトでは、上記の通り secret_key_base が格納されています。この設定値の役割については、以下の参照リンクを参考にしてください。

References

Rails 5.1

秘密情報を、暗号化した状態で保存するファイルとして、新たに config/secrets.yml.enc が導入されました。
このファイルに暗号化された状態で保存されている設定値は、環境変数 ENV["RAILS_MASTER_KEY"] もしくは config/secrets.yml.key file に書かれた暗号化鍵によって、復号されて、 Rails.application.secrets で取得できます。

この機能を有効にするには、以下の設定が必要になります。 (環境別に切り分け可能)
この設定値を false にすると、従来どおり config/secrets.yml からの読み込みが行われます。

config.read_encrypted_secrets = true

以下のコマンドを実行すれば、 config/secrets.yml.encconfig/secrets.yml.key が生成されます。

rails secrets:setup

config/secrets.yml.enc を、暗号化されていない状態で編集したい場合、以下を実行します。

rails secrets:edit

エディタを指定したい場合、以下のようにします。

EDITOR=vi rails secrets:edit

明示的に暗号化鍵を指定したい場合、以下のようにします。

RAILS_MASTER_KEY=1015d9018711afd106dbf752c15bf5b0 EDITOR=vi rails secrets:edit

References

Rails 5.2

秘密情報格納用の設定ファイルとして、新たに config/credentials.yml.enc が作られます。
このファイルに暗号化された状態で保存されている設定値は、環境変数 ENV["RAILS_MASTER_KEY"] もしくは config/master.key file に書かれた暗号化鍵によって、復号されて、 Rails.application.credentials で取得できます。

この秘密情報の設定ファイルを、暗号化されていない状態で編集したい場合、以下を実行します。

rails credentials:edit

エディタを指定したい場合、以下のようにします。

EDITOR=vim rails credentials:edit

以下の設定を有効にすることで、いずれかの暗号化鍵の存在チェックを確実に行うことができます。 (主に本番環境を想定)

config.require_master_key = true

なお、引き続き Encrypted secrets も使えます。

References

Rails 6.0

環境別の credentials file (config/credentials/<environment>.yml.enc) が存在する場合、その環境では、そちらのファイルから設定値が読み取られるようになります。
その環境では config/credentials.yml.enc が用いられないことに注意が必要です。

環境別の credentials file の設定値は、環境変数 ENV["RAILS_MASTER_KEY"] もしくは config/credentials/<environment>.key file に書かれた暗号化鍵によって、暗号化・復号されます。

復号された設定値は、引き続き Rails.application.credentials で取得できます。

環境別の credentials file は、以下のように --environment option を付けることで、暗号化されていない状態で編集できます。

rails credentials:edit --environment staging

なお、環境別の設定ファイルと暗号化鍵ファイルのパスは、設定値 config.credentials.content_pathconfig.credentials.key_path によって変更できます。

References

25
13
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
25
13