Рельсы секретц.имл В.С., Дотен, В.С. Фигаро с Капистрано на АМС

Есть несколько вопросов о том, как управлять токенами API в SO и там, в Интернете, но я вижу много людей, которые просто повторяют то, что читают где-то в другом месте, и они часто не имеют большого смысла...

Мне интересно, как вы, ребята, имеете дело со всеми этими жетонами API и тому подобным.

Вот что я прочитал до сих пор, используя 3 разных драгоценных камня

secrets.yml

Представленный в Rails 4.1, должен стать конвенцией для хранения секретов.

Было (очевидно, нет?) Предназначено для того, чтобы быть помещенным в репозитории. Однако я часто вижу примеры использования переменных среды для производства

development:
  secret_key_base: super_long_secret_key_for_development
  ...

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
  ...

И в этот момент кто-то спрашивает: "Почему мы используем ENV для производства?", Законный вопрос IMO. Но затем кто-то отвечает: "Мы не хотим, чтобы производственный токен был жестко запрограммирован в приложении" (может быть, это только я, но ХОЧУ СЕКРЕТ..Yml, это имя звучит как файл, который вы не хотите фиксировать, верно?), И конец никто на самом деле не отвечает на вопрос

Но мне все же удалось найти то и это:

PROs:

  • Рельсовая конвенция.
  • Простота развертывания с capistrano-secrets драгоценный камень и cap [stage] setup (и это только разворачивает секреты сцены приятно)
  • Структура данных YML (массив / хэш в порядке) + можно использовать код Ruby

Недостатки:

  • Нужно использовать Rails.application.secrets.xxx
  • Многие сервисы, такие как AWS, все еще читают из ENV для автоматической настройки своих драгоценных камней / сервисов.
  • Разве это не 12 факторов (или это?)
  • Совершенно новый, так что еще не очень?

Пчеловоды дотенв

Простое определение файла.env в корне, который читается Rails при запуске

С помощью capistrano-env а также capistrano

PROs

  • ENV в 12факторных правилах
  • 3,5 тыс. Звезд... может быть, не зря?

ПРОТИВ

  • Нет пользовательского кода, ограничено ключом строка-строка / val

Figaro

Какие-то гибридные секреты /ENV. Имея в виду 12factors/Rails/Heroku, но, в конце концов, не кажется лучше, чем остальные...

Исходя из вышесказанного и всего остального, что я не написал, казалось бы, что secretts.yml был бы отличным победителем, если бы эти секреты были помещены в ENV (и мне лень писать Rails.Application.secrets каждый раз).

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

(Мой конкретный стек использует AWS + Capistrano, но не Heroku)

2 ответа

Я лично считаю, что "правильный" подход зависит от вашей среды.

В моем случае у меня есть серверы, которые управляются ИТ, и у меня нет доступа к vhost или чему-либо еще для простой установки переменных среды. Из-за этого я совершаю secrets.yml файл, который не содержит производственный раздел, а затем настройте Capistrano, чтобы добавить этот файл в shared_files, На каждом сервере я добавляю файл.

Если бы у меня был легкий доступ к vhost, и я управлял серверными vhosts с помощью Puppet, Chef, Ansible или аналогичных, я бы использовал подход с переменным окружением, как по умолчанию secrets.yml файл.

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

Во-первых, все три метода могут быть совместимы с 12 факторами. Это совместимо, если вы передаете значение config переменной ENV вместо того, чтобы сначала копировать один файл на сервер.

Мои мысли - каждое из этих решений:

Рельсы секреты

Разработчики вынуждены использовать 12-факторный метод: либо вручную установить его на рабочем сервере, либо иметь другой файл на локальном компьютере, а затем каждый раз при развертывании передавать его как ENV. (Не знал о capistrano-secretsнаверно с этим справится)

(Я думаю, что то, что вы сказали в CON #2 и #3, является противоположностью решения secret.yml)

Accessor также довольно длинный, как вы упомянули.

dotenv

Это не поощряет 12-фактор, и не было первоначально разработано для env производства так или иначе. Либо вы пишете код для передачи его значения в качестве ENV в производство во время развертывания (что делает его совместимым с 12 факторами), либо копируете свой .env.production файл на рабочий сервер.

Также это заставляет вас использовать плоский ключ: значение конфигурации. Нет вложенности.

Figaro

Хотя он использует YAML, он не допускает вложенный хэш.

Он совместим с 12 факторами, например, содержит код для переноса конфига в heroku.

Мое решение

Я написал гем, в котором настройки хранятся в gitignored YAML-файле. Вложение допускается. При доступе к некоторому значению Setting.dig(:fb,:api),

Он предоставляет механизм для развертывания 12-факторного приложения путем сериализации всего файла YAML в строку и передачи его в производство в формате ENV.

Мне больше не нужно различать секретный конфиг и несекретный конфиг. Они находятся в одном месте и по умолчанию являются секретными. Я получаю выгоду от 12-факторного приложения, используя простые в пространстве имен файлы YAML.

Другие вопросы по тегам