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 totmonitoring-namespace.htpasswdlokaal beschikbaar (Apachehttpd-toolsofapache2-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.