web-dev-qa-db-ja.com

別のsecret_key_base Rails 5.2?

5.1から5.2にアップグレードしたばかりですが、秘密を保存するためのこの「より良い」方法論についてかなり混乱しています...

多分私は理解していないかもしれませんが、今では開発と生産が単一に統合されているようですSECRET_KEY_BASE と同様 master.key... これは正しいです?

そうでない場合、別のマスターキーとSECRET_KEY_BASE 開発中?

開発者が私を助けてくれて、私がプロダクションで使用しているマスターキー(またはシークレット)を知りたくない場合はどうなりますか?

12
Tallboy

Rails 5.2はこれをかなり変更しました。開発およびテスト環境では、secret_key_baseが自動的に生成されるため、secrets.ymlまたは設定した場所から削除できます。

実動に関しては、Rails credentials:editを実行して生成および編集できる資格情報ファイルがあります。これにより、config/master.keyにマスターファイルが作成され、このファイルはこのファイルの暗号化と復号化にのみ使用されます。これをgitignoreに追加して、他の誰とも共有されないようにします。他の開発者と共有する必要があります。

このすべてが少し面倒に聞こえる場合は、それを無視してENVでsecret_key_baseを指定するだけです。 Railsは文句を言う前にENV["SECRET_KEY_BASE"]に存在するかどうかをチェックします。

10
tomca32

Secret_key_baseにアクセスするには2つの方法があります。

  1. Rails.application.credentials.secret_key_base
  2. Rails.application.secrets.secret_key_base

Rails 5はデフォルトで最初の方法を取りました。

Rails.application.credentials.secret_key_baseRails credentials:editを変更できます。他のすべての環境では、環境変数Rails_MASTER_KEYconfig/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番目の方法(古い方法)を好みます。

7
Yi Feng Xie

プロダクション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部分を評価しようとします。)

1
untidyhair