feat/worker-db-role-separation #10
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/worker-db-role-separation"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
feat: séparation du rôle PostgreSQL DDL/runtime du worker
Sous-projet B du durcissement infra (A = pods K8s + distroless, mergé). Le worker — le processus qui fetch l'internet — se connectait avec le rôle owner du schéma (pleins pouvoirs DDL). Il tourne désormais sous
indara_worker, un rôle DML-on$Spec :
docs/superpowers/specs/2026-07-16-worker-db-role-separation-design.md· Plan :docs/superpowers/plans/2026-07-16-worker-db-role-separation.mdCe qui change
20260716000001_worker_role.sql: rôleindara_worker(LOGIN restreint, NOBYPASSRLS, zéro membership — la migration échoue si une existe), grants exacts de la surface pipeline (documentsSELECT+UPDATE,document_sourcesS$indara-migrateétend sonpg_jobs::access::reconcileàindara_worker(aucun changement pg-jobs ; profil runtime, jamaisjobs._sqlx_migrations).DATABASE_WORKER_URL, pool épinglé (search_path,row_security) comme le server, et garde de boot (indara_db::role_guard) miroir de celui du server — refuse superuser/BYPASSRLS/ownership/CREATE/toute membersh$database.workerExistingSecret/workerSecretKeyrequis, sans fallback sur l'owner ;indara.databaseEnv(owner) n'est plus consommé que par le job de migrations. README chart : provisioning CNPG complet du rôle + secrets.init-runtime.sqlprovisionneindara_worker; le superuser dev est refusé par le garde (voulu — mêmes invariants qu'en prod).Breaking changes (release notes)
database.workerExistingSecretrequis — provisionner le rôleindara_worker(CNPG managed role, le README du chart donne le YAML) et son secret URI avant l'upgrade. Aucune membership à granter.L'ordre d'upgrade est sûr : migration (rôle+grants+policies) → migrations pg-jobs → reconcile tournent dans le job pre-upgrade avant le rollout des pods.
Vérification
indara-jobs→indara_db::documents, 11 fonctions) ; policies worker-scoped sans fuite vers les $cargo test --workspacevert, clippy 0 warning, 3 tests RLS--ignoredverts contre la base dev migrée (contrat worker + garde + matrice server),helm lintOK.2 | t | f | t | f | 0), boot sain sousindara_worker(pipeline + S3), boot refusé souspostgres(message du garde, exit 1).🤖 Generated with Claude Code