blumeops/docs/changelog.d
Erich Blume 495e45d01d Address 6 critical Prowler IaC findings (mute + grafana RBAC tighten) (#340)
## Summary

The weekly Prowler IaC scan reported 6 critical findings against `argocd/manifests/`. They split cleanly into two patterns:

- **Legitimate-by-design RBAC → mute with new compensating controls**
  - `external-secrets-controller`, `external-secrets-cert-controller` manage `secrets` (KSV-0041) and the cert-controller mutates its own webhook configurations (KSV-0114). This is what the operator is *for*. New CC: `operator-purpose-bound-rbac`.
  - `kube-state-metrics` (both `minikube-indri` and `k3s-ringtail`) holds `list/watch` on secrets to expose `kube_secret_info` and `kube_secret_labels` metrics. KSM's metric schema only reads metadata, never the `data:` field. New CC: `kube-state-metrics-metadata-only`.

- **Over-broad RBAC → fix**
  - `grafana-clusterrole` had `get/watch/list` on `secrets` because the dashboard-sidecar config used `RESOURCE=both` (ConfigMaps + Secrets). Nothing in the cluster labels Secrets with `grafana_dashboard=1`, so this was unused power. Switched both sidecar instances to `RESOURCE=configmap` and removed `secrets` from the ClusterRole.

The IaC cronjob also did not previously pass `--mutelist-file`, which is why every IaC finding reported as unmuted regardless of mutelist configuration. The new `mutelist/iac.yaml` is bundled into the existing `prowler-mutelist` ConfigMap and mounted via `items:` selector.

## Test plan

- [ ] `kubectl --context=minikube-indri kustomize argocd/manifests/prowler/` — already passes locally
- [ ] `kubectl --context=minikube-indri kustomize argocd/manifests/grafana/` — already passes locally
- [ ] Deploy from this branch via `argocd app set prowler --revision prowler-iac-mutelist && argocd app sync prowler` and same for `grafana`
- [ ] Manually trigger the IaC cronjob and verify `MUTED=True` on the 6 critical findings (`kubectl --context=minikube-indri -n prowler create job --from=cronjob/prowler-iac-scan prowler-iac-test`)
- [ ] Restart grafana pod and confirm dashboards still render (sidecar still finds them via ConfigMap watch)
- [ ] After verify, `argocd app set <app> --revision main && argocd app sync <app>` post-merge

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Reviewed-on: #340
2026-04-29 10:43:32 -07:00
..
+agent-file-neutralization.ai.md C0: adopt AGENTS.md as canonical agent config 2026-04-18 20:15:30 -07:00
+argocd-resource-limits.infra.md Add resource limits to ArgoCD pods to prevent unbounded consumption 2026-04-18 13:04:27 -07:00
+blumeops-tasks-due-recurrence.feature.md C0: blumeops-tasks — replace ambiguous due:+N with "Nd overdue" 2026-04-27 11:49:46 -07:00
+claude-md-import-agents.ai.md C0: CLAUDE.md — import AGENTS.md instead of redirecting to it 2026-04-27 11:41:13 -07:00
+container-build-suggest-runner-logs.misc.md C0: suggest mise run runner-logs in container-build-and-release 2026-04-21 10:12:00 -07:00
+fix-forge-static-assets.bugfix.md Fix forge.eblu.me static assets by adding missing Host header 2026-04-18 16:00:56 -07:00
+frigate-notify-local.infra.md Add frigate-notify nix container build (#339) 2026-04-21 09:28:02 -07:00
+review-compliance-image-iac.feature.md C0: review-compliance-reports — summarize image and IaC scans 2026-04-27 12:18:06 -07:00
+review-contributing-doc.doc.md Review contributing tutorial: add last-reviewed, .ai.md fragment type, prek provenance 2026-04-21 08:53:41 -07:00
+review-navidrome-doc.doc.md C0: review navidrome reference doc 2026-04-18 20:25:19 -07:00
+ringtail-sway-fuzzel.bugfix.md C0: ringtail — restore sway default keybindings, fix fuzzel border config 2026-04-23 12:16:02 -07:00
+runner-logs-auth.feature.md Fetch job logs via SSH to indri instead of Forgejo web endpoint 2026-04-18 17:08:46 -07:00
.gitkeep Add towncrier changelog system (#86) 2026-02-03 11:48:13 -08:00
dagger-0-20-6-runner-image-alpine.infra.md Bump Dagger to 0.20.6 and migrate runner-job-image to Alpine container.py 2026-04-21 08:28:18 -07:00
forgejo-runner-v12-8-server-connections.infra.md Upgrade forgejo-runner to v12.8, adopt server.connections, and clean up docs (#338) 2026-04-20 09:03:54 -07:00
prowler-iac-mutelist.infra.md Address 6 critical Prowler IaC findings (mute + grafana RBAC tighten) (#340) 2026-04-29 10:43:32 -07:00