File konfigurasi sering perlu disimpan bersama kode agar perubahan aplikasi mudah ditinjau dan diterapkan. Masalah muncul ketika konfigurasi itu berisi kata sandi database, token API, atau kunci layanan. Menaruh nilai rahasia dalam repositori Git biasa membuatnya ikut tersalin ke riwayat commit, salinan lokal, dan sistem CI. Menghapus baris tersebut pada commit berikutnya tidak otomatis menghilangkan jejak lama.
SOPS (Secrets OPerationS) dan age dapat membantu mengelola file konfigurasi terenkripsi tanpa menghilangkan alur kerja Git. SOPS mengenkripsi nilai sensitif dalam format terstruktur, sedangkan age menyediakan mekanisme enkripsi berbasis kunci yang sederhana. Keduanya berguna untuk tim yang ingin meninjau perubahan konfigurasi tanpa memublikasikan rahasianya.
Apa peran SOPS dan age?
SOPS adalah alat untuk mengenkripsi dan mendekripsi data rahasia dalam file YAML, JSON, ENV, INI, serta beberapa format lain. Pada file terstruktur, nama field dan struktur dokumen biasanya tetap terlihat, sementara nilai yang dipilih dienkripsi. Ini memudahkan perbedaan antarversi tetap dapat ditinjau, tetapi berarti nama kunci, susunan konfigurasi, dan sebagian metadata mungkin masih terbaca.
Age adalah alat enkripsi file yang dirancang agar penggunaan kunci relatif sederhana. SOPS dapat memakai age sebagai salah satu metode pengelolaan kunci, selain integrasi layanan pengelolaan kunci lain. Dengan kombinasi ini, tim bisa menyimpan file terenkripsi di repositori dan hanya memberikan kunci dekripsi kepada pihak atau lingkungan yang memang berwenang.
Mengapa bukan sekadar memakai file .env?
File .env yang berisi rahasia dapat praktis untuk pengembangan lokal, tetapi file tersebut tetap berupa teks biasa kecuali dilindungi mekanisme lain. Jika tidak sengaja masuk ke Git, arsip, log, atau backup, nilainya dapat tersebar. Menambahkan file ke .gitignore membantu mencegah commit baru, tetapi tidak menghapus salinan yang sudah pernah masuk ke riwayat repositori.
Dengan SOPS, file konfigurasi terenkripsi dapat ditinjau dan disimpan bersama kode. Namun, enkripsi bukan alasan untuk memasukkan semua rahasia ke Git tanpa kebijakan. Tentukan siapa yang memegang kunci, bagaimana rotasi dilakukan, dan apakah repositori benar-benar tempat yang sesuai untuk data tersebut.
Alur kerja yang disarankan
- Pisahkan data rahasia. Simpan hanya konfigurasi yang memang perlu dibagikan dalam file terenkripsi. Jangan mencampurkan private key pribadi atau data pelanggan yang tidak perlu ke repositori.
- Buat identitas age. Gunakan perintah
age-keygenpada komputer tepercaya. Simpan kunci privat di lokasi terlindungi, bukan di repositori proyek. Catat penerima publik yang boleh mengenkripsi file untuk tim. - Enkripsi file dengan SOPS. Konfigurasikan penerima age pada aturan SOPS, lalu enkripsi file konfigurasi. Periksa hasilnya sebelum commit untuk memastikan nilai sensitif tidak masih muncul sebagai teks biasa.
- Commit hanya file terenkripsi. Tinjau diff sebelum mendorong perubahan. Perhatikan juga file sementara, backup editor, log, dan artefak build yang mungkin berisi hasil dekripsi.
- Dekripsi saat diperlukan. Pengguna atau pipeline yang berwenang mendekripsi file pada tahap penerapan. Hindari mencetak hasil dekripsi ke log atau menyimpan salinan plaintext lebih lama daripada yang dibutuhkan.
Contoh penggunaan sederhana
Setelah SOPS dan age dipasang serta aturan penerima dikonfigurasi, file konfigurasi dapat dienkripsi menggunakan SOPS sesuai formatnya. Untuk membaca kembali isi file pada lingkungan yang memiliki kunci yang tepat, gunakan perintah dekripsi SOPS. Nama perintah dan aturan konfigurasi perlu disesuaikan dengan versi alat dan format file yang dipakai.
# Contoh umum: mengenkripsi file YAML
sops --encrypt --in-place config.production.yaml
# Melihat hasil dekripsi secara lokal
sops --decrypt config.production.yamlJangan menjalankan perintah dekripsi pada terminal bersama atau lingkungan yang merekam output secara otomatis. Untuk pipeline produksi, lebih baik meneruskan nilai ke proses yang membutuhkannya secara langsung, dengan izin minimum dan tanpa menampilkan rahasia pada output job.
Integrasi CI/CD dan GitOps
Dalam pipeline, kunci privat age sebaiknya diberikan melalui secret manager milik platform CI/CD atau mekanisme identitas yang terkontrol. Batasi pipeline mana yang dapat mengaksesnya; pull request dari kontributor yang tidak tepercaya tidak semestinya memperoleh akses dekripsi produksi. Pisahkan kunci dan izin antara lingkungan pengembangan, staging, dan produksi bila dampak kebocorannya berbeda.
Jika memakai GitOps, pastikan komponen yang melakukan dekripsi memiliki kontrol akses yang jelas. Enkripsi file di Git tidak melindungi rahasia setelah didekripsi pada mesin target. Izin filesystem, pembatasan proses, audit akses, dan penghapusan berkas sementara tetap diperlukan.
Batasan dan kesalahan yang perlu dihindari
- Kunci privat ikut ter-commit: anggap rahasia telah bocor, cabut atau rotasi kredensial terkait, dan bersihkan riwayat sesuai prosedur insiden.
- Semua orang memakai satu kunci: kompromi satu perangkat dapat berdampak ke seluruh tim. Gunakan penerima dan proses akses yang sesuai kebutuhan.
- Diff dianggap sepenuhnya aman: nama field dan struktur masih dapat mengungkap informasi internal. Jangan masukkan detail yang tidak perlu.
- Lupa rotasi: siapkan prosedur mengganti kredensial aplikasi dan memperbarui penerima enkripsi, lalu uji proses pemulihan sebelum terjadi insiden.
- Menganggap enkripsi menggantikan secret manager: untuk rahasia dinamis, audit terpusat, atau akses sementara, layanan pengelolaan rahasia khusus mungkin lebih cocok.
Kesimpulan
SOPS dan age memberikan pilihan praktis untuk menyimpan konfigurasi sensitif dalam alur kerja Git dengan nilai rahasia tetap terenkripsi. Manfaatnya paling terasa ketika tim perlu meninjau perubahan konfigurasi secara kolaboratif dan memiliki proses yang jelas untuk distribusi kunci. Keamanan tetap bergantung pada perlindungan kunci privat, pembatasan akses CI/CD, pengelolaan file hasil dekripsi, serta rotasi kredensial. Pelajari dokumentasi resmi SOPS dan age sebelum menerapkannya pada sistem produksi.
PENGALAMAN BARU Coba tampilan baru Penasaran dengan pengalaman membaca Nazuaf versi modern? Coba tampilan baru yang dirancang agar nyaman dibaca dari ponsel dan pc. Buka versi modern dan lanjutkan membaca artikel ini. Jelajahi tampilan baru Nazuaf versi modern · Ketuk kartu untuk mencoba