“Jalankan saja di sandbox” terdengar seperti satu instruksi. Dalam praktik ada empat batas umum yang dimaksud orang, dan yang mereka hentikan sangat berbeda. Salah memilih membuat Anda terbuka terhadap risiko atau membuat setiap eksekusi lebih lambat dan mahal dari yang perlu.
Perbandingan ini berasumsi bahwa kodenya memang tidak tepercaya: ditulis oleh model bahasa, dikirim oleh pengguna, atau datang dalam pull request dari orang yang tidak Anda kenal. Kode yang Anda tulis sendiri punya kebutuhan berbeda.
Apa yang bisa salah
Sebelum membandingkan batas, ada gunanya menyebut untuk apa batas itu. Kode tidak tepercaya bisa:
- Membaca yang tidak seharusnya: variabel lingkungan, kunci SSH, berkas di direktori home Anda, endpoint metadata cloud.
- Menghabiskan sumber daya: berputar tanpa henti, membuat proses sampai mesin macet, memenuhi disk.
- Menyalahgunakan jaringan: memindai host lain, mengirim spam, menambang kripto, memanggil layanan internal Anda.
- Bertahan: memasang cron job atau layanan yang hidup lebih lama dari tugasnya.
- Lolos: memakai bug di lapisan bawah untuk menjalankan kode di host itu sendiri.
Setiap tingkat di bawah ini menangani sebagian dari hal-hal tersebut, tidak semuanya.
Tingkat 1: sebuah proses
Sandbox paling sederhana adalah proses anak: subprocess.run dengan batas waktu, mungkin dengan pengguna tersendiri, dengan batas sumber daya dan filter seccomp jika Anda teliti.
Menghentikan: eksekusi tanpa akhir (batas waktu), sebagian penghabisan sumber daya (batas), sebagian panggilan sistem berbahaya (seccomp). Tidak menghentikan: pembacaan apa pun yang bisa dibaca pengguna itu, akses jaringan, bertahan melalui apa pun yang bisa ditulisi pengguna, dan bug kernel apa pun. Kegagalan khas: kode membaca berkas yang Anda lupa bisa dibaca, atau interpreter bahasa yang “dibatasi” ternyata punya celah. Sejarah penuh dengan sandbox di dalam bahasa yang tidak bertahan.
Waktu nyalanya praktis nol. Cocok untuk kode Anda sendiri; bukan batas untuk kode orang lain.
Tingkat 2: kontainer
Namespace memberi kode pandangannya sendiri atas berkas, proses, dan jaringan; cgroup membatasi CPU dan memori; capability yang dicabut dan seccomp mempersempit apa yang bisa ia minta dari kernel.
Menghentikan: pembacaan berkas host (kecuali dipasang), melihat proses lain, pemakaian sumber daya tanpa batas, sebagian besar masalah bertahan jika kontainernya dibuang. Tidak menghentikan: bug di kernel bersama milik host. Semua kontainer di mesin berbicara dengan kernel yang sama, jadi kerentanan kernel yang bisa dijangkau adalah jalan keluar. Kegagalan khas: konfigurasi, bukan eksploit eksotis. Kontainer privileged, socket runtime kontainer yang dipasang ke dalam, jaringan host yang dinyalakan “hanya untuk debugging”. Masing-masing diam-diam menghapus batas itu.
Waktu nyalanya milidetik. Ada varian yang diperkuat, termasuk kernel di ruang pengguna yang mencegat panggilan sistem sebelum mencapai host, dengan mengorbankan kecepatan dan kompatibilitas. Untuk kode dari orang yang Anda percayai, kontainer yang dikonfigurasi dengan baik adalah pilihan bawaan yang masuk akal.
Tingkat 3: microVM
MicroVM menjalankan kernelnya sendiri di bawah hypervisor, seperti VM penuh, tetapi hampir tanpa perangkat keras yang diemulasikan. Contoh paling terkenal adalah Firecracker.
Menghentikan: semua yang dihentikan kontainer, ditambah masalah kernel bersama. Untuk mencapai host, kode harus menjebol hypervisor atau salah satu dari segelintir perangkat virtual, permukaan yang jauh lebih kecil daripada antarmuka panggilan sistem kernel. Tidak menghentikan: penyalahgunaan apa yang Anda berikan kepadanya. Lalu lintas keluar yang terbuka masih bisa disalahgunakan; rahasia yang disuntikkan masih bisa bocor. Kegagalan khas: kebijakan, bukan isolasi. Seseorang meneruskan token produksi “supaya tesnya jalan”, atau membiarkan lalu lintas keluar tanpa batas di tempat yang tidak membutuhkannya.
Waktu nyalanya antara sepersekian detik hingga sekitar satu detik, dengan overhead beberapa megabita. Itu cukup cepat untuk membuat satu per tugas lalu menghapusnya, yang sekaligus menyelesaikan masalah bertahan: tidak ada yang tersisa untuk didatangi kembali.
Tingkat 4: mesin virtual penuh
VM biasa, atau VPS, punya jenis batas yang sama dengan microVM: virtualisasi perangkat keras dan hypervisor. Perbedaannya ada di semua hal di sekitarnya: model perangkat lengkap, seluruh sistem operasi, IP publik jika Anda mau, dan siklus hidup yang diukur dalam hari atau bulan.
Menghentikan: kelas masalah yang sama dengan microVM, dengan permukaan serangan sedikit lebih besar karena lebih banyak perangkat keras yang diemulasikan. Tidak menghentikan: penyalahgunaan identitas jaringannya sendiri. VM dengan IP publik yang menjalankan kode jahat membuat IP-nya sendiri masuk daftar blokir, yang penting jika IP itu juga mengirim email Anda. (Jika itu sudah terjadi, lihat apa yang harus dilakukan jika IP Anda masuk daftar blokir.) Kegagalan khas: hidupnya terlalu lama. VM yang dibuat untuk satu eksperimen mengumpulkan kredensial dan status, dan perlahan menjadi mesin tepercaya yang seharusnya ia lindungi.
Waktu nyalanya puluhan detik hingga menit, dan penagihannya biasanya bulanan. Itulah bentuk yang tepat untuk layanan berumur panjang yang butuh port masuk, dan bentuk yang salah untuk menjalankan kode selama 20 detik.
Perbandingannya
| Proses | Kontainer | MicroVM | VM penuh | |
|---|---|---|---|---|
| Kernel sendiri | tidak | tidak | ya | ya |
| Batas utama | izin pengguna | namespace + kernel bersama | hypervisor, model perangkat mungil | hypervisor, model perangkat lengkap |
| Waktu nyala | ~0 | md | ~0.1–1 dtk | 10 dtk – menit |
| Overhead | tidak ada | kecil | beberapa MiB | puluhan–ratusan MiB |
| Dibuang setelah tiap tugas | mudah | mudah | mudah | lambat, mahal |
| Port masuk / IP publik | milik host | milik host | biasanya tidak ada | ya |
Cara memilih
- Kode yang ditulis Anda atau tim Anda: proses atau kontainer sudah cukup.
- CI untuk branch Anda sendiri: kontainer di runner Anda.
- Kode dari agen, kiriman pengguna, pull request eksternal: satu microVM per tugas, dihapus setelahnya.
- Layanan tidak tepercaya yang harus menerima koneksi atau berjalan berminggu-minggu: VM terpisah dengan IP sendiri, jauh dari apa pun yang menyimpan kredensial Anda atau mengirim email Anda.
Apa pun pilihannya, ada dua aturan tambahan: jangan taruh apa pun di dalam yang tidak akan Anda serahkan kepada penulis kode itu, dan putuskan dengan sengaja apa yang boleh dilakukan jaringan.
Posisi produk kami
Untuk tingkat 3, kami menyediakan sandbox kode: microVM Firecracker yang menyala dalam sekitar satu detik, dengan internet keluar, tanpa port masuk, dan penagihan per detik. Sandbox ini ditujukan tepat untuk poin ketiga di atas; halaman pengaman MCP menjelaskan cara membatasi apa yang boleh dilakukan agen dengannya. Untuk tingkat 4, VPS seperti tarif AI agent memberi Anda satu mesin utuh per bulan. Contoh terperinci di sandbox untuk agen AI menunjukkan pola microVM dari awal hingga akhir, dan apa yang benar-benar dibutuhkan agen AI dari infrastruktur memandang isolasi sebagai salah satu dari beberapa persyaratan.
Komentar
Belum ada komentar. Jadilah yang pertama.