Start from the trust boundaries the operator is designed to defend.
This threat model focuses on the operator control plane, tenant isolation boundaries, and lifecycle workflows such as onboarding, upgrade, backup, and restore. It does not replace OpenBao's own internal threat model; it explains the extra surface introduced by running OpenBao through the operator.
This page models threats to the OpenBao Operator control plane, tenant isolation boundaries, and lifecycle workflows. It assumes the operator manages clusters it created and reconciles; generic import of arbitrary unmanaged OpenBao clusters is out of scope.
Decision matrix
Threat-model scope
| Area | In scope | Why |
|---|---|---|
| Operator control plane | Yes | Long-running operator identities, admission dependencies, and controller boundaries define most of the extra risk introduced by the operator. |
| Tenant isolation | Yes | Namespace introduction, RBAC boundaries, and managed-resource ownership are core to the multi-tenant model. |
| Lifecycle workflows | Yes | Backup, restore, upgrade, and tenant onboarding introduce destructive or privileged execution paths. |
| OpenBao internals unrelated to the operator | No | Those belong to OpenBao’s own product threat model rather than the operator-specific surface. |
Threat actors
Reference table
Actors that matter
| Actor | Typical access | Why they matter |
|---|---|---|
| Tenant author | Namespace-scoped write access | Can attempt to steer the operator, exploit weak isolation, or target Secrets and workload identities inside an onboarded namespace. |
| GitOps pipeline or human cluster operator | Namespace or cluster write access | Can intentionally or accidentally mutate control-plane configuration, admission dependencies, or operator-managed resources. |
| Compromised controller or provisioner Pod | Operator-managed identity | Tests whether the split-controller model and mutation locks actually narrow blast radius. |
| Compromised OpenBao Pod or lifecycle Job | Namespace workload identity | Exercises the boundary between the steady-state service, generated Jobs, and the control plane. |
| Compromised or misconfigured external dependency | Object storage, PKI, KMS, ingress, or identity system | The operator relies on those systems for unseal, TLS, backup, restore, and external access contracts. |
Trust boundaries
Diagram
Trust zones
Admission policy is the API enforcement boundary between submitted intent and persisted state. Operator identities, tenant workloads, and external systems each carry different trust assumptions.
Protected assets
Reference table
Always-relevant assets
| Asset | Risk | Why it matters |
|---|---|---|
| Admission policies and bindings | Critical | They enforce the operator’s API-level safety model before unsafe intent persists. |
| Provisioner and controller identities | Critical | They define namespace onboarding and lifecycle authority across the cluster. |
| Tenant RBAC and Secret allowlists | High | They control what an onboarded namespace can read, mutate, or discover. |
| Raft data and snapshots | High | They contain the OpenBao state the operator is trying to protect and recover safely. |
| Operator-managed configuration and generated job identities | Medium | They steer runtime behavior and disruptive workflows even when they do not directly store application secrets. |
Reference table
Conditional assets
| Asset | Present when | Why it matters |
|---|---|---|
| Root token Secret | Bootstrap mode persists the initial root token | This is a critical administrative credential and is intentionally avoided by Hardened self-init. |
| Static unseal keys | Static unseal is used | The root of trust sits in a Kubernetes Secret instead of an external trust system. |
| Operator-managed CA key | OperatorManaged TLS mode is selected | This puts certificate authority material inside the cluster and is one reason that mode is not the Hardened path. |
| Transit, cloud KMS, or HSM credentials | External unseal or PKI integration is used | These credentials and identity paths sit at a high-value trust boundary outside the workload itself. |
STRIDE analysis
Accepted residual risks
- PVCs are intentionally soft-governed rather than fully admission-locked because Kubernetes and CSI controllers also update them.
UserAccessBootstrapis best-effort signaling. The operator does not prove that arbitrary self-init requests create a usable human authentication path.- Cloud KMS and external identity integrations are surfaced through conditions and validation, but still depend on systems outside the operator trust boundary.
unsafe modeintentionally weakens the API-level safety model and is not a supported Hardened production posture.
Continue the security model
You are reading the unreleased main docs. Use the version menu for the newest published release, or check the release notes for what is already out.
Was this page helpful?
Use Needs work to open a structured GitHub issue for this page. The Yes button only acknowledges the signal locally.