Como você lida com suas imagens de container? Faz o build e armazena o artefato? Como garantir que a imagem que você gerou é a mesma que está instalada em produção? Uma das formas de te ajudar com isso é assinando as suas imagens e é isso que vamos fazer com o COSIGN, mas antes, uma breve explicação sobre ele.
O que é o Cosign?
Cosign é um assinador e verificador de assinaturas de código fonte aberto. Ele permite que você assine imagens de container e com isso, quem for usar verifica se a imagem foi adulterada, garantindo assim imagens autênticas e mais seguras para todos seus ambientes.
Pré-requisitos
Antes de seguir com o tutorial é importante que você tenha instalado na sua máquina o docker, podman ou similar de sua preferência, além de estar logado no repositório que deseja subir a imagem, pois durante a assinatura ele fará o upload da chave pública para o repo. Outro detalhe importante é saber a compatibilidade do Cosign com seu Container Registry e para isso existe essa página de compatibilidade.
Como instalar o Cosign
Para fazer a instalação do Cosign você tem diversas formas tanto para Linux quanto para Windows. Para nosso exemplo vamos seguir o binário Linux, porém você poderá acessar o projeto no github e ver todos os artefatos disponíveis.
Com o seu terminal aberto rode os comandos abaixo:
curl -O -L "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/cosignBashUma vez instalado, teste com o comando de ajuda:
cosign --helpBashSe tudo estiver certo você verá uma tela similar a esta e poderá seguir com o tutorial:

Gerenciando chaves com Cosign
O cosign tem 3 formas principais de gerir chaves. A primeira é através de provedores de segredos (AWS KMS, GCP KMS, Azure KMS, Vault by HashiCorp e K8s…). A outra forma é gerando chaves auto assinadas, e outro modo é importando chaves RSA e ECDSA. Para verificar se existem outras formas este link pode ser consultado. No nosso exemplo vamos usar chaves auto assinadas. Abra o terminal e rode os comandos (incluindo a senha):
cosign generate-key-pairBash
Assinando imagens de container
Para assinar a imagem é preciso que antes disso você construa ela e suba para o seu container registry, por exemplo o Docker Hub. Além disso é necessário que seu terminal esteja logado com o repositório. Feito isso vamos criar a assinatura.
cosign sign --key cosign.key danilodorgam/k8s-kubetools:assinadaBashPara este comando funcionar você deve estar no diretório em que gerou o arquivo cosign.key.

Verificando assinatura da imagem
Após assinar a imagem, verificar a assinatura é bem simples: basta ter a chave pública em mãos e rodar o seguinte comando:
cosign verify --key cosign.pub danilodorgam/k8s-kubetools:assinadaBashLembrando que essa verificação pode ser automatizada de algumas formas, por exemplo, como política do K8s para garantir que apenas imagens assinadas sejam executadas em determinada namespace. Caso queria fazer o download da imagem que geramos ela está no Dockr Hub.

Conclusão
O que achou? Já conhecia essa forma de assinar imagens de container? Sabia que além de container o cosign suporta assinar outras coisas? Por exemplo blobs. Conhece outra forma de assinar? Fique a vontade para comentar e visitar a documentação.






