Skip to content

Attestation & Verification

This page explains how to verify our container images’ authenticity and inspect their Software Bill of Materials (SBOM).

To cryptographically verify that a container image was signed by our CI/CD pipeline:

Terminal window
# API Proxy
cosign verify subnoto/api-proxy:v2.0.0 \
--certificate-identity https://gitlab.com/subnoto/subnoto-monorepo-public//.gitlab-ci.yml@refs/tags/v2.0.0 \
--certificate-oidc-issuer https://gitlab.com | jq
# MCP Server
cosign verify subnoto/mcp-server:v0.1.4 \
--certificate-identity https://gitlab.com/subnoto/subnoto-monorepo-public//.gitlab-ci.yml@refs/tags/v2.0.0 \
--certificate-oidc-issuer https://gitlab.com | jq

To verify the SBOM attestation attached to a container:

Terminal window
# API Proxy
cosign verify-attestation subnoto/api-proxy:v2.0.0 \
--certificate-identity https://gitlab.com/subnoto/subnoto-monorepo-public//.gitlab-ci.yml@refs/tags/v2.0.0 \
--certificate-oidc-issuer https://gitlab.com \
--type=spdxjson
# MCP Server
cosign verify-attestation subnoto/mcp-server:v2.0.0 \
--certificate-identity https://gitlab.com/subnoto/subnoto-monorepo-public//.gitlab-ci.yml@refs/tags/v2.0.0 \
--certificate-oidc-issuer https://gitlab.com \
--type=spdxjson

Important notes:

  • The --certificate-identity must match the exact GitLab CI file path and tag reference
  • For different versions, update both the image tag and the certificate identity tag
  • Only tagged releases are published to DockerHub
  • Verification requires the cosign tool (install from sigstore.dev)

To download and inspect the SBOM (Software Bill of Materials) attestation:

Terminal window
cosign download attestation subnoto/api-proxy:latest | \
jq -r .payload | \
base64 -d | \
jq '.predicate | fromjson'

This command:

  1. Downloads the attestation from the container registry
  2. Extracts the payload field
  3. Decodes the base64-encoded content
  4. Parses the double-encoded predicate JSON

The output will show a complete SPDX SBOM listing all packages and dependencies in the container.

You can scan images locally using:

Terminal window
# Using Syft to generate SBOM
syft subnoto/mcp-server:latest -o json
# Using Grype to scan for vulnerabilities
grype subnoto/mcp-server:latest