Cosign — signing and verification of Docker images.
1brew install sigstore/cosign/cosign2cosign generate-key-pair34# Signing5cosign sign --key cosign.key ghcr.io/myorg/myapp:latest67# Verification8cosign verify --key cosign.pub ghcr.io/myorg/myapp:latest910# Keyless signing (Fulcio + Rekor)11cosign sign ghcr.io/myorg/myapp:latest12cosign verify \13 --certificate-identity=user@example.com \14 --certificate-oidc-issuer=https://accounts.google.com \15 ghcr.io/myorg/myapp:latest
CI/CD:
1- run: cosign sign --key env://COSIGN_KEY $IMAGE2 env:3 COSIGN_KEY: ${{ secrets.COSIGN_PRIVATE_KEY }}
Kyverno (K8s admission):
1apiVersion: kyverno.io/v12kind: ClusterPolicy3metadata:4 name: verify-image-signature5spec:6 validationFailureAction: Enforce7 rules:8 - name: check-image9 verifyImages:10 - imageReferences: ["ghcr.io/myorg/*"]11 attestors:12 - entries:13 - keys:14 publicKeys: "-----BEGIN PUBLIC KEY-----..."
Cosign vs Notary: Cosign is simpler, integrated with Sigstore.