OpenKeel implementation in Go of OpenStack Barbican (key manager), 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-barbican
Binaries (one image holds all four): | Binary | Replaces | Role | |---|---|---| | barbican-api | barbican-wsgi-api | REST API on port 9311, health and metrics on 9090; -migrate applies the schema | | barbican-worker | barbican-worker | processes orders (key and asymmetric generation) from RabbitMQ, oslo.messaging wire format | | barbican-keystone-listener | barbican-keystone-listener | deletes a project's resources on Keystone's identity.project.deleted notification | | barbican-manage | barbican-manage | db upgrade/clean/sync_secret_stores, simple_crypto rewrap_pkek/new_pkek/rewrap_secrets, hsm gen_mkek/check_mkek/gen_hmac/check_hmac/rewrap_pkek | barbican-retry is not ported (no retry is ever scheduled on this branch, CONFORMANCE.md).
Secret stores: simple_crypto (Fernet, master KEK file), p11_crypto (PKCS#11 HSM, cgo build only, below), vault_plugin (Vault or OpenBao KV v1/v2). The database is shareable with Python Barbican (Alembic head 8c74e2d7f1ff).
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-barbican/README.md (en anglais).
API REST
57 opérations de l'API REST d'origine (routes et actions de corps), et leur état dans OpenKeel.
Barbican est vérifié par rejeu, par ses propres tests fonctionnels, par l'envoi des mêmes requêtes à Python et à Go, et en faisant tourner les deux côte à côte sur une même base de données et un même bus.
Rejeu des échanges enregistrés
Rejeu E2E des échanges fonctionnels
Les échanges fonctionnels enregistrés donnent les mêmes réponses depuis le service Go.
Exécution
make e2e-strict sur le moteur embarqué et sur MariaDB 11.4.
Dernier résultat 2 766 / 2 792 égaux, 26 différences connues (clés aléatoires, dates enregistrées, base de données partagée) ; tous réussissent en direct.
Source : openkeel-barbican/docs/CONFORMANCE.md
Contrat client
functionaltests de Barbican sur Go
Les functionaltests/ amont de Barbican réussissent contre le service Go avec un vrai Keystone.
Exécution
test/functional/run_functional.py --target go via l'adaptateur de conformité.
Dernier résultat 563 ok, 0 échec, 69 ignorés.
Source : openkeel-barbican/docs/CONFORMANCE.md
Test différentiel
Sonde différentielle Python vs Go
Les mêmes requêtes envoyées à Barbican Python et Go, partageant un même Keystone, obtiennent les mêmes réponses.
Exécution
test/functional/diff_probe.py, et --new-defaults pour les valeurs par défaut RBAC.
Chaque décision de politique d'oslo.policy et le format de stockage chiffré de Barbican Python sont reproduits.
Exécution
make test sur policy-vectors.json.gz et les vecteurs simple_crypto et p11_crypto.
Dernier résultat Politique 40 704 / 40 704 ; simple_crypto 25 / 25 ; p11_crypto 8 / 8 émulés, 4 / 8 sur SoftHSM 2. Aucun vrai HSM testé.
Source : openkeel-barbican/docs/CONFORMANCE.md
Test différentiel
Python et Go côte à côte
Python et Go partagent une même MariaDB et un même RabbitMQ : lectures croisées de chaque type de secret, commandes dans les deux sens, barbicanclient, castellan et openstack secret.
Exécution
test/functional/interop.py ; test/amqp/run.sh avec oslo.messaging sur RabbitMQ 3.13 et 4.4.
Dernier résultat Interop 75 / 75 ; AMQP 3 / 3.
Source : openkeel-barbican/docs/CONFORMANCE.md
Concurrence sur Galera
Concurrence sur MariaDB Galera
Les écritures par un nœud et par trois nœuds restent cohérentes.
Exécution
make galera-test : TestOneWriteNode, TestThreeWriteNodes.
Dernier résultat Réussi, 3 exécutions chacun.
Source : openkeel-barbican/docs/CONFORMANCE.md
Écarté de la réécriture
Barbican conserve toute son API et les stores simple_crypto, PKCS#11 et Vault, et laisse de côté le processus de retry inutilisé, Dogtag et la plomberie oslo.
Obsolète ou inutilisé en amont
Processus barbican-retry
Pourquoi c'est écarté
Sur cette branche, aucun chemin de code ne planifie de retry : le processus ne fait qu'interroger une table toujours vide.
Pourquoi la solution n'est pas affectée
Aucun : les commandes sont traitées par barbican-worker comme en amont.
Source : openkeel-barbican/docs/CONFORMANCE.md
Obsolète ou inutilisé en amont
Store de secrets et CA Dogtag
Pourquoi c'est écarté
Il nécessite un serveur Dogtag et son client Python, et les commandes de certificats sont désactivées en amont sur cette branche.
Pourquoi la solution n'est pas affectée
Les secrets utilisent simple_crypto, un HSM via PKCS#11 ou Vault. Les tables de certificats existent mais ne sont pas modifiées.
Source : openkeel-barbican/docs/CONFORMANCE.md
Assuré par la plateforme Cloud Native
Logs dans des fichiers, middleware healthcheck, oslo_reports
Repris par Kubernetes probes
Pourquoi c'est écarté
Les logs partent sur stdout, la santé vers les probes Kubernetes, les diagnostics vers pprof sur le listener d'administration.
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 Barbican
Vue « service » générée par la skill diagramme depuis le modèle d'OpenKeel.