Rails 5.2 Зашифрованные учетные данные для производственной среды

Я создал новое приложение Rails с версией 5.2. В Rails 5.2 появилась функция шифрования секретов.

Я настроил секретный ключ в файле devise.rb

config.secret_key = Rails.application.credentials [Rails.env.to_sym] [: secret_key_base]

а также добавил secret_key для всех сред, использующих

РЕДАКТОР = учетные данные vim rails: изменить

development:
 secret_key_base: absdss

test:
 secret_key_base: 123232

production:
 secret_key_base: 123456

после сохранения учетных данных я могу получить secret_key в консоли рельсов в локальном

Вывод в консоли рельсов:

Running via Spring preloader in process 44308
Loading development environment (Rails 5.2.0)
2.5.1 :001 > Rails.application.credentials.development[:secret_key_base]
=>     "absdss" 

Учетные данные не работают на производственном сервере, мы используем CI / CD в gitlab для этапов развертывания, когда я запускаю

рельсы db: создать db: мигрировать

я получаю следующую ошибку

> rails db:create db:migrate

 ---> Running in 1563453ddf2a

rails aborted!

NoMethodError: undefined method `[]' for nil:NilClass

/usr/src/app/config/initializers/devise.rb:12:in `block in <main>'

/usr/local/bundle/gems/devise-4.4.3/lib/devise.rb:307:in `setup'

/usr/src/app/config/initializers/devise.rb:5:in `<main>'

/usr/local/bundle/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:50:in `load'

Теперь вопрос в том, как установить RAILS_MASTER_KEY на рабочий сервер?


person Aravind    schedule 27.06.2018    source источник


Ответы (3)


Я делюсь несколькими пунктами, которые могут вам помочь

Зашифрованные учетные данные имеют несколько преимуществ по сравнению с учетными данными в виде обычного текста или переменными среды.

В Rails 5.1 представлены зашифрованные секреты

конфигурация / secrets.yml.key
конфигурация / secrets.yml.enc

Rails 5.2 заменяет оба секрета зашифрованными учетными данными

config / credentials.yml.enc
config / master.key

Файл config / master.key создается при создании проекта рельсов

Ключ шифрования (master.key) игнорируется git

В производстве

конфигурация / среды / production.rb

config.require_master_key = true

Не могу расшифровать ваши учетные данные без ключа

Управление ключом

а. scp или sftp файл

б. Если вам нужно предоставить разработчику копию ключа, вы можете использовать диспетчер паролей, потому что они используют шифрование.

c. Я использовал последний проход для управления файлом главного ключа

Ключ, используемый для шифрования учетных данных, отличается от базы секретных ключей.

Ключ на master.key используется для шифрования и дешифрования всех учетных данных. Он не заменяет базу секретных ключей.

База секретных ключей требуется Rails. Если вы хотите сгенерировать новый запуск базы секретных ключей,

bin/rails secret

и добавьте это к своим учетным данным, запустив bin / rails credentials: edit.

person praaveen V R    schedule 27.06.2018
comment
для получения дополнительной информации вы можете проверить этот medium.com/ @ praaveen / блог - person praaveen V R; 27.06.2018
comment
Я настроил $ RAILS_MASTER_KEY ›config / master.key. Он оказался в ArgumentError: ключ должен быть ошибкой в ​​16 байтов - - person Aravind; 28.06.2018
comment
Привет, @Praveen, когда вы говорите Scp или sftp о файле в разделе «Управление ключом» - как вы обычно это делаете? Я пробовал использовать Filezilla, но master.key не отображается на моем локальном компьютере (из-за ожидаемого расширения файла), и у меня также нет разрешения на доступ к целевой папке на сервере /app_name/shared/config. Я видел упоминания о том, как сделать это с помощью задачи с граблями, но мне было интересно, есть ли способ попроще? - person Texas; 11.10.2018
comment
Дополнительная информация очень полезна. Спасибо! - person Chris.Zou; 11.12.2019

Вы можете указать свой главный ключ как MASTER_KEY секретную переменную в настройках Gitlab CI / CD, а затем указать

echo "$MASTER_KEY" > config/master.key

в разделе before_script вашего .gitlab-ci.yml файла.

person Marek Lipka    schedule 27.06.2018
comment
Спасибо за немедленный ответ @Marek Lipka. После добавления master.key теперь я получаю ArgumentError: key must be 16 bytes - person Aravind; 27.06.2018
comment
Я настроил "$RAILS_MASTER_KEY" > config/master.key. Это закончилось ошибкой ArgumentError: key must be 16 bytes - person Aravind; 28.06.2018
comment
Вы уверены, что установили RAILS_MASTER_KEY переменную env в своей среде CI? - person Marek Lipka; 11.07.2018
comment
@Aravi Ваше значение RAILS_MASTER_KEY должно быть ровно 32 байта. См. github.com/rails/rails/issues/33528#issuecomment-412677795 - person oskarpearson; 14.08.2018

Rails.application.credentials.development&.dig(:secret_key_base)

попробуйте это вместо этого.

person Ashish Sharma    schedule 22.12.2020