Pular para o conteúdo

Auto-hospedagem

Você não precisa usar signed-data.org como provedor de dados. O CDS é um padrão — o SDK, a especificação e os schemas de domínio são livres de infraestrutura. Rode seus próprios ingestores, assine com sua própria chave e sirva seus próprios eventos.

ComponenteMínimo viávelProdução
Chave privadaArquivo PEM localAWS Secrets Manager / KMS
IngestorScript PythonLambda / container (cron)
Armazenamento de eventosArquivos locaisS3 (append-only, versionado)
API consumidoraLeitura do discoAPI Gateway / ALB + Lambda / ECS
Servidor MCPsigneddata-mcp-lotteryECS Fargate atrás de ALB
Terminal window
pip install signeddata-cds
# Gerar chaves
python3 -c "
from cds import generate_keypair
import os; os.makedirs('keys', exist_ok=True)
generate_keypair('keys/private.pem', 'keys/public.pem')
"
import asyncio
from cds import CDSSigner
from cds.sources.lottery import MegaSenaIngestor
signer = 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]}...")

Defina seu issuer como a URI da sua organização:

signer = CDSSigner("keys/private.pem", issuer="https://mycompany.example.com")

Publique sua chave pública em:

https://mycompany.example.com/.well-known/cds-public-key.pem

Consumidores podem então descobrir e verificar sua chave automaticamente.

Se você roda seu próprio emissor CDS, você deveria publicar seu vocabulário para que consumidores possam dereferenciar URIs em seus eventos.

  1. Crie seu arquivo de vocabulário

    Crie vocab/cds.jsonld para sua organização, listando as classes e propriedades que você usa. Você pode copiar e adaptar o vocabulário de referência de https://signed-data.org/vocab/.

  2. Sirva-o em seu domínio

    Faça upload de vocab/cds.jsonld e quaisquer arquivos de domínio para seu servidor web ou CDN:

    https://mycompany.example.com/vocab/ → cds.jsonld
    https://mycompany.example.com/vocab/domains/ → arquivos de domínio
    https://mycompany.example.com/sources/ → documentos de fonte
    https://mycompany.example.com/contexts/ → contexto JSON-LD

    Defina Content-Type: application/ld+json para todos os arquivos .jsonld.

  3. Publique sua chave pública

    https://mycompany.example.com/.well-known/cds-public-key.pem
  4. Referencie seu vocabulário em eventos

    Seus eventos devem usar sua URI base:

    from cds.vocab import content_type_uri, source_uri
    MY_BASE = "https://mycompany.example.com"
    my_content_type = f"{MY_BASE}/vocab/custom-domain/custom-schema"
    my_source = f"{MY_BASE}/sources/my-api.v1"

Ao auto-hospedar, o formato do envelope, os tipos de conteúdo, o algoritmo de assinatura e as especificações de domínio são idênticos a signed-data.org. Seus eventos são verificáveis por qualquer consumidor CDS — eles apenas usam sua chave pública em vez da nossa.

Propriedadesigned-data.orgSua implantação
integrity.signed_byhttps://signed-data.orghttps://mycompany.example.com
URL da chave públicasigned-data.org/.well-known/...mycompany.example.com/.well-known/...
InfraestruturaNossa conta AWSSua conta AWS / GCP / Azure
Agenda do ingestorNossos cronsSeus crons

Um consumidor pode deter múltiplas chaves públicas e verificar contra o emissor declarado:

KNOWN_ISSUERS = {
"signed-data.org": CDSVerifier("signed-data-org.pub.pem"),
"mycompany.example.com": CDSVerifier("mycompany.pub.pem"),
}
verifier = KNOWN_ISSUERS.get(event.integrity.signed_by)
if not verifier:
raise ValueError(f"Unknown issuer: {event.integrity.signed_by}")
verifier.verify(event)