it-swarm.com.ru

Отдельный secret_key_base в Rails 5.2?

Я только что обновился с 5.1 до 5.2, и я совершенно не понимаю эту "лучшую" методологию хранения секретов ...

Может быть, я не понимаю, но кажется, что сейчас разработка и производство были "объединены" в ОДИНОЧНЫЙ SECRET_KEY_BASE, а также master.key... Это правильно?

Если нет, как я могу использовать отдельный мастер-ключ и SECRET_KEY_BASE в разработке?

Что делать, если мне помогают разработчики, и я не хочу, чтобы они знали мой главный ключ (или секреты), которые я использую в производстве?

8
Tallboy

Rails 5.2 изменил это совсем немного. Для среды разработки и тестирования secret_key_base генерируется автоматически, так что вы можете просто удалить его из secrets.yml или из любого места, где он установлен.

Что касается производства, есть файл учетных данных, который вы можете сгенерировать и отредактировать, запустив Rails credentials:edit. Это также создаст мастер-ключ в config/master.key, который используется только для шифрования и дешифрования этого файла. Добавьте это в gitignore, чтобы оно не передавалось никому другому, поэтому следует позаботиться о том, чтобы поделиться им с другими разработчиками.

Если все это звучит немного утомительно, и это так, вы можете просто проигнорировать это и предоставить secret_key_base в ENV. Rails проверит, присутствует ли он в ENV["SECRET_KEY_BASE"] перед тем, как пожаловаться. 

5
tomca32

Есть два способа доступа к secret_key_base:

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

Rails 5 взял первый путь по умолчанию.

вы можете изменить Rails.application.credentials.secret_key_base на Rails credentials:edit. для всех других сред не забудьте установить переменную среды Rails_MASTER_KEY таким же содержимым config/master.key. master.key по умолчанию игнорируется. этот способ использует один и тот же секретный ключ для всех сред. если вы хотите использовать разные ключи, вам нужно самостоятельно управлять пространствами имен.

Если вы предпочитаете второй способ 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 может сгенерировать случайный секретный ключ для вас.

Я предпочитаю второй способ (старый способ), потому что простой.

4
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 разработка

Если вы переключитесь с одной установки master.key на эту, одна ошибка, с которой вы можете столкнуться, будет связана с config/database.yml, в которой Rails пытается оценить всю информацию о среде независимо от того, в какой среде вы находитесь . (Даже если вы закомментируйте их, Rails все еще пытается оценить части erb.)

1
untidyhair