Assinatura de Imagem

Com o par de chaves criado, pode-se agora fazer a assinatura da imagem.

Neste exemplo será realizado todo o processo de criação da imagem, assinatura, subir para o repositório etc.

Construir e Publicar Imagem

Construir

A partir do projeto caótico será criada uma nova imagem:

$ docker build -t marcelodpbarbieri/imagem-assinada:v1 .
Sending build context to Docker daemon  92.16kB
Step 1/7 : FROM node:25.2.1-alpine3.22
 ---> 7a804d838046
Step 2/7 : WORKDIR /app
 ---> Using cache
 ---> 0234999bbbe8
Step 3/7 : COPY package*.json ./
 ---> Using cache
 ---> 89c635ab0791
Step 4/7 : RUN npm install
 ---> Using cache
 ---> d5bce1c535b9
Step 5/7 : COPY . .
 ---> Using cache
 ---> 94feb8da3045
Step 6/7 : EXPOSE 8080
 ---> Using cache
 ---> c559ff05c8fa
Step 7/7 : CMD ["node", "server.js"]
 ---> Using cache
 ---> c57094e7fbf0
Successfully built c57094e7fbf0
Successfully tagged marcelodpbarbieri/imagem-assinada:v1

Conferindo a imagem criada:

Publicar

Agora publica-se essa imagem no repositório:

Verificação da imagem publicada:

Assinar e Verificar a Imagem

Assinar

Obter o DIGEST (hash único) da imagem:

Assinar pelo DIGEST:

Observar que o DIGEST não trouxe o REGISTRY e por isso está sendo informado "docker.io"

Verificar

Verificar a image assinada:

Verificar a publicação da imagem assinada:


Anotações

Na assinatura da imagem pode-se fazer e verificar anotações.

  • Assinatura da imagem:

  • Verificação da imagem:

Variáveis de Ambiente

Assinatura

Na assinatura da imagem ao invés de informar a chave com --key pode-se exportar para variáveis de ambiente:

Para consultar nas variáveis de ambiente:

Ao assinar informa-se a variável de ambiente na chave:

Verificação

Pode-se fazer o mesmo para a verificação:

Simulação

Alteração no Código

Alterar o código do arquivo server.js, por exemplo, com a inclusão da linha console.log("Teste"); :

Reconstruir a imagem:

Subir a imagem reconstruída:

No registry, observar que a assinatura é diferente:

Ao verificar a imagem, é obtida resposta de imagem não encontrada:

Todo este processo pode ser colocado na pipeline CI/CD para que a assinatura seja verificada, ou na admissão dentro do Kubernets etc.

Last updated