5.1から5.2にアップグレードしたばかりですが、秘密を保存するためのこの「より良い」方法論についてかなり混乱しています...
多分私は理解していないかもしれませんが、今では開発と生産が単一に統合されているようですSECRET_KEY_BASE
と同様 master.key
... これは正しいです?
そうでない場合、別のマスターキーとSECRET_KEY_BASE
開発中?
開発者が私を助けてくれて、私がプロダクションで使用しているマスターキー(またはシークレット)を知りたくない場合はどうなりますか?
Rails 5.2
はこれをかなり変更しました。開発およびテスト環境では、secret_key_baseが自動的に生成されるため、secrets.yml
または設定した場所から削除できます。
実動に関しては、Rails credentials:edit
を実行して生成および編集できる資格情報ファイルがあります。これにより、config/master.key
にマスターファイルが作成され、このファイルはこのファイルの暗号化と復号化にのみ使用されます。これをgitignore
に追加して、他の誰とも共有されないようにします。他の開発者と共有する必要があります。
このすべてが少し面倒に聞こえる場合は、それを無視してENVでsecret_key_baseを指定するだけです。 Railsは文句を言う前にENV["SECRET_KEY_BASE"]
に存在するかどうかをチェックします。
Secret_key_baseにアクセスするには2つの方法があります。
Rails 5はデフォルトで最初の方法を取りました。
Rails.application.credentials.secret_key_base
でRails credentials:edit
を変更できます。他のすべての環境では、環境変数Rails_MASTER_KEY
をconfig/master.key
と同じコンテンツに設定することを忘れないでください。 master.key
はgitがデフォルトで無視されます。この方法では、すべての環境で同じ秘密鍵が使用されます。異なるキーを使用する場合は、自分で名前空間を制御する必要があります。
2番目の方法Rails.application.secrets.secret_key_base
を好む場合。 config/secrets.yml
を作成する必要があります:
development:
secret_key_base: ...
test:
secret_key_base: ...
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
本番環境でSECRET_KEY_BASE
環境変数を設定することを忘れないでください。 config/secrets.yml
ファイルが十分に秘密であれば、<%= ENV["SECRET_KEY_BASE"] %>
をプレーンテキストに変更しても問題ありません。
rake secret
はランダムな秘密鍵を生成できます。
私はシンプルであるため、2番目の方法(古い方法)を好みます。
プロダクションmaster.keyを友人の開発者と共有したくないときにこの宝石を使用しました。これはOPとまったく同じ目的だと思います。
https://github.com/sinsoku/Rails-env-credentials
以下のように、各環境にマスターキーを設定できます。そのため、どのキーをどの開発者/展開者と共有するかを自由に選択できます。
config/credentials-development.yml.enc
config/credentials-test.yml.enc
config/credentials.yml.enc
master-development.key
master-test.key
master.key
各キーは、次のような最初の実行時に生成されます。
Rails env_credentials:edit -e開発
1つのmaster.keyセットアップからこれに切り替えると、発生する可能性のあるエラーの1つは、Railsどの環境に関係なくすべての環境情報を評価しようとするconfig/database.ymlに関連するon。(コメントアウトした場合でも、Railsはまだerb部分を評価しようとします。)