Aller au contenu

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 étoile

Note statut : cette démo attend le catalogue externe climscore provisionné 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 :

UPDATE climscore.public.assets SET risk_score = 0 WHERE asset_id = 'AS-00000412';

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 :

  1. KPI — Assets au-dessus de risk 0,7
  2. KPI — Risk score moyen
  3. Bar — Distribution des risk score
  4. Map — Assets à fort risque (si geometry présente)
  5. 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é

Voir aussi