Marcio Cunha

Automação de Pipelines CI/CD com Verificação de Assinaturas Cosign e Sigstore

Aprenda a blindar suas entregas de software verificando a autenticidade de contêineres e artefatos usando ferramentas modernas de criptografia sem gerenciamento complexo de chaves.

Marcio Cunha4 min
Também disponível em:EnglishEspañol
Resumo
  • Assinaturas digitais em pipelines de software garantem que apenas códigos auditados alcancem o ambiente produtivo sem adulterações.
  • A tecnologia Sigstore elimina a complexidade tradicional de gerenciar chaves criptográficas de longa duração na infraestrutura de nuvem.
  • O uso do Cosign permite vincular identidades de provedores de autenticação diretamente aos artefatos gerados pelo processo de compilação.
  • Políticas automatizadas bloqueiam a implantação de imagens não assinadas logo na etapa de admissão do cluster de Kubernetes.
  • A rastreabilidade ponta a ponta protege a cadeia de suprimentos contra ataques furtivos de injeção de código malicioso durante o build.

O Desafio da Confiança em Cadeias de Suprimento de Software

Na engenharia de software moderna, a velocidade de entrega é um dos pilares mais valorizados pelas organizações. No entanto, mover código rapidamente da máquina do desenvolvedor até o ambiente de produção abre brechas significativas para invasores inserirem códigos maliciosos no meio do caminho. Na prática, isso significa que se um invasor conseguir comprometer uma única etapa do processo de automação, conhecida como pipeline de integração e entrega contínua (CI/CD), ele pode injetar falhas silenciosas que afetarão todos os clientes finais.

Para combater esse problema, a indústria passou a exigir mecanismos de garantia de integridade muito mais rigorosos do que apenas senhas ou tokens de acesso comuns. É aqui que entram as assinaturas digitais aplicadas a artefatos, como imagens de contêiner e pacotes compilados. Uma assinatura digital funciona como um selo de inviolabilidade físico colocado em um produto farmacêutico: se alguém mexer no conteúdo antes de ele chegar ao consumidor, o selo quebra e o sistema rejeita imediatamente a entrega.

A Revolução Criptográfica da Sigstore

Historicamente, assinar artefatos de software exigia gerar chaves criptográficas privadas complexas, guardá-las em cofres seguros e lidar com a revogação manual quando funcionários saíam da empresa. Esse processo burocrático afastava muitas equipes de engenharia. A Sigstore surgiu como uma iniciativa aberta para simplificar essa dinâmica, oferecendo ferramentas gratuitas e automatizadas de assinatura baseadas em identidades verificáveis, eliminando a necessidade de gerenciar arquivos de chaves de longa duração.

Na prática, a Sigstore funciona conectando a identidade do desenvolvedor ou do sistema automatizado — como um job rodando no GitHub Actions — a um certificado de curta duração emitido por uma autoridade certificadora pública chamada Fulcio. Esse certificado é registrado publicamente em um banco de dados imutável chamado Rekor. Quando a automação cria um pacote de software, ela prova quem é através de tokens OpenID Connect, recebe um certificado que vale por apenas alguns minutos, assina o artefato e descarta o segredo, tornando o roubo de chaves praticamente impossível.

Implementando o Cosign nas Esteiras de Automação

O Cosign é a ferramenta principal da suíte Sigstore projetada especificamente para assinar, verificar e armazenar assinaturas de contêineres OCI e outros arquivos binários. Integrar o Cosign em um pipeline de CI/CD, como o GitHub Actions, envolve adicionar etapas que executam comandos CLI logo após a construção e o envio da imagem para o registro público ou privado. Na prática, o processo automatizado valida a si mesmo utilizando a identidade nativa do provedor de nuvem ou de hospedagem de código.

Abaixo está um trecho de configuração YAML que demonstra como um pipeline automatizado assina uma imagem recém-criada utilizando a identidade do próprio GitHub Actions, sem expor chaves estáticas:

name: Build and Sign Container
on: [push]
jobs:
  build-and-sign:
    permissions:
      contents: read
      id-token: write
    runs-on: ubuntu-latest
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Build and push image
        uses: docker/build-push-action@v5
        with:
          push: true
          tags: myregistry.azurecr.io/myapp:latest
      - name: Install Cosign
        uses: sigstore/[email protected]
      - name: Sign the container image
        run: |
          cosign sign --yes myregistry.azurecr.io/myapp:latest

Esse fluxo garante que a imagem hospedada no registro venha acompanhada de uma assinatura criptográfica verificável. Qualquer alteração posterior nos bytes da imagem invalidará a assinatura, impedindo que versões adulteradas cheguem aos servidores de produção.

Validação Automática no Momento do Implante

Assinar artefatos no pipeline de build é apenas a primeira metade da estratégia de segurança. A segunda metade, e talvez a mais crítica, é garantir que o ambiente de execução — como um cluster de Kubernetes — recuse categoricamente qualquer imagem que não possua uma assinatura válida emitida por uma entidade confiável. Na prática, isso é feito utilizando controladores de admissão que interceptam tentativas de criação de pods e verificam a assinatura antes de permitir que o container seja iniciado.

Utilizando políticas baseadas em ferramentas como Kyverno ou OPA/Gatekeeper integradas ao Cosign, os engenheiros definem regras declarativas simples. Por exemplo, a regra pode estipular que apenas imagens assinadas pelo repositório oficial da organização no GitHub podem rodar na infraestrutura de produção. Se uma imagem externa ou modificada manualmente for aplicada ao cluster, o controlador de admissão bloqueia a operação instantaneamente e envia um alerta para a equipe de operações.

Considerações Finais sobre Maturidade Operacional

Adotar a verificação de assinaturas via Cosign e Sigstore transforma a segurança da cadeia de suprimentos de software de um conceito teórico em uma barreira automatizada e inviolável. Embora exija uma mudança inicial na mentalidade das equipes de desenvolvimento e engenharia de plataforma, os benefícios compensam amplamente o esforço operacional. Ao eliminar a necessidade de gerenciar chaves estáticas e automatizar a prova de identidade, as empresas conseguem entregar software mais rápido, mantendo um padrão rigoroso de conformidade e blindagem contra ataques sofisticados.