外部に公開できない秘密の文字列に関して
rails 4.1でrails newするとconfig/secrets.yml
が生成されます。秘密の文字列を集約する場所です。本番環境は環境変数経由でアクセスする必要があります。
development:
secret_key_base:
test:
secret_key_base:
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
rails 5.1ではconfig/secrets.yml.enc
というファイルに暗号化した内容を記載します。暗号化した内容は復号化する必要があるので、復号化時に使用するキー(RAILS_MASTER_KEY
)だけを別で管理するだけなので、管理コストが下がります。
config/secrets.yml.enc
はrails new時に作成されないので、別途コマンド($rails secrets:setup
)で作成します。config/secrets.yml.enc
とconfig/secrets.yml.key
が出力されます。
config/secrets.yml.key
が暗号化、復号化に利用する値です。コミットしないように.gitignore
へ追加されます。
secrets.yml.enc
は暗号化されているので直接編集できません。編集するときは$ rails secrets:edit
で編集します。記述フォーマットはsecrets.yml
と同じです。
本番環境ではconfig.read_encrypted_secrets = true
の設定が有効になっているので、復号キーを使ってsecrets.yml.enc
を読み込む設定が有効になっています。
開発環境などでは有効になっていないので、config/environments/development.rb
に、config.read_encrypted_secrets = true
と記述する必要があります。
環境変数ごとで値を切り替える必要がなくなりました。
credentialsで登場するファイルや環境変数
config/credentials.yml.enc
(暗号化した設定ファイル)config/master.key
(コミットしないファイル、.gitignore
に追加されている)RAILS_MASTER_KEY
(master.key
の値を環境変数経由で渡す場合の環境変数名)