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