audit-core/deploy/externalsecrets.yaml
tegwick 3a7d63e18f
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Prepare railiance01 delivery: dynamic leases, migrate Job, operator runbook
VaultDynamicSecret pulls database/creds/* so a rotating lease is not frozen
into KV. Runtime sets AUDIT_CORE_AUTO_MIGRATE=0; schema is a Job with the
migration lease. Image base is digest-pinned. Namespace and NetworkPolicies
are on the cluster; Deployment waits for the attended OpenBao ESO token.
2026-08-13 00:58:49 +02:00

94 lines
3 KiB
YAML

# Credential delivery for audit-core (AUDIT-WP-0005-T02).
#
# Two sources, because they are two kinds of secret:
# - database leases: VaultDynamicSecret -> ExternalSecret (this file)
# - sender registry: ClusterSecretStore openbao-audit-core -> ExternalSecret
#
# audit-core never holds a credential in its own configuration; it reads
# whatever is currently mounted. Apply order: namespace, ESO token,
# ClusterSecretStore, VaultDynamicSecret, this, migrate Job, Deployment.
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: audit-core-database
namespace: audit-core
spec:
# Shorter than the platform default of 1h: these are dynamic leases, and the
# refresh interval bounds how long a revoked lease can remain mounted.
refreshInterval: 15m
target:
name: audit-core-database
creationPolicy: Owner
deletionPolicy: Retain
template:
engineVersion: v2
# One value per file. The pod mounts this Secret as a directory and
# audit-core re-reads it on every connection attempt, so a rotated lease
# takes effect without a restart and without a delivery gap.
data:
username: "{{ .username }}"
password: "{{ .password }}"
host: platform-pg-rw.databases.svc.cluster.local
port: "5432"
dbname: audit_core
dataFrom:
- sourceRef:
generatorRef:
apiVersion: generators.external-secrets.io/v1alpha1
kind: VaultDynamicSecret
name: audit-core-runtime
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: audit-core-database-migrate
namespace: audit-core
spec:
refreshInterval: 15m
target:
name: audit-core-database-migrate
creationPolicy: Owner
deletionPolicy: Retain
template:
engineVersion: v2
data:
username: "{{ .username }}"
password: "{{ .password }}"
host: platform-pg-rw.databases.svc.cluster.local
port: "5432"
dbname: audit_core
dataFrom:
- sourceRef:
generatorRef:
apiVersion: generators.external-secrets.io/v1alpha1
kind: VaultDynamicSecret
name: audit-core-migration
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: audit-core-senders
namespace: audit-core
spec:
refreshInterval: 1h
secretStoreRef:
kind: ClusterSecretStore
name: openbao-audit-core
target:
name: audit-core-senders
creationPolicy: Owner
deletionPolicy: Retain
data:
# The sender registry: which credential may write for which tenant and
# source, and each sender's secret_policy. Held in OpenBao rather than the
# manifest because it contains bearer tokens.
#
# Rotation is overlap-first: add the replacement to a sender's `tokens`
# list, move the sender, then drop the predecessor. Both are valid in
# between, so there is no delivery gap.
- secretKey: senders.json
remoteRef:
# CSS already mounts KV path `platform`; do not repeat the prefix.
key: workloads/audit-core/senders
property: senders.json