infra/stacks
Viktor Barzin a048b37f60 security(wave1): W1.1 audit-log shipping LIVE + W1.5 trusted-registries Enforce LIVE
## W1.1 — K8s API audit log shipping (LIVE)
- alloy.yaml: added control-plane toleration so Alloy DaemonSet runs on
  k8s-master node. Verified alloy-7zg7t scheduled on master, tailing
  /var/log/kubernetes/audit.log
- loki.tf "Security Wave 1" rule group: added K2-K9 alert rules
  (skipped K1 per Q7 decision):
  - K2 K8sSATokenFromUnexpectedIP
  - K3 K8sSensitiveSecretReadByUnexpectedActor
  - K4 K8sExecIntoSensitiveNamespace
  - K5 K8sMassDelete (>5 Pod/Secret/CM in 60s by single user)
  - K6 K8sAuditPolicyModified (kubeadm-config CM change)
  - K7 K8sClusterRoleWildcardCreated (verbs=* + resources=*)
  - K8 K8sAnonymousBindingGranted
  - K9 K8sViktorFromUnexpectedIP
- All rules use source-IP regex matching the wave-1 allowlist
  (10.0.20.0/22, 192.168.1.0/24, 10.10.0.0/16 pod, 10.96.0.0/12 svc,
  100.64-127 tailnet) and `lane = "security"` → #security Slack route.
- Verified: kubectl-audit logs flowing in Loki query
  {job="kubernetes-audit"} returns events with node=k8s-master.
- Verified: /loki/api/v1/rules lists all K2-K9 + V1-V7 + S1.

## W1.5 — require-trusted-registries Enforce (LIVE)
- security-policies.tf: flipped Audit→Enforce with explicit allowlist
  built by `kubectl get pods -A -o jsonpath='{..image}'` enumeration.
- Removed `*/*` catch-all (which made Audit→Enforce a no-op).
- Pattern includes 15 explicit registries, 6 DockerHub library bare
  names, 56 DockerHub user repos.
- Verified by admission dry-run:
  - evilcorp.example/malware:v1 → BLOCKED with custom message
  - alpine:3.20 → ALLOWED (matches `alpine*`)
  - docker.io/library/alpine:3.20 → ALLOWED (matches `docker.io/*`)

## W1.6 — Calico flow logs (BLOCKED — Calico OSS limitation)
- Tried adding FelixConfiguration with flowLogsFileEnabled=true via
  kubectl_manifest in stacks/calico/main.tf
- Calico OSS rejected with "strict decoding error: unknown field
  spec.flowLogsFileEnabled" — these fields are Calico Enterprise/Tigera-only
- Removed the failed resource. Documented alternative paths in main.tf
  comment block: GNP with action=Log (iptables NFLOG → journal), Cilium
  migration, eBPF tooling, or Tigera Operator adoption.

## Docs updates
- security.md status table refreshed: W1.1/W1.2/W1.3/W1.4/W1.5 LIVE,
  W1.6/W1.7 blocked
- monitoring.md: Loki marked DEPLOYED (was incorrectly NOT-DEPLOYED in
  prior session before today's apply)

## Cleanup
- Removed stacks/kyverno/imports.tf (TF 1.5+ import blocks completed
  their job in the 2026-05-18 apply; should not stay in tree per TF docs)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 14:16:59 +00:00
..
_template ingress_factory: replace protected bool with auth enum + audit pass across 100 stacks 2026-05-22 14:16:42 +00:00
actualbudget recruiter-responder: bump image_tag to 189ef901 2026-05-22 14:16:49 +00:00
affine recruiter-responder: bump image_tag to 189ef901 2026-05-22 14:16:49 +00:00
authentik keel: enroll 11 more namespaces (operators + critical infra) 2026-05-22 14:16:56 +00:00
beads-server beads-server: codify Keel annotations on Dolt deployment (drift cleanup) 2026-05-22 14:16:57 +00:00
blog final wave: enroll immich + status-page, retrigger 17 pending Bucket A 2026-05-22 14:16:55 +00:00
broker-sync broker-sync(fidelity): un-suspend monthly CronJob 2026-05-22 14:16:56 +00:00
calico security(wave1): W1.1 audit-log shipping LIVE + W1.5 trusted-registries Enforce LIVE 2026-05-22 14:16:59 +00:00
changedetection enrolled-patch stacks: ignore image drift from Keel auto-update 2026-05-22 14:16:51 +00:00
chrome-service recruiter-responder: bump image_tag to 189ef901 2026-05-22 14:16:49 +00:00
city-guesser enrolled-patch stacks: ignore image drift from Keel auto-update 2026-05-22 14:16:51 +00:00
claude-agent-service recruiter-triage: AI culture & tooling section + warm-engage AI ask 2026-05-22 14:16:50 +00:00
claude-memory recruiter-responder: bump image_tag to 189ef901 2026-05-22 14:16:49 +00:00
cloudflared keel: enroll 15 critical-path namespaces for digest-only auto-update 2026-05-22 14:16:56 +00:00
cnpg [infra] Suppress Goldilocks vpa-update-mode label drift on all namespaces [ci skip] 2026-04-18 21:15:27 +00:00
coturn enrolled-patch stacks: ignore image drift from Keel auto-update 2026-05-22 14:16:51 +00:00
crowdsec keel: enroll 15 critical-path namespaces for digest-only auto-update 2026-05-22 14:16:56 +00:00
cyberchef final wave: enroll immich + status-page, retrigger 17 pending Bucket A 2026-05-22 14:16:55 +00:00
dashy enrolled-patch stacks: ignore image drift from Keel auto-update 2026-05-22 14:16:51 +00:00
dawarich enrolled-patch stacks: ignore image drift from Keel auto-update 2026-05-22 14:16:51 +00:00
dbaas dbaas: pin MySQL to 8.4.8, recover from broken 8.4.9 DD upgrade 2026-05-22 14:16:59 +00:00
descheduler keel: enroll 15 critical-path namespaces for digest-only auto-update 2026-05-22 14:16:56 +00:00
diun enrolled-patch stacks: ignore image drift from Keel auto-update 2026-05-22 14:16:51 +00:00
ebook2audiobook enrolled-patch stacks: ignore image drift from Keel auto-update 2026-05-22 14:16:51 +00:00
ebooks enrolled-patch stacks: ignore image drift from Keel auto-update 2026-05-22 14:16:51 +00:00
echo enrolled-patch stacks: ignore image drift from Keel auto-update 2026-05-22 14:16:51 +00:00
excalidraw enrolled-patch stacks: ignore image drift from Keel auto-update 2026-05-22 14:16:51 +00:00
external-secrets recruiter-responder: bump image_tag to 189ef901 2026-05-22 14:16:49 +00:00
f1-stream final wave: enroll immich + status-page, retrigger 17 pending Bucket A 2026-05-22 14:16:55 +00:00
fire-planner ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
foolery recruiter-responder: bump image_tag to 189ef901 2026-05-22 14:16:49 +00:00
forgejo enrolled-patch stacks: ignore image drift from Keel auto-update 2026-05-22 14:16:51 +00:00
freedify recruiter-responder: bump image_tag to 189ef901 2026-05-22 14:16:49 +00:00
freshrss ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
frigate ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
grampsweb ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
hackmd ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
headscale keel: enroll 15 critical-path namespaces for digest-only auto-update 2026-05-22 14:16:56 +00:00
health ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
hermes-agent ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
homepage final wave: enroll immich + status-page, retrigger 17 pending Bucket A 2026-05-22 14:16:55 +00:00
immich final wave: enroll immich + status-page, retrigger 17 pending Bucket A 2026-05-22 14:16:55 +00:00
infra [forgejo] Phases 3+4+5: cutover, decommission, docs sweep 2026-05-07 23:29:34 +00:00
infra-maintenance [infra] Sweep dns_config ignore_changes across all pod-owning resources [ci skip] 2026-04-18 21:19:48 +00:00
insta2spotify ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
instagram-poster Bucket A retrigger + Bucket D enrollment (5 module-nested stacks) 2026-05-22 14:16:55 +00:00
isponsorblocktv ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
job-hunter ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
jsoncrack final wave: enroll immich + status-page, retrigger 17 pending Bucket A 2026-05-22 14:16:55 +00:00
k8s-dashboard final wave: enroll immich + status-page, retrigger 17 pending Bucket A 2026-05-22 14:16:55 +00:00
k8s-portal Bucket A retrigger + Bucket D enrollment (5 module-nested stacks) 2026-05-22 14:16:55 +00:00
k8s-version-upgrade k8s-version-upgrade: switch detection cron from weekly to daily 2026-05-22 14:16:57 +00:00
keel upgrade-state: skill + script + Keel scrape for periodic three-pipeline audit 2026-05-22 14:16:57 +00:00
kms final wave: enroll immich + status-page, retrigger 17 pending Bucket A 2026-05-22 14:16:55 +00:00
kured ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
kyverno security(wave1): W1.1 audit-log shipping LIVE + W1.5 trusted-registries Enforce LIVE 2026-05-22 14:16:59 +00:00
linkwarden ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
llama-cpp Bucket C: enroll 5 raw-deploy stacks in Keel auto-update 2026-05-22 14:16:55 +00:00
local-path final wave: enroll immich + status-page, retrigger 17 pending Bucket A 2026-05-22 14:16:55 +00:00
mailserver keel: enroll 15 critical-path namespaces for digest-only auto-update 2026-05-22 14:16:56 +00:00
matrix ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
meshcentral ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
metallb keel: enroll 11 more namespaces (operators + critical infra) 2026-05-22 14:16:56 +00:00
metrics-server keel: enroll 15 critical-path namespaces for digest-only auto-update 2026-05-22 14:16:56 +00:00
monitoring security(wave1): W1.1 audit-log shipping LIVE + W1.5 trusted-registries Enforce LIVE 2026-05-22 14:16:59 +00:00
n8n ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
navidrome ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
netbox ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
networking-toolbox ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
nextcloud ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
nfs-csi keel: enroll 11 more namespaces (operators + critical infra) 2026-05-22 14:16:56 +00:00
nodelocal-dns [dns] NodeLocal DNSCache — deploy DaemonSet to all nodes (WS C) 2026-04-19 15:46:41 +00:00
novelapp Woodpecker CI deploy [CI SKIP] 2026-05-22 14:16:55 +00:00
ntfy ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
nvidia nvidia: bump driver container memory limit 128Mi → 2Gi 2026-05-22 14:16:56 +00:00
onlyoffice ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
openclaw openclaw: native MCP servers + daily claude-memory sync 2026-05-22 14:16:53 +00:00
osm_routing final wave: enroll immich + status-page, retrigger 17 pending Bucket A 2026-05-22 14:16:55 +00:00
owntracks ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
paperless-mcp paperless-mcp: deploy MCP for AI document search 2026-05-22 14:16:56 +00:00
paperless-ngx ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
payslip-ingest ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
phpipam ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
platform [infra] Add Cloudflare provider to all stack lock files and generated providers 2026-04-16 16:31:36 +00:00
plotting-book Woodpecker CI deploy [CI SKIP] 2026-05-22 14:16:55 +00:00
poison-fountain ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
postiz Bucket A retrigger + Bucket D enrollment (5 module-nested stacks) 2026-05-22 14:16:55 +00:00
priority-pass ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
privatebin ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
proxmox-csi keel: enroll 11 more namespaces (operators + critical infra) 2026-05-22 14:16:56 +00:00
pvc-autoresizer [infra] Suppress Goldilocks vpa-update-mode label drift on all namespaces [ci skip] 2026-04-18 21:15:27 +00:00
rbac [infra] Migrate Terraform state from local SOPS to PostgreSQL backend 2026-04-16 19:33:12 +00:00
real-estate-crawler realestate-crawler: dockerhub pull-secret + lift image-pin on ui/api 2026-05-22 14:16:57 +00:00
recruiter-responder recruiter-responder: bump image to 444fa58c (header CRLF fix) 2026-05-22 14:16:59 +00:00
redis keel: enroll 15 critical-path namespaces for digest-only auto-update 2026-05-22 14:16:56 +00:00
reloader keel: enroll 15 critical-path namespaces for digest-only auto-update 2026-05-22 14:16:56 +00:00
resume ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
reverse-proxy keel: enroll 15 critical-path namespaces for digest-only auto-update 2026-05-22 14:16:56 +00:00
rybbit ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
sealed-secrets keel: enroll 11 more namespaces (operators + critical infra) 2026-05-22 14:16:56 +00:00
send ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
servarr keel: enroll 11 more namespaces (operators + critical infra) 2026-05-22 14:16:56 +00:00
shadowsocks ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
speedtest ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
status-page [infra] Establish KYVERNO_LIFECYCLE_V1 drift-suppression convention [ci skip] 2026-04-18 14:15:51 +00:00
stirling-pdf ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
tandoor ci: retrigger v2 — apply pending Keel-enrolled stacks (#697 was cancelled by #698) 2026-05-22 14:16:53 +00:00
technitium keel: enroll 15 critical-path namespaces for digest-only auto-update 2026-05-22 14:16:56 +00:00
terminal terminal: probe + alerts after Traefik replica routing-table skew 2026-05-22 14:16:56 +00:00
tor-proxy ci: retrigger v3 — apply remaining 22 Keel-enrolled stacks 2026-05-22 14:16:54 +00:00
trading-bot final wave: enroll immich + status-page, retrigger 17 pending Bucket A 2026-05-22 14:16:55 +00:00
traefik keel: enroll 15 critical-path namespaces for digest-only auto-update 2026-05-22 14:16:56 +00:00
travel_blog final wave: enroll immich + status-page, retrigger 17 pending Bucket A 2026-05-22 14:16:55 +00:00
tuya-bridge ci: retrigger v3 — apply remaining 22 Keel-enrolled stacks 2026-05-22 14:16:54 +00:00
uptime-kuma Bucket A retrigger + Bucket D enrollment (5 module-nested stacks) 2026-05-22 14:16:55 +00:00
url ci: retrigger v3 — apply remaining 22 Keel-enrolled stacks 2026-05-22 14:16:54 +00:00
vault security(wave1): Vault audit-tail sidecar (live) + doc reality-check 2026-05-22 14:16:57 +00:00
vaultwarden Bucket A retrigger + Bucket D enrollment (5 module-nested stacks) 2026-05-22 14:16:55 +00:00
vpa keel: enroll 11 more namespaces (operators + critical infra) 2026-05-22 14:16:56 +00:00
wealthfolio Woodpecker CI deploy [CI SKIP] 2026-05-22 14:16:53 +00:00
webhook_handler final wave: enroll immich + status-page, retrigger 17 pending Bucket A 2026-05-22 14:16:55 +00:00
whisper ci: retrigger v3 — apply remaining 22 Keel-enrolled stacks 2026-05-22 14:16:54 +00:00
wireguard keel: enroll 15 critical-path namespaces for digest-only auto-update 2026-05-22 14:16:56 +00:00
woodpecker ci: retrigger v3 — apply remaining 22 Keel-enrolled stacks 2026-05-22 14:16:54 +00:00
xray keel: enroll 15 critical-path namespaces for digest-only auto-update 2026-05-22 14:16:56 +00:00
ytdlp ci: retrigger v3 — apply remaining 22 Keel-enrolled stacks 2026-05-22 14:16:54 +00:00