Не удается заставить учетные данные Rails 5.2 работать при попытке скрыть ключи / секреты AWS и JWT. Не получаем метода для Nil

#ruby-on-rails #token #credentials #rails-activestorage

#ruby-on-rails #токен #учетные данные #rails-activestorage

Вопрос:

Я потратил на это часы, но не могу придумать никаких решений. Я просмотрел документы, чтобы увидеть, чего мне не хватает, но ничего не могу найти.

Я использую JWT и ActiveStorage с Amazon S3. Мне нужно скрыть эти ключи, прежде чем я смогу передать их на Github. Следуя многим примерам, вот как выглядит мой credentials.yml.enc файл:

 amazon:
key: <my access key for AWS S3>
secret: <my secret id for AWS S3>

jwt: <my jwt token encode/decode password>
  

Затем я сохраняю это в своем storage.yml файле, который у меня есть:

 test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
amazon:
  service: S3
  access_key_id: <%= Rails.application.credentials[:amazon][:key] %>
  secret_access_key: <%= Rails.application.credentials[:amazon][:secret] %>
  region: us-east-1
  bucket: your_own_bucket
  

Я также пытался с

 <%= Rails.application.credentials[Rails.env.to_sym][:amazon][:key] %>
  

Если я перейду в консоль и попробую Rails.application.credentials[:amazon][:key] или Rails.application.credentials.amazon[:key] или любые другие варианты, всегда будет nil.

 Rails.application.credentials
  

дает мне:

  => #<ActiveSupport::EncryptedConfiguration:0x00007faf1284aa80 
@key_path=#<Pathname:/Users/demiansims/Development/Beastly/beastly- 
backend/config/master.key>, @content_path=# 
<Pathname:/Users/demiansims/Development/Beastly/beastly- 
backend/config/credentials.yml.enc>, @env_key="RAILS_MASTER_KEY", 
@raise_if_missing_key=false, @encryptor=# 
<ActiveSupport::MessageEncryptor:0x00007faf1287bb80 
@secret=">^x04x9BhxFEbx00x8BxB3O5xDCx8ExA6b", 
@sign_secret=nil, @cipher="aes-128-gcm", @aead_mode=true, 
@verifier=ActiveSupport::MessageEncryptor::NullVerifier, 
@serializer=Marshal, @options={:cipher=>"aes-128-gcm"}, @rotations=[]>, 
@config={}
  

Комментарии:

1. не могли бы вы подтвердить свой credentials.yml.enc размещенный здесь, потому что кажется, что в ключах после него нет пробелов amazon

2. Можете ли вы сказать мне, что вы подразумеваете под «пробелом»? Я разместил его точно так же, как по умолчанию. Я также добавил jwt: <мой ключ здесь>

3. Я не смог вставить код здесь, поэтому я добавил в качестве ответа

Ответ №1:

Возможно, ваш файл учетных данных не сохраняет ваши изменения. У меня была такая же проблема. Я использовал sublime и EDITOR="subl --wait" bin/rails credentials:edit вызвал бы редактор, но он не распознал бы, когда я сохранил файл. Я так и не решил эту проблему, поэтому переключился на vi. EDITOR="vi" bin/rails credentials:edit и проблема решена. Теперь все работает, как ожидалось. Если вы не знакомы с командами vi, как я, это полезно знать:

i -> «вставить» позволит перемещаться с помощью клавиш со стрелками, удалять и добавлять код
esc -> когда вы закончите редактирование, нажмите escape
:wq -> это сохранит файл и завершит работу. после того, как вы нажмете escape, просто введите:wq

надеюсь, это кому-то поможет.

Ответ №2:

Я думаю, что есть проблема в вашем формате, credentials.yml.enc это должно быть похоже:

 amazon:
  key: <my access key for AWS S3>
  secret: <my secret id for AWS S3>
  jwt: <my jwt token encode/decode password>
  

Таким образом, вы можете получить доступ к своему ключу следующим образом Rails.application.credentials.amazon[:key]