ReferenceAsk
Remy Reference/Architecture/Architecture/Hardening Reference
Appendix

Hardening Reference

Sandbox pod settings and served-app headers, as tables

Sandbox pod settings and served-app response settings, presented as tables.

#Sandbox pods

Applied to every sandbox on every island.

SettingValueEffect
runtimeClassNameThe Kata runtime classEach pod is a microVM with its own guest kernel
Kata runtime annotationsGuest seccomp on; sandbox cgroup anchoredThe seccomp profile applies inside the VM; the VM survives host cgroup reclaim
securityContext.seccompProfileRuntimeDefaultDefault syscall filter
securityContext.capabilitiesdrop: [ALL]No Linux capabilities
securityContext.allowPrivilegeEscalationfalseNo setuid escalation
automountServiceAccountTokenfalseNo Kubernetes credential in the pod
dnsPolicy and dnsConfigNone, public resolversCluster-internal names do not resolve
restartPolicyNeverA dead sandbox is replaced, not restarted in place
activeDeadlineSeconds24 hours for release sandboxes; 1 hour for job runners; 12 hours for dev boxesKubernetes hard-kills a wedged pod
imagePullPolicyAlwaysEvery start re-checks the image digest
Resource requests and limitsPer islandBounded CPU and memory
NODE_OPTIONS on the workerHeap capped beneath the memory limitA heap runaway fails inside the pod before the pod's limit
Labelsapp, island, pool, tier, release, app id, role, source, origin, jobWhat the egress policy and every janitor select on
FilesConfigMap named after the pod, owned by itGarbage-collected with the pod; nothing written into a running sandbox
EgressNetworkPolicy: internet only; every private range deniedNo path to platform-internal addresses
Node groupEncrypted root volumes; nested virtualization; IMDS hop limitNode-level hardening under every sandbox

Worker-side timings, injected as environment:

ClockValue
Unclaimed max age4 hours
Assigned idle30 minutes
Handler timeout30 minutes
Background cutoff30 minutes
Shutdown drain25 seconds
Job runner wallclock55 minutes
Dev box ready timeout10 minutes
Dev box termination grace90 seconds

#Served apps

Set by the serving layer and the auth helpers.

Header or attributeValueApplies to
X-Content-Type-OptionsnosniffEvery response
Referrer-Policystrict-origin-when-cross-originEvery response
Content-Security-Policyframe-ancestors <declared origins>Apps that declare embedding origins
X-Robots-Tagnoindex, nofollowGated and preview surfaces
Cache-Controlprivate, no-cacheSession HTML
Cache-Controlpublic, max-age=86400, immutableContent-addressed assets
HTTPS redirectAt the edge, before any other handlingEvery hostname
X-Powered-ByNot sentEvery response
Session cookieHttpOnly; Secure in production; same-site policy strict unless embedded; per-app signature; 30-day expiry; issue time recordedApp sessions
OriginsOne per app; a cookieless files domain; separate CDN hosts; a separate dev preview apexEvery app

#Platform ingress

SettingValue
ALB listener443 with ELBSecurityPolicy-TLS13-1-2-FIPS-2023-04; 80 redirects to 443
ALB targetsPod IPs
Node security groupIngress from inside the VPC only
Node public IPsNone
Untrusted API endpointPrivate
Peering rulesWorker port, dev-box port, 443 to the API; trusted to untrusted only
BastionsSSM-managed, no public IP, no inbound SSH