Alejandría

Busca en Alejandría

Herramientas

Cosign

Firma artefactos y verifica quién los publicó.

01

En pocas palabras

Herramienta de Sigstore para firmar y verificar contenedores, binarios y otros artefactos, comprobando integridad e identidad firmante.

Qué problema resuelve

Desplegar software de origen desconocido o alterado después de publicarse.

Cuándo utilizarlo

Publicación de versiones, integración y despliegue continuo (CI/CD) y Kubernetes. Ejemplo: firmar una imagen en CI y verificar que procede del constructor autorizado antes de desplegarla.

02

De la idea a la práctica

Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.

Cómo funciona

La firma se asocia al digest del artefacto, una huella de su contenido. En el flujo basado en identidad, Sigstore utiliza OIDC para acreditar al firmante y un registro de transparencia para dejar evidencia verificable. La política de verificación debe indicar la identidad y el emisor esperados.

Ejemplo: verificar antes de desplegar

Estos comandos suponen Cosign instalado, acceso al registro y las variables IMAGE, IDENTITY e ISSUER configuradas. IMAGE debe incluir el digest @sha256:…; IDENTITY identifica al publicador autorizado.

cosign sign "$IMAGE"
cosign verify "$IMAGE" \
  --certificate-identity "$IDENTITY" \
  --certificate-oidc-issuer "$ISSUER"

Componentes de Sigstore

Componente Función
Cosign CLI para firmar y verificar imágenes, blobs y atestaciones
Fulcio Autoridad que emite certificados de corta duración ligados a una identidad OIDC
Rekor Registro de transparencia inmutable donde se anota cada firma

El modo keyless evita gestionar claves privadas: la identidad del pipeline (por ejemplo, el workflow de GitHub Actions) es la que firma.

Firma en CI con GitHub Actions

permissions:
  id-token: write # necesario para obtener el token OIDC
  packages: write
steps:
  - uses: sigstore/cosign-installer@v3
  - run: |
      DIGEST=$(docker buildx imagetools inspect "$IMAGE" --format '{{json .Manifest.Digest}}' | tr -d '"')
      cosign sign --yes "$IMAGE@$DIGEST"

Y la verificación con identidad explícita:

cosign verify "$IMAGE@sha256:…" \
  --certificate-identity "https://github.com/krediya/api-solicitudes/.github/workflows/release.yml@refs/heads/main" \
  --certificate-oidc-issuer "https://token.actions.githubusercontent.com"

Atestaciones: SBOM y procedencia

Además de la firma, Cosign adjunta atestaciones in-toto que describen el artefacto:

cosign attest --yes --type spdxjson --predicate sbom.spdx.json "$IMAGE@$DIGEST"
cosign verify-attestation --type spdxjson \
  --certificate-identity "$IDENTITY" --certificate-oidc-issuer "$ISSUER" "$IMAGE@$DIGEST"

Combinado con la procedencia SLSA que generan algunos sistemas de build, permite verificar qué contiene la imagen (SBOM) y cómo se construyó.

Claves gestionadas

Cuando el modo keyless no es viable (redes aisladas, requisitos de custodia), se puede firmar con claves en un KMS: cosign sign --key gcpkms://projects/…/cryptoKeys/firma "$IMAGE@$DIGEST". La clave nunca sale del KMS y su uso queda auditado.

Aplicar la verificación en el despliegue

Plataforma Mecanismo
Kubernetes Sigstore policy-controller o Kyverno con reglas de verificación de imágenes
Google Cloud Run / GKE Binary Authorization con atestaciones
Pipeline propio cosign verify como paso bloqueante antes del deploy

Una política que solo comprueba «está firmada» no basta: debe exigir la identidad y el emisor concretos.

Criterios de implementación

Verifica el mismo digest que vas a desplegar. Separa las identidades de construcción y despliegue, y combina la firma con análisis de vulnerabilidades y evidencias de construcción. Una firma válida de un publicador no autorizado debe rechazarse.

Continúa en las fuentes

Documentación oficial para verificar detalles y explorar más.