Skip to main content
Version: 0.2.x

Diagram

Policies stay attached to job-specific identities

Each operator path maps to its own JWT role and policy set, with separate controller, backup, restore, and upgrade identities.

Decision matrix

Policy surfaces by lifecycle capability

Policy surfaces by lifecycle capability.
Policy surfaceUsed byTypical capabilitiesWhy it stays separate
BackupThe generated backup Jobsys/storage/raft/snapshot read accessSnapshot reads are narrower than controller maintenance and remain easier to reason about independently.
RestoreThe generated restore Jobsys/storage/raft/snapshot-force update accessRestore can replace the full cluster state and belongs only on the workload that performs restore.
UpgradeThe generated upgrade JobStep-down, autopilot state, snapshot read, and optional peer-management operations for blue-green flowsUpgrade paths often need time-bounded orchestration permissions without widening steady-state controller access.
Restore is a destructive role

The restore capability can replace data, policies, and keys across the cluster. Do not bind the restore policy to the controller or to a broad multi-purpose ServiceAccount just because it is convenient during setup.

Default policy surfaces

Configure

Controller maintenance policy

hcl

path "sys/health" {
capabilities = ["read"]
}

path "sys/step-down" {
capabilities = ["sudo", "update"]
}

path "sys/storage/raft/configuration" {
capabilities = ["read"]
}

path "sys/storage/raft/remove-peer" {
capabilities = ["update"]
}

path "sys/storage/raft/autopilot/configuration" {
capabilities = ["read", "update"]
}

path "sys/storage/raft/autopilot/state" {
capabilities = ["read"]
}

This is the steady-state controller scope. Keep backup, restore, and blue-green peer management in separate roles unless you are intentionally changing the model.

Existing clusters must update the controller policy manually

The operator does not rewrite OpenBao policies after bootstrap. If an operator upgrade adds a new controller-side capability, such as read on sys/storage/raft/autopilot/state, update the openbao-operator policy manually on existing clusters. Until that policy includes the new path, features that depend on it will report Unknown rather than a concrete health state.

Policy upgrade notes

Reference table

When the controller policy surface changes

When the controller policy surface changes.
SituationWhat the operator doesWhat you must do
A cluster was bootstrapped with self-init in an earlier releaseKeeps using the already-created JWT role and policy.Treat the policy as cluster security configuration that you own after bootstrap. Review release notes and add any newly required paths deliberately.
JWT auth and policies are fully manually managedNever mutates that auth surface.Carry the full policy diff yourself as part of operator upgrades.

Reference table

Common authorization failures

Common authorization failures.
SymptomLikely boundaryCheck first
Backup works but restore failsThe restore Job identity or restore policy is missing or misboundRestore ServiceAccount, restore role binding, and snapshot-force policy
Rolling upgrade works but blue-green cutover stallsPeer-management permissions were not added for the upgrade strategy in useUpgrade strategy and the corresponding upgrade policy paths
Controller can do too muchA shortcut merged job-specific capabilities into the controller roleManual auth configuration drift from the intended separation model

Go deeper

Official OpenBao background

Published release documentation

You are reading docs for version 0.2.x. Use the version menu to switch to next or another archived 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.