Operator OIDC management redo - #61
Merged
Merged
Conversation
Signed-off-by: Travis Cotton <trcotton@lanl.gov>
Signed-off-by: Travis Cotton <trcotton@lanl.gov>
…ng (no silent overwrite); Webhook validation;updated tests; updated docs Signed-off-by: Travis Cotton <trcotton@lanl.gov>
…ead-back now strictly verifies the issuer; stale vault.address comments/docs updated Signed-off-by: Travis Cotton <trcotton@lanl.gov>
…sValidOIDCIssuer now truly enforces scheme://host[:port] Signed-off-by: Travis Cotton <trcotton@lanl.gov>
…name as inherently cluster-internal Signed-off-by: Travis Cotton <trcotton@lanl.gov>
Signed-off-by: Travis Cotton <trcotton@lanl.gov>
alexlovelltroy
approved these changes
Sep 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Reworks how the operator provisions Vault OIDC for TokenSmith and the CLI, fixing two multi-control-plane bugs (#57, #58) and separating the Vault dial address from the canonical OIDC issuer.
Motivation
The previous implementation wrote the Vault-global
identity/oidc/configand mutated the shared provider'sallowed_client_idsvia read-modify-write. When multipleOpenCHAMIControlPlaneresources share one Vault, this caused:Changes
Shared named OIDC provider
identity/oidc/provider/openchamiinstead of the globalidentity/oidc/config.allowed_client_idsis a fixed wildcard (["*"]); access is scoped per-client via assignments, so there is no shared mutable list to race on ([Bug]: ensureProviderAllowsClient lost-update race #57).client_idis surfaced at a new KV path.Conflict detection instead of silent overwrite
Separate dial address from canonical OIDC issuer
spec.platform.vault.oidcIssuer.addressremains the URL the operator uses to reach Vault;oidcIssueris the canonicalscheme://host[:port]issuer that clients (including TokenSmith) validateissagainst. Falls back toaddresswhen unset.VaultAddress,VaultOIDCIssuerBase, andVaultOIDCProviderURL.Validation
oidcIssuerasscheme://host[:port]with no userinfo/path/query/fragment.httpsfor any host,httponly for provably-internal hosts. Single-label hostnames are accepted for the dial address (dev convenience) but rejected as a plaintext issuer since they aren't provably cluster-local.Tests & docs
Checklist
make test(or equivalent) locally and all tests passgit commit -s) with my real name and email<filename>.licensesidecarLICENSES/directoryType of Change