Como usar o comando docker trust sign para assinar uma imagem

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar o comando docker trust sign para proteger suas imagens Docker. Começaremos inspecionando uma imagem não assinada para entender suas características antes da assinatura. Em seguida, você praticará a assinatura de uma tag de imagem como administrador do repositório, afirmando sua autenticidade e, subsequentemente, verificando a assinatura. Por fim, você explorará o processo de assinatura e verificação de uma tag como um signatário designado, demonstrando a natureza colaborativa do Docker Content Trust.

Inspecionar uma imagem não assinada

Nesta etapa, aprenderemos como inspecionar uma imagem Docker que não foi assinada. O Docker Content Trust fornece uma maneira de verificar a integridade e a autenticidade das imagens Docker. No entanto, nem todas as imagens são assinadas. Inspecionar uma imagem não assinada nos ajuda a entender as informações básicas sobre a imagem antes de nos aprofundarmos nos conceitos de assinatura e verificação.

Primeiro, precisamos baixar uma imagem não assinada de um registro Docker. Usaremos a imagem hello-world, que normalmente não é assinada por padrão.

docker pull hello-world

Este comando baixa a imagem hello-world do registro Docker Hub para sua máquina local. Você deve ver a saída indicando o progresso e a conclusão do download.

Em seguida, inspecionaremos a imagem baixada usando o comando docker inspect. Este comando fornece informações detalhadas sobre um objeto Docker, incluindo imagens, contêineres, volumes e redes.

docker inspect hello-world

A saída deste comando será um grande documento JSON contendo vários detalhes sobre a imagem hello-world. Você pode examinar esta saída para ver informações como o ID da imagem, data de criação, arquitetura, sistema operacional e configuração.

Como esta imagem não está assinada, você não encontrará nenhuma informação relacionada a assinaturas ou confiança na saída do comando docker inspect. Esta é a característica chave de uma imagem não assinada quando vista através da lente do Docker Content Trust.

Assinar uma tag como administrador do repositório

Nesta etapa, aprenderemos como assinar uma tag de imagem Docker como administrador do repositório. O Docker Content Trust usa assinaturas digitais para garantir que as imagens que você baixa sejam exatamente o que o editor pretendia. Como administrador do repositório, você tem a autoridade para assinar tags de imagem, afirmando sua autenticidade.

Antes de podermos assinar uma imagem, precisamos habilitar o Docker Content Trust. Isso é feito definindo a variável de ambiente DOCKER_CONTENT_TRUST como 1.

export DOCKER_CONTENT_TRUST=1

Este comando habilita o content trust para os comandos Docker subsequentes em sua sessão de terminal atual.

Agora, vamos marcar a imagem hello-world que baixamos na etapa anterior com uma nova tag que inclui um nome de repositório. Usaremos um nome de repositório de espaço reservado your_docker_username/my-signed-image. Substitua your_docker_username pelo seu nome de usuário real do Docker Hub, se você tiver um, ou apenas use labexuser para este laboratório.

docker tag hello-world labexuser/my-signed-image:latest

Este comando cria uma nova tag labexuser/my-signed-image:latest que aponta para a mesma imagem que hello-world.

Agora, enviaremos esta imagem marcada para um registro. Quando o Docker Content Trust estiver habilitado, enviar uma tag de imagem que não foi assinada solicitará que você a assine.

docker push labexuser/my-signed-image:latest

Ao executar este comando, o Docker solicitará que você crie uma nova chave de assinatura ou use uma existente. Como esta é provavelmente sua primeira vez assinando, você será solicitado a criar uma nova chave. Você precisará fornecer uma senha para a nova chave. Lembre-se desta senha, pois você precisará dela mais tarde para assinar outras imagens ou rotacionar chaves.

Depois de inserir e confirmar a senha, o Docker assinará a tag da imagem e a enviará para o registro. Você deve ver a saída indicando o processo de assinatura e o envio bem-sucedido.

Verificar a assinatura como administrador do repositório

Nesta etapa, verificaremos a assinatura da tag da imagem que assinamos na etapa anterior. Como administrador do repositório, você pode usar o Docker Content Trust para garantir que a imagem que você está baixando seja aquela que você assinou.

Primeiro, vamos garantir que o Docker Content Trust ainda esteja habilitado. Se você abriu uma nova sessão de terminal, pode ser necessário definir a variável de ambiente novamente.

export DOCKER_CONTENT_TRUST=1

Agora, tentaremos baixar a tag da imagem assinada. Como o Docker Content Trust está habilitado, o Docker verificará a assinatura antes de baixar a imagem.

docker pull labexuser/my-signed-image:latest

Quando você executar este comando, o Docker verificará uma assinatura válida para a tag labexuser/my-signed-image:latest. Se a assinatura for válida e confiável, a imagem será baixada. Você deve ver a saída indicando que a imagem está sendo baixada e que a assinatura está sendo verificada. A saída mencionará explicitamente "Verifying trust data for".

Se a assinatura fosse inválida ou ausente (e o content trust estivesse habilitado), a operação de download falharia, impedindo que você usasse uma imagem potencialmente comprometida.

Para inspecionar ainda mais as informações de confiança associadas à imagem, você pode usar o comando docker trust inspect.

docker trust inspect labexuser/my-signed-image:latest

Este comando exibirá informações detalhadas sobre as assinaturas associadas à tag da imagem especificada. Você deve ver informações sobre os signatários e as tags assinadas. Esta saída confirma que a tag da imagem foi assinada com sucesso e a assinatura é reconhecida pelo Docker Content Trust.

Assinar uma tag como signatário

Nesta etapa, exploraremos como um "signatário" designado pode assinar uma tag de imagem Docker. Em um cenário do mundo real, um repositório pode ter vários signatários, cada um responsável por assinar tags ou lançamentos específicos. Isso permite um processo de assinatura mais distribuído e seguro.

Primeiro, certifique-se de que o Docker Content Trust está habilitado:

export DOCKER_CONTENT_TRUST=1

Agora, vamos criar uma nova tag para nossa imagem, simulando uma versão ou lançamento diferente pela qual um signatário pode ser responsável.

docker tag labexuser/my-signed-image:latest labexuser/my-signed-image:v1.0.0

Isso cria uma nova tag labexuser/my-signed-image:v1.0.0 apontando para a mesma imagem.

Para assinar esta nova tag como um "signatário" diferente, usamos o comando docker trust sign. Este comando permite que você assine explicitamente uma tag específica com uma chave específica.

docker trust sign labexuser/my-signed-image:v1.0.0

Ao executar este comando, o Docker solicitará a senha da chave de assinatura que você deseja usar. Se você estiver usando a mesma chave gerada na Etapa 2, insira essa senha. Se você fosse um signatário diferente com uma chave diferente, usaria a senha dessa chave.

Após inserir a senha com sucesso, o Docker assinará a tag labexuser/my-signed-image:v1.0.0. Você deve ver a saída confirmando o processo de assinatura.

Finalmente, precisamos enviar os dados de confiança atualizados para o registro. O comando docker push para a tag assinada incluirá as novas informações de assinatura.

docker push labexuser/my-signed-image:v1.0.0

Este comando envia a tag v1.0.0 junto com sua assinatura associada para o registro.

Verificar a assinatura como signatário

Nesta etapa final, verificaremos a assinatura da tag da imagem v1.0.0 que assinamos como um "signatário" na etapa anterior. Isso demonstra como qualquer usuário com o Docker Content Trust habilitado pode verificar a autenticidade de uma imagem assinada por um signatário confiável.

Primeiro, certifique-se de que o Docker Content Trust está habilitado.

export DOCKER_CONTENT_TRUST=1

Agora, vamos tentar baixar a tag da imagem v1.0.0. Como o Content Trust está habilitado, o Docker verificará a assinatura associada a esta tag.

docker pull labexuser/my-signed-image:v1.0.0

Semelhante à verificação na Etapa 3, você deve ver a saída indicando que o Docker está verificando os dados de confiança da imagem e, em seguida, baixando-a. Isso confirma que a assinatura que você aplicou como signatário é válida e reconhecida.

Para confirmar ainda mais as informações de assinatura, você pode usar novamente o comando docker trust inspect.

docker trust inspect labexuser/my-signed-image:v1.0.0

A saída deste comando mostrará os signatários para a tag v1.0.0. Você deve ver as informações da chave do signatário que você usou na etapa anterior listadas aqui. Isso fornece evidências concretas de que a tag foi assinada por uma entidade confiável.

Isso conclui nossa exploração da assinatura e verificação de tags de imagem Docker usando o Docker Content Trust. Ao habilitar o content trust e usar chaves de assinatura, você pode aprimorar significativamente a segurança do seu fluxo de trabalho de contêineres, garantindo a integridade e a autenticidade das imagens que você usa.

Resumo

Neste laboratório, aprendemos a trabalhar com o Docker Content Trust, inspecionando primeiro uma imagem não assinada para entender suas informações básicas e a ausência de detalhes de assinatura. Em seguida, exploramos o processo de assinatura de uma tag de imagem Docker como administrador do repositório, o que envolve habilitar o content trust e usar o comando docker trust sign para afirmar a autenticidade da imagem.

Após o processo de assinatura, aprendemos a verificar a assinatura como administrador do repositório para garantir a integridade da imagem. Também praticamos a assinatura de uma tag como um signatário designado, demonstrando a delegação da autoridade de assinatura dentro de um repositório. Finalmente, verificamos a assinatura como um signatário, confirmando a aplicação e verificação bem-sucedidas da assinatura delegada.