経緯
credential.yml.encとかmaster.keyとかの話。
EC2にアプリをデプロイしようとした際、このあたりの設定で頭が混乱。
開発環境では意識することのない存在だったので、急に出てきてびっくり。
少しだけ理解できてきた気がするので、自分なりに整理してみました。
誤りがあったらご指摘ください。
credentials.yml.encとは何か
- 秘匿情報(秘密鍵とかIDとかPWとか)がまとめて記述されている、暗号化されたファイル。
- bin/railsディレクトリ下に置かれている。
- 隠したい情報を環境変数にセット。APサーバーは環境変数を経由して情報を取得・利用する。
- 復号化キーはmaster.key。$ rails new の時に、configディレクトリ下に生成される。デフォルトで.gitignoreに登録される。
- 当然、$ git cloneで開発環境に連れてこれないので、本番環境上で設定してやる必要がある。
- $EDITORで指定されたエディタでのみ編集できる。
例
RDSへの接続の設定。database.ymlに、以下のように記述すれば繋がる。しかし、
database.yml
production:
<<: *default
adapter: mysql2
encoding: utf8
reconnect: false
database: <アプリケーション名>_production
pool: 5
username: <ユーザー名>
password: <パスワード>
socket: /var/lib/mysql/mysql.sock
host: <ホスト名>
これだとgithubなどでソースコードを管理した際に、usernameやpasswordが丸見えになる。
そこで、usernameやらpasswordの値を、環境変数を定義した上でcredentials.yml.encに格納し、database.yml上は変数で記述して値を隠す、という形をとる。