# Non-secret production template — copy to ~/.config/warden/warden.yaml # Never commit tokens or CA private keys. See wiki/OpsWardenConfig.md backend: vault vault: addr: https://bao.coulomb.social mount: ssh role_map: adm: adm-role agt: agt-role atm: atm-role token_env: VAULT_TOKEN inventory_path: ~/.config/warden/inventory.yaml state_dir: ~/.local/state/warden # Opt-in flex-auth gate — enable only when flex-auth is reachable at flex_auth_url. # Registry: registry/flex-auth/production_registry_snapshot.json (build from inventory). # See wiki/PolicyGatedSigning.md (operator checklist) and wiki/playbooks/operator-openbao-token-hygiene.md policy: # Keep false until the flex-auth ops-warden pin runs callerAuth.mode: enforce. # Gate: python scripts/check_policy_caller_identity.py (WARDEN-WP-0031) enabled: false # The in-cluster pin for ops-warden's signing policy (FLEX-WP-0016). A bare # flex-auth.flex-auth.svc Service does not exist. From a workstation, reach it # through a port-forward or tunnel and point this at that local address. flex_auth_url: http://flex-auth-ops-warden.flex-auth.svc.cluster.local:8080 fail_closed: true tenant: tenant:platform subject_env: WARDEN_POLICY_SUBJECT system: ops-warden # How ops-warden proves it is ops-warden. flex-auth TokenReviews this bearer # token and requires the principal system:serviceaccount:ops-warden:ops-warden # for resource.system: ops-warden. Mode none sends no header, which is what # holds the pin in warn. caller_auth: mode: none # none | file | env | command # In-cluster PEP — projected ServiceAccount token, audience-bound: # mode: file # token_path: /var/run/secrets/flex-auth/token # Workstation — mint a short-lived bound token per call: # mode: command # command: kubectl create token ops-warden -n ops-warden # --audience flex-auth --duration 10m token_env: WARDEN_POLICY_CALLER_TOKEN audience: flex-auth