Modul 1 · Mulai dengan aman
Yang tidak masuk ke model: rahasia, data produksi, kode klien
Intinya
Kunci, kata sandi, data produksi, kode klien yang terikat perjanjian, dan data pribadi tidak ditempel ke model. Ganti dengan data buatan atau skema tanpa isi, dan cek apa yang bisa dibaca agen sebelum memberinya akses.
Setelah pelajaran ini kamu bisa
- Menyebut empat bahan yang tidak ditempel ke model: rahasia, data produksi, kode klien terikat perjanjian, data pribadi
- Mengganti bahan sensitif dengan data buatan, skema tanpa isi, atau potongan kode yang sudah dibersihkan sebelum meminta bantuan AI
- Memeriksa pengaturan alat AI dan aturan tim sebelum memberi agen coding akses ke repositori
Istilah di pelajaran ini
Pahami
Asisten AI di editor terasa seperti rekan di sebelah meja: kamu tempel error (galat), ia menjelaskan; kamu tempel fungsi, ia merapikan. Karena terasa akrab, pengembang mudah lupa bahwa setiap teks yang ditempel keluar dari laptopnya dan masuk ke layanan pihak lain, atau ke berkas konteks agen yang bisa terbaca lagi nanti.
Ada empat jenis bahan yang tidak ikut ke model, apa pun alatnya.
Rahasia. Kunci API (API key), kredensial akses, kata sandi basis data (database), berkas lingkungan, sertifikat, dan kunci SSH. Satu kunci yang bocor bisa dipakai siapa pun yang membacanya, dan kamu tidak bisa menarik kembali teks yang sudah terkirim. Kalau pesan error-mu memuat string koneksi lengkap, hapus bagian rahasianya sebelum menempel.
Data produksi (production). Baris tabel pengguna, isi pesanan, log yang memuat alamat email atau nomor telepon, cadangan database. Untuk memahami bug, model jarang butuh data asli; ia butuh bentuknya. Skema (schema) tabel, tiga baris contoh buatan, dan pesan error biasanya cukup.
Kode klien yang terikat perjanjian. Kode yang kamu tulis untuk klien sering dilindungi kontrak kerahasiaan. Menempelnya ke layanan AI bisa melanggar kontrak itu, walaupun niatmu hanya minta bantuan merapikan. Cek perjanjiannya, atau tanyakan ke pemimpin proyek, sebelum kode klien menyentuh alat AI mana pun.
Data pribadi. Nama, nomor identitas, alamat, data kesehatan, atau data anak di fixture, log, atau tangkapan layar. UU PDP berlaku juga untuk pengembang: memindahkan data pribadi ke layanan lain adalah pemrosesan, dan butuh dasar yang sah.
Aturan praktisnya sederhana: kirim bentuk, bukan isi. Model perlu tahu struktur, tipe, dan pola masalahnya; nilai aslinya tidak ia perlukan.
Agen coding (coding agent: agen AI yang menulis dan menjalankan kode) menambah satu lapis risiko. Asisten di jendela chat (percakapan dengan AI) hanya membaca yang kamu tempel. Agen yang berjalan di dalam repositori (repository) bisa membaca sendiri: berkas lingkungan di akar proyek, folder cadangan, catatan rapat yang tersimpan di repositori, atau riwayat terminal (command line). Ia juga bisa menjalankan perintah yang menyentuh database.
Jadi sebelum memberi agen akses, periksa tiga hal. Pertama, apa yang ada di folder kerjanya: berkas rahasia seharusnya tidak ada di repositori, dan bila terpaksa ada di laptop atau komputer kerjamu (local machine), pastikan agen diatur untuk tidak membacanya. Kedua, ke mana perintahnya bisa terhubung: variabel lingkungan (environment variable) yang menunjuk ke database produksi atau database pengembang bersama tidak boleh menjadi bawaan saat agen menjalankan tes. Ketiga, apa yang disimpan alat itu: beberapa layanan menyimpan percakapan atau memakainya untuk pelatihan kecuali diatur lain. Pengaturan itu milik organisasimu untuk diputuskan, bukan pilihan pribadi.
Sebelum
Permintaan
Kenapa query ini lambat? postgres://app:Rahasia123@db-prod:5432/main SELECT * FROM pelanggan WHERE email = 'siti.rahma@contoh' ... [lalu 50 baris hasil query dengan nama dan nomor telepon pelanggan]
Hasilnya
Contoh keluaran buruk; jangan dipakai: Query lambat karena tidak ada indeks pada kolom email. Tambahkan indeks. Omong-omong, kata sandi database di string koneksimu sebaiknya diganti.
Sesudah
Permintaan
Tujuan: saya ingin tahu kenapa query pencarian pelanggan lambat. Pembaca: saya sendiri, pengembang backend. Bahan: skema tabel pelanggan (tanpa data), query dengan nilai contoh, dan rencana eksekusi di bawah. Tabel berisi sekitar dua juta baris. Batas: jangan menebak di luar bahan; kalau perlu informasi lain, tanyakan. Bentuk: tiga kemungkinan penyebab, urut dari yang paling mungkin, masing-masing dengan cara membuktikannya. Cek: sebutkan bagian rencana eksekusi yang mendukung setiap kemungkinan. [skema] [query dengan email contoh] [rencana eksekusi]
Hasilnya
Tiga kemungkinan: (1) pemindaian penuh tabel karena kolom email tidak berindeks, terlihat dari baris pemindaian berurutan di rencana; (2) perbandingan tanpa membedakan huruf besar yang mencegah indeks dipakai; (3) kolom yang diambil terlalu banyak. Cara membuktikan: buat indeks di salinan lokal, jalankan ulang rencana eksekusi, bandingkan biayanya.
Yang berubah
- Permintaan pertama mengirim kata sandi produksi dan data pribadi lima puluh pelanggan. Keduanya tidak bisa ditarik kembali.
- Permintaan kedua mengirim bentuk masalahnya: skema, query dengan nilai contoh, dan rencana eksekusi. Hasilnya lebih tajam karena model punya bukti untuk dibaca.
- Kata sandi yang sudah terkirim harus dirotasi hari itu juga, walaupun model menyarankannya dengan sopan.
Kesalahan umum
- Kesalahan
- Menempel berkas lingkungan lengkap ke model untuk menanyakan kenapa aplikasi tidak bisa tersambung ke layanan.
- Kenapa merugikan
- Berkas lingkungan berisi semua rahasia aplikasi sekaligus. Setelah terkirim, kamu harus menganggap semuanya bocor dan merotasi setiap kunci, yang bisa memakan setengah hari dan mengganggu layanan lain yang memakai kunci yang sama.
- Lakukan ini
- Kirim daftar nama variabel saja, dengan nilai diganti tanda seperti ‹disembunyikan›, plus pesan error-nya. Kalau perlu memeriksa format nilai, jelaskan polanya dengan kata-kata.
Coba
Kartu pilah
Untuk setiap bahan, tentukan: boleh dikirim ke model, atau diganti dulu?
Skema tabel tanpa baris data
String koneksi database dengan kata sandi
Modul pembayaran yang ditulis untuk klien dengan perjanjian kerahasiaan
Pesan error kompilasi dari kode milik timmu sendiri
Log produksi yang memuat alamat email pengguna
Tiga baris data uji buatan sendiri dengan nama fiktif
6 kartu lagi
Kamu ingin agen coding menjalankan tes di repositori. Berkas lingkungan lokalmu menunjuk ke database pengembang bersama tim. Apa yang kamu lakukan dulu?
Bawa pulang
Sebelum menempel atau memberi akses
- Saya sudah menghapus kunci, token, dan kata sandi dari teks yang akan saya kirim
- Saya mengirim skema dan contoh buatan, bukan baris data produksi
- Saya sudah memastikan kode klien boleh dibagikan ke layanan AI ini
- Log dan tangkapan layar sudah bersih dari data pribadi
- Folder kerja agen tidak memuat berkas rahasia, dan perintah tesnya menunjuk ke database sekali pakai
- Kalau ada rahasia yang terlanjur terkirim, saya merotasinya hari itu juga
Yang salah di tempat kami
Rahasia tidak pernah masuk variabel publik browser
- Konteks
- Aplikasi web membaca konfigurasi dari variabel lingkungan. Sebagian variabel hanya dipakai server, sebagian lagi sengaja dikompilasi ke kode yang diunduh browser.
- Yang biasanya salah
- Kalau kunci penyedia layanan disimpan di variabel publik browser, kunci itu ikut terkirim ke setiap pengunjung. Siapa pun yang membuka alat pengembang bisa menyalinnya.
- Akibatnya bila dibiarkan
- Orang lain bisa memakai layanan atas nama dan atas tagihan organisasimu, dan kamu tidak bisa membuktikan siapa yang memakainya.
- Akar masalah
- Di berkas konfigurasi, variabel publik dan variabel rahasia terlihat sama. Bedanya hanya awalan nama, dan awalan itu mudah terlewat saat terburu-buru.
- Cara kami
- Kunci hanya dibaca oleh server, dan browser tidak pernah menerima rahasia apa pun. Bila sebuah kunci pernah terlihat di kode browser, kami mencabut dan merotasinya saat itu juga.
- Aturan yang kami pegang
- Sebuah tes gagal setiap kali ada variabel publik yang namanya mirip rahasia (kunci, token, kata sandi), di kode maupun berkas konfigurasi.
PelajarannyaAnggap semua yang sampai ke browser sudah dibaca orang lain.
