Menyimpan Secrets Dengan Granary

2 menit

featured-image.avif

Singkat cerita, saya membuat sebuah project pribadi baru: Granary.

Granary bisa digunakan untuk menyimpan “secrets” ke dalam sebuah file, sebagai contoh, seperti password, username, ataupun IP address.

Software ini diimplementasikan dengan menggunakan bahasa Go. Untuk repo dari project ini sendiri saya simpan di Github dan dapat kalian akses di sini.

Mengapa?

Beberapa waktu lalu saya menyewa sebuah VPS untuk mendeploy aplikasi Rails.

Step yang saya lakukan adalah:

  1. Mengakses server dengan SSH menuju IP address tertentu.
  2. Memasukkan password root user.
  3. Membuat user database dengan memasukkan username dan password.

Poin-poin di atas adalah hal minimal yang perlu saya lakukan. Jika aplikasi memiliki admin user, maka saya akan perlu untuk menyimpan tambahan username dan password yang berbeda lagi.

Solusi idealnya adalah kita menyimpan semua hal tersebut ke dalam satu tempat yang sama agar lebih mudah diakses. Cara sederhananya adalah dengan menyimpan semua data ke dalam sebuah file .txt biasa.

Namun, kita bisa memberikan sebuah pengamanan dengan mengenkripsi file tersebut sehingga orang lain tidak dapat membaca isinya secara langsung.

Granary dibuat untuk menyelesaikan problem ini.

Mengapa tidak menggunakan tool X/Y?

Tidak ada alasan spesifik😄

Granary ini dibuat hanya untuk hobby project saja, bukan tool untuk penggunaan profesional.

Demo software

1. Membuat file secret baru

Granary akan menampung data terenkripsi ke dalam sebuah file. Secara default, file ini akan dinamakan secrets.gran di dalam current working directory.

Untuk melakukan hal ini, kita bisa menjalankan:

$ gran new

Demo subcommand new

2. Menyimpan secret baru

Untuk menyimpan sebuah secret baru, kita bisa menggunakan command:

$ gran set <KEY> <VALUE>

Sebagai contoh:

Demo subcommand set

Dapat dilihat, secret disimpan secara terenkripsi di dalam file secrets.gran.

3. Mengambil list semua secret

Untuk melihat key dari semua secret yang ada, kita bisa menggunakan:

$ gran list

Demo subcommand list

4. Mengakses value dari secret

Sekarang kita ingin mengakses nilai secret yang kita simpan. Kita jalankan:

$ gran get <KEY>

Sebagai contoh:

Demo subcommand get

Karena output dari Granary memiliki format yang minimalis, kita juga bisa memproses output dengan menggunakan operasi seperti pipe ataupun nested command:

Demo chaining get

5. Menghapus secret

Jika kita ingin menghapus sebuah secret, gunakan:

gran remove <KEY>

Demo subcommand remove

Penutupan

Kita bisa melakukan operasi CRUD dasar dengan Granary sebagai alternatif yang lebih aman daripada menyimpan data rahasia di dalam sebuah file .txt.

Agar artikel ini tidak menjadi terlalu panjang, detail mekanisme yang digunakan oleh Granary untuk mengamankan data akan dijelaskan di artikel lain yang akan datang😉

Sekian dan terima kasih👋