Land the Vault ACL policies and an idempotent apply script. 18 policies:
service-{forgejo,woodpecker}, bot-{dev,review,gardener,architect,planner,
predictor,supervisor,vault,dev-qwen}, runner-{GITHUB,CODEBERG,CLAWHUB,
NPM,DOCKER_HUB}_TOKEN + runner-DEPLOY_KEY, and dispatcher.
tools/vault-apply-policies.sh diffs each file against the on-server
policy text before calling hvault_policy_apply, reporting created /
updated / unchanged per file. --dry-run prints planned names + SHA256
and makes no Vault calls.
vault/policies/AGENTS.md documents the naming convention (service-/
bot-/runner-/dispatcher), the KV path each policy grants, the rationale
for one-policy-per-runner-secret (AD-006 least-privilege at dispatch
time), and what lands in later S2.* issues (#880-#884).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
20 lines
567 B
HCL
20 lines
567 B
HCL
# vault/policies/bot-vault.hcl
|
|
#
|
|
# Vault agent (the legacy edge dispatcher / vault-action runner): reads its
|
|
# own bot KV namespace + the shared forge URL. Attached to the vault-agent
|
|
# Nomad job via workload identity (S2.4).
|
|
#
|
|
# NOTE: distinct from the runner-* policies, which gate per-secret access
|
|
# for vault-runner ephemeral dispatches (Step 5).
|
|
|
|
path "kv/data/disinto/bots/vault/*" {
|
|
capabilities = ["read"]
|
|
}
|
|
|
|
path "kv/metadata/disinto/bots/vault/*" {
|
|
capabilities = ["list", "read"]
|
|
}
|
|
|
|
path "kv/data/disinto/shared/forge/*" {
|
|
capabilities = ["read"]
|
|
}
|