DevOps

Imagens de Container Assinadas com COSIGN: Um Guia Passo a Passo!

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/cosign
Bash

Uma vez instalado, teste com o comando de ajuda:

cosign --help
Bash

Se 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-pair
Bash

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:assinada
Bash

Para 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:assinada
Bash

Lembrando 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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.