Skip to content

Commit 6589153

Browse files
fix(demo): eis een CSRF_AUTH_KEY zodra CSRF-bescherming aanstaat
De controller weigert te starten met csrf-protection-enabled aan en geen sleutel erbij — fataal, niet als waarschuwing: csrf-auth-key is required when csrf-protection-enabled is set to true Dat kost de beheer-UI en de Registration-API tegelijk: de pod komt niet up en de inway van dezelfde peer verliest de kant waar hij zich registreert. De scripts eisen de sleutel daarom bij apply, net als het Postgres-wachtwoord, en het runbook zet de twee waarden in een adem. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent 97aa5d1 commit 6589153

3 files changed

Lines changed: 32 additions & 8 deletions

File tree

demo/environment/logius/deploy/zad/upsert-peer.sh

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,11 @@ CLONE_FROM="${ZAD_PEER_CLONE_FROM:-}" # leeg = geen clone; klonen van
5858
# landt in public. Zo botsen de tellers niet (anders skipt een migratie -> 42P01 op controller.services).
5959
PG_USER="${ZAD_PG_USER:-fsc}"
6060
PG_DB="${ZAD_PG_DB:-fsc}"
61-
PG_PASSWORD="${ZAD_PG_PASSWORD:-__SET_ZAD_PG_PASSWORD__}" # concreet bij apply (verplicht, zie check onder); nooit committen
61+
PG_PASSWORD="${ZAD_PG_PASSWORD:-__SET_ZAD_PG_PASSWORD__}"
62+
# De controller weigert te starten met `csrf-protection-enabled` aan en geen sleutel erbij:
63+
# "csrf-auth-key is required when csrf-protection-enabled is set to true", en dat is een fatale
64+
# afbreking, geen waarschuwing. De sleutel ondertekent het CSRF-token; 32 tekens.
65+
CSRF_AUTH_KEY="${ZAD_CSRF_AUTH_KEY:-__SET_ZAD_CSRF_AUTH_KEY__}" # bv. `openssl rand -hex 16`; nooit committen # concreet bij apply (verplicht, zie check onder); nooit committen
6266
# search_path per component. `-` i.p.v. `:-` zodat ZAD_*_SCHEMA="" écht leeg blijft (dan geen search_path
6367
# in de DSN -> component gebruikt public). manager + txlog moeten sporen met postgres-init.sql (dat die
6468
# twee schema's aanmaakt). De CONTROLLER is de UITZONDERING: die maakt z'n eigen `controller`-schema aan
@@ -76,6 +80,7 @@ case "${CONTROLLER_TAG}" in ""|*[!A-Za-z0-9._-]*) echo "ongeldige ZAD_CONTROLLER
7680
case "${TXLOG_TAG}" in ""|*[!A-Za-z0-9._-]*) echo "ongeldige ZAD_TXLOG_TAG: '${TXLOG_TAG}'"; exit 1 ;; esac
7781
[ "${MODE}" = apply ] && : "${ZAD_API_KEY:?zet ZAD_API_KEY in je env}"
7882
[ "${MODE}" = apply ] && : "${ZAD_PG_PASSWORD:?zet ZAD_PG_PASSWORD in je env (wachtwoord voor de self-hosted logius-fscpg-Postgres)}"
83+
[ "${MODE}" = apply ] && : "${ZAD_CSRF_AUTH_KEY:?zet ZAD_CSRF_AUTH_KEY in je env (ondertekent het CSRF-token van de controller; genereer hem met openssl rand -hex 16)}"
7984

8085
# manager/controller/txlog draaien een migrate-WRAPPER (`migrate up && serve`) i.p.v. het OpenFSC
8186
# stock-image: ZAD kent geen init-containers/args, dus de migratie moet in het image zelf zitten. De
@@ -176,6 +181,7 @@ LOGCTL_ENV="$(printf '%s\n' \
176181
"AUTHN_TYPE=none" \
177182
"AUTHZ_TYPE=rbac" \
178183
"CSRF_PROTECTION_ENABLED=true" \
184+
"CSRF_AUTH_KEY=${CSRF_AUTH_KEY}" \
179185
"LISTEN_ADDRESS_UI=0.0.0.0:8080" \
180186
"LISTEN_ADDRESS_REGISTRATION_API=0.0.0.0:9443" \
181187
"LISTEN_ADDRESS_ADMINISTRATION_API=0.0.0.0:9444" \

demo/environment/magazijn-a/deploy/zad/upsert-peer.sh

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@ CLONE_FROM="${ZAD_PEER_CLONE_FROM:-}" # leeg = geen clone; klonen van
5555
# landt in public. Zo botsen de tellers niet (anders skipt een migratie -> 42P01 op controller.services).
5656
PG_USER="${ZAD_PG_USER:-fsc}"
5757
PG_DB="${ZAD_PG_DB:-fsc}"
58-
PG_PASSWORD="${ZAD_PG_PASSWORD:-__SET_ZAD_PG_PASSWORD__}" # concreet bij apply (verplicht, zie check onder); nooit committen
58+
PG_PASSWORD="${ZAD_PG_PASSWORD:-__SET_ZAD_PG_PASSWORD__}"
59+
# De controller weigert te starten met `csrf-protection-enabled` aan en geen sleutel erbij:
60+
# "csrf-auth-key is required when csrf-protection-enabled is set to true", en dat is een fatale
61+
# afbreking, geen waarschuwing. De sleutel ondertekent het CSRF-token; 32 tekens.
62+
CSRF_AUTH_KEY="${ZAD_CSRF_AUTH_KEY:-__SET_ZAD_CSRF_AUTH_KEY__}" # bv. `openssl rand -hex 16`; nooit committen # concreet bij apply (verplicht, zie check onder); nooit committen
5963
# search_path per component. `-` i.p.v. `:-` zodat ZAD_*_SCHEMA="" écht leeg blijft (dan geen search_path
6064
# in de DSN -> component gebruikt public). manager + txlog moeten sporen met postgres-init.sql (dat die
6165
# twee schema's aanmaakt). De CONTROLLER is de UITZONDERING: die maakt z'n eigen `controller`-schema aan
@@ -73,6 +77,7 @@ case "${CONTROLLER_TAG}" in ""|*[!A-Za-z0-9._-]*) echo "ongeldige ZAD_CONTROLLER
7377
case "${TXLOG_TAG}" in ""|*[!A-Za-z0-9._-]*) echo "ongeldige ZAD_TXLOG_TAG: '${TXLOG_TAG}'"; exit 1 ;; esac
7478
[ "${MODE}" = apply ] && : "${ZAD_API_KEY:?zet ZAD_API_KEY in je env}"
7579
[ "${MODE}" = apply ] && : "${ZAD_PG_PASSWORD:?zet ZAD_PG_PASSWORD in je env (wachtwoord voor de self-hosted magazijna-fscpg-Postgres)}"
80+
[ "${MODE}" = apply ] && : "${ZAD_CSRF_AUTH_KEY:?zet ZAD_CSRF_AUTH_KEY in je env (ondertekent het CSRF-token van de controller; genereer hem met openssl rand -hex 16)}"
7681

7782
# manager/controller/txlog draaien een migrate-WRAPPER (`migrate up && serve`) i.p.v. het OpenFSC
7883
# stock-image: ZAD kent geen init-containers/args, dus de migratie moet in het image zelf zitten. De
@@ -178,6 +183,7 @@ MGZCTL_ENV="$(printf '%s\n' \
178183
"AUTHN_TYPE=none" \
179184
"AUTHZ_TYPE=rbac" \
180185
"CSRF_PROTECTION_ENABLED=true" \
186+
"CSRF_AUTH_KEY=${CSRF_AUTH_KEY}" \
181187
"LISTEN_ADDRESS_UI=0.0.0.0:8080" \
182188
"LISTEN_ADDRESS_REGISTRATION_API=0.0.0.0:9443" \
183189
"LISTEN_ADDRESS_ADMINISTRATION_API=0.0.0.0:9444" \

demo/environment/zad-demo/README.md

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,17 +1017,29 @@ site de browser van een ingelogd teamlid laat posten: die aanvraag draagt de ses
10171017
proxy gewoon mee. Daarom staat `CSRF_PROTECTION_ENABLED=true` in de controller-env van beide
10181018
`upsert-peer.sh`-scripts.
10191019

1020-
Die scripts zetten `env_vars` alleen bij component-creatie, dus op een controller die er al staat
1021-
komt de waarde langs een andere laag binnen — en die laag heeft dat component níet opnieuw nodig,
1022-
zodat de cert-bijlagen blijven staan:
1020+
**De vlag komt nooit alleen.** Zonder sleutel erbij weigert de controller te starten, en niet met een
1021+
waarschuwing maar fataal:
1022+
1023+
```
1024+
csrf-auth-key is required when csrf-protection-enabled is set to true
1025+
```
1026+
1027+
Dat kost de beheer-UI en de Registration-API tegelijk: de pod komt niet meer up, de ingress antwoordt
1028+
503 en de inway van dezelfde peer verliest de kant waar hij zich registreert. Zet de twee dus in één
1029+
adem. De sleutel ondertekent het CSRF-token, is 32 tekens en hoort nergens in deze repo:
10231030

10241031
```bash
1025-
zadctl -p mpfb-8wh env set CSRF_PROTECTION_ENABLED=true -c logius-fscctl
1032+
zadctl -p mpfm-w3h env add "CSRF_AUTH_KEY=$(openssl rand -hex 16)" -c magazijna-fscctl
10261033
zadctl -p mpfm-w3h env set CSRF_PROTECTION_ENABLED=true -c magazijna-fscctl
10271034
```
10281035

1029-
`set` wijzigt een waarde die er al is; meldt hij dat de sleutel op deze laag ontbreekt, gebruik dan
1030-
`env add` met dezelfde toekenning.
1036+
en hetzelfde met `-p mpfb-8wh -c logius-fscctl`. Beide scripts eisen hem bij `apply` als
1037+
`ZAD_CSRF_AUTH_KEY`, net als het Postgres-wachtwoord.
1038+
1039+
`env add` voegt een sleutel toe die er nog niet is, `env set` wijzigt een bestaande; ze kijken allebei
1040+
alleen naar de laag die je aanspreekt. Deze laag heeft het component níet opnieuw nodig — de
1041+
`env_vars` uit `upsert-peer.sh` gelden alleen bij component-creatie, maar hier blijven de
1042+
cert-bijlagen gewoon staan.
10311043

10321044
Controleer na het uitrollen één schrijfactie in de UI — een dienst publiceren is de kortste. De
10331045
router termineert de TLS en stuurt platte HTTP naar de pod, dus als OpenFSC zijn CSRF-oordeel op het

0 commit comments

Comments
 (0)