Worker security model
Understand the isolation boundaries for worker identity, restore Jobs, Kubernetes permissions, Secrets, storage, and egress.
Loading documentation…
Restore Jobs process backup content and connect to customer systems. Treat the code and data inside each restore Pod as untrusted. The generated installation separates the long-lived worker identity from short-lived restore workloads and gives each component only the permissions it needs.
| Boundary | Current behavior |
|---|---|
| Project | A worker belongs to one project; schedules can select only a worker from that project |
| Worker identity | Stored in restoretrust-worker-identity in the agent namespace and mounted read-only |
| Agent scale | Exactly one agent Pod per worker identity, with Deployment strategy Recreate |
| Namespace | Agent and restore Jobs use different, dedicated namespaces |
| Job identity | Restore Pods use restoretrust-job with token automount disabled |
| Kubernetes access | The job ServiceAccount has no RoleBinding and must have no cloud workload identity |
| Pod Security | The job namespace enforces the Kubernetes restricted profile |
| Container hardening | Non-root, runtime-default seccomp, no privilege escalation, and all Linux capabilities dropped |
| Network | Namespace-wide DNS-only floor plus one source-specific egress policy per execution |
| Storage | One temporary PVC per restore, with customer-selected encryption and reclaim policy |
The identity Secret authenticates the agent as one project worker. Restore workloads never need it.
identity.json.restoretrust-worker-identity from a source or schedule.If the identity manifest or Secret value is exposed, create a new project worker, install its new identity, reassign schedules, and uninstall the old worker. The existing token cannot be retrieved or safely rotated in place.
The generated restoretrust-job ServiceAccount:
The agent checks this identity when it starts. A missing, unreadable, token-enabled, or cloud-bound ServiceAccount prevents the worker from accepting checks.
Do not use the job namespace for unrelated workloads. The generated egress floor selects every Pod in that namespace.
The generated Role in the job namespace permits the agent to:
restoretrust-job ServiceAccount.It does not grant access to Secrets, token creation, Pod exec, or cluster-wide resources. In the agent namespace, the agent can only read Pods and Pod logs: its own Pod, to report which image it runs, and its own log, so the console can show it live.
Do not add patch or delete permission for NetworkPolicies. Those verbs would allow the agent to weaken the namespace egress floor.
Create source credentials and backup-decryption Secrets in the job namespace. Kubernetes injects only the Secrets referenced by the selected source and schedule.
Decryption material is made available to the download stage, not to later restore and validation stages. The worker identity Secret is never made available to a restore Job.
Anyone with permission to create or mutate Pods in the job namespace can potentially consume local Secrets or widen workload behavior. Limit human, controller, and admission access to that namespace.
Restore containers run non-root with privilege escalation disabled, all capabilities dropped, and RuntimeDefault seccomp. Validator filesystems are read-only; database containers retain only the writable filesystem behavior required by their database image.
The generated install labels only the job namespace for restricted Pod Security.
Do not apply the restricted Pod Security label to the agent namespace unless
RestoreTrust documents that change for your agent version. Apply the generated
namespace manifests as supplied.
NetworkPolicy does not replace node hardening. Depending on the CNI, node addresses can remain reachable, and DNS must remain open for source resolution. The restore Pod has no ServiceAccount token, but you should still:
Scratch volumes can contain the original backup, decoded data, and a restored database. Use encryption at rest and reclaimPolicy: Delete. Completed data remains until the result is acknowledged and Kubernetes removes the Pod and its generic ephemeral PVC.
Retaining Jobs for debugging also retains their PVCs and customer data. Disable debug retention during normal operation and clean retained resources promptly.