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

Arquitectura

SecNumCloud-ready

OpenKeel está diseñado para ser SecNumCloud-ready: lo que es conforme hoy, lo que está en curso y lo que queda por evolucionar, requisito por requisito, cada uno con su evidencia en el código.

Qué significa SecNumCloud-ready

SecNumCloud (ANSSI, marco 3.2) cualifica un servicio operado por un proveedor, no un software. El marco abarca la organización, los recursos humanos, la seguridad física, las operaciones, la gestión de incidentes y la protección frente al derecho extraeuropeo (§ 19.6) tanto como la técnica.

Por tanto, OpenKeel no puede estar «cualificado SecNumCloud». Aspira a ser una base SecNumCloud-ready: un software que no bloquea ningún requisito técnico del marco, que proporciona los mecanismos esperados (trazabilidad, segregación, cifrado, autenticación robusta) y la documentación que permite al proveedor demostrar la conformidad durante la auditoría.

  • Cada línea remite a una evidencia: un archivo, una prueba o una configuración
  • Estado a 2026-11-10
  • La organización, las personas y las instalaciones siguen a cargo del proveedor

Dónde estamos

  • 15requisitos conformes
  • 4en curso
  • 18por evolucionar

Contabilizado a partir de las tablas siguientes; la parte del proveedor se indica aparte.

Todos los flujos internos cifrados con TLS

Una PKI interna gestionada por cert-manager (emisor openkeel-ca) firma los certificados de los servicios; la CA del operador de MariaDB firma los de la base de datos. Cada servicio verifica el servidor con el que habla.

FlujoProtocoloConfianza
Clientes → Ingress → APIHTTPS, recifrado hacia backends HTTPS (Skyline, consola de Nova, wsproxy de Zun)Certificado público; certificados internos de cert-manager
API ↔ APIREST sobre HTTPS, URL internas https en el catálogoPKI interna, emisor de cert-manager openkeel-ca
Servicios → MariaDBSQL sobre TLS, exigido por el servidorCA del operador de MariaDB, verificada por cada servicio
Servicios → RabbitMQAMQPS (RPC y notificaciones)PKI interna openkeel-ca
Neutron → OVN NB/SBOVSDB sobre ssl:, TLS mutuoCertificados de cliente y servidor de OVN

Ya no hay Memcached ni Redis: ningún componente los leía, y okadm los retira de las instalaciones existentes. Solo los puertos de administración :9090 (salud, métricas), la distribución Erlang entre los nodos de RabbitMQ y la pasarela RGW de --ceph-s3 transportan aún tráfico en claro dentro del clúster. Toda la tabla está en el código (global.tls.internal, activado por defecto) y se verificó en el laboratorio el 2026-11-08.

Imágenes: un registro controlado, un SBOM y una firma

Toda imagen que ejecuta un clúster de producción procede del registro del proveedor: las de OpenKeel, construidas desde el espacio de trabajo, y las de terceros, copiadas allí con su SBOM. Ambas se firman con la clave del proveedor.

ImágenesRegistroSBOM y procedenciaFirma
Servicios de OpenKeel, okadm, sitio webConstruidas por make release y subidas a REGISTRY; los charts apuntan a él (global.imageRegistry)SBOM SPDX por plataforma y procedencia SLSA, adjuntados por BuildKit en el índice de la imagen; exportados por make sbomcosign, por digest del índice (make sign), atestaciones incluidas
Binarios okadmArchivos de versión en dist/cli, con SHA256SUMSSBOM SPDX por binario (syft)Sumas de verificación
Requisitos previos: cert-manager, operadores de MariaDB y RabbitMQ, MariaDB, RabbitMQ, TraefikCopiadas de registro a registro por make mirror-prereqs, todas las plataformas, un prefijo por registro de origenEl SBOM del editor cuando la copia lo conserva; si no, un SBOM de syft adjuntado con cosign attest (MIRROR_SBOM=1)Cada copia firmada con la clave de OpenKeel
Ironic (imágenes Kolla de origen)Fijadas por digest en el manifiesto de versión de okadm, descargadas a través de global.imageRegistryA través del espejo (MIRROR_EXTRA_IMAGES)A través del espejo

El clúster descarga del espejo sin cambiar ningún chart: un hosts.toml por registro de origen para containerd, machine.registries.mirrors en Talos. Ninguna firma, SBOM ni digest de imagen se envía a los servicios públicos de Sigstore (build/cosign/signing-config-private.json). Fuente: BUILD.md.

Conforme hoy

Hecho en el código y en los charts, o documentado para el proveedor.

RequisitoSecNumCloud 3.2EstadoEvidenciaSiguiente paso
Control del código, sin dependencia de un fabricante no europeo§ 19HechoReescritura open source en Go de Keystone, Nova, Neutron, Cinder, Glance, Manila, Barbican… (openkeel-*); sin telemetría, sin llamadas salientes a tercerosReconstruir las imágenes en una CI europea
Registro de las acciones de APIcap. 12HechoUn evento CADF por llamada en todas las API (internal/audit), eventos de identidad de Keystone (internal/notify), contadores openkeel_audit_events_{sent,dropped,failed}_totalAñadir kube-apiserver y la API de Talos al registro de auditoría
Conservación e integridad de los logscap. 12HechoDocumentado en openkeel-chart/docs/audit-trail.md: archivo WORM (object lock, modo compliance), 12 meses con 3 en línea (Loki 400 d), NTP en los nodos Talos, alertas ante pérdidas, reglas SIEMDemostrarlo en una plataforma real (proveedor)
Control de acceso a las APIcap. 9HechoPolíticas RBAC de OpenStack (admin, member, reader, service, ámbitos de proyecto y de sistema) aplicadas por cada servicio; rechazos 403 como en OpenStack, cubiertos por las pruebas de conformidadReducir las cuentas de servicio con privilegios excesivos
Gestión de secretos y clavescap. 10HechoBarbican en Go con un HSM PKCS#11 (internal/crypto/p11.go, pruebas con SoftHSM) o Vault / OpenBao; rotación de la KEK (internal/manage/rotate.go)HSM cualificado por la ANSSI en producción
Aislamiento de los contenedores de los tenantscap. 13HechoZun con Kata Containers por defecto (RuntimeClass kata): un kernel por contenedor de tenant—
Cifrado del plano de control de la redcap. 10, 13HechoOVN Northbound / Southbound en TLS mutuo (ssl:) entre Neutron, ovn-octavia-provider, FWaaS, VPNaaS, ovn-bgp-agent y OVN central—
Las API opcionales pueden desactivarsecap. 13Hechoec2-api puede desactivarse en el Configurator (componente ec2-api de su catálogo)—
Autenticación multifactorcap. 9HechoKeystone: método TOTP (internal/keystone/totp.go) y reglas MFA por usuario (options.multi_factor_auth_rules, internal/api/mfa_test.go)Federación OIDC
Cifrado de los flujos de base de datoscap. 10HechoMariaDB con TLS obligatorio (infrastructure.mariadb.tls.required: true), la CA del operador MariaDB verificada por cada servicio (global.tls.trustedCAs, que okadm pasa a cada release), tls=skip-verify rechazado; aplicado y verificado en el laboratorio (require_secure_transport en ON)Comprobar la replicación de Galera en TLS en un clúster de tres nodos (el laboratorio solo tiene uno)
Suites TLS de los listenerscap. 10Hechointernal/tlsx en los 16 servicios (una copia del de Keystone): TLS 1.2 como mínimo, solo ECDHE con AES-GCM o ChaCha20 (guía TLS de la ANSSI), certificado releído al renovarse; RabbitMQ limitado a TLS 1.2/1.3 y suites AEAD—
Menor superficie de ataque: ningún servicio de datos sin usocap. 13HechoMemcached y Redis eliminados: ningún componente los leía; okadm los elimina de las instalaciones existentes (internal/deploy/retired.go)—
Cifrado de todos los flujos internoscap. 10Hechoglobal.tls.internal: true por defecto: CA interna de cert-manager (openkeel-ca), un certificado por chart (ECDSA P-256, 90 días); RabbitMQ solo en AMQPS; URL internas y catálogo interno en https://; Ingress hacia backends HTTPS verificados (Traefik ServersTransport, anotaciones de nginx); paso de okadm rabbitmq-trust; informes de estado de ovn-octavia-provider hacia un punto de escucha TLS dedicado de Neutron (openkeel-neutron-lbaas:9878, fuera del puerto de administración). Verificado en el laboratorio el 2026-11-08: 18 puntos de escucha en HTTPS con certificado verificado, HTTP en claro rechazado, conexiones AMQP en TLS 1.3Captura de red: ningún flujo de aplicación en claro fuera de :9090
Integridad y trazabilidad de las imágenes de OpenKeelcap. 14HechoCada imagen construida con --sbom=true --provenance=mode=max (ATTEST=1, por defecto): un SBOM SPDX por plataforma (paquetes Debian de la base distroless, cada módulo Go) y la procedencia SLSA en el índice de la imagen; make sbom los exporta a dist/sbom, con el SBOM de cada binario okadm; make sign firma cada índice por digest con cosign, lo que cubre sus atestaciones (build/sbom.sh, BUILD.md)Imponer las firmas en la admisión
Imágenes de terceros en un registro controlado, con un SBOMcap. 14Hechomake mirror-prereqs copia las imágenes de los requisitos previos (cert-manager, operadores de MariaDB y RabbitMQ, MariaDB, RabbitMQ, Traefik: 14 imágenes) de registro a registro, todas las plataformas, según el manifiesto de versión de okadm; containerd o Talos redirigen cada registro de origen al espejo; MIRROR_SBOM=1 exporta un SBOM por copia, adjunta uno con cosign attest cuando el editor no lo proporciona y firma cada copia con la clave de OpenKeel; las imágenes de OpenKeel y las de Ironic, fijadas por digest, se descargan a través de global.imageRegistryReplicar las imágenes que KubeVirt y CDI determinan en tiempo de ejecución

Los números de capítulo orientan la lectura; deben contrastarse con el marco publicado antes de elaborar la matriz de conformidad. Fuente: openkeel-docs/SECNUMCLOUD-STATUS.md.

En curso

RequisitoSecNumCloud 3.2EstadoEvidenciaSiguiente paso
Suites TLS uniformescap. 10En cursoServicios (tlsx) y RabbitMQ alineados; queda el lado público de los controladores de IngressPerfil TLS de la ANSSI en los puntos de entrada públicos del Ingress
Charts coherentes—En cursoConflicto de nombres del helper svc.volumes entre sub-charts (montaje de las CA de confianza)Prefijar los helpers por chart
Imágenes construidas y controladas por el proveedorcap. 14En cursomake release construye cada imagen multiarquitectura desde el espacio de trabajo (distroless sin root, UID 65532, sin shell) con su SBOM, su procedencia y su firma; la configuración de firma por defecto no usa ninguno de los servicios públicos de Sigstore (build/cosign/); Ironic aún usa las imágenes Kolla (Python) de origen, replicadas por digestEjecutar make release en una CI europea; sustituir las imágenes Kolla
Vigilancia de vulnerabilidades de las imágenescap. 14En cursomake vuln (govulncheck, go mod verify) en cada módulo Go; los SBOM de las imágenes de OpenKeel y de terceros se analizan sin volver a descargar las imágenes (grype, trivy sbom)Analizar los SBOM en cada versión y periódicamente en busca de nuevas CVE

Por evolucionar: identidad, acceso y mínimo privilegio

RequisitoSecNumCloud 3.2EstadoEvidenciaSiguiente paso
MFA de los administradores a través de un IdPcap. 9PendienteSolo TOTP localFederación OIDC en Keystone (IdP europeo, MFA a cargo del IdP), asociada a roles
MFA para los administradores de Kubernetescap. 9PendienteAcceso por kubeconfig con un certificado de cliente (okadm access)OIDC y MFA en el kube-apiserver, roles de Kubernetes nominativos, sin cluster-admin permanente
Configurator autenticadocap. 9PendienteUI sin inicio de sesión; su ClusterRole modifica los nodos y lee todos los logs (deploy/kustomize/base/rbac.yaml)Autenticación OIDC, una ClusterRole más reducida, acceso solo desde el SI de administración
Cuentas de servicio mínimascap. 9PendienteRol admin para ec2-api (all_tenants), Masakari, Zun (binding:host_id), Skyline y neutron-vpnaas; openstack-exporter con la contraseña de adminRoles dedicados y reglas de política específicas por servicio; un exporter de solo lectura (reader de sistema)

Por evolucionar: cifrado en reposo, borrado y criptografía

RequisitoSecNumCloud 3.2EstadoEvidenciaSiguiente paso
Una clave por tenant para los volúmenescap. 10PendienteCinder registra la clave fija 00000000-0000-0000-0000-000000000000 y deja el cifrado a la StorageClassVincular Cinder a Barbican: una clave por volumen cifrado, en el proyecto del tenant
Cifrado de discoscap. 10Pendiente—Longhorn LUKS por volumen; cifrado de MariaDB, Glance y Swift
Borrado al final del contratocap. 19Pendiente—Borrado criptográfico: destruir las claves Barbican del proyecto, con un procedimiento trazado
Ningún algoritmo obsoletocap. 10PendienteFirmas EC2 v0/v1 en HMAC-SHA1 aceptadas por Keystone (internal/keystone/ec2sign.go)Una opción para aceptar solo v2 (SHA-256) y v4, con las antiguas desactivadas por defecto en producción
HSM cualificadocap. 10PendientePKCS#11 genérico probado con SoftHSMValidar con un HSM cualificado por la ANSSI

Por evolucionar: cadena de suministro

RequisitoSecNumCloud 3.2EstadoEvidenciaSiguiente paso
Firmas impuestas en la admisióncap. 14PendienteImágenes firmadas y atestadas, pero el clúster ejecuta cualquier imagenKyverno verifyImages o el policy-controller de Sigstore con cosign.pub, tanto para las imágenes de OpenKeel como para las de los operadores

Por evolucionar: SI de administración, trazabilidad y flujos

RequisitoSecNumCloud 3.2EstadoEvidenciaSiguiente paso
SI de administración separadocap. 9, 13; PA-022PendienteUna propuesta escrita: zonas Z1, Z2 y Z3 (openkeel-docs/SECNUMCLOUD-ADMIN-SI.md)Red de administración, bastión, puestos de administración (proveedor)
Plano de control separado del plano de datoscap. 13PendienteUn único clúster Talos aloja las API y las cargas de trabajo de los tenantsEtapa 1: refuerzo del clúster único, agentes de Nova y Zun centralizados (sin DSN en los hipervisores); objetivo: clústeres de control y de datos separados
Registro de la administración de la plataformacap. 12PendienteSolo se trazan las API de OpenStackPolítica de auditoría del kube-apiserver, logs de la API de Talos, del bastión y de los BMC, archivados como el registro CADF
Puertos de administración cifradoscap. 10PendienteSalud y métricas en :9090 en HTTP en claro, dentro del clúster; los informes de estado de ovn-octavia-provider ya no pasan por ahí: Neutron los recibe en un punto de escucha TLS dedicadoTLS (o mTLS de Prometheus) en :9090, o una NetworkPolicy que solo deje entrar a Prometheus
Sin soporte remoto no europeo§ 19.6PendienteSoporte remoto de las cabinas de almacenamiento (Pure1, acceso remoto del fabricante) no desactivado por OpenKeelDocumentarlo y comprobar que está desactivado en la guía de instalación de producción
Distribución Erlang de RabbitMQcap. 10PendienteTráfico entre los nodos de RabbitMQ (puerto 25672) sin cifrar, dentro del clústerTLS para la distribución Erlang (ssl_dist), que el operador no gestiona
Pasarela RGW (--ceph-s3)cap. 10PendienteRGW llega a Keystone en HTTPS verificado (caBundleRef), pero sirve S3 y Swift en HTTP en claro en el puerto 80 dentro del clústerPuerto seguro de RGW con un certificado de la CA interna
Llamadas de okadm a las APIcap. 10PendienteA través del proxy de servicios del servidor de API de Kubernetes en https:: cifrado, sin verificar los certificados de los podsLlamar a través del Ingress, o verificar en el lado del cliente

Objetivo: tres zonas, no dos

Las API de OpenKeel forman parte del servicio vendido a los tenants: no son el SI de administración. Por ello, la propuesta separa tres zonas, y las interfaces de administración de Z2 y Z3 (kube-apiserver, API de Talos, BMC, etcd, puertos de administración) solo son accesibles desde Z1.

ZonaContenidoQuién accede
Z1, SI de administraciónPuestos de administración, bastión, IdP de los administradores (MFA), runner de okadm y repositorio Git de los values, Configurator, recogida y almacenamiento de los logs (Loki, SIEM, bucket WORM), réplica firmada del registroSolo los administradores, desde sus puestos
Z2, plano de control del servicioAPI de OpenKeel, conductors, schedulers, MariaDB, RabbitMQ, Barbican, Ingress públicoTenants (API públicas a través del Ingress); administradores a través de Z1
Z3, plano de datosHipervisores (KubeVirt), nodos Zun (Kata), almacenamiento (Longhorn), pasarelas de red (OVN gateway, BGP)Tenants (sus VM y contenedores); administradores a través de Z1

Recomendación de la propuesta: una red de administración y un clúster único reforzado desde ahora, en todo despliegue de producción; agentes de Nova y Zun centralizados como primer desarrollo; clústeres de control y de datos separados como objetivo para una oferta cualificada. Nada de ello está implementado todavía.

Orden de los trabajos

  1. 1

    TLS interno

    Terminar TLS en todos los flujos internos y comprobarlo después con una captura de red.

  2. 2

    Identidad y claves

    OIDC y MFA para los administradores, cifrado en reposo con una clave por tenant.

  3. 3

    Cadena de suministro y administración

    Imágenes construidas en una CI europea, firmas impuestas en la admisión, el SI de administración y la separación de los planos.

  4. 4

    Matriz y preauditoría

    La matriz de requisitos, una revisión interna y después una preauditoría por un auditor cualificado.

La parte del proveedor

La mayor parte del marco concierne al proveedor que opera el servicio. OpenKeel no lo sustituye, pero no debe obstaculizarlo, y aporta parte de las evidencias.

Organización y personas

Política de seguridad, roles, habilitaciones y formación del personal. OpenKeel proporciona roles nominativos y el registro de auditoría de sus acciones.

Seguridad física

Centros de datos, control de acceso a las salas y al hardware. OpenKeel se ejecuta en los propios servidores del proveedor, en Francia y en Europa.

Operaciones

Cambios, copias de seguridad, gestión de vulnerabilidades y de capacidad. okadm planifica, instala y actualiza un componente cada vez; Grafana muestra el estado de cada servicio.

Gestión de incidentes

Detección, tratamiento y notificación de incidentes. El registro CADF, Loki y las alertas de Prometheus aportan los hechos.

Protección frente al derecho extraeuropeo

§ 19.6: propiedad, ubicación de los datos y soporte en la Unión Europea. OpenKeel es open source, sin telemetría y sin llamadas salientes.

Evidencias para la auditoría

Configuraciones, políticas y logs reunidos en la matriz de conformidad, versionados con el código.

Hacia la cualificación

PasoQuéResultado
Matriz de requisitosSecNumCloud 3.2 capítulo por capítulo: responsable (OpenKeel o proveedor), mecanismo, pruebaMatriz de conformidad versionada con el código
Revisión internaCada prueba verificada en una instalación en modo producciónInforme de revisión, brechas abiertas en seguimiento
PreauditoríaAuditor cualificado, sobre una plataforma piloto completaInforme de preauditoría y plan de tratamiento
Prueba de intrusión PASSIAPI públicas, escape de VM y de Kata hacia el plano de control, SI de administraciónInforme, correcciones y nueva prueba
CSPN (opcional)Componentes críticos: Keystone, Barbican, aislamiento de Kata y KubeVirtCertificación de primer nivel de los componentes elegidos