| name | implementing-image-provenance-verification-with-cosign |
| description | Signs and verifies container image provenance using Sigstore Cosign, covering key-based and keyless OIDC-based signing (Fulcio, Rekor transparency log), SLSA attestations, and enforcing signature verification via Kubernetes admission control. Use when signing container images for supply chain security, setting up keyless OIDC signing, attaching attestations, or enforcing verified-image-only policies at admission in a Kubernetes cluster. |
| domain | cybersecurity |
| subdomain | container-security |
| tags | ["cosign","sigstore","image-signing","supply-chain","provenance","keyless","slsa"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
| nist_csf | ["PR.PS-01","PR.IR-01","ID.AM-08","DE.CM-01"] |
| mitre_attack | ["T1610","T1611","T1609","T1525","T1195"] |
Implementing Image Provenance Verification with Cosign
Overview
Cosign is a Sigstore tool for signing, verifying, and attaching metadata to container images and OCI artifacts. It supports both key-based and keyless (OIDC) signing, integrates with Fulcio (certificate authority) and Rekor (transparency log), and enables supply chain security for container images.
When to Use
- When deploying or configuring implementing image provenance verification with cosign capabilities in your environment
- When establishing security controls aligned to compliance requirements
- When building or improving security architecture for this domain
- When conducting security assessments that require this implementation
Prerequisites
- Cosign CLI installed
- Docker or Podman for building images
- OCI-compliant container registry (Docker Hub, GHCR, GCR, ECR)
- OIDC provider account (GitHub, Google, Microsoft) for keyless signing
Installing Cosign
go install github.com/sigstore/cosign/v2/cmd/cosign@latest
brew install cosign
curl -O -L "https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64"
sudo mv cosign-linux-amd64 /usr/local/bin/cosign
sudo chmod +x /usr/local/bin/cosign
cosign version
Key-Based Signing
Generate Key Pair
cosign generate-key-pair
cosign generate-key-pair --kms awskms:///alias/cosign-key
cosign generate-key-pair --kms gcpkms://projects/PROJECT/locations/LOCATION/keyRings/KEYRING/cryptoKeys/KEY
cosign generate-key-pair --kms hashivault://transit/keys/cosign
Sign Image with Key
cosign sign --key cosign.key ghcr.io/myorg/myapp:v1.0.0
cosign sign --key cosign.key \
-a "build-id=12345" \
-a "git-sha=$(git rev-parse HEAD)" \
ghcr.io/myorg/myapp:v1.0.0