Technical22 min read

Container Image Signing Operating Model Guide

Container image signing is the integrity layer of the modern release chain. It answers a different question from the SBOM, VEX, the SLSA framework, or the NIST SSDF: not what is inside an artefact, not whether a listed CVE is exploitable, and not what practices the producer follows, but whether a specific running container is the artefact a trusted build platform actually produced. Without that, every upstream control sits on top of an unverified identity. For internal AppSec teams, product security teams, platform engineering teams, GRC owners, and CISOs operating under EO 14028, the CISA Secure Software Development Attestation, the EU Cyber Resilience Act, NIS2, and DORA, container image signing is the operating model that turns the build-platform identity into a verifiable control at registry and admission time. This guide explains what container image signing is, why it is now a baseline rather than an advanced practice, the OCI signing landscape (Sigstore cosign, Notary v2 / notation, vendor-native flows), the keyed and keyless signing modes, how transparency logs work, the role of a managed KMS or hardware root of trust, what admission-time verification looks like, how signing fits inside the SLSA Build levels, the regulator-side expectations, the audit evidence the AppSec record carries, common failure modes, and how the signing programme sits alongside the rest of the supply-chain operating model documented in the software supply chain security guide. SecPortal does not sign images. It holds the operating record around the signing programme so AppSec, product security, GRC, and CISOs can read the same workspace record when the auditor or the customer asks.

What Container Image Signing Actually Is

Container image signing attaches a cryptographic signature to an OCI image (or to any OCI-compatible artefact, including Helm charts, WebAssembly modules, and policy bundles) that proves which build identity produced the artefact and that the content has not been altered since the build. The signature lives either as a separate OCI artefact alongside the image in the registry (the modern pattern used by Sigstore cosign, Notary v2 / notation, and the OCI 1.1 referrers API), or, in the legacy Docker Content Trust flow, in a separate signing service. The verifier (an admission controller, a deployment system, a customer attestation flow, or a security evaluation pipeline) reads the signature, checks it against an allowed signer policy, and either admits or denies the artefact.

The signature is a small, well-defined artefact: a payload that names the artefact digest, a cryptographic signature over the payload, a signer identity (either a long-lived public key fingerprint or a short-lived certificate tied to an OIDC identity), and, optionally, an attestation that carries SBOM, VEX, SLSA provenance, or vulnerability scan results bound to the same digest. The verifier never trusts the payload alone; it trusts the signature over the payload, anchored to a documented root of trust.

Signing is not the same as scanning. Scanning answers what is in an artefact and whether any known weaknesses are present. Signing answers whether the artefact is the one a documented build produced. Most modern programmes run both: scanning detects the long tail of dependency CVEs through authenticated and unauthenticated scanning and SAST and SCA code scanning; signing closes the integrity question that scanning cannot answer.

Why Image Signing Is Now a Baseline

Container image signing crossed from advanced practice into baseline expectation for three reasons: regulator pressure on software supply-chain integrity, the maturation of the Sigstore tooling stack and the OCI 1.1 referrers API, and the operational failure modes that high-profile incidents (SolarWinds, the Codecov bash uploader, the 3CX desktop client, the Sisense customer key incident, the ASUS Live Update compromise) exposed in unsigned release flows. Each of those incidents shared a common thread: an attacker compromised the build or distribution path, replaced the legitimate artefact with a tampered version, and the downstream consumers ran the tampered artefact because no integrity check could distinguish it from the legitimate one.

Regulator pressure now names integrity controls explicitly. EO 14028 and OMB M-22-18 / M-23-16 require federal software producers to provide a self-attestation that aligns with NIST SP 800-218 (SSDF). SSDF PS.2 names verification of release integrity. NIST SP 800-204D names signing as a load-bearing CI/CD control. The CISA Secure by Design pledge names signed releases as a transparency commitment. The EU Cyber Resilience Act names component integrity in Annex I. NIS2 Article 21(2) names supply-chain security as a required cybersecurity risk-management measure for essential and important entities. DORA Article 28 names ICT third-party risk management requirements that signed releases support.

The tooling stack matured at the same time. Sigstore reached v1.0 in October 2022, the OCI 1.1 referrers API stabilised, Kubernetes admission control through Kyverno and the Sigstore policy controller reached production scale, and major cloud providers shipped managed signing flows (AWS Signer for container images, Google Cloud Binary Authorization with Sigstore, Azure Container Registry signing). Image signing is no longer a research-grade practice; it is the operating norm for any organisation that ships container images and answers to a regulator or a customer security questionnaire.

The OCI Image Signing Landscape

The OCI ecosystem has converged on two dominant approaches for image signing, plus several vendor-specific implementations and one legacy approach that is now deprecated. Understanding which one to pick is the first operating decision.

Sigstore (cosign + fulcio + rekor)

OpenSSF-governed project that defaults to keyless signing tied to an OIDC identity with a public transparency log entry. The cosign CLI signs and verifies; fulcio issues short-lived signing certificates; rekor stores a tamper-evident log of every signature. Pairs naturally with SLSA Build L3 provenance. Dominant choice for public open-source release flows and for enterprises that adopt Sigstore for internal signing with a private fulcio and rekor instance.

Notary v2 / notation

CNCF project that produces detached OCI signature artefacts under a configurable corporate PKI. Trust store contains the signing CA certificates; the notation CLI signs and verifies; revocation is handled through CRL and OCSP rather than a transparency log. Dominant choice for enterprises with a mature internal PKI, a policy against publishing to a public transparency log, or a registry that supports the notation specification natively (Azure Container Registry, Harbor, Docker Hub).

Vendor-native signing

AWS Signer for container images, Google Cloud Binary Authorization, Azure Trusted Signing, JFrog Xray signing flows, Red Hat Simple Signing on top of GPG. Each wraps cosign or notation underneath, or provides a parallel implementation tied to the cloud provider IAM and KMS. Right choice when the deployment stack is already vertically integrated with the provider and the security team accepts the provider-side trust dependency.

Docker Content Trust / Notary v1 (legacy)

Original signing flow built on a separate Notary v1 service with TUF metadata. Deprecated by the OCI ecosystem in favour of OCI 1.1 referrers-based signatures. Do not start a new programme on Notary v1. If an existing programme depends on it, plan a migration to notation or cosign; document the deprecation in the signing policy and put a target migration date on the workspace record.

Most enterprises end up running either cosign or notation as the primary, with one vendor-native flow for a specific provider context (a managed services line or a customer-facing cloud product). Running both is acceptable when the artefact classes are distinct (cosign for OSS-style releases, notation for detached corporate-PKI releases). Running both for the same artefact class is a smell; document the policy decision in writing rather than letting two tools drift independently.

Keyed vs Keyless Signing

Both Sigstore and notation support two signing modes. Picking the right mode is the second operating decision and the one that drives the rotation and incident-response posture for the rest of the programme.

Keyed signing

A long-lived signing key (RSA, ECDSA, or Ed25519) signs every release. The private key is held inside a managed KMS or HSM; the public component is published in the signing policy. The verifier checks the signature against the published public key fingerprint. Rotation is an operational event: generate a new key, publish the new fingerprint, sign with both during a defined overlap window, then retire the old fingerprint. Compromise of the private key requires emergency rotation and revocation of every artefact signed under the compromised key.

Keyless signing

A short-lived signing certificate (typically 10 minutes) is issued by fulcio from a verified OIDC identity (a GitHub Actions workflow, a GitLab pipeline job, a workload identity in a cloud provider, a SPIFFE SVID). The certificate signs the image and is immediately discarded; the signature plus the rekor log entry are what the verifier trusts. Rotation is implicit: every signature has its own short-lived certificate. Compromise scope is limited to the OIDC issuer plus the build identity subject claim, not a static key.

The trade-off is well-understood. Keyed signing gives you cryptographic identity independent of any external identity provider; you own the root and the rotation schedule. Keyless signing removes the long-lived key from the threat model entirely but requires the verifier to trust the OIDC issuer (Sigstore public fulcio, or a private fulcio instance) and the transparency log. Most internal enterprise programmes settle on a hybrid: keyless for routine release signing tied to the build platform identity, KMS-backed keyed signing for offline release flows, emergency manual signing, and the air-gapped deployments where a transparency log is not reachable.

Whichever mode the programme picks, the signing policy must name it explicitly, name the rotation procedure for the keyed case, name the OIDC issuer trust list for the keyless case, and name the verifier-side policy that reads against signer identity. The decision belongs in the workspace policy document so any auditor can read what the programme commits to.

Transparency Logs and Why They Matter

Rekor is the Sigstore transparency log: a tamper-evident, append-only Merkle tree that records every signature event. The cosign CLI publishes the signature, the associated signer certificate, and a timestamp to rekor as a normal step in the sign command. Anyone, including downstream consumers, regulators, and the producer themselves, can later query rekor to verify that a specific signature was issued at a specific time under a specific identity.

Transparency logs solve a problem that signatures alone cannot: detection of backdated or repudiated signing events. A long-lived private key compromised today could in principle sign an artefact and backdate it to yesterday. A keyless signing certificate could in principle be issued for a build identity that was never actually run. The rekor log, by recording every signature event with an immutable timestamp and a witnessed Merkle proof, makes both of those scenarios detectable after the fact. The producer can audit their own log entries; the regulator can audit the log; the customer can audit the log.

The trade-off is the public-log dependency. A public rekor instance means every signature event is publicly visible. For most open-source releases that is the desired property. For some enterprise contexts (closed-source product releases, restricted customer flows, classified deployments) the public visibility is a non-starter. The mitigations are well-trodden: run a private rekor instance with controlled access, run rekor in a witnessed configuration where multiple parties co-sign the log root, or step down to notation where the trust model does not depend on a transparency log at all.

The operating point: if the programme adopts Sigstore, treat rekor as a load-bearing dependency. Monitor rekor availability, capture the rekor log entry alongside the signature in the workspace record, and document the policy for the closed-source case explicitly rather than letting individual teams skip the log silently.

Root of Trust: KMS, HSM, and the Sigstore TUF Root

Every signing programme has one or more roots of trust. They are the highest authority a verifier consults when deciding whether a signature is valid. Anyone who can replace or forge the root can sign anything. The root is the load-bearing artefact in the entire programme and deserves top-tier access control, hardware backing, and a published rotation procedure.

  • Sigstore TUF root. The Sigstore project maintains a TUF (The Update Framework) root that distributes the fulcio CA public key, the rekor log public key, and the certificate transparency log roots. Verifiers download the TUF root and refresh it on a defined cadence. If the programme runs against the public Sigstore root, monitor TUF root rotation events; if it runs against a private Sigstore instance, the operator must run their own TUF root and a documented key ceremony.
  • KMS-backed signing key. Cloud-managed KMS (AWS KMS, GCP Cloud KMS, Azure Key Vault) holds the private signing key with hardware-backed protection (FIPS 140-2 Level 3 or higher in most regulated regimes). The KMS becomes the root: anyone with the ability to call Sign on the KMS key can sign the image. Lock down IAM, require MFA on key operations, enable KMS-side audit logging, and rotate the key on a defined schedule.
  • On-premises HSM. PKCS#11-compatible HSMs (Thales Luna, Entrust nShield, Utimaco SecurityServer, YubiHSM 2 for smaller programmes) hold the private signing key with physical security guarantees and a documented key ceremony. Right choice for regulated regimes that require on-premises hardware control or that have an existing PKI hosted on HSMs.
  • Notation trust store. The notation CLI verifies against a configured trust store listing the trusted signing CA certificates. The trust store is the root for the notation flow; distribute it through a controlled channel, sign updates to it, and capture every change in the workspace record.

Document the root of trust in the signing policy. Treat root-of-trust ceremonies (initial generation, scheduled rotation, emergency rotation, decommission) as high-severity engagement records: named witnesses, named cryptographic officer, documented procedure, evidence-of-completion stored alongside the cryptographic artefacts.

The Producer Surface: Signing at Build Time

On the producer side, signing is a CI/CD step that runs after the image is built and pushed but before the image is published as released. The shape is consistent across tools:

  1. The build platform produces the image and pushes it to the registry under a build-specific tag (typically a digest reference, not a floating tag).
  2. The build platform invokes the signing CLI (cosign sign, notation sign, or the vendor equivalent) with the image digest and the signing identity (an OIDC token for keyless, a KMS key reference for keyed, an HSM-backed key for on-premises).
  3. The signing CLI produces the signature artefact and pushes it to the registry as an OCI 1.1 referrer of the image. For Sigstore, the rekor log entry is also published.
  4. Optionally, the build platform produces additional attestations (SLSA provenance, an SBOM in SPDX or CycloneDX, a VEX statement, scan results from Trivy or Grype) and attaches them to the image as additional signed referrers.
  5. The build platform moves the floating tags (latest, edge, release-candidate, prod) only after the signature is verified by an automated post-sign verification step in CI. This catches misconfiguration before the artefact reaches a customer or a cluster.
  6. The build event lands in the activity log with the build identity, the artefact digest, the signature reference, the rekor log entry (or notation signature), and the named owner of the release.

The producer-side path must produce evidence. The signing event itself is the evidence; capture it as part of the engagement record so AppSec, GRC, and product security can read the same release history when the customer or the auditor asks. The CISA Secure Software Development Attestation explicitly expects this evidence trail under the SSDF PS.2 mapping.

The Consumer Surface: Admission-Time Verification

The verification surface is where most programmes fail. Producing signatures is mechanical; verifying them at the right point with the right policy is the operating discipline that turns signing into a control rather than a label. The dominant verification surface is admission control inside Kubernetes; equivalent surfaces exist for non-Kubernetes deployments (Nomad with image-policy plugins, AWS Lambda with Signer-enforced verification, Azure Container Apps with built-in verification).

Sigstore policy controller

Kubernetes admission controller maintained by the Sigstore project. ClusterImagePolicy resources declare which signer identities (OIDC issuer plus subject claim, or a public key) are allowed for which image globs. The controller verifies the signature against the policy at admission and either admits the pod or rejects it with a documented event. Dominant choice for Sigstore-anchored signing flows.

Kyverno verifyImages

ClusterPolicy with verifyImages rules that match images against allowed cosign or notation signer identities. Kyverno is broader than image verification and is already in many enterprise stacks for general admission policy; verifyImages extends the same model to signing verification. Right choice when the cluster is already on Kyverno for other policies.

Connaisseur and OPA Gatekeeper

Connaisseur is a focused image-verification admission controller from the SDA Group with support for cosign and notation. OPA Gatekeeper supports image verification through constraint templates that call out to verify libraries. Suitable when the cluster is already on Gatekeeper or when a focused single-purpose admission controller is preferred.

Cloud provider native

Google Cloud Binary Authorization, AWS Signer with EKS verification, Azure Container Registry quarantine and trust policies. Right choice when the cluster is fully inside one cloud provider and the security team accepts the provider-side trust dependency. Verify that the provider implementation supports the producer signing tool and signer identity policy the programme uses.

The admission policy is the load-bearing artefact on the consumer side. Treat it like the WAF rule set or the IAM policy: version-controlled, peer-reviewed, tested in non-production before production, and observable in the activity log when a denial event happens. An admission policy that fails open (admits unsigned images on verification error) is not a control; it is a label.

Cluster-scope policies belong in the workspace record. Each policy change is an engagement with a named owner, a target close date, and an evidence-of-closure requirement. The same review cadence applies that the breach and attack simulation guide names for control validation: rehearse the admission policy regularly with a test unsigned image and capture the denial event as evidence.

Image Signing Inside the SLSA Build Levels

SLSA Build Level 2 expects the build platform to produce a signed provenance attestation describing how the artefact was built: source identity, build steps, materials consumed, builder identity. Build Level 3 hardens that further: the provenance is non-falsifiable, the build runs in an isolated environment, and the provenance is signed by the build platform itself rather than by a developer.

Container image signing is how SLSA provenance reaches the consumer. The cosign CLI (and the notation equivalent) attaches the in-toto attestation describing the build provenance to the image as a separately signed referrer. The verifier reads the signature, then reads the attestation, then makes a policy decision: was this image built by the expected build platform, from the expected source, under the expected workflow? The SLSA framework defines what the provenance must contain; image signing defines how it is delivered and verified.

For a programme that targets SLSA Build L2 or L3, the operating picture is consistent: the build platform produces both the image and the provenance attestation, the build platform signs both with the keyless or KMS-backed identity, the verifier reads both at admission, and the policy reads against the provenance fields (builder identity, source repo, source commit, workflow path). The signing programme and the SLSA programme are not two programmes; they are one programme with two evidence artefacts attached to the same release identity.

Key Rotation and Incident Response

Key rotation is the operational discipline that separates a real signing programme from a paper one. Three rotation scenarios must each have a written procedure.

  • Scheduled rotation. Define a calendar cadence (typically annual for KMS-backed keys, shorter for keys on critical paths) and rotate on schedule. The rotation procedure names the new key generation step, the signing-policy update, the verifier-side policy update (publish the new public key, keep the old key trusted for a defined overlap window), and the retirement step (remove the old key from the verifier-side trust list once no signed artefact under the old key remains in production).
  • Emergency rotation. Triggered by suspected or confirmed key compromise. The procedure names the immediate revocation step (remove the compromised key from the verifier-side trust list, even if downtime results), the customer and regulator notification path, the re-signing step for affected artefacts under a new key, and the post-incident review that lands in the workspace as a high-severity engagement with a named owner and a target close date. NIS2 Article 23 and DORA Article 19 name the regulator notification timelines that an emergency rotation triggers.
  • OIDC-trust rotation for keyless. When the OIDC issuer the keyless signing flow trusts changes (a new fulcio CA, a new GitHub Actions OIDC issuer, a new private fulcio instance), the verifier-side trust list must update. The cadence is dictated by the issuer; capture the issuer rotation calendar in the workspace and reconcile the verifier-side policy on every change.

Each rotation is a documented event. The activity log captures who initiated the rotation, who approved it, when the new identity went live, and when the old identity retired. The signing policy document is amended in document-management with named custodian and version history. The compliance grid reads the rotation log against ISO 27001 Annex A 8.24 (use of cryptography), SOC 2 CC6.1 (logical and physical access controls), PCI DSS 3.7 (cryptographic key management), and NIST SP 800-53 SC-12 (key establishment and management).

Audit Evidence the Programme Carries

Every regulator, customer security questionnaire, and internal audit cycle reads against roughly the same set of signing evidence. Build the evidence pack once and re-use it across audits.

  • Signing policy document with named custodian, version history, current root of trust, current signer identities, allowed verification surfaces, rotation cadence, emergency rotation procedure, exception process, and named amendment triggers.
  • Producer-side signing event log: per release, the artefact digest, the signer identity, the rekor log entry (for Sigstore) or detached signature reference (for notation), the named release owner, the named approver, and the build identity (workflow path plus commit SHA).
  • Consumer-side admission policy with named owner, current allowed signer identities, denial-event sample, and policy-change history.
  • Verification rehearsal record: scheduled exercises where a deliberately unsigned or maliciously-signed test image is presented to the admission surface and the denial event is captured as evidence. The same pattern the BAS guide describes for control validation more broadly.
  • Key ceremony records for KMS-backed and HSM-backed signing keys: named participants, date, witnessed steps, key material destination, key material retirement procedure.
  • Exception register entries for any release that bypassed signing or any cluster that runs with verification disabled, with a named owner, a target remediation date, and a documented compensating control.
  • Cross-framework compliance grid mapping the signing evidence against SSDF PS.2 and PW.6, NIST SP 800-204D Sections 4 and 5, NIST SP 800-190 Section 4, NIST CSF 2.0 PR.DS-06 and PR.PS-01, ISO 27001 Annex A 8.24 and A 8.28, SOC 2 CC6.1 and CC7.1, PCI DSS Req 6.5 and 6.6, EU CRA Annex I, NIS2 Article 21(2)(e) and (h), and DORA Article 28.

The evidence pack is the artefact the auditor reads, the customer reads, and the board risk committee reads. Keep it in one record. SecPortal's document-management, engagement-management, activity-log, and compliance-tracking together hold this evidence shape; the signing operations themselves stay in the build platform and the registry.

Common Image Signing Failure Modes

Seven failure modes recur across signing programmes. Each is a signal to read the operating record against the policy commitments rather than a tooling problem to solve with a different CLI.

Sign-but-never-verify

The build pipeline produces signatures correctly; no cluster, deployment system, or customer flow verifies them. Detect by reading the admission policy: if no ClusterImagePolicy, Kyverno verifyImages, or equivalent rule exists in production, signing is a label, not a control. Remediation: define a target verification surface, instrument it, and rehearse it.

Fail-open verification

Admission controller is installed but configured to fail open: any verification error (registry timeout, transparency log unreachable, policy parse error) admits the unsigned image. Detect by reading the controller's failurePolicy and webhookFailurePolicy. Remediation: set failurePolicy to Fail, plan capacity for the registry and transparency log dependencies, and treat unreachability as a deny event with an explicit override path.

Hard-coded static key

One long-lived RSA key signs every release with no rotation procedure documented. Detect by asking when the key was generated and when it will next rotate. If the answers are not in the signing policy, the key is hard-coded. Remediation: define a rotation cadence, store the key in a KMS or HSM, and rehearse a scheduled rotation before the first compromise event forces an emergency one.

Unsigned multi-arch indexes

Per-arch image manifests (amd64, arm64) are signed; the multi-arch index that points to them is not. Verifiers that resolve the index pick an unsigned entry. Detect by reading cosign verify against the index reference. Remediation: sign the index alongside the per-arch manifests; cosign and notation both support this in current versions.

Mismatched signer identity policies

Production accepts any signature from the corporate fulcio; non-production accepts anything; the disaster recovery cluster accepts a different identity entirely. Detect by diffing the admission policies across clusters. Remediation: define cluster-class signer identity policies (production, staging, dev) and enforce them through the same policy repo across clusters.

Skip-for-hotfix culture

Emergency releases skip signing under time pressure. After three skips, the policy effectively does not exist. Detect by counting exception register entries for skipped signing in a rolling window. Remediation: define an emergency-sign procedure that the same time pressure can still hit (a manual sign-with-witness step against the KMS key with named cryptographic officer and a 4-hour SLA), and treat the exception register entry as the breaker rather than the bypass.

Stale TUF root or trust store

The TUF root or notation trust store has not refreshed in months. New fulcio CAs or new notation signing CAs are not trusted. Verifications start failing or, worse, continue to trust retired identities. Detect by reading the last TUF root refresh timestamp in the verifier. Remediation: automate TUF root refresh and notation trust store updates on a defined cadence; alert on staleness.

Each failure mode is a finding in the workspace record. Open it against the named release owner, name the compensating control, set a target close date, and let the retesting workflow verify the fix.

A Pragmatic Image Signing Rollout

A typical enterprise rollout runs over six to twelve months across five phases. Each phase produces evidence that can be read against the regulator-side expectations and against the internal operating record.

  1. Phase 1: Scope and policy. Name the artefact classes in scope (production container images first, internal-only images and CI tooling later, Helm charts and other OCI artefacts last). Pick the signing tool (cosign, notation, or a vendor flow) and the signing mode (keyless, keyed, or hybrid). Define the signer identities and the root of trust. Land the signing policy document in document-management and capture the decision in the activity log.
  2. Phase 2: Producer-side signing. Wire the signing step into the build platform for every in-scope artefact class. Verify the signature in CI after every sign step. Land each signing event in the activity log. Target output: every production image published in the rolling window carries a signature with a named build identity.
  3. Phase 3: Verifier-side admission policy in non-production. Install the admission controller (Sigstore policy controller, Kyverno, or equivalent) in non-production clusters with a deny-on-failure policy. Rehearse against deliberately unsigned and maliciously signed test images. Capture rehearsal records as evidence.
  4. Phase 4: Verifier-side admission policy in production. Promote the admission controller to production behind a feature flag that initially warns rather than denies, monitor admission events for one to two weeks, then switch to deny mode. Capture the cutover event in the activity log with named owners. The cutover is the point where image signing becomes a control rather than a label.
  5. Phase 5: Hardening and evidence pack. Add SLSA provenance attestation, SBOM attestation, and VEX attestation on the same signature. Build the cross-framework compliance grid. Wire the signing programme into the quarterly programme review (the security program quarterly review template names the cadence). Rehearse a scheduled key rotation and an emergency key rotation. Capture both as engagement records.

The phasing is deliberate. Producer-side signing without verifier-side admission is a label. Verifier-side admission without producer-side discipline is denial events with no signal. The five phases together produce a control that the regulator, the customer, and the board can read.

Where the Signing Programme Sits Alongside SecPortal

SecPortal does not sign container images, run a signing service, distribute a trust root, operate an admission controller, host a transparency log, ingest production cluster telemetry, or replace the build platform that owns the signing artefacts. Image signing happens on the build platform, the signing CLI, the registry, the transparency log, the KMS or HSM, and the admission controller. The cryptographic chain belongs there, not in a workspace tool.

SecPortal holds the operating record around the signing programme so AppSec, product security, platform engineering, GRC, and CISOs can read the same workspace record when the auditor or the customer asks. Code-scanning runs Semgrep against the connected GitHub, GitLab, and Bitbucket repositories where the signing CLI is invoked from, so configuration drift in the signing step shows up as a finding against the same record the policy document lives in. Bulk-finding-import ingests Trivy, Grype, Snyk Container, or any other container-scan output through CSV alongside the signature evidence so the integrity layer and the vulnerability layer sit on the same engagement record.

Document-management stores the signing policy with named custodian, version history, and the immutable amendment record. Activity-log captures every policy review and approval with named actor, timestamp, and CSV export by 30, 90, or 365-day retention depending on plan. Team-management gates read and amend access through RBAC (owner, admin, member, viewer) so the policy custodian and the release owners have the authorities the signing programme requires. Multi-factor authentication is enforced via TOTP on the workspace itself so the sign-off events are not phishable. Compliance tracking maps the signing evidence pack against SSDF PS.2 and PW.6, NIST SP 800-204D, NIST SP 800-190, ISO 27001 Annex A 8.24 and 8.28, SOC 2 CC6.1 and CC7.1, PCI DSS Req 6.5 and 6.6, EU CRA Annex I, NIS2 Article 21(2)(e) and (h), and DORA Article 28 with CSV export.

Engagement-management ties third-party signing audits (vendor signing assessment, key ceremony witnessing, regulator audit) to the same workspace where the policy lives. Retesting-workflows verify that an exception is closed by re-running the admission-time check against the previously-failing image. Finding-overrides record compensating controls for exception cases (a closed-source artefact that cannot publish to a public transparency log, a legacy artefact under Notary v1 awaiting migration) with the eight-field decision chain that names the operator, the justification, the compensating control, the target remediation date, and the renewal cadence. AI reports drafts a leadership summary and an audit-ready evidence pack from the same record so the CISO read, the auditor read, and the customer read all share one source.

None of these features sign anything, verify anything cryptographically, or replace the build platform. They are the workspace that the signing programme reads against so AppSec, product security, platform engineering, GRC, and CISOs do not each run a parallel record that drifts apart. Reading the same workspace is how a signing programme stays a programme rather than a tool deployment.

Wider Reading

Container image signing sits inside a wider supply-chain operating model. The following pages cover the adjacent layers from different angles.

Frequently Asked Questions

What is container image signing?

A cryptographic signature attached to an OCI image (or any OCI-compatible artefact) that proves which build identity produced it and that the content has not been altered after the build. The signature lives either as a separate OCI artefact alongside the image in the registry (modern OCI 1.1 referrers pattern used by Sigstore cosign and Notary v2 / notation) or in a separate signing service (legacy Docker Content Trust / Notary v1). Verifiers check the signature against an allowed signer policy before admitting the artefact.

What is the difference between Sigstore cosign and Notary v2?

Sigstore cosign is an OpenSSF-governed toolchain (cosign CLI, fulcio CA, rekor transparency log) defaulting to keyless signing tied to an OIDC identity with a public transparency log. Notary v2 / notation (CNCF) produces detached OCI signatures under a configurable corporate PKI with a trust store rather than a transparency log. Cosign is dominant for Sigstore-backed flows and SLSA L3 provenance; notation is dominant for enterprises with mature internal PKI.

What is keyless signing?

A short-lived signing certificate (typically 10 minutes) is issued from a verified OIDC identity (a GitHub Actions workflow, a GitLab pipeline job, a workload identity). The certificate signs the image and is discarded; the signature plus the transparency log entry are what the verifier trusts. The advantage is no long-lived signing key in the threat model; the trade-off is verifier-side trust in the OIDC issuer and the transparency log.

How do admission controllers verify signed images?

A Kubernetes admission controller (Sigstore policy controller, Kyverno verifyImages, OPA Gatekeeper, Connaisseur) intercepts image pulls at deploy time, fetches the signature from the registry, validates it against an allowed signer policy, and either admits or denies the pod. Admission failures must produce an explicit denial event the platform team can read. Equivalent surfaces exist for AWS Lambda, Azure Container Apps, and other non-Kubernetes runtimes.

Where does image signing fit inside SLSA?

SLSA Build L2 expects a signed provenance attestation; Build L3 hardens it with non-falsifiable provenance signed by the build platform itself. Image signing is how that provenance reaches the consumer: cosign or notation attaches the in-toto attestation as a separately-signed OCI referrer of the image, the verifier reads both the signature and the attestation at admission, and the policy reads against the provenance fields.

What is the root of trust for image signing?

The highest authority a verifier consults. For Sigstore keyless, the Sigstore TUF root distributing the fulcio and rekor public keys. For cosign keyed, the published long-lived public key or KMS-backed key fingerprint. For notation, the operator-defined trust store of signing CA certificates. The root is the load-bearing artefact; treat it as a top-tier asset with strict access control, hardware backing, and a published rotation procedure.

How does signing relate to SBOM and VEX?

Independent artefacts under the same signature. The SBOM enumerates components in the image (SPDX or CycloneDX). The VEX statement classifies whether each CVE is exploitable. The signature proves which build identity produced the image and that the content has not been altered. Cosign and notation both support attaching SBOM and VEX as separately-signed attestations on the same image: the verifier reads the signature first, then trusts the attached attestations because they ride under the same signature.

What does EO 14028 require about image signing?

EO 14028 and OMB M-22-18 / M-23-16 require federal software producers to publish a self-attestation aligned with NIST SP 800-218 (SSDF). SSDF PS.2 (verify release integrity) and PW.6 (configure build processes to improve security) read directly against signed releases. NIST SP 800-204D names signing as a load-bearing CI/CD control. The CISA Secure by Design pledge names signed releases as a transparency commitment.

How does image signing fit under the EU CRA and NIS2?

The Cyber Resilience Act Annex I expects manufacturers of products with digital elements to apply integrity controls and to track and fix vulnerabilities across the support period. Signed container images give the manufacturer a verifiable identity per release. NIS2 Article 21(2) names supply-chain security as a required cybersecurity risk-management measure for essential and important entities. DORA Article 28 names ICT third-party risk-management requirements that signed releases support. None of the three mandates a specific signing tool but they expect a documented integrity control with audit evidence.

What are the most common image signing failure modes?

Sign-but-never-verify; fail-open verification; hard-coded static keys with no rotation; unsigned multi-arch indexes; mismatched signer-identity policies across clusters; skip-for-hotfix culture; stale TUF roots or notation trust stores; forgetting to sign base images; verifying only in non-production; treating the transparency log as optional. Treat the verification path as the load-bearing one, not the signing path.

How does SecPortal support a container image signing programme?

SecPortal does not sign images, run a signing service, distribute trust roots, or operate an admission controller. It holds the operating record: signing policy in document-management with named custodian and version history; sign-off chain in activity-log; access gated by team-management RBAC and protected by MFA; compliance-tracking maps the evidence against SSDF, NIST SP 800-204D, NIST SP 800-190, ISO 27001, SOC 2, PCI DSS, EU CRA, NIS2, and DORA; engagement-management for third-party signing audits; retesting-workflows for exception verification; AI reports for leadership summaries from the same record.

Should we run cosign keyless or KMS-backed signing in production?

Both are valid; the right answer depends on the build platform, the regulatory regime, and the operational capacity. Keyless signing tied to an OIDC build identity is simpler to operate, pairs naturally with SLSA Build L3, and produces a public transparency log entry. KMS-backed signing uses a long-lived hardware-backed key; this is the dominant choice for enterprises with detached signatures under a corporate PKI or air-gapped deployments. A hybrid is common: keyless for routine release signing, KMS-backed for emergency manual signing and offline flows. Document the choice in the signing policy.

Run the signing operating record on SecPortal

Hold the signing policy, the producer-side signing event log, the verifier-side admission policy, the rotation evidence, and the cross-framework compliance grid in one workspace AppSec, product security, platform engineering, GRC, and CISOs all read against. Free plan available, no credit card required.