[Ruby, Ruby on Rails] Как перейти с secrets на credentials (Ruby on Rails) (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Сredentials в версии Ruby on Rails 5.2.0 — новый золотой стандарт. Старые добрые, но небезопасные файлы .env уступают дорогу. В этой статье вы узнаете:
- зачем и как перейти от secrets к credentials,
- как использовать API-ключи в Ruby, YML и js.erb,
- как раз и навсегда предоставить ключ каждому из команды.
Еще 3 года назад Давид Хейнемейер Ханссон, создатель фреймворка Ruby on Rails, написал в своем твиттере о появлении релиза Rails 5.2.0, но новым технологиям часто требуется время, чтобы разогнаться и получить известность.
Можно считать тревожным звоночком, если вам слишком часто приходится жонглировать API-ключами, меняясь ими с другими разработчиками из вашей команды. Тогда самое время еще раз взглянуть на то, как можно использовать credentials в приложении на Ruby on Rails.
Почему стоит использовать сredentials вместо .env?
В цикле разработки, по мере развития в проект интегрируется всё больше различных сервисов. Для каждого внешнего сервиса существует собственный API-ключ. Обычно проходит совсем немного времени до момента, когда коллеги начнут охоту за за последним API-ключом. Это очень раздражает!
Или, просто представьте, API-ключ обновляется. Каждый разработчик в команде отдельно должен обновить ключ в локальных файлах dotenv. Кажется, всё это не соответствует концепции автоматизации и идеям программирования, верно?
Забудьте об обмене API-ключами в чатах в Slack или по электронной почте. Больше не придется нарушать политику безопасности.
Credentials в Rails решают эту проблему просто и эффективно: загрузка ключей на Github.
Загрузка на Github? Да, загрузка на Github! Небольшое примечание: API-ключи полностью зашифрованы.
Большое преимущество такого подхода в том, что существует один единственный ключ, которым можно поделиться с командой. И он никогда не меняется!
Новые API-ключи, добавленные вашими коллегами как credentials, подтягиваются из Github каждый раз, когда вы вытаскиваете последнюю версию ветки main (ранее носила название «ветка master»).
Ключ можно найти в папке config/master.key.
Как это работает?
Запуск bin/rails credentials:edit в rails создает два файла, которые требуются в папке config:
- credentials.yml.enc хранит все ваши API-ключи. Если вам вдруг любопытно, расширение .enc означает шифрование.
- master.key — это ключ, который используется для расшифровки encrypted.file (1.) Убедитесь, что вы добавили master.key в файл .gitignore.yml.
Вместе с репозиторием отправляем наш файл Credentials.yml.enc на Github, теперь он в надежных руках. При этом master.key храним при себе и бережем так, как будто от этого зависит наша жизнь!
Переход на credentials
Откройте файл credentials, выполнив в терминале следующее:
EDITOR='code --wait' bin/rails credentials:edit
В зависимости от используемого вами редактора, замените code (VS Code). Например:
vim or vi = Vim
atom = Atom
subl or stt = Sublime
Файл credentials автоматически открывается в редакторе и ждет, когда вы его обновите и снова закроете. Перенесите ключи ENV, которые вы используете в файле .env, в файл credentials.yml.
Замените старый файл .ENV:
STRIPE_PUBLISHABLE_KEY=pk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00t
STRIPE_SECRET_KEY=sk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF
STRIPE_WEBHOOK_SECRET_KEY=whsec_cZpB0VG8cZpB0VG8cZpB0VG8UrgA2gcZpB0VG8cZpB
CLOUDINARY_URL=cloudinary://15031853100444:XOr3XQ-DcZ4dBoan80@DcZ4Boan800U
GOOGLE_API_KEY=S3cAOJVy0WyS3cAOJVy0WyIR9AOJVy0WyIR92e
на credentials.yml:
stripe:
publishable_key: pk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF
secret_key: sk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF
web_hook_secret_key: whsec_cZpB0VG8cZpB0VG8cZpB0VG8UrgA2gcZpB0VG8cZpB
google_api_key: S3cAOJVy0WyS3cAOJVy0WyIR9AOJVy0WyIR92e
cloudinary:
cloud_name: abcdefg
api_key: 12345678910
api_secret: abc315-VG8Ll8VG8Ll8L
Примечание: Ключ Cloudinary API разделен на несколько частей, согласно документации.
Все готово! Для вывода на экран, credentials можно запустить в терминале.
Запустите bin/rails credentials:show.
Пришло время прощаться с нашим старым другом — файлом .ENV. Удалим его.
Как использовать Credentials в различных форматах, таких как Ruby, YML и JavaScript
Ruby
# nested key
Rails.application.credentials.stripe[:publishable_key]
# single key
Rails.application.credentials.google_api_key
YML
cloudinary:
service: Cloudinary
api_key: <%= Rails.application.credentials.dig(:cloudinary, :api_key) %>
api_secret: <%= Rails.application.credentials.dig(:cloudinary, :api_secret) %>
для Cloudinary необходим дополнительный файл config/cloudinary.yml
JavaScript
// ruby code only possible with js.erb format
const abc = "<%= Rails.application.credentials.google_api_key %>"
HTML
<!-- interpolate in script tag -->
<script src="https://maps.googleapis.com/maps/api/js?key=<%= "#{Rails.application.credentials.google_api_key}"%>"</script
Как поделиться ключами с командой
Поделитесь ключом в master.key с другими разработчиками, чтобы разрешить дешифрование.
Каждый член команды создает файл master.key локально в папке config и передает его в общий ключ.
Вывод
Программирование становится всё более увлекательным занятием без суеты и необходимости искать правильные API-ключи. Благодаря credentials, мы можем обновить приложение с учетом рекомендаций по информационной безопасности. Поделитесь master key один раз и избавьтесь от утомительного копирования.
Спасибо за внимание!
===========
Источник:
habr.com
===========
===========
Автор оригинала: Thomas Van Holder
===========Похожие новости:
- [Программирование, Разработка игр, Управление персоналом, Социальные сети и сообщества] LuxCity — стратегия для разработчиков, где код решает все
- [JavaScript, VueJS] Nuxt.js app от UI-кита до деплоя
- [Haskell, Функциональное программирование] Имя не гарантирует безопасность. Haskell и типобезопасность (перевод)
- [Python, Программирование] 7 полезных расширений VS Code для Python-разработчиков (перевод)
- [Информационная безопасность, Ruby on Rails, CTF] HackTheBox. Прохождение Jewel. RCE в Ruby on Rails, sudo и google authenticator, выполнение кода в gem
- [JavaScript, Node.JS] Управление версиями Node.js и NPM с помощью NVM (перевод)
- [Ruby, Ruby on Rails] Как добавить React-компонент в Active Admin
- [IT-инфраструктура, 1С-Битрикс] «Битрикс24». Играемся с настройками и оптимизируем проект
- [Ruby, Карьера в IT-индустрии, Изучение языков] Cтоит ли учить Ruby
- [Ruby, Программирование, Ruby on Rails, Функциональное программирование] Метапрограммирование в реальной задаче
Теги для поиска: #_ruby, #_ruby_on_rails, #_credentials, #_ruby_on_rails, #_timeweb, #_blog_kompanii_timeweb (
Блог компании Timeweb
), #_ruby, #_ruby_on_rails
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 15:46
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Сredentials в версии Ruby on Rails 5.2.0 — новый золотой стандарт. Старые добрые, но небезопасные файлы .env уступают дорогу. В этой статье вы узнаете:
Еще 3 года назад Давид Хейнемейер Ханссон, создатель фреймворка Ruby on Rails, написал в своем твиттере о появлении релиза Rails 5.2.0, но новым технологиям часто требуется время, чтобы разогнаться и получить известность. Можно считать тревожным звоночком, если вам слишком часто приходится жонглировать API-ключами, меняясь ими с другими разработчиками из вашей команды. Тогда самое время еще раз взглянуть на то, как можно использовать credentials в приложении на Ruby on Rails. Почему стоит использовать сredentials вместо .env? В цикле разработки, по мере развития в проект интегрируется всё больше различных сервисов. Для каждого внешнего сервиса существует собственный API-ключ. Обычно проходит совсем немного времени до момента, когда коллеги начнут охоту за за последним API-ключом. Это очень раздражает! Или, просто представьте, API-ключ обновляется. Каждый разработчик в команде отдельно должен обновить ключ в локальных файлах dotenv. Кажется, всё это не соответствует концепции автоматизации и идеям программирования, верно? Забудьте об обмене API-ключами в чатах в Slack или по электронной почте. Больше не придется нарушать политику безопасности. Credentials в Rails решают эту проблему просто и эффективно: загрузка ключей на Github. Загрузка на Github? Да, загрузка на Github! Небольшое примечание: API-ключи полностью зашифрованы. Большое преимущество такого подхода в том, что существует один единственный ключ, которым можно поделиться с командой. И он никогда не меняется! Новые API-ключи, добавленные вашими коллегами как credentials, подтягиваются из Github каждый раз, когда вы вытаскиваете последнюю версию ветки main (ранее носила название «ветка master»). Ключ можно найти в папке config/master.key. Как это работает? Запуск bin/rails credentials:edit в rails создает два файла, которые требуются в папке config:
Вместе с репозиторием отправляем наш файл Credentials.yml.enc на Github, теперь он в надежных руках. При этом master.key храним при себе и бережем так, как будто от этого зависит наша жизнь! Переход на credentials Откройте файл credentials, выполнив в терминале следующее: EDITOR='code --wait' bin/rails credentials:edit В зависимости от используемого вами редактора, замените code (VS Code). Например: vim or vi = Vim atom = Atom subl or stt = Sublime Файл credentials автоматически открывается в редакторе и ждет, когда вы его обновите и снова закроете. Перенесите ключи ENV, которые вы используете в файле .env, в файл credentials.yml. Замените старый файл .ENV: STRIPE_PUBLISHABLE_KEY=pk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00t
STRIPE_SECRET_KEY=sk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF STRIPE_WEBHOOK_SECRET_KEY=whsec_cZpB0VG8cZpB0VG8cZpB0VG8UrgA2gcZpB0VG8cZpB CLOUDINARY_URL=cloudinary://15031853100444:XOr3XQ-DcZ4dBoan80@DcZ4Boan800U GOOGLE_API_KEY=S3cAOJVy0WyS3cAOJVy0WyIR9AOJVy0WyIR92e на credentials.yml: stripe:
publishable_key: pk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF secret_key: sk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF web_hook_secret_key: whsec_cZpB0VG8cZpB0VG8cZpB0VG8UrgA2gcZpB0VG8cZpB google_api_key: S3cAOJVy0WyS3cAOJVy0WyIR9AOJVy0WyIR92e cloudinary: cloud_name: abcdefg api_key: 12345678910 api_secret: abc315-VG8Ll8VG8Ll8L Примечание: Ключ Cloudinary API разделен на несколько частей, согласно документации. Все готово! Для вывода на экран, credentials можно запустить в терминале. Запустите bin/rails credentials:show. Пришло время прощаться с нашим старым другом — файлом .ENV. Удалим его. Как использовать Credentials в различных форматах, таких как Ruby, YML и JavaScript Ruby # nested key
Rails.application.credentials.stripe[:publishable_key] # single key Rails.application.credentials.google_api_key YML cloudinary:
service: Cloudinary api_key: <%= Rails.application.credentials.dig(:cloudinary, :api_key) %> api_secret: <%= Rails.application.credentials.dig(:cloudinary, :api_secret) %> для Cloudinary необходим дополнительный файл config/cloudinary.yml JavaScript // ruby code only possible with js.erb format
const abc = "<%= Rails.application.credentials.google_api_key %>" HTML <!-- interpolate in script tag -->
<script src="https://maps.googleapis.com/maps/api/js?key=<%= "#{Rails.application.credentials.google_api_key}"%>"</script Как поделиться ключами с командой Поделитесь ключом в master.key с другими разработчиками, чтобы разрешить дешифрование. Каждый член команды создает файл master.key локально в папке config и передает его в общий ключ. Вывод Программирование становится всё более увлекательным занятием без суеты и необходимости искать правильные API-ключи. Благодаря credentials, мы можем обновить приложение с учетом рекомендаций по информационной безопасности. Поделитесь master key один раз и избавьтесь от утомительного копирования. Спасибо за внимание! =========== Источник: habr.com =========== =========== Автор оригинала: Thomas Van Holder ===========Похожие новости:
Блог компании Timeweb ), #_ruby, #_ruby_on_rails |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 15:46
Часовой пояс: UTC + 5