Cara beralih dari rahasia ke kredensial (Ruby on Rails)

Kredensial di Ruby on Rails 5.2.0 adalah standar emas baru. File .env lama yang bagus tapi tidak aman mulai hilang. Di artikel ini, Anda akan mempelajari:



  • mengapa dan bagaimana beralih dari rahasia menjadi kredensial,
  • cara menggunakan kunci API di Ruby, YML dan js.erb,
  • berikan saja kunci untuk masing-masing tim sekali dan untuk selamanya.


Hingga 3 tahun yang lalu, David Heinemeyer Hansson, pencipta framework Ruby on Rails, men - tweet tentang kedatangan Rails 5.2.0, tetapi teknologi baru sering kali membutuhkan waktu untuk mempercepat dan mendapatkan publisitas.



Ini dapat dianggap sebagai panggilan bangun jika Anda terlalu sering menyulap kunci API, menukarnya dengan pengembang lain di tim Anda. Kemudian saatnya untuk melihat kembali bagaimana Anda dapat menggunakan kredensial di aplikasi Ruby on Rails.



Mengapa menggunakan kredensial alih-alih rahasia?



Dalam siklus pengembangan, seiring perkembangannya, semakin banyak layanan yang berbeda diintegrasikan ke dalam proyek. Setiap layanan eksternal memiliki kunci API-nya sendiri. Biasanya dibutuhkan sedikit waktu sebelum rekan kerja mulai mencari kunci API terbaru. Ini sangat menyebalkan!



Atau, bayangkan saja kunci API sedang diperbarui. Setiap pengembang di tim harus memperbarui kunci di file dotenv lokal secara terpisah. Sepertinya semua ini tidak sesuai dengan konsep otomatisasi dan ide pemrograman, bukan?



Lupakan tentang bertukar kunci API dalam obrolan atau email Slack. Anda tidak lagi harus melanggar kebijakan keamanan Anda.



Kredensial di Rails memecahkan masalah ini secara sederhana dan efisien: mengunggah kunci ke Github.



Mengupload ke Github? Ya, unggah ke Github! Catatan kecil: kunci API sepenuhnya dienkripsi.



Keuntungan besar dari pendekatan ini adalah ada satu kunci untuk dibagikan dengan tim. Dan itu tidak pernah berubah!



Kunci API baru yang ditambahkan oleh rekan Anda sebagai kredensial ditarik dari Github setiap kali Anda memeriksa versi terbaru dari cabang utama (sebelumnya disebut "cabang master" ).



Kuncinya dapat ditemukan di folder config / master.key.



Bagaimana itu bekerja?



Running bin/rails credentials:edit



in rails membuat dua file yang diperlukan di folder config:



  • credentials.yml.enc



    menyimpan semua kunci API Anda. Jika Anda penasaran, ekstensi .enc adalah singkatan dari enkripsi.
  • master.key



    Adalah kunci yang digunakan untuk mendekripsi encrypted.file (1.) Pastikan Anda menambahkan master.key ke file .gitignore.yml



    .


Bersama dengan repositori, kami mengirim file kami Credentials.yml.enc



ke Github, sekarang sudah di tangan yang tepat. Pada saat yang sama, kami menyimpan master.key bersama kami dan menjaganya seolah-olah hidup kami bergantung padanya!



Beralih ke kredensial



Buka file kredensial dengan melakukan hal berikut di terminal:



EDITOR='code --wait' bin/rails credentials:edit







Tergantung pada editor yang Anda gunakan, ganti code



(VS Code). Misalnya:



vim atau vi = Vim

atom = Atom

subl atau stt = Sublime



File kredensial secara otomatis dibuka di editor dan menunggu Anda untuk menyegarkan dan menutupnya lagi. Pindahkan kunci ENV yang Anda gunakan di file .env ke file credentials.yml.



Ganti file lama .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
      
      





pada 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
      
      





Catatan: Kunci API Cloudinary dibagi menjadi beberapa bagian sesuai dengan dokumentasi.



Semua sudah siap! Untuk tampilan, kredensial dapat dijalankan di terminal.



Lari bin/rails credentials:show



.



Saatnya mengucapkan selamat tinggal kepada teman lama kita - file .ENV. Mari kita hapus.



Cara menggunakan Kredensial dalam berbagai format seperti Ruby, YML dan 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 membutuhkan file JavaScript config / cloudinary.yml tambahan







// 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
      
      





Cara membagikan kunci dengan tim



Bagikan kunci master.key



dengan pengembang lain untuk mengaktifkan dekripsi.



Setiap anggota tim membuat file master.key



secara lokal di folder config dan mengunggahnya ke kunci bersama.



Keluaran



Pemrograman menjadi semakin menyenangkan tanpa kerumitan dan kerumitan menemukan kunci API yang tepat. Berkat kredensial, kami dapat memperbarui aplikasi dengan mempertimbangkan rekomendasi keamanan informasi. Bagikan kunci master sekali dan hilangkan penyalinan yang membosankan.



Terima kasih atas perhatiannya!



All Articles