
Assinatura de código e transparência para contêineres e binários
Assinatura de contêineres OCI (e outros artefatos) usando Sigstore!
O Cosign tem como objetivo tornar as assinaturas infraestrutura invisível.
O Cosign suporta:
O Cosign é desenvolvido como parte do projeto sigstore.
Também usamos um canal do slack!
Clique aqui para o link de convite.
Para instalações via Homebrew, Arch, Nix, GitHub Action e Kubernetes, consulte a documentação de instalação.
Para binários de Linux, macOS e Windows, consulte os ativos de release do GitHub.
🚨 Se você está baixando releases do cosign do nosso bucket GCS - consulte mais informações no aviso de descontinuação de 31 de julho de 2023 🚨
Se você tem Go 1.22+, pode configurar um ambiente de desenvolvimento:
$ git clone https://github.com/sigstore/cosign
$ cd cosign
$ go install ./cmd/cosign
$ $(go env GOPATH)/bin/cosign
Se você tem interesse em contribuir com o cosign, por favor leia a documentação de contribuição.
O desenvolvimento futuro do Cosign será focado na próxima versão principal, que será baseada no sigstore-go. Os mantenedores estarão focados no desenvolvimento de funcionalidades dentro do sigstore-go. Contribuições para o sigstore-go, particularmente em torno de bring-your-own keys e assinatura, são bem-vindas. Por favor, consulte o issue tracker para boas primeiras issues.
O Cosign 2.x é uma versão estável e continuará recebendo atualizações periódicas de funcionalidades e correções de bugs. PRs de escopo e tamanho pequenos têm maior probabilidade de serem revisados rapidamente.
PRs que modificam ou quebram significativamente a API não serão aceitos. PRs que são significativos em tamanho mas não introduzem mudanças que quebram compatibilidade podem ser aceitos, mas serão considerados de prioridade menor do que PRs no sigstore-go.
Veja como instalar e usar o cosign dentro de um Dockerfile através da imagem 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" ]
Isto mostra como:
Observe que você deve sempre assinar imagens com base em seu digest (@sha256:...)
em vez de uma tag (:latest), pois caso contrário você pode assinar algo que
não pretendia!
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
O Cosign solicitará que você se autentique via OIDC, onde você fará login com seu endereço de e-mail. Nos bastidores, o cosign solicitará um certificado de assinatura de código à autoridade certificadora Fulcio. O titular do certificado corresponderá ao endereço de e-mail com o qual você fez login. O Cosign então armazenará a assinatura e o certificado no log de transparência Rekor, e enviará a assinatura para o registro OCI junto com a imagem que você está assinando.
Para verificar a imagem, você precisará informar o titular esperado do certificado e o emissor do certificado através das flags --certificate-identity e --certificate-oidc-issuer:
cosign verify $IMAGE --certificate-identity=$IDENTITY --certificate-oidc-issuer=$OIDC_ISSUER
Você também pode passar uma regex para as flags de identidade do certificado e emissor, --certificate-identity-regexp e --certificate-oidc-issuer-regexp.
Este comando retorna 0 se pelo menos uma assinatura formatada pelo cosign para a imagem for encontrada
correspondendo à chave pública.
Consulte o uso detalhado abaixo para obter informações e ressalvas sobre outros formatos de assinatura.
Quaisquer payloads válidos são impressos em stdout, no formato json. Observe que esses payloads assinados incluem o digest da imagem do container, que é como podemos ter certeza de que essas assinaturas "desanexadas" cobrem a imagem correta.
$ 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 seção está desatualizada.