Auto-aloja un emisor
Este tutorial te guía en la ejecución de tu propio emisor CDS de extremo a extremo a la escala mínima viable: un script Python local que obtiene una API upstream real, firma el resultado e imprime el envoltorio firmado. Desde ahí puedes escalar hasta trabajos cron programados, almacenes de eventos respaldados por S3 y despliegues AWS — pero el modelo de confianza es idéntico a cualquier escala.
Por qué auto-alojar
Sección titulada «Por qué auto-alojar»- Tú posees el ancla de confianza. Los consumidores verifican con tu clave pública, no con la de signed-data.org.
- Controlas la cadencia de ingestión y la selección de fuentes.
- Puedes extender el vocabulario con dominios y tipos de contenido personalizados.
- Sin lock-in del proveedor. La firma vive dentro del evento y es portable.
Prerrequisitos
Sección titulada «Prerrequisitos»- Python 3.12+
- 10 minutos
- Un nombre de dominio (para producción; no es necesario para el recorrido local)
-
Instala el SDK y genera claves
Ventana de terminal pip install signeddata-cdspython3 -c "from cds import generate_keypairimport os; os.makedirs('keys', exist_ok=True)generate_keypair('keys/private.pem', 'keys/public.pem')" -
Ejecuta el ingestor de loterías con tu propio URI de emisor
import asynciofrom cds import CDSSignerfrom cds.sources.lottery import MegaSenaIngestorsigner = CDSSigner("keys/private.pem", issuer="https://mycompany.example.com")ingestor = MegaSenaIngestor(signer=signer)events = asyncio.run(ingestor.ingest())for e in events:print(e.context.summary)print(f" signed_by: {e.integrity.signed_by}")print(f" hash: {e.integrity.hash[:32]}...")El evento firmado ahora declara que tú eres el emisor:
"integrity": {"signed_by": "https://mycompany.example.com",...} -
Verifica con tu propia clave pública
from cds import CDSVerifierverifier = CDSVerifier("keys/public.pem")verifier.verify(events[0]) # lanza si fue alteradoprint("Valid") -
Publica tu clave pública (producción)
Para que los consumidores verifiquen tus eventos sin un intercambio de claves fuera de banda, publica tu clave pública en:
https://mycompany.example.com/.well-known/cds-public-key.pemUsa cualquier hosting de archivos estáticos: S3 + CloudFront, GitHub Pages, Cloudflare Pages, nginx — cualquier cosa que sirva archivos PEM sobre HTTPS.
-
(Opcional) Publica tu vocabulario
Para cumplir totalmente con Linked Data, también sirve:
https://mycompany.example.com/vocab/ → cds.jsonldhttps://mycompany.example.com/vocab/domains/ → archivos de dominiohttps://mycompany.example.com/sources/ → registro de fuenteshttps://mycompany.example.com/contexts/cds/v1.jsonldEstablece
Content-Type: application/ld+jsonpara todos los archivos.jsonld. Puedes empezar replicando el vocabulario de referencia desdehttps://signed-data.org/vocab/y adaptándolo a tus necesidades.
Lo que se mantiene igual
Sección titulada «Lo que se mantiene igual»El formato del envoltorio, los tipos de contenido, el algoritmo de firma y las especificaciones de dominio son
idénticos a signed-data.org. Tus eventos son verificables por cualquier consumidor
CDS — solo usan tu clave pública en lugar de la nuestra. Consulta
Auto-alojamiento para la referencia completa.
Lo que cambia
Sección titulada «Lo que cambia»| Propiedad | signed-data.org | Tu despliegue |
|---|---|---|
integrity.signed_by | https://signed-data.org | https://mycompany.example.com |
| URL de la clave pública | signed-data.org/.well-known/... | mycompany.example.com/.well-known/... |
| Infraestructura | Nuestra cuenta AWS | Tu cuenta AWS / GCP / Azure |
| Programación de ingestor | Nuestros crons | Tus crons |
Pasando a producción
Sección titulada «Pasando a producción»Una vez que el script local funcione, los siguientes pasos naturales son:
- Programar el ingestor (cron, temporizador systemd, GitHub Actions, AWS EventBridge)
- Persistir los eventos en S3 (append-only, particionados por
domain/date/event_id) - Gestionar los secretos adecuadamente — mover la clave privada a AWS Secrets Manager, Azure Key Vault o un HSM
- Levantar un servidor MCP delante de tu almacén de eventos para que los LLMs puedan consumir los datos — consulta el tutorial Conecta Claude a un servidor MCP
- Monitorear y alertar sobre fallos de ingestión y mismatches de firma