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