Belajar Cyber Security #18: Secrets Management — Rahasia yang Tak Boleh Masuk Git

Di episode #17 kita bahas rantai pasok software — bagaimana dependensi yang kita percaya bisa jadi jalan belakang masuknya serangan. Hari ini saya mau catat satu pelajaran yang lebih personal, yang bahkan sering saya lakukan sendiri tanpa sadar: menyimpan rahasia di dalam kode. API key, password database, token layanan cloud — semua pernah saya tempel langsung di file konfigurasi “biar cepat”, lalu commit. Ternyata kebiasaan kecil ini termasuk penyebab kebocoran data terbesar di dunia developer saat ini, dan git adalah arsip yang tidak pernah lupa.

Infografis dua jalur: rahasia di dalam kode vs env/vault dengan disiplin git
Dua jalur yang bisa diambil sebuah rahasia: ditempel di kode, atau dijaga di env/vault.

Angka yang membuat saya berhenti “tempel dulu”

GitGuardian merilis laporan State of Secrets Sprawl edisi ke-5 pada 17 Maret 2026, berisi data sepanjang 2025. Angkanya bikin saya melongo: sekitar 29 juta rahasia (secrets) terdeteksi di GitHub publik sepanjang 2025 — lonjakan 34% dibanding tahun sebelumnya, dan yang terbesar yang pernah tercatat. Lebih menyentuh lagi: sejak 2021 jumlah secret tumbuh kira-kira 1,6× lebih cepat daripada jumlah developer aktif. Artinya bukan cuma developer yang bertambah — kebiasaan buruknya ikut terbawa dan menguat.

Ada temuan yang langsung menyentuh workflow saya sebagai programmer yang sekarang rajin memakai AI: kode yang dihasilkan bantuan AI punya laju kebocoran secret sekitar dua kali rata-rata baseline GitHub. Kita copy-paste output AI yang memuat contoh kredensial, lalu tidak sempat menggantinya sebelum commit. Kebocoran kredensial layanan AI sendiri melonjak 81% year-on-year, dan pola konfigurasi MCP yang menaruh kredensial di file konfigurasi berkontribusi lebih dari 24.000 secret yang terekspos. Ini berarti bagi saya: makin cepat alat bantu menulis kode, makin cepat pula kecerobohan kita terarsip.

Kenapa git mengubah “kesalahan kecil” jadi masalah permanen

Saya dulu mengira menghapus API key dari file lalu commit ulang sudah menyelesaikan masalah. Ternyata tidak. Git menyimpan setiap versi file di riwayatnya. Key yang pernah ter-commit tetap hidup di commit lama — siapa pun yang clone repo (atau penyerang yang memindai GitHub secara otomatis) bisa menggali keluar dengan perintah sederhana:

# menggali file konfigurasi lama dari riwayat
git log -p --all -- .env
# cari pola key di seluruh riwayat repo
git log -p --all | grep -iE "api[_-]?key|secret|password"

Cara yang benar bukan “hapus dari HEAD”, tapi: anggap secret yang pernah masuk git sudah bocor → rotasi (regenerate) kredensial di sistem asal, lalu bersihkan riwayat dengan tool seperti git filter-repo, dan paksa push. Mahal, ribet, dan merepotkan semua orang yang sudah clone. Karena itu sekarang saya lebih memilih mencegah sejak baris pertama: secret tidak boleh menyentuh git sama sekali, sampai ke file .env pun tidak.

env vs vault: dua level perlindungan

Setelah paham ruginya, saya membandingkan dua pendekatan yang paling umum. Environment variable / file .env memindahkan rahasia dari kode ke konfigurasi — langkah pertama yang baik. Secret vault (HashiCorp Vault, AWS Secrets Manager, dan sejenisnya) menambah lapisan: rahasia dienkripsi saat disimpan, di-audit siapa yang membacanya, dan bisa di-rotasi otomatis dengan umur pendek.

Untuk proyek pribadi saya cukup .env dengan disiplin ketat; untuk produksi dengan banyak layanan, vault mulai terasa perlu. Ini berarti bagi saya: pilihan tool bukan soal siapa paling canggih, tapi seberapa besar kerugiannya kalau rahasia itu jatuh.

Rutinitas kebersihan .env yang saya terapkan

  • .env masuk .gitignore sejak awal, bahkan sebelum file .env sendiri dibuat. Saya pernah lupa, dan satu-satunya pengingat adalah GitHub yang mengirim notifikasi “secret scanning” — untungnya masih di repo privat.
  • .env.example berisi kunci saja, tanpa nilai rahasia: DB_PASSWORD= (kosong), supaya rekan tim tahu variabel apa yang dibutuhkan tanpa membawa kredensial nyata.
  • Secret scanning aktif di platform. GitHub Advanced Security dan GitGuardian (yang gratis untuk publik) memindai commit — ini jaring pengaman terakhir, bukan alasan untuk tidak berhati-hati.
  • Pre-commit hook pemeriksa rahasia seperti gitleaks dijalankan otomatis sebelum commit jadi, menangkap pola API key, private key, dan token yang nyasar ke kode.
  • Rotasi berkala: secret dianggap punya umur, bukan pengetahuan abadi. Umur pendek membatasi kerugian kalau ternyata bocor.

Catatan penutup

Di episode #13 saya menulis bahwa kriptografi bukan soal rumus, tapi soal prinsip pakai. Secrets management rasanya serupa: bukan soal tool vault mana yang paling lengkap, tapi kebiasaan kecil yang konsisten — jangan tempel rahasia di kode, jangan biarkan rahasia menyentuh git, rotasi kalau ragu. Kebiasaan ini juga melengkapi gambaran di episode #17: rantai pasok kita hanya sekuat konfigurasi paling ceroboh yang kita bawa ke dalamnya.

Sumber

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses

© 2026 Catatan Rudy

AspekFile .env / env varSecret vault
PenyimpananPlain text di serverTerenkripsi, akses terkontrol
Riwayat aksesTidak ada audit trailLog siapa ambil secret apa, kapan
RotasiManual, sering telatOtomatis, token umur pendek
Kebocoran gitMasih mungkin kalau tidak di-.gitignoreTidak tersentuh git
Kerumitan setupRendah — cocok proyek kecilTinggi — worth it untuk tim/produksi