fix: [nomad-step-2] S2-fix-G — strip trailing /* from all vault policy paths (systemic 403) (#951) #952
No reviewers
Labels
No labels
action
backlog
blocked
bug-report
cannot-reproduce
in-progress
in-triage
needs-triage
prediction/actioned
prediction/dismissed
prediction/unreviewed
priority
rejected
reproduced
tech-debt
underspecified
vision
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: disinto-admin/disinto#952
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/issue-951"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes #951
Changes
AI Review
Summary
The systemic
/*-removal is correct for all bot and shared-service policies (secrets are stored as flat KV documents). However,dispatcher.hclover-applies the fix to the runner namespace where secrets are stored at sub-paths.Findings
blocker
vault/policies/dispatcher.hcl:15:kv/data/disinto/runnermust keep the/*wildcard. Runner secrets are stored one-per-token atkv/data/disinto/runner/<NAME>(e.g.kv/data/disinto/runner/GITHUB_TOKEN) — confirmed by two independent sources:tools/vault-import.shlines 30/267 (→ kv/disinto/runner/<NAME>/value) and the unchangedvault/policies/runner-GITHUB_TOKEN.hcl(which uses the exact sub-path). The new bare pathkv/data/disinto/runnermatches only a literal secret stored at that exact location — which does not exist. This makes thereadcapability entirely inert, directly contradicting the policy's stated scope (line 8: "read all per-secret values + list keys"). Restore:path "kv/data/disinto/runner/*".medium
vault/policies/dispatcher.hcl:8-9: Scope comment still readskv/disinto/runner/*andkv/disinto/shared/ops-repo/*(with wildcards) after the path stanzas were changed. Update the comment to match the live policy (or restore the wildcard per the blocker above).Correct changes (no action needed)
The bot-namespace fixes (
bot-*.hcl) andservice-woodpecker.hclare correct.vault-import.shstores all bot and shared-service secrets as flat KV documents (one secret per namespace, multiple fields per document), so removing/*is the right fix —kv/data/disinto/bots/architect/*only matches sub-paths that do not exist, while the actual secret is atkv/data/disinto/bots/architect.service-forgejo.hcl(unchanged, already using bare paths) validates this pattern.Verdict
REQUEST_CHANGES — dispatcher.hcl incorrectly strips /* from runner data path — runner secrets are sub-path-stored, so the bare path grants read on a non-existent key
Reviewed at
2ab95cd| AGENTS.mdAI Review: REQUEST_CHANGES — dispatcher.hcl incorrectly strips /* from runner data path — runner secrets are sub-path-stored, so the bare path grants read on a non-existent key
2ab95cd326to8f5652864dAI Re-review (round 2)
Previous Findings\n- blocker
vault/policies/dispatcher.hcl:15: runner data/metadata paths incorrectly stripped of/*→ FIXED: incremental diff restoreskv/data/disinto/runner/*andkv/metadata/disinto/runner/*\n- mediumvault/policies/dispatcher.hcl:9: scope comment still readsops-repo/*while live path is bareops-repo→ STILL OPEN (see note below)\n\n### Notes\n- The stale/*in the dispatcher.hcl scope comment (line 9) and the matchingAGENTS.mdtable entry (line 35) remain, but the barekv/data/disinto/shared/ops-repopath is semantically correct:vault-import.shstores all ops-repo credentials as fields in a single flat KV document (same pattern asshared/woodpeckerandshared/forge), so no wildcard is needed. The comment drift is cosmetic and does not affect runtime behavior. The PR may be merged as-is; comment cleanup can follow as tech debt.Verdict
APPROVE — blocker fixed: runner paths restored to /* in dispatcher.hcl; ops-repo bare path is correct for flat-document storage pattern
Reviewed at
8f56528| Previous:2ab95cd| AGENTS.mdAI Re-review (round 2): APPROVE — blocker fixed: runner paths restored to /* in dispatcher.hcl; ops-repo bare path is correct for flat-document storage pattern