Учетные данные Rails 6 в AWS Beanstalk: ArgumentError: ключ должен быть 16 байт

Я ударился о стену. Я развертываю приложение Rails 6 на AWS через Elastic Beanstalk. Развертывание выполняется через eb cli, и я использую для этого git.

Ошибка, которую я получаю, независимо от того, что я пытаюсь сделать, это: ArgumentError: key must be 16 bytes

Это происходит всякий раз, когда я пытаюсь получить доступ к зашифрованным учетным данным, например, Rails.application.credentials.sendgrid[:api_key], которые устанавливаются с использованием ключей среды с помощью EDITOR="mvim -f" rails credentials:edit --environment production.

Все, что я видел, использует Rails 5.2, и все, кажется, хранится с использованием файлов master.key, а не файлов yml, специфичных для среды.

Что я пробовал:

  1. Настройка RAILS_MASTER_KEY в свойствах среды веб-консоли EB
  2. Я могу сделать eb printenv и действительно вижу этот ключ
  3. В config/production.rb я установил config.require_master_key = true
  4. Я попытался установить RAILS_PRODUCTION_KEY на то же самое, что и мастер-ключ, но все равно безуспешно.
  5. Я добавил RAILS_ENV со значением production в качестве свойства среды.
  6. Я добавил свои собственные расширения контейнера для выполнения миграций и предварительной компиляции, и они по-прежнему выдают ошибку всякий раз, когда я пытаюсь получить учетные данные.

В целом, похоже, что он не может правильно получить главный ключ и жалуется на то, что ключ не является правильным 16 байтом.

Когда я запускаю RAILS_ENV=production bundle exec rails c локально, он работает нормально, и я могу получить все учетные данные.

Вот мой файл .ebextensions/config:

# Beanstalk ain't ready for Rails 6. This fix is courtesy of https://austingwalters.com/rails-6-on-elastic-beanstalk/
# Additional node 6 cleanup courtesy of https://github.com/nodesource/distributions/issues/486

commands:
  00_remove_node_6_if_present:
    command: "/bin/rm -rf /var/cache/yum && /usr/bin/yum remove -y nodejs && /bin/rm /etc/yum.repos.d/nodesource* && /usr/bin/yum clean all"
    ignoreErrors: true
  01_download_nodejs:
    command: "curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -"
  02_install_nodejs:
    command: "yum -y install nodejs"
  03_install_yarn:
    command: "sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo && sudo yum install yarn -y"
  04_mkdir_webapp_dir:
    command: "mkdir /home/webapp"
    ignoreErrors: true
  05_chown_webapp_dir:
    command: "chown webapp:webapp /home/webapp"
    ignoreErrors: true
  06_chmod_webapp_dir:
    command: "chmod 0744 /home/webapp"
    ignoreErrors: true
  07_chmod_logs:
    command: "chown webapp:webapp -R /var/app/current/log/"
    ignoreErrors: true
  08_create_log_file:
    command: "touch /var/app/current/log/production.log"
    ignoreErrors: true
  09_chown_log_production:
    command: "chown webapp:webapp /var/app/current/log/production.log"
    ignoreErrors: true
  10_chmod_log_dir:
    command: "chmod 0664 -R /var/app/current/log/"
    ignoreErrors: true
  11_update_bundler:
    command: "gem update bundler"
    ignoreErrors: true
  12_config_for_update_nokogiri:
    command: "bundle config build.nokogiri --use-system-libraries"
  13_chown_current:
    command: "chown webapp:webapp -R /var/app/current/"
    ignoreErrors: true
  14_chmod_current:
    command: "chmod 0755 -R /var/app/current/"
    ignoreErrors: true
  15_chown_current:
    command: "chown webapp:webapp -R /var/app/ondeck/"
    ignoreErrors: true
  16_chown_current:
    command: "chmod 0644 -R /var/app/ondeck/"
    ignoreErrors: true

container_commands:

  17_install_webpack:
    command: "npm install --save-dev webpack"
  18_config_for_update_nokogiri:
    command: "bundle config build.nokogiri --use-system-libraries"
  19_precompile:
    command: "RAILS_ENV=production bundle exec rake assets:precompile"
  20_database_migration:
    leader_only: true
    command: "RAILS_ENV=production bundle exec rake db:migrate"

person kineticac    schedule 28.02.2020    source источник


Ответы (2)


Что решило это:

eb setenv RAILS_MASTER_KEY=XXXXXXXX

Несмотря на то, что я установил это свойство среды в веб-консоли EB, оно по какой-то причине не использовалось. Установив его в консоли, он выдаст мне сообщение об успешном обновлении.

Environment update completed successfully.

Но как только я сделал $eb deploy, я увидел бы это в событиях:

Environment update is starting.

Это заставляет меня поверить, что он перезаписывал все мои переменные среды, установленные в консоли, или, по крайней мере, каким-то образом устанавливал другое подмножество того, что я намеревался. Как только я попробовал $eb setenv RAILS_MASTER_KEY=XXX, можно было найти учетные данные rails.

person kineticac    schedule 28.02.2020

Была такая же проблема при попытке передать свойства ENV на консоль rails.

Установите их в веб-консоли AWS, puma найдет их, а консоль rails — нет.

Это стало проблемой только после того, как я обновился до Amazon Linux 2.

Мой обходной путь - воссоздать .env из get-config.

files:
  "/home/ec2-user/railsc":
    mode: "000777"
    owner: root
    group: root
    content: |
      sudo su - -c "cd /var/app/current; /opt/elasticbeanstalk/bin/get-config --output YAML environment | sed 's/: /=/g' > .env; bundle exec rails c"
person simj    schedule 19.08.2020