OpenKeel: la solución Cloud soberana, francesa y de alcance europeo, del grupo inherent Descubrir inherent

Componentes · Identidad y seguridad

Keystone

Identidad multi-tenant: dominios, proyectos, roles; tokens, OIDC, JWT, credenciales de aplicación.

Go SQL, OIDC, JWTopenkeel-keystone

El módulo

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

Extracto de openkeel-keystone/README.md (en inglés).

API REST

259 operaciones de la API REST original (rutas y acciones de cuerpo) y su estado en OpenKeel.

  • 163Implementado
  • 96No implementado

Cómo se prueba la compatibilidad

Los intercambios grabados de los tests unitarios de Keystone en Python se reproducen contra el servicio Go; el Keystone en Go también lo utilizan Skyline, las CLI y todos los demás servicios del laboratorio.

Replay de los intercambios grabados

Replay E2E de los intercambios grabados

Los intercambios grabados de los tests de Keystone en Python dan el mismo estado y el mismo cuerpo desde el servicio Go.

Ejecución

make e2e; informe en test/e2e/report.json, diferencias aceptadas en test/e2e/known-differences.txt.

Último resultado 7345 / 8896 peticiones idénticas en el último informe (1489 archivos).

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

Tests unitarios y golden tests

Tests unitarios y vectores s3tokens portados

Tests unitarios, incluidos los vectores de firma EC2 y S3 de test_contrib_s3_core portados a mano.

Ejecución

make test (vet y detector de carreras); internal/keystone/ec2sign_test.go, internal/api/s3tokens_test.go.

Fuente: openkeel-keystone/docs/CONFORMANCE.md

Contrato de cliente

Skyline frente al Keystone en Go

El inicio de sesión, el perfil, las políticas, el cambio de proyecto, las regiones, los dominios, los endpoints, el texto de contraseña incorrecta y el cierre de sesión funcionan igual que contra Python.

Ejecución

Ejecución en vivo de openkeel-skyline contra un Keystone en Go poblado desde MariaDB.

Último resultado Políticas de administrador del sistema: 1 817 / 1 860 permitidas, como Python frente a su simulación.

Fuente: openkeel-skyline/docs/CONFORMANCE.md

De extremo a extremo en un laboratorio

Smoke test del laboratorio

Tokens de administrador con ámbito de proyecto y de sistema y un catálogo con todos los servicios esperados, utilizados por las comprobaciones de los demás servicios.

Ejecución

make lab-smoke ejecuta labctl smoke en el clúster del laboratorio.

Fuente: openkeel-lab/README.md

Excluido del rewrite

Keystone conserva su API y prescinde de la infraestructura de servicio oslo y del formato de notificación basic, y audita en su lugar con eventos CADF.

Mecánica interna simplificada

Formato de notificación basic

Por qué se excluyó

Solo se implementa CADF, el valor por defecto de upstream; los eventos pasan por el emisor de auditoría (JSON en stdout, oslo.messaging si está habilitado).

Por qué la solución no se ve afectada

Configurar basic registra una advertencia y se envía CADF. Ningún servicio de OpenKeel consume los payloads basic de Keystone.

Fuente: openkeel-keystone/docs/CONFORMANCE.md

Asumido por la plataforma Cloud Native

Logs en archivos, osprofiler, healthcheck, CORS

Asumido por Probes de Kubernetes, OpenTelemetry, Ingress

Por qué se excluyó

Los logs van a stdout en JSON, las trazas a OpenTelemetry, el estado de salud a las probes de Kubernetes y CORS al ingress.

Por qué la solución no se ve afectada

Los operadores usan las herramientas del clúster; la API de identidad no cambia.

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

Aquí solo figura lo que se excluyó por diseño; el trabajo aún no realizado está en los Known gaps del docs/CONFORMANCE.md del módulo. Todos los módulos

Interacciones Keystone

Vista de servicio generada por la skill de diagramas a partir del modelo de OpenKeel.

Diagrama openkeel-keystone.svg Pantalla completa
Las 7 interacciones del modelo
DeAProtocoloQué
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

Especificaciones