Rails 5.2 credential.yml.encについて調べたこと
credential.yml.enc
production環境用の秘密情報(Credentials)を記述するためのファイル。
Rails5.2から採用された。
それまでは別の方法で秘密情報を管理していた。
使い方
credential.yml.encにawsなどの外部サービスへ接続するためのキーを記述する。
このファイルは暗号化されているため直接編集ができない。
編集するには、以下のRailsコマンドを使用する。
$ rails credentials:edit
環境変数にデフォルトエディタを登録していない場合は、以下。
$ EDITOR="vi" bin/rails credentials:edit
こうすることでターミナルからcredential.yml.encを編集できる。
どうやって複合しているのか?
master.keyというファイルに複合化キーが記載されている。
Rails 5.2でrails newすると、credential.yml.encとmaster.keyファイルは自動的に作成される。
master.keyは超重要情報なので、初めから.gitignoreの対象になっている。
Herokuへmaster.key情報を渡すためには
.gitignoreになっているので普通にgit push heroku masterしてもmaster.keyファイルはHerokuに渡っていない。 そのため、以下を実施する必要がある。
$ heroku config:set RAILS_MASTER_KEY=マスターキーファイルの値
設定でmaster.keyのHerokuアップ忘れを防止
以下をconfig/environment/production.rbに設定。
これによりmaster.keyが設定されていなければエラーが出るようになる。
config.require_master_key = true #コメントアウトするだけ
secret_key_baseについて
credential.yml.encに初期状態で入っているsecret_key_baseは、暗号化cookieや署名つきcookieの生合成確認に利用される。
これも超大事な秘密鍵なので、もしも漏れたなら以下のコマンドで再生性すること。
$ rails secret