Ich habe gerade ein Upgrade von 5.1 auf 5.2 durchgeführt und bin ziemlich verwirrt über diese "bessere" Methode, um Geheimnisse zu speichern ...
Vielleicht verstehe ich das nicht, aber es scheint, als wären Entwicklung und Produktion nun in einen SINGLE SECRET_KEY_BASE
sowie master.key
eingearbeitet.
Wenn nicht, wie verwende ich einen separaten Hauptschlüssel und SECRET_KEY_BASE
in der Entwicklung?
Was ist, wenn mir Entwickler helfen, die nicht meinen Master-Schlüssel (oder meine Geheimnisse) kennen, die ich in der Produktion verwende?
Rails 5.2
hat das ein bisschen geändert. Für Entwicklungs- und Testumgebungen wird die secret_key_base automatisch generiert. Sie können sie also einfach aus secrets.yml
entfernen oder wo immer Sie sie eingestellt haben.
Für die Produktion gibt es die Berechtigungsnachweisdatei, die Sie mit Rails credentials:edit
erstellen und bearbeiten können. Dadurch wird auch der Hauptschlüssel in config/master.key
erstellt, der nur zum Ver- und Entschlüsseln dieser Datei verwendet wird. Fügen Sie dies zu gitignore
hinzu, damit es nicht an andere Personen weitergegeben wird, die sich darum kümmern sollten, es mit anderen Entwicklern zu teilen.
Wenn sich das alles etwas langweilig anhört und es sich anhört, können Sie es einfach ignorieren und die secret_key_base in ENV angeben. Rails prüft, ob es in ENV["SECRET_KEY_BASE"]
vorhanden ist, bevor es sich beschwert.
Es gibt zwei Möglichkeiten, auf secret_key_base zuzugreifen:
Rails 5 hat den ersten Weg standardmäßig gewählt.
sie können Rails.application.credentials.secret_key_base
durch Rails credentials:edit
ändern. Denken Sie bei allen anderen Umgebungen daran, die Umgebungsvariable Rails_MASTER_KEY
auf denselben Inhalt von config/master.key
einzustellen. Der master.key
wird standardmäßig ignoriert. Auf diese Weise wird für alle Umgebungen derselbe geheime Schlüssel verwendet. Wenn Sie andere Schlüssel verwenden möchten, müssen Sie Namespaces selbst steuern.
Wenn Sie den zweiten Weg Rails.application.secrets.secret_key_base
bevorzugen. Sie müssen config/secrets.yml
erstellen:
development:
secret_key_base: ...
test:
secret_key_base: ...
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
denken Sie daran, die Umgebungsvariable SECRET_KEY_BASE
bei der Produktion festzulegen. Wenn die config/secrets.yml
-Datei geheim genug ist, können Sie <%= ENV["SECRET_KEY_BASE"] %>
in Klartext ändern.
rake secret
kann einen zufälligen geheimen Schlüssel für Sie generieren.
Ich ziehe den zweiten Weg vor, wegen des einfachen.
Ich habe dieses Juwel verwendet, als ich den Produktionsmaster.key nicht mit meinen Freund-Entwicklern teilen wollte, was meiner Meinung nach genau das gleiche Ziel wie das OP ist.
https://github.com/sinsoku/Rails-env-credentials
Sie können einen Master-Schlüssel für jede Umgebung wie folgt verwenden, sodass Sie frei entscheiden können, welchen Schlüssel Sie mit welchen Entwicklern/Bereitstellern teilen möchten.
config/credentials-development.yml.enc
config/credentials-test.yml.enc
config/credentials.yml.enc
master-development.key
master-test.key
master.key
Jeder Schlüssel wird generiert, wenn Sie zum ersten Mal etwas ausführen:
Rails env_credentials: edit -e Entwicklung
Wenn Sie von einem master.key-Setup zu diesem wechseln, wird ein Fehler in Verbindung mit config/database.yml auftreten, in dem Rails versucht, alle Umgebungsinformationen auszuwerten, unabhängig davon, in welcher Umgebung Sie sich befinden. (Auch wenn Sie Kommentieren Sie sie aus, Rails versucht immer noch, die Erbteile zu bewerten.)