Skip to main content
Version: 0.1.0-rc.5

Diagram

Admission enforcement flow

GitOps, human operators, and controller identities all cross the same API boundary. Admission guardrails stop invalid or dangerous objects before the reconcile loop has to repair them.

Decision matrix

Policy families

Policy families.
FamilyWhat it protectsRepresentative policies
Spec validationRejects invalid OpenBaoCluster, OpenBaoTenant, and OpenBaoRestore objects before they persist.openbao-validate-openbaocluster, openbao-validate-openbao-tenant, openbao-validate-openbaorestore.
Provisioner restrictionsConstrains tenant onboarding, namespace mutation, and day-0 governance writes.openbao-restrict-provisioner-rbac, namespace-mutation, and tenant-governance policies.
Controller restrictionsConstrains controller RBAC, ServiceAccount creation, and Secret writes.openbao-restrict-controller-rbac, ServiceAccount, and Secret-write policies.

Fail-closed startup and runtime behavior

Reference table

Admission dependency model

Admission dependency model.
StateOperator behaviorWhy
Required policy set missing at startupStartup fails closed by default.It is safer to refuse operation than to reconcile privileged workflows without guardrails.
Required policy disappears or becomes misbound laterSensitive reconciliation paths pause and surface degraded status.The admission dependency is part of the runtime safety model, not only a bootstrap check.
Unsafe mode explicitly enabledThe operator can start without admission dependency enforcement.This is intended only for development or break-glass scenarios and materially weakens defense in depth.

The required fail-closed dependency set includes:

  • openbao-validate-openbaocluster
  • openbao-validate-openbao-tenant
  • openbao-validate-openbaorestore
  • openbao-lock-controller-statefulset-mutations
  • openbao-restrict-provisioner-rbac
  • openbao-restrict-provisioner-namespace-mutations
  • openbao-restrict-provisioner-tenant-governance
  • openbao-restrict-controller-rbac
  • openbao-restrict-controller-serviceaccounts
  • openbao-restrict-controller-secret-writes
  • openbao-lock-managed-resource-mutations
  • openbao-enforce-managed-image-digests
Unsafe mode is not a production posture

Disabling admission policies is treated as unsafe mode. Even if the cluster otherwise uses Hardened settings, turning off API-level guardrails weakens the operator’s defense-in-depth model substantially.

Provisioner guardrails

Reference table

Provisioner policy goals

Provisioner policy goals.
Policy areaWhat it constrainsWhy it matters
Namespace mutationProvisioner namespace updates are limited to fixed Pod Security label enforcement and blocked in system namespaces.Tenant onboarding should not become a generic namespace-mutation channel.
Tenant governance objectsOnly operator-owned ResourceQuota and LimitRange shapes are allowed for the fixed names.Day-0 guardrails should remain centrally shaped and not drift through arbitrary direct edits.

Controller guardrails

Reference table

Controller policy goals

Controller policy goals.
Policy areaWhat it constrainsWhy it matters
ServiceAccount writesOnly operator-managed main, backup, restore, and upgrade ServiceAccounts are allowed.The controller should not become a general-purpose ServiceAccount management identity.
Secret writesOnly fixed operator-managed Secret names can be created or mutated.A broader RBAC grant should not silently become arbitrary tenant Secret mutation.
Managed-resource mutationDrift on operator-managed StatefulSets, Services, Pods, and other objects is denied.This protects the reconciliation contract and keeps GitOps or manual edits from undermining the lifecycle model.
Optional canary

The provisioner supports an optional admission canary that submits a dry-run RBAC request which must be denied. This gives stronger assurance that policy enforcement is active, not only that the policy objects exist.

Configuration ownership

Admission policy is one of the reasons the operator can separate user intent from platform-owned configuration:

  • user-owned surfaces stay in the CR where customization is supported
  • operator-owned networking, seal, listener identity, and lifecycle wiring stay protected
  • unsafe or drifted changes are rejected before they have to be repaired later

Continue platform controls

Prerelease documentation

This version tracks a prerelease build. Features and behavior may change before the next stable release.

Was this page helpful?

Use Needs work to open a structured GitHub issue for this page. The Yes button only acknowledges the signal locally.