4.0 KiB
PSD — rollout controllato DWH REST
Questo runbook rispecchia i Task 9–10 del piano. È descrittivo: non autorizza mutazioni ora. Activity 1 PSD resta IN_DISCUSSION fino a due consensi espliciti separati.
Invarianti
- ThothII sul server PSD:
postgres_directread-only, senza chiavedwh-auth. - Mac PSD e client remoti:
rest_api, una chiave per installazione, HTTPS.itverificato. dwh-authèsystemdindipendente, non Compose; non fermare o sostituire il vecchio stack ora.- Sessioni legacy, indici Qdrant e cache Ollama sono dati test: nessuna migrazione o backup per il cutover. Il vecchio stack resta comunque fino a cutover/rollback approvati.
- Usare solo
/dwh/rpc/ping, mai risultati clinici o catture Nginx grezze.
Gate A — Task 9, servizio locale senza Nginx pubblico
Richiedere prima autorizzazione per SHA congelato, target, rollback e impatto legacy. Senza consenso, fermarsi e registrare solo IN_DISCUSSION.
- Verificare in sola lettura architettura, gruppo
www-data, nomi liberi, systemd,nginx -t, ping attuale e file legacy regolareroot:root0600; non leggerlo, stamparlo o calcolarne hash. - Costruire con
bash scripts/build-dwh-auth.sh --output /tmp/dwh-auth-release; registrare solo SHA sorgente e checksum binario. - Installare binario/unit/tmpfiles come nella guida server: registry
root:dwh-auth2750, lock/record0640, socketdwh-auth:www-data0660. - Importare una sola legacy
legacy-shareddal file protetto e crearepsd-mac-primaryin nuovo file0600sotto/root/dwh-auth-provision/; mai segreti in argv, ambiente, log o evidenze. - Eseguire
dwh-auth check,systemd-analyze verify, avviare l'unità e testare sul socket Unix con file header curl protetti0600: v1=204, legacy=204, casuale=401, assente=401. - Salvare solo ID pubblici, owner/mode, stato unit/socket, timestamp, checksum binario/config e rollback. Non modificare Nginx in questo gate.
Gate B — Task 10, Nginx e client
Serve un secondo consenso: presentare file, backup, canale consegna Mac, osservazione ed esiti 2xx/401/503.
- Creare copie timestampate
root:root0600di/etc/nginx/sites-available/policlinicosandonatoe file coinvolti; non allegare configurazioni Nginx grezze alle evidenze. - Aggiungere solo
/etc/nginx/conf.d/dwh-auth-rate-limit.confe route DWH; preservare upstreamhttp://127.0.0.1:3001/, mantenere byte-identiche le location vector e rimuovere la chiave prima di PostgREST. - Eseguire checker strutturale, scansione segreti con solo
PASS/FAILe metadati, installare candidati esudo nginx -t. No raw diff: non eseguire o conservare raw diff,nginx -To dump: il file legacy può contenere la chiave. Se uno fallisce, ripristinare backup prima di reload e registrare FAIL sanitizzato. - Dopo consenso fare reload, poi HTTPS
.itcon CA e file header curl protetti 0600: v1=2xx, legacy=2xx, casuale=401, assente=401 su/dwh/rpc/ping; guasto autenticatore=503, mai accesso permissivo. - Consegnare al Mac chiave e CA separatamente, verificare fingerprint fuori banda, configurare vault GUI o
API_KEY_FILE, poi Validate workspace source e Test workspace connections. - Dopo osservazione revocare
legacy-sharedcon ragioneshared-credential-rotation; v1=2xx post-revoca, legacy=401 post-revoca e journal limitato senza chiavi/digest.
Rollback e chiusura
Durante dual-key il rollback ripristina solo route/servizio revisionati, verifica nginx -t e fa reload autorizzato. Non ripristina chiavi revocate, PostgreSQL, dati legacy o stack. Scatta per TLS, risposte inattese, salute degradata o assenza di consenso.
Activity 1 diventa PASS solo con v1=2xx post-revoca, legacy=401 post-revoca, servizio/Nginx validi, log sanitizzati, rollback leggibile e accettazione owner; poi avanza a Activity 2, con programma ancora SURVEY_NO_GO. Compilare evidenza e collaudo.