master.keyが見つからない問題 [初見殺し] - はじめてのデプロイで嵌るポイント(Rails 5.2以降)
デプロイ環境構築の過程でmaster.keyなるものが必要に
(2020.9.28: これで悩む方は多そうなので補足追記しました )
Railsアプリのローカル環境にもconfig/master.keyがみつからない
(これは私の環境、経緯によるところが大きいかと)
環境
Rails 6.03
原因
master.keyは.gitignoreに含まれており、git cloneの過程で失われたと思われる
- 私の環境では開発途中で環境を変化(Cloud9 >> ローカル)に移行した際のgit cloneで失われたかと
- その他多いのが、開発環境 -> デプロイ環境移行時に
master.keyが失われるケース
解決
①master.keyの中身がわかる場合
ローカル環境にはmaster.keyがある場合など、master.keyの中身を知ることができる場合はmaster.keyを新規作成することで解決できます
vi config/master.key
で新規作成、一行目にmaster.keyの中身を追記してエディタを閉じる
デプロイ環境でmaster.keyが無いと言われているのであれば、EC2なりデプロイ先のサーバーにmaster.keyを配置しましょう
②master.keyの中身がわからない場合
credentials.yml.encに機密情報を追記した覚えがない、運用するつもりもない、
または記述した内容が消えてしまっても再現可能な場合にこの方法を試してください
一旦credentials.yml.encを削除して、
master.keyもcredentials.yml.encもない状態をつくる
そして次のコマンドを入力
sudo EDITOR="vi" rails credentials:edit
すると
credentials.yml.encとmaster.keyが新たに生成される
ただし
$ vi config/master.key
では中身が空っぽ
$ sudo vi config/master.key
とするとようやく中身が確認できました
この方法はデプロイ環境でcredentials.yml.encを運用しない場合にも有効で
サーバー上でも同様にmaster.keyがない状態で
一旦credentials.yml.encを削除し
アプリのルートディレクトリでローカルでやったことと同様に
sudo EDITOR="vi" rails credentials:edit
とすると同様にcredentials.yml.encとmaster.keyが生成されます
そもそもcredentials.yml.encってなんぞ
機密情報の不用意な公開を防ぐための仕組みだそうです
credentials.yml.encは鍵穴、master.keyが鍵の関係にあって、
正しいmaster.keyを用意することで、暗号化されたcredentials.yml.encの中身を復号化し利用することができるようになる
DBのパスワードなどをcredentials.yml.encに記述して暗号化保護、運用するように想定されていると理解
以下の記事でcredentials.yml.encにAWSのaccess_key_id, secret_access_keyを追記したり、
それを取り出す方法を試みています
[Rails6対応, 公式SDK] AWS SESを使ってRailsから送信元が独自ドメインのメールを送ってみた - Qiita
ただしこのような運用をするのであれば、master.keyを本番環境にポンと置いておくのもどうかと思うので
環境変数で渡すなりの運用方法が必要そうです
次の記事参考になりそうです
Railsのcredentials.yml.encは、どういった運用ができるか? - LiBz Tech Blog
参考
Rails5.2から追加された credentials.yml.enc のキホン - Qiita
【Rails】「credentials.yml.enc」と「master.key」の使い方について詳しく解説!|TechTechMedia