From 2c273956139dce297b402d6b4d68f1188db7d7f0 Mon Sep 17 00:00:00 2001 From: Ben Vincent Date: Mon, 27 Jul 2026 20:22:40 +1000 Subject: [PATCH] policies: let terraform-git seed the gitea engine admin credential to KV (#102) ## Why terraform-git now provisions the `gitea-vault-admin` site-admin bot and writes its generated password to `kv/service/vault/au/syd1/secret_backend/gitea/config` (as `admin_username` + `admin_password`) so the gitea secrets engine can consume it at creation time. The `woodpecker_terraform_git` / `terraform_git` identity has no write access to that KV path, so its apply would 403 without this grant. The deployer that *reads* the seed already has read access via `policies/kv/service/vault/secret_backends_read.yaml` (`kv/data/service/vault/+/+/secret_backend/*`), so only the write side is added here. ## Change - Add `policies/kv/service/vault/au/syd1/secret_backend/gitea/config_write.yaml` granting `create`/`read`/`update` on the gitea config KV path to the `terraform_git` approle and `woodpecker_terraform_git` k8s role. ## Ordering Merge + apply this before the terraform-git `benvin/gitea-vault-admin` PR applies (which performs the write). Files are disjoint from the other gitea terraform-vault PRs (#100, #101). https://claude.ai/code/session_015ur3i7D2azsMAWTSVABApv Reviewed-on: https://git.unkin.net/unkin/terraform-vault/pulls/102 Co-authored-by: Ben Vincent Co-committed-by: Ben Vincent --- .../secret_backend/gitea/config_write.yaml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 policies/kv/service/vault/au/syd1/secret_backend/gitea/config_write.yaml diff --git a/policies/kv/service/vault/au/syd1/secret_backend/gitea/config_write.yaml b/policies/kv/service/vault/au/syd1/secret_backend/gitea/config_write.yaml new file mode 100644 index 0000000..8847abe --- /dev/null +++ b/policies/kv/service/vault/au/syd1/secret_backend/gitea/config_write.yaml @@ -0,0 +1,20 @@ +# Allow terraform-git to seed (write once) the gitea secrets engine's admin +# credentials. terraform-git creates the gitea-vault-admin site-admin bot and +# writes its generated password here as admin_username + admin_password; the +# vault gitea engine (managed by the tf_vault deployer) reads it at gitea/config +# creation time. Read is already granted to the deployer via +# policies/kv/service/vault/secret_backends_read.yaml, so this only adds the +# write side for terraform-git's own identity. +--- +rules: + - path: "kv/data/service/vault/au/syd1/secret_backend/gitea/config" + capabilities: + - create + - read + - update + +auth: + approle: + - terraform_git + k8s/au/syd1: + - woodpecker_terraform_git