Skip to main content
Version: 0.1.0

Diagram

Default operator auth path

Kubernetes issues a projected token for the controller. OpenBao validates that token against the configured JWT auth method and returns a scoped operator token for maintenance work.

Decision matrix

Why the JWT path is the default

Why the JWT path is the default.
PropertyWhat you getWhy it matters
Automatic rotationKubernetes rotates the projected token on its own schedule.Controller auth ages out naturally instead of depending on manual token rotation discipline.
Audience bindingThe token is scoped to OPENBAO_JWT_AUDIENCE, which defaults to openbao-internal.A token issued for OpenBao auth should not be replayable against unrelated services.
Scoped maintenance policyThe JWT role returns a token with the operator maintenance policy, not blanket admin privileges.The controller gets the capabilities it needs for health checks, step-down, and autopilot without widening normal access.
Operator auth is not human auth

spec.selfInit.oidc.enabled: true bootstraps the controller auth path only. It does not create a human login method by itself. If you use self-init, human access should be created in the same bootstrap contract through selfInit.requests, not bolted on later as an afterthought.

Decision matrix

Treat bootstrap auth as two access surfaces

Treat bootstrap auth as two access surfaces.
SurfaceWhere it is definedWhy it exists
Human login pathspec.selfInit.requests or another deliberate bootstrap path in the same cluster bring-up planEnsures someone can actually sign in after the root token is revoked.

Self-init and manual bootstrap

Decision matrix

Choose the bootstrap path

Choose the bootstrap path.
PathUse it whenOperator behaviorWatch for
Manual JWT configurationYou are carrying a compatibility workflow, a custom install shape, or a controlled bootstrap sequence.You create the JWT auth method, policy, and role binding yourself.Rendered ServiceAccount name, namespace, and audience drift are the usual breakpoints.

Configure

The operator policy is intentionally narrow

hcl

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

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

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

Keep the controller policy focused on maintenance work. Backup, restore, and upgrade jobs should authenticate through their own roles instead of inheriting the controller scope.

Configure

Manual JWT role example for a custom controller identity

bash

bao write auth/jwt-operator/role/openbao-operator \
role_type="jwt" \
bound_audiences="openbao-internal" \
user_claim="sub" \
bound_subject="system:serviceaccount:platform-security:demo-openbao-operator-controller" \
token_policies="openbao-operator" \
token_ttl="1h"

Replace the namespace, ServiceAccount name, and audience with the values produced by your rendered install, not the defaults from an example manifest.

What must stay aligned

Reference table

Custom-install checks

Custom-install checks.
SurfaceMust matchWhat breaks when it drifts
Projected token mountThe controller Deployment still mounts the openbao-token projected volumeThe controller loses its default path to authenticate to OpenBao at all.
JWT audienceOPENBAO_JWT_AUDIENCE, the projected token audience, and the OpenBao role bound_audiencesA valid ServiceAccount token is rejected because it was issued for a different audience contract.
Discovery accessThe controller can reach /.well-known/openid-configuration and the JWKS endpointOpenBao cannot validate the projected token even though the controller identity itself is correct.

Reference table

Typical auth failures

Typical auth failures.
SymptomMost likely causeCheck first
Self-init completes but controller auth never settlesOIDC discovery is unreachable or incompleteKubernetes API discovery reachability and cluster condition output
Backup or restore auth fails even though controller auth worksExecutor jobs use separate roles and ServiceAccountsOperator authorization and the job-specific auth path

Continue the support path

Official OpenBao background

Published release documentation

You are reading docs for version 0.1.0. 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.