Marcio Cunha

Segurança em Pipelines de Entrega Contínua Através da Validação de Assinaturas de Artefatos com Cosign

Descubra como proteger sua cadeia de suprimentos de software validando assinaturas digitais de imagens de contêineres e artefatos usando o Cosign em ambientes de produção.

Marcio Cunha•5 min
Também disponível em:EnglishEspañol
Resumo
  • A proliferação de ataques à cadeia de suprimentos de software exige garantias criptográficas robustas antes de promover qualquer artefato para produção.
  • O Cosign simplifica a assinatura e validação de imagens de contêineres sem a complexidade tradicional de gerenciar infraestruturas de chaves públicas pesadas.
  • A integração do utilitário nos fluxos de trabalho impede a execução de binários adulterados ou injetados por agentes maliciosos em ambientes vulneráveis.
  • Políticas de admissão automatizadas em clusters Kubernetes impedem que cargas de trabalho não assinadas sejam executadas sem supervisão.
  • A chave efêmera e o ecossistema Sigstore eliminam gargalos operacionais na geração e rotação de credenciais de assinatura.

O Problema Silencioso na Cadeia de Suprimentos de Software

No desenvolvimento moderno de software, dependemos de centenas de bibliotecas de terceiros, imagens de contêineres prontas e ferramentas automatizadas que constroem nossos sistemas todos os dias. Essa engrenagem, conhecida como pipeline de entrega contínua (o processo automatizado que leva o código do computador do programador até o servidor de produção), funciona como uma linha de montagem industrial. No entanto, se um intruso conseguir alterar uma única peça no meio dessa linha de montagem, todo o sistema final pode ser comprometido sem que a equipe perceba imediatamente.

Na prática, isso significa que confiar cegamente em repositórios públicos de código ou registros de imagens sem verificar a origem exata abre brechas críticas para ataques de injeção de código malicioso. Para resolver essa vulnerabilidade invisível, a engenharia de confiabilidade moderna recorreu à criptografia assimétrica, criando um mecanismo onde cada artefato construído carrega um selo digital inviolável, provando exatamente quem o criou e garantindo que ele não foi modificado no caminho.

Compreendendo o Papel do Cosign no Ecossistema Sigstore

O Cosign é uma ferramenta moderna de código aberto desenvolvida sob o guarda-chuva do projeto Sigstore, criada especificamente para facilitar a assinatura, verificação e armazenamento de artefatos de contêineres. Tradicionalmente, assinar digitalmente um arquivo exigia a criação de certificados complexos, chaves privadas guardadas a sete chaves e processos burocráticos que travavam a velocidade dos desenvolvedores. O Cosign remove essa dor de cabeça ao permitir assinaturas sem o uso de arquivos de chave tradicionais, utilizando identidades gerenciadas e transparência pública.

Na prática, a ferramenta funciona gerando uma assinatura criptográfica vinculada a uma identidade verificável, como uma conta de e-mail corporativa autenticada via OpenID Connect (protocolo padrão que permite a autenticação de usuários em aplicações web sem expor senhas). Quando uma imagem de contêiner é gerada pelo servidor de integração contínua, o Cosign aplica uma chave matemática para selar o pacote. Esse selo é então registrado em um livro-razão imutável e público, garantindo que ninguém possa apagar ou alterar o histórico daquela assinatura.

Implementando a Assinatura Automatizada no Pipeline

Para colocar essa proteção em prática, precisamos inserir comandos específicos dentro do arquivo de configuração do nosso pipeline de automação, como o GitHub Actions ou GitLab CI. O processo ocorre logo após a etapa de construção da imagem do contêiner e antes que ela seja enviada para o repositório definitivo. Abaixo, exemplificamos como executar a assinatura utilizando chaves locais e um fluxo automatizado.

cosign generate-key-pair

O comando acima cria um par de chaves: uma pública, que será distribuída para os servidores que precisam validar o software, e uma privada, que deve ser mantida em absoluto sigilo pelo sistema de automação. Em seguida, após enviar a imagem para o registro, o pipeline executa o comando de assinatura propriamente dito, apontando para o endereço exato do artefato gerado na nuvem.

cosign sign --key cosign.private.key meu-registro.azurecr.io/app/servico:v1.2.0

Esse comando lê a chave privada, calcula a impressão digital única da imagem de contêiner e grava a assinatura diretamente no registro de imagens ao lado do pacote original. Qualquer alteração posterior no conteúdo da imagem invalidará instantaneamente essa assinatura matemática.

Validando Artefatos Antes da Execução em Produção

Assinar os arquivos é apenas a metade do caminho; a verdadeira segurança acontece no momento em que o ambiente de produção decide se vai aceitar ou rejeitar a execução daquele pacote. Antes que um servidor ou um cluster de computadores baixe e execute a imagem do contêiner, o sistema deve realizar uma verificação rigorosa utilizando a chave pública correspondente.

Na prática, configuramos o ambiente para recusar qualquer imagem que não possua uma assinatura válida e recente emitida por uma chave autorizada pela organização. Se um invasor conseguir substituir a imagem legítima por uma cópia adulterada dentro do registro público, o processo de verificação falhará imediatamente, interrompendo a implantação e disparando alertas para a equipe de segurança.

cosign verify --key cosign.pub meu-registro.azurecr.io/app/servico:v1.2.0

Se a verificação for bem-sucedida, o Cosign retorna os detalhes da assinatura e o comando é encerrado sem erros, liberando o sistema operacional para iniciar o contêiner com total tranquilidade. Caso contrário, o comando retorna uma falha explícita, bloqueando o acesso de softwares não confiáveis ao ambiente produtivo.

Automatizando a Segurança com Políticas de Admissão em Kubernetes

Fazer verificações manuais via linha de comando funciona bem para testes, mas em ambientes de produção em larga escala que utilizam orquestradores de contêineres como o Kubernetes (sistema que gerencia milhares de aplicações distribuídas em múltiplos servidores), o processo precisa ser totalmente automatizado. Para isso, utilizamos controladores de admissão, que interceptam cada tentativa de criação de novos pods e validam suas assinaturas em segundo plano.

Ferramentas como o Kyverno ou o Policy Controller da Sigstore trabalham em conjunto com o Cosign para aplicar regras de negócio rígidas. Por exemplo, podemos definir uma política que diz: "Nenhum contêiner pode rodar neste cluster a menos que sua imagem tenha sido assinada pela chave oficial da nossa equipe de engenharia e registrada no log público". Se alguém tentar burlar essa regra submetendo um manifesto bruto direto ao cluster, o próprio Kubernetes rejeitará a solicitação antes mesmo de alocar recursos de hardware.

Considerações Finais e Próximos Passos

A segurança em pipelines de entrega contínua deixou de ser um luxo opcional e passou a ser uma exigência fundamental para a sobrevivência operacional de qualquer empresa de tecnologia. A introdução de assinaturas de artefatos por meio de ferramentas modernas como o Cosign mitiga o risco de ataques à cadeia de suprimentos sem impor fricção excessiva ao fluxo de trabalho diário dos desenvolvedores.

Ao combinar chaves criptográficas, logs de transparência e políticas automatizadas de execução, as organizações constroem barreiras intransponíveis contra adulterações silenciosas. O próximo passo para equipes maduras é estender essa validação para além dos contêineres, aplicando o mesmo rigor conceitual a arquivos de configuração, gráficos de implantação e modelos de inteligência artificial.