Где хранить ключи AWS в Rails? - PullRequest
0 голосов
/ 05 июля 2019

Является ли database.yml правильным местом для чтения ключей AWS с bashrc?database.yml звучит как место только для конфигов базы данных.Есть ли в моем приложении Rails более подходящее место, где можно прочитать конфиги AWS из bashrc?

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Рельсы 5.2 и далее

В Rails 5.2 введена концепция зашифрованных учетных данных . В основном, начиная с Rails 5.2, существует зашифрованный файл учетных данных, который генерируется при инициализации приложения в config/credentials.yml.enc. Этот файл зашифрован и, следовательно, может быть передан в ваш инструмент управления исходным кодом. Существует также файл master.key, который создается при инициализации приложения, который можно использовать для расшифровки файла учетных данных и внесения в него изменений.

Таким образом, учетные данные для AWS могут быть добавлены к нему как:

aws:
  access_key_id: 123
  secret_access_key: 345

Эти ключи могут быть доступны в вашем приложении как Rails.application.credentials.aws[:secret_access_key]. Другие конфиденциальные настройки, такие как учетные данные для других используемых внешних служб, также могут быть добавлены в эту конфигурацию. Посмотрите этот блог Marcelo Casiraghi для более подробной информации.

Предварительные рельсы 5.2

До Rails 5.2 не было концепции системы учетных данных. Есть несколько способов, с помощью которых вы можете попытаться найти решение для сохранения вашей конфигурации.

A. Вы можете создать файл YAML для определения конфигурации с нуля.

  • Создайте файл с именем my_config.yml и поместите его в папку config. Путь: config/my_config.yml
  • Добавить в файл любую конфигурацию, необходимую в формате YAML (см. Выше для AWS)
  • Внесите изменения в application.rb, чтобы загрузить этот файл во время инициализации следующим образом:
  APP_CONFIG = YAML.load(ERB.new(File.new(File.expand_path('../my_config.yml', __FILE__)).read).result)[Rails.env] rescue {}
  • Используя этот подход, вы сможете использовать APP_CONFIG['aws']['access_key_id'] для конфигурации AWS, определенной выше. Для этого варианта использования настоятельно рекомендуется иметь отдельные файлы конфигурации для сред разработки и производства. Производственный файл, вероятно, не следует регистрировать в системе контроля версий для обеспечения безопасности.

B. Другой подход заключается в использовании некоторых гемов для управления конфигурациями, такими как railsconfig / config

ПРИМЕЧАНИЕ. Чтобы ответить на вопрос о сохранении этой конфигурации в database.yml, настоятельно рекомендуется этого не делать. database.yml - это файл конфигурации для хранения конфигурации, связанной с базами данных. Разделение проблем действительно помогает при масштабировании любого приложения, и, следовательно, рекомендуется помещать такие конфигурации в отдельный файл, который можно поддерживать независимо, не полагаясь на конфигурацию базы данных.

0 голосов
/ 05 июля 2019

Абсолютно. Стандартное место для настройки таких вещей, как AWS, будет внутри config/initializers. Там вы можете создать файл с именем aws.rb.

app/
bin/
config/
|__ initializers/
    |__ aws.rb

и внутри этого файла вы можете настроить настройки AWS, используя переменные окружения из вашего bashr

Aws.config.update({
   credentials: Aws::Credentials.new('your_access_key_id', 'your_secret_access_key')
})

Файлы в этом каталоге выполняются при запуске приложения, поэтому эта конфигурация будет выполняться сразу после запуска приложения, прежде чем оно начнет обрабатывать запросы.

Также может быть полезно отметить, что AWS SDK для Ruby будет автоматически искать конкретные переменные среды, с которыми он будет конфигурироваться. Если это то, что вы используете, и если в вашем bashrc

установлены следующие переменные окружения
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

тогда вам не понадобится дополнительный код в приложении Rails для настройки AWS. Проверьте подробности здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...