Fédération — Catalogue externe Climscore en lecture seule¶
Parcours personas : alice (mise en place) → carol (analyste) · Catalogues :
climscore(externe, READ-ONLY) · Durée : ~15 min · Difficulté : étoile étoileNote statut : cette démo attend le catalogue externe
climscoreprovisionné par le périmètre démo Climscore. S'il n'est pas encore actif, utiliser les valeurs placeholder ci-dessous et mettre à jour lorsque le périmètre sera en ligne.
Cette démo illustre le pattern de fédération read-only utilisé quand un client met sa donnée à disposition d'AKKO pour analyse mais interdit toute mutation. AKKO applique le contrat côté Query layer ; les tentatives d'écriture remontent un message clair et actionnable.
Ce que la démo prouve¶
- Un catalogue client se fédère en mode strict read-only en un formulaire.
- La couche Query refuse INSERT, UPDATE, DELETE, MERGE, TRUNCATE avec un message net.
- SELECT fonctionne normalement ; les résultats peuvent être publiés dans un dashboard partagé.
- Le refus est tracé dans la piste d'audit avec persona et ressource.
Pré-requis¶
- URL démo :
https://demo.akko-ai.com - Un endpoint Postgres Climscore externe joignable depuis le cluster AKKO.
- 2 personas provisionnées :
alice,carol.
Étape 1 — Alice fédère le catalogue Climscore en read-only¶
Se connecter en alice. Aller dans Administration → Catalog Manager Pro.
Cliquer Ajouter un catalogue → Postgres (read-only).
Remplir le formulaire :
- Nom du catalogue :
climscore - Hôte :
postgres.climscore.akko-demo - Port :
5432 - Base :
climscore - Utilisateur :
akko_reader - Mot de passe : lu depuis le Secret
kubectl get secret -n akko climscore-reader -o jsonpath='{.data.password}' | base64 -d - Mode : READ-ONLY
- Verbes SQL refusés automatiquement :
INSERT, UPDATE, DELETE, MERGE, TRUNCATE, ALTER, DROP, CREATE
Cliquer Tester la connexion. Attendu : Connection OK, 1 schema discovered (public, 14 tables).
Cliquer Save.
Capture : tests/e2e/playwright/artefacts/demos/federation-climscore/01-add-catalog.png
Étape 2 — Carol confirme que le catalogue est visible et read-only¶
Se déconnecter, se connecter en carol. Aller dans Gouvernance → Explorateur de catalogue → climscore.
Attendu : la tuile catalogue montre un petit badge read-only. Cliquer une table ; les actions Éditer ligne et Ajouter colonne sont masquées.
Capture : tests/e2e/playwright/artefacts/demos/federation-climscore/02-readonly-badge.png
Étape 3 — Carol lance un SELECT¶
Ouvrir DevHub → Éditeur SQL. Lancer :
SELECT
asset_id,
asset_type,
risk_score,
last_assessed_at
FROM climscore.public.assets
WHERE risk_score > 0.7
ORDER BY risk_score DESC
LIMIT 50;
Attendu : 50 lignes retournées en ~0,6 s.
| asset_id | asset_type | risk_score | last_assessed_at |
| AS-00000412 | building | 0,97 | 2026-05-12 09:14:00 |
| AS-00000871 | parcel | 0,95 | 2026-05-10 18:42:00 |
| ... | ... | ... | ... |
Capture : tests/e2e/playwright/artefacts/demos/federation-climscore/03-select-result.png
Étape 4 — Carol tente une écriture et reçoit un refus net¶
Dans l'éditeur SQL, lancer :
Toast d'erreur attendu (et non une stack trace brute) :
Ce catalogue est en lecture seule.
Verbes autorisés : SELECT, SHOW, DESCRIBE, EXPLAIN.
Raison : le catalogue Climscore est enregistré en lecture seule pour les utilisateurs AKKO.
Contact : data-team@akko-ai.com
Répéter avec INSERT, DELETE, MERGE, TRUNCATE : même refus net.
Capture : tests/e2e/playwright/artefacts/demos/federation-climscore/04-write-denied.png
Étape 5 — Carol promeut un dashboard partagé¶
Relancer le SELECT, cliquer Promote to dashboard. ADEN propose :
- KPI — Assets au-dessus de risk 0,7
- KPI — Risk score moyen
- Bar — Distribution des risk score
- Map — Assets à fort risque (si geometry présente)
- Table — Top 50
Cliquer Share → Publier en lecture seule avec audience akko-analyst.
Capture : tests/e2e/playwright/artefacts/demos/federation-climscore/05-shared-dashboard.png
Étape 6 — Alice inspecte la piste d'audit¶
Se connecter en alice. Aller dans Gouvernance → Piste d'audit → catalog = climscore.
Événements attendus :
| horodatage | acteur | action | résultat | raison |
| 2026-05-17 11:02:14 | alice | catalog.register | ok | read-only |
| 2026-05-17 11:05:08 | carol | query.execute | ok | - |
| 2026-05-17 11:05:42 | carol | query.execute | denied | readonly_verb |
| 2026-05-17 11:06:00 | carol | dashboard.publish | ok | - |
Capture : tests/e2e/playwright/artefacts/demos/federation-climscore/06-audit.png
Nettoyage¶
- Se déconnecter.
Ce que la démo prouve¶
- Un contrat client read-only est appliqué côté Query layer, pas dans l'application.
- Le message remonté à l'utilisateur est actionnable, pas une stack trace.
- La piste d'audit capture les écritures refusées comme preuve.
Fichiers dans le repo¶
| Fichier | Rôle |
|---|---|
helm/akko/charts/akko-catalog-manager/templates/secret-climscore.yaml |
Template Secret reader Climscore |
opa/policies/catalog_readonly.rego |
Policy Rego qui refuse les verbes d'écriture sur catalogues read-only |
trino/catalog/climscore.properties |
Fichier catalogue généré |