OpenKeel : la solution Cloud souveraine, française à portée européenne du groupe inherent Découvrir inherent

Composants · Identité et sécurité

Keystone

Identité multi-tenante : domaines, projets, rôles ; jetons, OIDC, JWT, application credentials.

Go SQL, OIDC, JWTopenkeel-keystone

Le module

OpenKeel implementation in Go of OpenStack keystone (keystone-api), generated from the reverse-specification of branch stable/2026.2 by the generate-go-from-spec skill. It replaces the Python service without its clients noticing: same routes, status codes, error bodies, microversions and policies. What is reproduced and what differs is in docs/CONFORMANCE.md; the security checklist is in docs/SECURITY.md.

  • Go module: github.com/openkeel/openkeel-keystone
  • Binaries: keystone-api (API on port 5000, health and metrics on 9090) and keystone-customers (the controller of the OpenKeelCustomer resources, below)
  • Configuration: YAML, see config/config.example.yaml
  • Setting up a development environment, the database and the tests: docs/GETTING-STARTED.md
  • Database schema, migrations and upgrades: docs/DATABASE.md

Extrait de openkeel-keystone/README.md (en anglais).

API REST

259 opérations de l'API REST d'origine (routes et actions de corps), et leur état dans OpenKeel.

  • 163Implémenté
  • 96Non implémenté

Comment la compatibilité est testée

Les échanges enregistrés des tests unitaires de Keystone Python sont rejoués contre le service Go ; le Keystone Go est aussi utilisé par Skyline, les CLI et tous les autres services du lab.

Rejeu des échanges enregistrés

Rejeu E2E des échanges enregistrés

Les échanges enregistrés depuis les tests de Keystone Python donnent le même statut et le même corps depuis le service Go.

Exécution

make e2e ; rapport dans test/e2e/report.json, différences acceptées dans test/e2e/known-differences.txt.

Dernier résultat 7345 / 8896 requêtes identiques dans le dernier rapport (1489 fichiers).

Source : openkeel-keystone/test/e2e/report.json

Tests unitaires et golden tests

Tests unitaires et vecteurs s3tokens portés

Tests unitaires, dont les vecteurs de signature EC2 et S3 de test_contrib_s3_core portés à la main.

Exécution

make test (vet et détecteur de race) ; internal/keystone/ec2sign_test.go, internal/api/s3tokens_test.go.

Source : openkeel-keystone/docs/CONFORMANCE.md

Contrat client

Skyline face au Keystone Go

Connexion, profil, politiques, changement de projet, régions, domaines, endpoints, texte de mot de passe erroné et déconnexion fonctionnent comme face à Python.

Exécution

Exécution en direct d'openkeel-skyline contre un Keystone Go alimenté par MariaDB.

Dernier résultat Politiques d'admin système : 1 817 / 1 860 autorisées, comme Python face à son simulacre.

Source : openkeel-skyline/docs/CONFORMANCE.md

De bout en bout sur un lab

Smoke test du lab

Jetons admin à portée projet et système et un catalogue listant chaque service attendu, utilisés par les vérifications des autres services.

Exécution

make lab-smoke exécute labctl smoke dans le cluster du lab.

Source : openkeel-lab/README.md

Écarté de la réécriture

Keystone conserve son API et laisse de côté la plomberie de service oslo et le format de notification basic, et audite plutôt avec des événements CADF.

Mécanique interne simplifiée

Format de notification basic

Pourquoi c'est écarté

Seul CADF, le défaut amont, est implémenté ; les événements passent par l'émetteur d'audit (JSON sur stdout, oslo.messaging s'il est activé).

Pourquoi la solution n'est pas affectée

Choisir basic journalise un avertissement et CADF est envoyé. Aucun service OpenKeel ne consomme les payloads basic de Keystone.

Source : openkeel-keystone/docs/CONFORMANCE.md

Assuré par la plateforme Cloud Native

Logs dans des fichiers, osprofiler, healthcheck, CORS

Repris par Probes Kubernetes, OpenTelemetry, Ingress

Pourquoi c'est écarté

Les logs partent sur stdout en JSON, les traces vers OpenTelemetry, la santé vers les probes Kubernetes et CORS vers l'ingress.

Pourquoi la solution n'est pas affectée

Les opérateurs utilisent les outils du cluster ; l'API d'identité est inchangée.

Source : openkeel-keystone/config/dropped-options.md

Seul ce qui a été écarté par choix de conception figure ici ; le travail pas encore fait se trouve dans les Known gaps du docs/CONFORMANCE.md du module. Tous les modules

Interactions de Keystone

Vue « service » générée par la skill diagramme depuis le modèle d'OpenKeel.

Diagramme openkeel-keystone.svg Plein écran
Les 7 interactions du modèle
DeVersProtocoleQuoi
SkylineKeystoneAPI RESTlogin, catalog, system session
@apiKeystoneAPI RESTtoken validation
KeystoneOIDC identity providerOIDC / JWKSOIDC discovery, JWKS
Heat engineKeystoneAPI RESTtrusts, stack domain users
EC2 APIKeystoneAPI RESTec2tokens (SigV4)
Ceph RGWKeystoneAPI RESTtoken validation, /v3/s3tokens (user rgw)
OVN Octavia providerKeystoneAPI RESTservice token

Spécifications