Skip to content

[Feat] Harden agent execution isolation beyond pod separation (deliberately not in 3.0) #784

Description

@haofeif

Part of #777. Follow-on execution hardening. This records the stronger runtime options and the conditions under which an operator needs them.

The decision

3.0 establishes application tenant/owner isolation and separately managed execution workloads (#774/#778/#745). A mandatory sandbox runtime is not part of that default. This issue adds stronger containment where the executed code and reachable privileges require it.

The baseline is more than "different pods": approved workload templates, storage/credential ownership, restricted placement permissions and network boundaries already belong to #745. A pod boundary does not automatically make shared mounts, credentials or network access private.

How this relates to the foundation

#778 defines a tenant as an organisation and supports a multi-organisation data model. A one-organisation reference deployment is a starting profile, not a security guarantee and not a new definition of tenancy.

Application isolation is the coordinated work in #774/#778/#779, including both tenant and private-owner access, direct addressing, discovery, files and execution context. It is not a one-query fix: a tenant-only discovery filter would still permit access between private owners within that tenant. This issue must build on the complete application boundary rather than substitute sandboxing for it.

What would make this required

A requirement to contain code beyond the baseline workload boundary. Mutually untrusting customers are an important case, but not the only one. Third-party repositories, dependencies and manipulated agent actions can introduce untrusted execution inside a single organisation too (#785). Assess code provenance, data sensitivity, accessible credentials and host/network privileges; colleague status and tenant count are not substitutes for that assessment.

Kubernetes multi-tenancy guidance describes a spectrum of isolation and recommends additional containment for untrusted workloads. GKE Sandbox explains its userspace-kernel boundary and its limits. Select an appropriate runtime or separately isolated deployment before accepting workloads whose required containment exceeds the default; do not promise that all single-organisation deployments are safe without it.

What this would involve

Scheduling is not sufficient by itself

Scheduling selectors alone are not a secure admission boundary if tenants can choose or spoof the labels/tolerations that select protected nodes. GKE's guidance explains that limitation. Controlled node separation can still reduce resource contention and some exposure; it must be combined with admission/access controls and is not complete hostile-code containment.

Acceptance criteria

(For when this is picked up — not for 3.0.)

  • The selected sandbox/VM boundary is installed and enforced for the covered workloads; unsupported configurations fail explicitly rather than silently falling back to ordinary execution.
  • Egress is default-deny with an explicit allowlist.
  • Node/host credentials are unreachable from the agent; any permitted workload-identity endpoint is documented and bounded to its approved task authority.
  • Credentials available to an agent are short-lived and task-scoped.
  • Pod Security Standards Restricted is enforced for the covered agent workloads.
  • Documentation states plainly which threats this does and does not address.
  • The assessment covers untrusted-code scenarios within one organisation as well as mutually untrusting customers; neither organisation count nor pod placement alone is accepted as proof.

Evidence

Claim Where
Discovery is filtered by session + group prefix, not identity clients/database.py:1598 (list_siblings_by_group_prefix); prefix filter at :1664
cross_session=true lifts the session filter mcp_server/server.py:1117-1135
Group is not a security boundary mcp_server/server.py:1156
Workload trust and isolation form a spectrum Kubernetes multi-tenancy guidance
gVisor re-implements and services syscalls on behalf of the host kernel; sandbox does not cover dependencies GKE Sandbox documentation
Sandboxed runtimes via RuntimeClass; VM boundary option Kubernetes multi-tenancy documentation
Labels/tolerations alone cannot enforce policy against callers able to spoof them GKE multi-tenancy guidance

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions