Why
Enclaves currently get unconditional outbound internet. For a confidential-compute platform that's the wrong default — egress should be an explicit, attested choice (it changes the PCR).
What
New egress Procfile field gates the outbound vsock tunnel:
run: /app/server
egress: true # opt in to outbound internet
egress: false— no outbound tunnel; inboundportsstill reach the app via Caddy.egress: true— restores tunnel + DHCP + DNS (today's behavior).
Plumbed end-to-end: Procfile → manifest → build → run.sh/Terraform → runtime.
rollout (staged, no breakage)
Behind a single DEFAULT_EGRESS const:
- Phase 1 (this PR): default
true(opt-out) + a deprecation warning when unset. Nothing breaks. - Phase 2 (later): flip the const to
false(opt-in). One-line change.
stuff to note
- DNS write now gated on
udhcpcexit code — no morenameserver 10.0.100.1after a silent DHCP failure. nitro-enclave.servicegetsAfter=/Wants=vsock-network.serviceso a restart can't race the host proxy.CAUTION_EGRESSis authoritative over the manifest (consistent withe2e/locksmith).
Testing
Unit tests for Procfile parsing, manifest round-trip, cache key, run.sh rendering (DHCP-gated), and Terraform service ordering.