Supply chain

Model supply chain

Nothing serves that was not scanned, described and signed. A model arrives from Hugging Face, NGC, an open-source repo, your own team or an air-gapped mirror, and it has to earn its way to an endpoint.

8 gates · each one fails closed · every decision written to the audit band

  1. Ingest

    Pull from any source, trusted or not

    Hugging Face, NVIDIA NGC, open-source repos, customer-supplied weights and air-gapped mirrors all land in the same intake zone. The origin is recorded, not trusted.

    Ingestintake.pull src=hf://meta-llama/Llama-3.1-8B bytes=16.1G sha256:9f2c…a417

  2. Malware scan

    Every file checked before it is unpacked

    Every object in the artifact is scanned for malware. Anything suspicious is quarantined and the intake fails closed. There is no partial promotion.

    Malware scanscan.malware objects=412 infected=0 verdict=CLEAN

  3. Serialization

    Unsafe pickles and known CVEs

    Checkpoint analysis catches pickle opcodes that can run arbitrary code, and dependency scanning raises CVEs against the packaged runtime. Safetensors are preferred; pickle is blocked by policy.

    Serializationscan.serialize format=safetensors pickle_opcodes=0 cve[high]=0 PASS

  4. ML-BOM

    A bill of materials for the model itself

    Kronos generates the ML-BOM: weights, base model, datasets, licences and dependencies. The scan results attach to it as an in-toto attestation, so the evidence travels with the artifact.

    ML-BOMmlbom.build components=138 datasets=3 licence=llama-3.1 attest=in-toto/v0.1

  5. Sign

    Sigstore and Cosign, keyless

    The artifact and its ML-BOM are signed with a workload identity and logged to a transparency log. From here, any consumer can verify provenance without holding a key.

    Signsign.cosign identity=fulcio-oidc rekor=#884126 SIGNED

  6. Register

    MLflow and Harbor, with lineage

    The model gets a versioned registry entry with lineage back to its source, datasets and training run. Registration is a catalogue action, not an approval.

    Registerregistry.put mlflow://models/llama-3.1-8b/v7 stage=candidate

  7. Promotion gate

    OPA decides. Signed and scanned only.

    The one hard boundary in this band. An OPA policy admits only artifacts that are signed, scanned and carry an ML-BOM. Everything else stops here with a written reason.

    Promotion gateopa.eval policy=kronos.promote.v3 signed=true scanned=true allow

  8. Serve

    KServe, with guardrails already attached

    The endpoint comes up with its runtime guardrails bound at creation. A model can't be served without its runtime policy.

    Servekserve.deploy isvc/llama-31-8b gpu=A100 MIG 3g.40gb ×2 state=READY

The rest of the fabric