You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implement a Container Image Signing & Verification Plugin using Sigstore/Cosign to cryptographically verify container image provenance and integrity before MCP servers are deployed to the gateway.
Why Now?
Supply Chain Security: Unsigned images can be tampered with in transit or at rest
Provenance Verification: Need to verify images come from trusted sources
Compliance Requirements: FedRAMP, SLSA, and SOC2 increasingly require signed artifacts
Industry Standard: Sigstore/Cosign is the CNCF-graduated standard for container signing
Zero-Trust Architecture: "Never trust, always verify" applies to container images
As a Security Administrator I want to require cryptographically signed container images So that only verified images from trusted sources are deployed
Acceptance Criteria:
Given image signing policy is enabled:
signing_policy:
require_signature: true
trusted_keys:
- keyless: true
issuer: "https://accounts.google.com"
subject: "build@example.com"When an unsigned image is submitted:
Then deployment is blocked with:
"Image ghcr.io/org/server:v1 is not signed. Signature required."When a properly signed image is submitted:
Then signature is verified against trusted keys
And deployment proceeds if valid
US-2: DevOps Engineer - Verify SLSA Provenance
As a DevOps Engineer I want SLSA provenance attestations verified So that I can trust the build process that created the image
Acceptance Criteria:
Given SLSA verification is enabled:
When an image with SLSA attestation is submitted:
Then the plugin should:
- Fetch attestation from registry
- Verify attestation signature
- Check SLSA level (L1, L2, L3)
- Verify builder identity
- Verify source repository
And if SLSA level >= required level:
deployment proceeds
Else:
deployment blocked with SLSA level mismatch
US-3: Platform Admin - Manage Trusted Keys
As a Platform Administrator I want to manage trusted signing keys and identities So that I can control which signers are trusted
Acceptance Criteria:
Given I access /admin/security/signing:
When I manage trusted signers:
Then I can:
- Add keyless identities (OIDC issuer + subject)
- Add public keys (PEM format)
- Add key references (KMS, Vault)
- Set expiration dates
- Enable/disable signers
And changes take effect immediately
🏗 Architecture
Verification Flow
sequenceDiagram
participant Assess as Assessment Service
participant Plugin as Signing Plugin
participant Cosign as Cosign CLI
participant Registry as Container Registry
participant Rekor as Rekor Transparency Log
Assess->>Plugin: Verify image signature
Plugin->>Registry: Fetch image manifest
Registry-->>Plugin: Manifest + digest
Plugin->>Cosign: cosign verify <image>
Cosign->>Registry: Fetch signature
Cosign->>Rekor: Verify transparency log entry
Rekor-->>Cosign: Log entry valid
Cosign->>Cosign: Verify signature against trusted keys
Cosign-->>Plugin: Verification result
alt Signature Valid
Plugin->>Plugin: Check SLSA attestation (optional)
Plugin-->>Assess: Verified (signer, timestamp, SLSA level)
else Signature Invalid/Missing
Plugin-->>Assess: Verification failed (reason)
end
🔏 Plugin: Container Image Signing & Verification - Sigstore/Cosign Integration
Goal
Implement a Container Image Signing & Verification Plugin using Sigstore/Cosign to cryptographically verify container image provenance and integrity before MCP servers are deployed to the gateway.
Why Now?
📖 User Stories
US-1: Security Admin - Require Signed Images
As a Security Administrator
I want to require cryptographically signed container images
So that only verified images from trusted sources are deployed
Acceptance Criteria:
US-2: DevOps Engineer - Verify SLSA Provenance
As a DevOps Engineer
I want SLSA provenance attestations verified
So that I can trust the build process that created the image
Acceptance Criteria:
US-3: Platform Admin - Manage Trusted Keys
As a Platform Administrator
I want to manage trusted signing keys and identities
So that I can control which signers are trusted
Acceptance Criteria:
🏗 Architecture
Verification Flow
sequenceDiagram participant Assess as Assessment Service participant Plugin as Signing Plugin participant Cosign as Cosign CLI participant Registry as Container Registry participant Rekor as Rekor Transparency Log Assess->>Plugin: Verify image signature Plugin->>Registry: Fetch image manifest Registry-->>Plugin: Manifest + digest Plugin->>Cosign: cosign verify <image> Cosign->>Registry: Fetch signature Cosign->>Rekor: Verify transparency log entry Rekor-->>Cosign: Log entry valid Cosign->>Cosign: Verify signature against trusted keys Cosign-->>Plugin: Verification result alt Signature Valid Plugin->>Plugin: Check SLSA attestation (optional) Plugin-->>Assess: Verified (signer, timestamp, SLSA level) else Signature Invalid/Missing Plugin-->>Assess: Verification failed (reason) endSigning Policy Schema
Database Schema
📋 Implementation Tasks
Cosign Integration
SLSA Attestation
Trusted Signer Management
Plugin Implementation
plugins/image_signing/Admin UI
Testing
⚙️ Configuration Example
✅ Success Criteria
🔗 Related Issues
📚 References