The default is already isolated
You don’t need to configure anything extra for the baseline isolation guarantee — every sandbox is a real Firecracker microVM with its own kernel, its own filesystem, its own network namespace, the moment you callSandbox.create(). See The jailer and privilege model for what that boundary actually is and isn’t.
Things worth doing on top of the default
- Set a resource ceiling.
vcpu_count/mem_size_mibon create, checked againstSANDKILN_MAX_VCPU_COUNT/SANDKILN_MAX_MEM_SIZE_MIB— stops one sandbox from starving the host. - Tag it.
tags: { purpose: "untrusted-exec", ... }makes it easy to filter and audit later viaGET /sandboxes?tag.purpose=untrusted-exec. - Destroy, don’t preserve, one-shot runs.
stop({ keep: false })(or?keep=false/kiln sandbox rm --destroy) skips the snapshot entirely for a sandbox you never intend to resume — no reason to pay the pause-and-snapshot cost or leave state sitting on disk. - For genuinely adversarial workloads, turn on the jailer.
SANDKILN_JAILER_ENABLEDadds chroot, cgroup v2 resource limits, and a dedicated unprivileged uid per VM — see The jailer and privilege model. It’s opt-in and not yet proven against a real installed jailer binary on hardware, so verify it in your own environment before relying on it for something genuinely hostile. - Set an idle timeout.
SANDKILN_IDLE_TIMEOUT_SECSorSANDKILN_AUTO_SUSPEND_TIMEOUT_SECSon the daemon reclaims a sandbox a caller forgot to stop — see Auto-suspend idle sandboxes.