# Enrollment client per DWH REST La credenziale `dwh-auth` appartiene a una installazione ThothII, non a una persona. Serve solo se il trasporto è `rest_api`; `postgres_direct` e `ssh_tunnel` non la usano. | Trasporto | Chiave `dwh-auth` | Materiale locale | | --- | --- | --- | | `rest_api` | Sì, una per installazione. | URL HTTPS, `API_KEY_FILE`, eventuale `TLS_CA_FILE`. | | `postgres_direct` | No. | Credenziali PostgreSQL e TLS PostgreSQL. | | `ssh_tunnel` | No. | Credenziali PostgreSQL e materiali SSH; è diagnostico-only nel runtime corrente. | Il ThothII server PSD resta `postgres_direct` read-only. Il Mac PSD e le installazioni remote usano `rest_api`; non introdurre un tunnel SSH per aggirare REST. ## Prerequisiti Ricevere chiave e CA, se necessaria, attraverso canali protetti separati. Confermare fuori banda il fingerprint TLS prima dell'uso: [guida TLS](dwh-auth-tls.md). Conservare la chiave nel vault o in un file protetto, mai Git, `.env` con il valore, argv, ambiente, log o evidenze. Annotare solo ID pubblico. ## Percorso GUI: vault dell'installazione 1. In **Workspace management**, eseguire **Update workspace repository** se necessario e selezionare il workspace. 2. Il trasporto `rest_api` è una precondizione amministrativa del binding locale, non una scelta della GUI. Controllare URL/trust locali e usare **Validate workspace source**. 3. Inserire la chiave nel campo write-only **Data warehouse API key**, poi **Save entered secrets**. La GUI la conserva nel vault cifrato `workspace-secrets`, non la rileggere né la restituisce. 4. Eseguire **Test workspace connections**. Il controllo innocuo è `/rpc/ping`: atteso 2xx e database/schema dichiarati. 5. Comunicare al server solo ID pubblico, timestamp e risultato. **Forget stored value** rimuove il valore e va usato soltanto dopo conferma di sostituzione o revoca. ## Percorso headless: binding reale `API_KEY_FILE` significa che il valore è nel file, non nella variabile. Questo è l'esempio Mac/local/remoto nel file PSD non tracciato `workspace-bindings.env`; non è il binding del server PSD Project A, che resta `postgres_direct`. I binding REST sono: ```dotenv THT_WS_PSD_CLINICAL_DWH_TRANSPORT=rest_api THT_WS_PSD_CLINICAL_DWH_BASE_URL=https://supabase-aritmolab.policlinicosandonato.it/dwh/ THT_WS_PSD_CLINICAL_DWH_API_KEY_FILE=/run/secrets/psd-clinical-dwh-api-key THT_WS_PSD_CLINICAL_DWH_TLS_CA_FILE=/run/secrets/psd-clinical-dwh-ca.pem ``` Nel file `operator.env` non tracciato, ogni suffisso `_SOURCE` indica solo il percorso assoluto del file protetto di origine. Il comando genera un override non tracciato che monta quei file nel `core`; non installa né avvia `dwh-auth` con Compose: ```bash bash scripts/generate-connector-secrets-override.sh \ --bindings-env /absolute/protected/workspace-bindings.env \ --operator-env /absolute/protected/operator.env \ --output /absolute/protected/connector-secrets.override.yaml \ --service core --role dwh ``` La chiave sorgente è un file regolare `0600` per il solo account autorizzato. Per altri workspace, sostituire `PSD_CLINICAL` con ID immutabile maiuscolo (trattini in underscore). Vedere anche il [protocollo diagnostico](../workspace-diagnostic-protocol.md). ## Ping, rotazione e revoca Usare solo **Test workspace connections** su `/rpc/ping`: successo è 2xx con TLS verificato; il server conferma l'ID con `key status`. Durante rotazione, ricevere nuova generazione, aggiornare vault o file `API_KEY_FILE`, ripetere ping, attendere osservazione e far revocare la precedente. Dopo la revoca: nuova positiva, precedente `401`. `401` non distingue chiave assente, scaduta o revocata. `503` è un guasto fail-closed di servizio, socket o registro: non usare connessione diretta e non ridurre TLS. Non riattivare una chiave revocata. Il percorso PSD è nel [runbook](../operations/psd-dwh-auth-rollout.md).