ADR-0021 — Auth Kamailio↔Postgres: SCRAM password (mTLS rimandato)
Data: 2026-06-02 Stato: ACCETTATO Decisori: Massimo (architetto) Correlato: ADR-0020 (dynamic registration / usrloc db_mode=3), ADR-0008 (Kamailio HA), incident report 2026-06-01 (commissioning del tier signaling).
Contesto
Durante il commissioning del registrar SIP (ADR-0020, usrloc db_mode=3 su Postgres)
è emerso che il tier kamailio↔DB non era mai stato cablato sui nodi reali:
- Kamailio (usrloc, permissions) e
akira-kam-syncsi connettono comeakira_kamailio, che è un ruolo NOLOGIN (gruppo). Il ruolo LOGIN èakira_kamailio_login(membro diakira_kamailio, eredita i grant) ma era stato creato senza password. - Il
db_urlusava schemapostgresql://(il modulodb_postgresdi kamailio vuolepostgres://) esslmode=verify-full+ cert client (mTLS), mentre db-01 ha SSL off e ilpg_hbareale non aveva alcuna regola per l'utente kamailio (soloakira_app/akira_ro,scram-sha-256). - Conseguenza:
kamailio-htable-syncfalliva (timeout DB) e usrloc db_mode=3 non poteva partire. Staging non ha mai portato traffico reale → è commissioning, non incidente.
Decisione
Per il commissioning, auth kamailio↔Postgres = SCRAM password, niente mTLS.
- Utente di connessione:
akira_kamailio_login(LOGIN, membro del gruppoakira_kamailioda cui eredita i grant: DML sulocationper db_mode=3, SELECT sulle sorgenti htable). Password SCRAM impostata dal ruolotimescaledbdavault_kamailio_db_password. db_url(permissions, usrloc) eDATABASE_URL(kam-sync): schemapostgres://(libpq) /postgresql+asyncpg://(kam-sync),sslmode=disable/DATABASE_TLS_ENABLED=false(coerente con DB SSL off su staging). Rimossisslmode=verify-full/sslcert/sslkey.pg_hba(db-01 + db-02): regolehost ... akira_kamailio_login ... scram-sha-256dai nodi sip (10.0.0.0/16+100.64.0.0/10). Già presenti nel ramo scram del templatetimescaledb(gated supostgres_tls_enabled=false); applicate in modo additivo sul live + reload SIGHUP (no restart), con backup del pg_hba.
Alternativa scartata (per ora)
mTLS (hostssl + clientcert + ident map akira_mtls): già modellato nel template
timescaledb (ramo postgres_tls_enabled=true) e nei cert kam-sync.crt/key. Richiede
SSL on sul DB (restart), cert client per kamailio db_postgres (supporto via URL incerto) e
mapping ident. Rimandato a un hardening tier-wide (tutti i ruoli DB su mTLS insieme),
non sul path critico del commissioning della registrazione.
Conseguenze
- Sblocca usrloc db_mode=3 + ripara
kamailio-htable-sync(stessa connessione). - Debito: passare a mTLS in un secondo momento (riabilitare
postgres_tls_enabled=true+ db_postgres con cert / o pgbouncer mTLS davanti). Tracciare come task hardening. - Versionato:
db_url/env nel ruolokamailio; password + pg_hba scram nel ruolotimescaledb; grant nelle migration (già presenti).