Fan-out #3. Rotates crowdsec-bouncer-key:key — self-sync 2-sided (one KV path → both crowdsec + ingress ns Secrets; Reloader restarts crowdsec-lapi). Per-secret rotator-crowdsec-bouncer role/policy, no netpol; both ExternalSecrets refreshInterval 1h→10m.
⚠️Landmine handled: traefik/crowdsec-middleware.yaml carries a third, hardcoded copy of this key (not Secret-sourced). That middleware is currently inert (unattached), so nothing breaks today — but a loud guard comment now warns it must be refreshed from OpenBao (bao kv get homelab/infrastructure/crowdsec-bouncer-key) before it's ever re-enabled, or the bouncer 401s with a stale key. Needs the one-time OpenBao bootstrap. kustomize clean.
Fan-out #3. Rotates `crowdsec-bouncer-key:key` — self-sync 2-sided (one KV path → both crowdsec + ingress ns Secrets; Reloader restarts `crowdsec-lapi`). Per-secret `rotator-crowdsec-bouncer` role/policy, no netpol; both ExternalSecrets refreshInterval 1h→10m.
⚠️ **Landmine handled**: `traefik/crowdsec-middleware.yaml` carries a **third, hardcoded** copy of this key (not Secret-sourced). That middleware is currently **inert** (unattached), so nothing breaks today — but a loud guard comment now warns it must be refreshed from OpenBao (`bao kv get homelab/infrastructure/crowdsec-bouncer-key`) before it's ever re-enabled, or the bouncer 401s with a stale key. Needs the one-time OpenBao bootstrap. kustomize clean.
Rotates crowdsec-bouncer-key:key quarterly + on-demand via the openbao-ns pattern (per-secret rotator-crowdsec-bouncer role/policy, no netpol). Self-sync: the single KV path feeds both the crowdsec + ingress ns Secrets; Reloader restarts crowdsec-lapi. Both ExternalSecrets refreshInterval 1h->10m.
CAVEAT handled: traefik/crowdsec-middleware.yaml has a THIRD hardcoded copy of this key (not Secret-sourced) — that middleware is inert, and a loud guard comment now warns it must be refreshed from OpenBao before re-enabling. Requires the one-time OpenBao bootstrap.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015K7gLUVVnutvDnzV2TrMRJ
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Fan-out #3. Rotates
crowdsec-bouncer-key:key— self-sync 2-sided (one KV path → both crowdsec + ingress ns Secrets; Reloader restartscrowdsec-lapi). Per-secretrotator-crowdsec-bouncerrole/policy, no netpol; both ExternalSecrets refreshInterval 1h→10m.⚠️ Landmine handled:
traefik/crowdsec-middleware.yamlcarries a third, hardcoded copy of this key (not Secret-sourced). That middleware is currently inert (unattached), so nothing breaks today — but a loud guard comment now warns it must be refreshed from OpenBao (bao kv get homelab/infrastructure/crowdsec-bouncer-key) before it's ever re-enabled, or the bouncer 401s with a stale key. Needs the one-time OpenBao bootstrap. kustomize clean.