
Firma de código y transparencia para contenedores y binarios
¡Firma de contenedores OCI (y otros artefactos) usando Sigstore!
Cosign tiene como objetivo hacer que las firmas sean infraestructura invisible.
Cosign soporta:
Cosign se desarrolla como parte del proyecto sigstore.
¡También usamos un canal de slack!
Haz clic aquí para el enlace de invitación.
Para instalaciones con Homebrew, Arch, Nix, GitHub Action y Kubernetes, consulta la documentación de instalación.
Para binarios de Linux, macOS y Windows, consulta los recursos de la versión de GitHub.
🚨 Si estás descargando versiones de cosign desde nuestro bucket de GCS, consulta más información en el aviso de descontinuación del 31 de julio de 2023 🚨
Si tienes Go 1.22+, puedes configurar un entorno de desarrollo:
$ git clone https://github.com/sigstore/cosign
$ cd cosign
$ go install ./cmd/cosign
$ $(go env GOPATH)/bin/cosign
Si estás interesado en contribuir a cosign, por favor lee la documentación de contribución.
El desarrollo futuro de Cosign se centrará en la próxima versión principal, que estará basada en sigstore-go. Los mantenedores se centrarán en el desarrollo de funcionalidades dentro de sigstore-go. Las contribuciones a sigstore-go, especialmente en torno a claves propias y firma, son bienvenidas. Por favor, consulta el issue tracker para encontrar buenos primeros issues.
Cosign 2.x es una versión estable y seguirá recibiendo actualizaciones periódicas de funcionalidades y correcciones de errores. Los PRs que sean pequeños en alcance y tamaño son los más propensos a ser revisados rápidamente.
Los PRs que modifiquen o rompan significativamente la API no serán aceptados. Los PRs que sean significativos en tamaño pero que no introduzcan cambios disruptivos pueden ser aceptados, pero se considerarán de menor prioridad que los PRs en sigstore-go.
Aquí se muestra cómo instalar y usar cosign dentro de un Dockerfile a través de la imagen ghcr.io/sigstore/cosign/cosign:
FROM ghcr.io/sigstore/cosign/cosign:v2.4.1 as cosign-bin
# Source: https://github.com/chainguard-images/images/tree/main/images/static
FROM cgr.dev/chainguard/static:latest
COPY --from=cosign-bin /ko-app/cosign /usr/local/bin/cosign
ENTRYPOINT [ "cosign" ]
Esto muestra cómo:
Ten en cuenta que siempre debes firmar imágenes basándote en su digest (@sha256:...)
en lugar de una etiqueta (:latest), ¡porque de lo contrario podrías firmar algo que no
pretendías firmar!
cosign sign $IMAGE
Generating ephemeral keys...
Retrieving signed certificate...
Note that there may be personally identifiable information associated with this signed artifact.
This may include the email address associated with the account with which you authenticate.
This information will be used for signing this artifact and will be stored in public transparency logs and cannot be removed later.
By typing 'y', you attest that you grant (or have permission to grant) and agree to have this information stored permanently in transparency logs.
Are you sure you would like to continue? [y/N] y
Your browser will now be opened to:
https://oauth2.sigstore.dev/auth/auth?access_type=online&client_id=sigstore&code_challenge=OrXitVKUZm2lEWHVt1oQWR4HZvn0rSlKhLcltglYxCY&code_challenge_method=S256&nonce=2KvOWeTFxYfxyzHtssvlIXmY6Jk&redirect_uri=http%3A%2F%2Flocalhost%3A57102%2Fauth%2Fcallback&response_type=code&scope=openid+email&state=2KvOWfbQJ1caqScgjwibzK2qJmb
Successfully verified SCT...
tlog entry created with index: 12086900
Pushing signature to: $IMAGE
Cosign te pedirá que te autentiques mediante OIDC, donde iniciarás sesión con tu dirección de correo electrónico. Internamente, cosign solicitará un certificado de firma de código a la autoridad de certificación Fulcio. El sujeto del certificado coincidirá con la dirección de correo electrónico con la que iniciaste sesión. Cosign almacenará entonces la firma y el certificado en el registro de transparencia Rekor, y subirá la firma al registro OCI junto con la imagen que estás firmando.
Para verificar la imagen, deberás proporcionar el sujeto del certificado esperado y el emisor del certificado mediante los flags --certificate-identity y --certificate-oidc-issuer:
cosign verify $IMAGE --certificate-identity=$IDENTITY --certificate-oidc-issuer=$OIDC_ISSUER
También puedes pasar una expresión regular para los flags de identidad del certificado y del emisor, --certificate-identity-regexp y --certificate-oidc-issuer-regexp.
Este comando devuelve 0 si se encuentra al menos una firma con formato cosign para la imagen
que coincida con la clave pública.
Consulta el uso detallado a continuación para obtener información y advertencias sobre otros formatos de firma.
Cualquier payload válido se imprime en stdout, en formato json. Ten en cuenta que estos payloads firmados incluyen el digest de la imagen del contenedor, que es como podemos estar seguros de que estas firmas "separadas" cubren la imagen correcta.
$ cosign verify --key cosign.pub $IMAGE_URI:1h
The following checks were performed on these signatures:
- The cosign claims were validated
- The signatures were verified against the specified public key
{"Critical":{"Identity":{"docker-reference":""},"Image":{"Docker-manifest-digest":"sha256:87ef60f558bad79beea6425a3b28989f01dd417164150ab3baab98dcbf04def8"},"Type":"cosign container image signature"},"Optional":null}
Nota: Esta sección está desactualizada.