Prometheus basic-auth wachtwoord roteren

Aan het einde van deze gids is het admin-wachtwoord voor Prometheus en Alertmanager (zelfde Secret) vervangen. De hash staat in git, het cluster gebruikt de nieuwe hash, en Traefik valideert nieuwe inloggen tegen die hash.

Voorwaarden:

  • kubectl-toegang tot monitoring-namespace.
  • htpasswd lokaal beschikbaar (Apache httpd-tools of apache2-utils).
  • Schrijfrechten op de repo voor een fix-branch.

Deze rotatie is voor het gedeelde basic-auth-account dat zowel Prometheus als Alertmanager beschermt (dezelfde Traefik prometheus-auth middleware leest hetzelfde Secret prometheus-basic-auth).

1. Nieuwe hash genereren

htpasswd -nbB admin '<nieuw-wachtwoord>'

-nbB betekent: -n print naar stdout (geen file), -b neemt het wachtwoord als argument, -B gebruikt bcrypt. Single quotes voorkomen dat zsh een $ of ! in je wachtwoord opeet.

Output ziet eruit als:

admin:$2y$05$Pj1OZBjAvIixWS5q7AGfo.iJTC9bk6.vKQVGsXkVhmJZTC9bk6abc

De hash mag in git. Het is een one-way hash, dus niet terug te rekenen naar het plain-text wachtwoord. Het plain-text wachtwoord deel je via een password-manager met de mensen die toegang nodig hebben.

2. Hash in ingress.yaml vervangen

In k8s/monitoring/ingress.yaml, blok Secret prometheus-basic-auth, vervang de regel onder users: |:

stringData:
  users: |
    admin:$2y$05$<jouw-nieuwe-hash>

3. Branch en commit

git checkout -b fix/prometheus-basic-auth-reset
git add k8s/monitoring/ingress.yaml
git commit -m "fix(monitoring): reset prometheus-basic-auth wachtwoord"
git push -u origin fix/prometheus-basic-auth-reset

De PR wordt automatisch aangemaakt; mergen na review.

4. Apply op het cluster

kubectl apply -f k8s/monitoring/ingress.yaml

Geen rollout-restart nodig: Traefik leest Secret-changes live en de nieuwe hash gaat direct in op de eerstvolgende request.

Verifieer:

# de secret op het cluster moet de nieuwe hash bevatten
kubectl -n monitoring get secret prometheus-basic-auth \
  -o jsonpath='{.data.users}' | base64 -d

# oude wachtwoord werkt niet meer
curl -I -u admin:<oud-wachtwoord> https://prometheus.tapster.nl
#   verwacht: HTTP/1.1 401 Unauthorized

# nieuwe wachtwoord werkt wel
curl -I -u admin:<nieuw-wachtwoord> https://prometheus.tapster.nl
#   verwacht: HTTP/1.1 200 OK   (of 302 Found bij redirect)

Geldt ook voor https://alertmanager.tapster.nl, die deelt het Secret.

Wat als ik het wachtwoord vergeten ben

Geen probleem voor de rotatie zelf: de hash is one-way, dus terughalen kan toch niet. Volg gewoon stap 1 tot 4 met een nieuw wachtwoord. De oude waarde is daarmee permanent ongeldig.

Bcrypt versus apr1

Oudere entries in dit Secret kunnen in $apr1$-format staan (MD5-based). Bcrypt ($2y$) is sterker en wordt door Traefik volledig ondersteund: gebruik dat voor nieuwe entries. Mengen mag (Traefik probeert alle entries), maar bij een rotatie is dit een gratis upgrade.