Trust Boundaries
APF’s security rests on a small number of boundaries. At each one, a component accepts input from another and either verifies it or trusts it for a stated reason. Knowing which is which tells you what an attacker would have to compromise.
The Boundaries
What Each Component Trusts
Assumptions
APF’s guarantees hold only when these assumptions hold. Each one is an operator responsibility.
- Configuration integrity. The bundle file and trust roots are the real authorization root. Anyone who can write them controls policy. Keep them root-owned and watched.
- No policy side door. OpenShell’s agent policy proposals stay disabled. Otherwise OpenShell can accept policy that was never signed.
- Complete mediation. The agent cannot reach the network except through OpenShell’s supervisor, and every destination that needs content decisions is routed to APF’s middleware.
- Fail-closed configuration. OpenShell uses APF’s per-binding fail-closed policies, which the default
dynamicbinding policy does, and the sandbox policy’s middleware entry useson_error: fail_closed. APF being unavailable then stops governed operations instead of skipping them. - Root is trusted. A process running as root on the host is inside every boundary. APF’s controls stop other accounts, not a compromised root.
Identity at the Boundaries
Boundary 3 authenticates the OpenShell component that calls APF, not the human or agent behind the request. The sandbox ID in a supervisor’s request is bound to its token. The caller subject at admission and any user subject on the decision API are taken from the caller and recorded, not attested by APF. Refer to Identity and Delegation.
Next Steps
- To manage the keys at boundaries 1 and 2, refer to Signing Keys and Trust Roots.
- To configure boundary 3, refer to Configure Service Authentication.