MATERI 11 DARI 28
Secret management dan konfigurasi per environment
Pisahkan secret dari source, prompt, log, dan client bundle; validasi keberadaan tanpa mencetak nilainya.
Tujuan pembelajaran
- Menggunakan environment variables dengan benar.
- Membedakan konfigurasi publik dan secret.
- Merotasi credential yang terpapar.
Konsep utama
Secret lifecycle
Provision, gunakan, rotasi, revoke, dan audit.
Environment boundary
Secret pada shell SSH belum tentu tersedia pada PHP-FPM, container, atau service lain.
Alur kerja teknis
- Tulis tujuan dan acceptance criteria.
- Buat perubahan kecil yang dapat ditinjau.
- Jalankan test dan baca diff sebelum menerima hasil AI.
Contoh implementasi
Membaca secret tanpa fallback berbahaya
import os
api_key = os.environ.get("APP_API_KEY")
if not api_key:
raise RuntimeError("APP_API_KEY belum dikonfigurasi")Validasi konfigurasi Node.js
const required = ["DATABASE_URL", "SESSION_SECRET"];
for (const key of required) {
if (!process.env[key]) throw new Error(`${key} belum dikonfigurasi`);
}Cek kehadiran tanpa mencetak secret
test -n "$APP_API_KEY" && echo "APP_API_KEY tersedia" || { echo "APP_API_KEY hilang" >&2; exit 1; }Aspek keamanan
- Jangan menaruh secret di contoh `.env` nyata.
- Jangan mencetak environment penuh pada error/debug endpoint.
- Anggap secret yang ditempel ke chat sudah terpapar dan harus dirotasi.
Kesalahan umum
- Menerima kode AI tanpa membaca diff dan memahami alur data.
- Menguji hanya happy path dan mengabaikan input salah atau batas nilai.
- Menyimpan secret, token, atau data nyata di prompt dan source code.
Pengujian dan verifikasi
- Jalankan contoh dengan input normal.
- Ulangi dengan input kosong, tipe salah, dan nilai batas.
- Pastikan error tidak membocorkan secret atau detail internal.
Latihan
- Modifikasi contoh dengan satu kebutuhan baru dan tulis acceptance criteria-nya.
- Tambahkan satu negative test lalu jelaskan risiko yang dicegah.
Checklist
- Tujuan dan batas pekerjaan jelas.
- Input divalidasi di server.
- Secret tidak berada di source/prompt.
- Test lulus dan diff sudah dibaca.
Rangkuman
Pisahkan secret dari source, prompt, log, dan client bundle; validasi keberadaan tanpa mencetak nilainya.