Argo CD releases are cryptographically signed using Sigstore cosign with identity-based (keyless) signing. This ensures that releases are authentic and have not been tampered with.
Prerequisites
Install the required verification tools:
# Install via Homebrew
brew install cosign slsa-verifier crane
# Install cosign
wget 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
# Install slsa-verifier
wget https://github.com/slsa-framework/slsa-verifier/releases/latest/download/slsa-verifier-linux-amd64
sudo mv slsa-verifier-linux-amd64 /usr/local/bin/slsa-verifier
sudo chmod +x /usr/local/bin/slsa-verifier
# Install crane
wget https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz
tar -xzf go-containerregistry_Linux_x86_64.tar.gz
sudo mv crane /usr/local/bin/
# Install via Chocolatey
choco install cosign
# slsa-verifier: Download from GitHub releases
# https://github.com/slsa-framework/slsa-verifier/releases
# crane: Download from GitHub releases
# https://github.com/google/go-containerregistry/releases
Minimum versions: cosign v2.0.0+, slsa-verifier v2.0.0+
Release Assets
Each Argo CD release includes the following assets:
Asset Description argocd-darwin-amd64CLI Binary for macOS (Intel) argocd-darwin-arm64CLI Binary for macOS (Apple Silicon) argocd-linux-amd64CLI Binary for Linux (x86_64) argocd-linux-arm64CLI Binary for Linux (ARM64) argocd-linux-ppc64leCLI Binary for Linux (PowerPC) argocd-linux-s390xCLI Binary for Linux (IBM Z) argocd-windows-amd64.exeCLI Binary for Windows argocd-cli.intoto.jsonlSLSA attestation of CLI binaries argocd-sbom.intoto.jsonlSLSA attestation of SBOM cli_checksums.txtSHA256 checksums of binaries sbom.tar.gzSoftware Bill of Materials sbom.tar.gz.pemCertificate used to sign SBOM sbom.tar.gz.sigSignature of SBOM
Container Image Verification
Verify that a container image was built by the official Argo CD GitHub Actions workflow.
Using cosign
Verify Latest
Verify Specific Version
cosign verify \
--certificate-identity-regexp https://github.com/argoproj/argo-cd/.github/workflows/image-reuse.yaml@refs/tags/v \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-github-workflow-repository "argoproj/argo-cd" \
quay.io/argoproj/argocd:latest | jq
{
"critical" : {
"identity" : {
"docker-reference" : "quay.io/argoproj/argo-cd"
},
"image" : {
"docker-manifest-digest" : "sha256:63dc60481b1b2abf271e1f2b866be8a92962b0e53aaa728902caa8ac8d235277"
},
"type" : "cosign container image signature"
},
"optional" : {
"1.3.6.1.4.1.57264.1.1" : "https://token.actions.githubusercontent.com" ,
"1.3.6.1.4.1.57264.1.4" : "Publish ArgoCD Release" ,
"1.3.6.1.4.1.57264.1.5" : "argoproj/argo-cd" ,
"1.3.6.1.4.1.57264.1.6" : "refs/tags/v2.11.3"
}
}
The command performs these checks:
✅ Cosign claims validated
✅ Existence in transparency log verified offline
✅ Certificates verified against Fulcio roots
Using slsa-verifier
Verify with SLSA Level 3 provenance attestation:
Full Version Verification
Semantic Version Verification
Print Provenance
# Get immutable image digest to prevent TOCTOU attacks
IMAGE = quay.io/argoproj/argocd:v2.11.3
IMAGE = "${ IMAGE }@$( crane digest "${ IMAGE }")"
# Verify provenance
slsa-verifier verify-image " $IMAGE " \
--source-uri github.com/argoproj/argo-cd \
--source-tag v2.11.3
Always use the immutable digest (SHA256) to prevent TOCTOU attacks where the tag could be updated between verification and deployment.
CLI Binary Verification
Each release includes a single attestation file (argocd-cli.intoto.jsonl) that can verify all CLI binaries.
Download and Verify
Download Binary and Attestation
VERSION = v2.11.3
PLATFORM = linux-amd64 # or darwin-amd64, windows-amd64, etc.
# Download CLI binary
curl -LO https://github.com/argoproj/argo-cd/releases/download/ ${ VERSION } /argocd- ${ PLATFORM }
# Download attestation
curl -LO https://github.com/argoproj/argo-cd/releases/download/ ${ VERSION } /argocd-cli.intoto.jsonl
Verify Binary
slsa-verifier verify-artifact argocd- ${ PLATFORM } \
--provenance-path argocd-cli.intoto.jsonl \
--source-uri github.com/argoproj/argo-cd \
--source-tag ${ VERSION }
Verified signature against tlog entry index 1234567890 at URL: https://rekor.sigstore.dev/api/v1/log/entries/...
Verified build using builder https://github.com/slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@refs/tags/v1.9.0 at commit abc123...
PASSED: Verified SLSA provenance
Install Binary
chmod +x argocd- ${ PLATFORM }
sudo mv argocd- ${ PLATFORM } /usr/local/bin/argocd
argocd version
Semantic Version Verification
Verify against major or minor version instead of full version:
# Verify against minor version (v2.11.x)
slsa-verifier verify-artifact argocd-linux-amd64 \
--provenance-path argocd-cli.intoto.jsonl \
--source-uri github.com/argoproj/argo-cd \
--source-versioned-tag v2.11
# Verify against major version (v2.x.x)
slsa-verifier verify-artifact argocd-linux-amd64 \
--provenance-path argocd-cli.intoto.jsonl \
--source-uri github.com/argoproj/argo-cd \
--source-versioned-tag v2
Print Provenance Details
View Full Provenance
Sample Provenance
slsa-verifier verify-artifact argocd-linux-amd64 \
--provenance-path argocd-cli.intoto.jsonl \
--source-uri github.com/argoproj/argo-cd \
--source-tag v2.11.3 \
--print-provenance | jq
SBOM Verification
Argo CD provides a Software Bill of Materials (SBOM) for supply chain security and vulnerability scanning.
Verify SBOM with SLSA
Download SBOM and Attestation
VERSION = v2.11.3
curl -LO https://github.com/argoproj/argo-cd/releases/download/ ${ VERSION } /sbom.tar.gz
curl -LO https://github.com/argoproj/argo-cd/releases/download/ ${ VERSION } /argocd-sbom.intoto.jsonl
Verify Attestation
slsa-verifier verify-artifact sbom.tar.gz \
--provenance-path argocd-sbom.intoto.jsonl \
--source-uri github.com/argoproj/argo-cd \
--source-tag ${ VERSION }
Extract and Inspect
tar -xzf sbom.tar.gz
cat sbom.json | jq '.components[] | select(.name | contains("golang"))'
Verify SBOM Signature (Alternative)
Verify using the signature and certificate files:
cosign verify-blob sbom.tar.gz \
--signature sbom.tar.gz.sig \
--certificate sbom.tar.gz.pem \
--certificate-identity-regexp https://github.com/argoproj/argo-cd \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
Verification in Kubernetes
Admission Controllers
Enforce image signature verification with Kyverno: apiVersion : kyverno.io/v1
kind : ClusterPolicy
metadata :
name : verify-argocd-images
spec :
validationFailureAction : Enforce
background : false
rules :
- name : verify-signature
match :
any :
- resources :
kinds :
- Pod
namespaces :
- argocd
verifyImages :
- imageReferences :
- "quay.io/argoproj/argocd*"
attestors :
- entries :
- keyless :
subject : "https://github.com/argoproj/argo-cd/.github/workflows/image-reuse.yaml@*"
issuer : "https://token.actions.githubusercontent.com"
rekor :
url : https://rekor.sigstore.dev
Deploy the Sigstore policy controller: kubectl apply -f https://github.com/sigstore/policy-controller/releases/latest/download/release.yaml
Create a ClusterImagePolicy: apiVersion : policy.sigstore.dev/v1beta1
kind : ClusterImagePolicy
metadata :
name : argocd-image-policy
spec :
images :
- glob : "quay.io/argoproj/argocd**"
authorities :
- keyless :
url : https://fulcio.sigstore.dev
identities :
- issuer : https://token.actions.githubusercontent.com
subjectRegExp : "https://github.com/argoproj/argo-cd/.*"
Configure Connaisseur for Argo CD: apiVersion : v1
kind : ConfigMap
metadata :
name : connaisseur-config
namespace : connaisseur
data :
policy : |
validators:
- name: argocd-validator
type: cosign
trust_root:
keyless:
certificate_oidc_issuer: https://token.actions.githubusercontent.com
certificate_identity_regexp: "https://github.com/argoproj/argo-cd/.*"
rules:
- pattern: "quay.io/argoproj/argocd:*"
validator: argocd-validator
Verify in CI/CD Pipeline
Integrate verification into your deployment pipeline:
name : Verify and Deploy
on :
push :
branches : [ main ]
jobs :
verify-and-deploy :
runs-on : ubuntu-latest
steps :
- name : Install cosign
uses : sigstore/cosign-installer@v3
- name : Verify Argo CD image
run : |
cosign verify \
--certificate-identity-regexp https://github.com/argoproj/argo-cd/.github/workflows/image-reuse.yaml@refs/tags/v \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-github-workflow-repository "argoproj/argo-cd" \
quay.io/argoproj/argocd:${{ env.ARGOCD_VERSION }}
- name : Deploy
run : |
kubectl apply -f argocd-install.yaml
Checksum Verification
For additional verification, compare checksums:
# Download checksum file
curl -LO https://github.com/argoproj/argo-cd/releases/download/v2.11.3/cli_checksums.txt
# Verify binary checksum
sha256sum -c cli_checksums.txt --ignore-missing
# Or manually:
sha256sum argocd-linux-amd64
grep argocd-linux-amd64 cli_checksums.txt
Troubleshooting
Verification failed: certificate identity
Error : none of the expected identities matchedCause : Certificate identity regexp doesn’t match the actual identitySolution : Verify you’re using the correct identity pattern for the version:--certificate-identity-regexp https://github.com/argoproj/argo-cd/.github/workflows/image-reuse.yaml@refs/tags/v
Warning : Using mutable tag referenceSolution : Always use the digest for verification:IMAGE = "quay.io/argoproj/argocd:v2.11.3@$( crane digest quay.io/argoproj/argocd:v2.11.3)"
slsa-verifier verify-image " $IMAGE " ...
Network issues with Rekor
Error : failed to fetch transparency log entryCause : Cannot reach rekor.sigstore.devSolution : Ensure outbound HTTPS access to:
rekor.sigstore.dev (port 443)
fulcio.sigstore.dev (port 443)
tuf-repo-cdn.sigstore.dev (port 443)
Issue : Releases before v2.4.0 are not signedSolution : Upgrade to v2.4.0 or later to use signature verification. For older versions, rely on:
Checksum verification
Downloading from official GitHub releases only
Verifying Git tag signatures
Best Practices
Always Verify Verify signatures for all production deployments
Use Admission Control Enforce verification at the cluster level
Pin Digests Use immutable image digests in production
Automate Verification Integrate verification into CI/CD pipelines
Monitor Supply Chain Use SBOM for vulnerability scanning
Trust Policy Document which sources are trusted
Security Overview Comprehensive security architecture
TLS Configuration Configure component TLS certificates
Sigstore Documentation Learn more about Sigstore and keyless signing
SLSA Framework Supply chain security framework