Pythonとサラリーマンと

2020年6月にPythonを始めたサラリーマンのブログです。

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