Cómo spire protege el bus y el socket de control, qué amenazas cierra y qué límites impone.
Implementado. El diseño es
dec-0119y su adopción en Styx esdec-0120. Los subjects, emisores y límites concretos están enreferencia/bus/, generada deBUS_ROUTES.
Todo lo que cruza un proceso pasa por spire: el transporte en proceso, el socket Unix de control y NATS llevan el mismo sobre, las mismas políticas y los mismos límites. Prohibido abrir conexiones NATS o sockets de control por otro camino: lo vigilan un test de arquitectura en TypeScript y la auditoría de seguridad en Zig. Los bytes de vídeo no pasan por spire.
| Amenaza | Ejemplo | Cierre |
|---|---|---|
| Suplantar a un servicio | publicar cmd.playback.* como si fuera la web | Identidad de servicio y firma del sobre |
| Alterar un mensaje en tránsito o en JetStream | cambiar el actor de un comando | Firma de la cabecera con el digest del payload |
| Negar un comando | un administrador que borra una biblioteca | Sobre firmado y auditoría |
| Leer subjects ajenos | un servicio que escucha eventos que no necesita | ACL de suscripción por servicio |
| Inundar o saturar | payloads gigantes, consumidor lento | Límites por identidad y por subject |
| Confused deputy | un servicio usa su autoridad para lo que el usuario no puede | El actor viaja como JWT verificable, no como afirmación del emisor |
| Replay | reenviar un comando capturado | Marca temporal, nonce y caché anti-replay |
BUS_ROUTES y un
test regenera la ACL y la compara con la desplegada. Deny por defecto.0750 y socket 0660 con grupo propio, comprobación de credenciales
del par en cada conexión y un apretón de manos de spire en el que el par firma un reto con su
clave de servicio. El uid solo no basta en contenedores con uids compartidos o mapeados. Sin
apretón válido en pocos segundos se cierra sin procesar ningún mensaje.Registrar un handler exige contrato, policy y función, y la policy no tiene valor por defecto.
En Zig, si falta, no compila. En TypeScript, el tipo la exige y el servicio no arranca si algún
subject suscrito no la tiene. La policy comprueba que el emisor está en la lista del subject y, si
el mensaje actúa en nombre de un usuario, evalúa can(actor, acción, recurso) con el mismo motor
que HTTP. Los clientes también declaran lo que envían: un servicio no puede publicar un subject
que no figura en su contrato.
Incluye identificador (UUIDv7, para idempotencia), subject y versión de contrato, emisor, el JWT del usuario si lo hay, marca temporal y nonce, plazo, ids de correlación y traza, y una firma Ed25519 de la cabecera con el digest del payload.
identity-svc. Un servicio comprometido no puede fabricar un actor.spire emite eventos evt.security.comms.* firmados y logs con atributos security.* para
apretones fallidos, firmas inválidas, claves desconocidas, replay, denegaciones de policy,
violaciones de contrato, límites superados y subjects no autorizados. Nunca payloads ni tokens.