Como usar o comando docker trust signer remove para remover signatários

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como gerenciar signatários (signers) para repositórios Docker usando o comando docker trust signer remove. Começaremos inspecionando os signatários atuais de um repositório para entender as relações de confiança existentes.

Após a inspeção, você praticará a remoção de um signatário de um único repositório e, em seguida, verificará a remoção bem-sucedida. Finalmente, você aprenderá como remover um signatário de múltiplos repositórios simultaneamente e confirmará as alterações. Este laboratório fornecerá experiência prática com o gerenciamento de confiança de conteúdo no Docker.

Inspecionar os signatários atuais de um repositório

Nesta etapa, aprenderemos como inspecionar os signatários atuais de um repositório Docker. O Docker Content Trust permite que você verifique a integridade e o editor de todas as imagens que você usa. Quando a confiança de conteúdo está habilitada, o Docker garante que as imagens que você puxa (pull) sejam assinadas.

Primeiro, vamos habilitar o Docker Content Trust. Você pode fazer isso definindo a variável de ambiente DOCKER_CONTENT_TRUST como 1.

export DOCKER_CONTENT_TRUST=1

Agora que a confiança de conteúdo está habilitada, quando você interage com imagens, o Docker verificará as assinaturas. Para inspecionar os signatários de um repositório, você pode usar o comando docker trust inspect seguido pelo nome do repositório.

Vamos inspecionar os signatários do repositório ubuntu.

docker trust inspect ubuntu

Você deve ver uma saída semelhante a esta, mostrando os signatários e suas chaves:

No signatures for ubuntu

Esta saída indica que atualmente não há assinaturas para o repositório ubuntu. Isso é esperado para muitas imagens oficiais, a menos que elas tenham explicitamente habilitado a confiança de conteúdo e a assinatura.

Vamos tentar inspecionar um repositório que se sabe ter assinaturas, como docker/trusttest. Precisamos puxar (pull) a imagem primeiro para garantir que temos os metadados necessários.

docker pull docker/trusttest

Agora, inspecione os signatários para docker/trusttest.

docker trust inspect docker/trusttest

Você deve ver uma saída listando os signatários e suas chaves, indicando que este repositório foi assinado. A saída mostrará informações sobre os signatários Targets e Releases.

Signers of docker/trusttest:

ROLE         KEYS
----         ----
Releases     0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Signatures for docker/trusttest:

SIGNER     KEYS
------     ----
Releases   0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Esta saída confirma que o repositório docker/trusttest foi assinado e lista as chaves associadas aos signatários.

Remover um signatário de um único repositório

Nesta etapa, aprenderemos como remover um signatário de um único repositório Docker usando o Docker Content Trust. Isso é útil quando a chave de um signatário é comprometida ou um usuário não está mais autorizado a assinar imagens para um repositório específico.

Para remover um signatário, usamos o comando docker trust signer remove. Este comando requer o nome do signatário a ser removido e o repositório do qual removê-lo.

Vamos remover o signatário Releases do repositório docker/trusttest. Lembre-se da etapa anterior que docker/trusttest tem um signatário Releases.

docker trust signer remove Releases docker/trusttest

Ao executar este comando, você será solicitado a confirmar a remoção. Digite y e pressione Enter para prosseguir.

Removing signer "Releases" from docker/trusttest. Are you sure you want to continue? (y/n): y

Após a confirmação, o signatário será removido do repositório especificado. Você deve ver uma saída indicando a remoção bem-sucedida.

Successfully removed signer "Releases" from docker/trusttest

Este comando remove a associação da chave pública do signatário Releases com o repositório docker/trusttest nos dados de confiança armazenados no servidor de notário. Ele não exclui a própria chave do signatário, apenas sua autorização para assinar para este repositório específico.

Verificar a remoção do signatário

Nesta etapa, verificaremos se o signatário foi removido com sucesso do repositório. Podemos fazer isso usando o comando docker trust inspect novamente, assim como fizemos na primeira etapa.

Esperamos que, após remover o signatário Releases de docker/trusttest na etapa anterior, a execução de docker trust inspect docker/trusttest não mostre mais Releases como um signatário.

Vamos inspecionar os signatários para docker/trusttest novamente.

docker trust inspect docker/trusttest

Observe a saída cuidadosamente. Você deve agora ver que o signatário Releases não está mais listado na seção Signers para docker/trusttest.

Signers of docker/trusttest:

ROLE         KEYS
----         ----
Targets      0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Signatures for docker/trusttest:

SIGNER     KEYS
------     ----
Releases   0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Observe que, embora o signatário Releases seja removido da lista de Signers autorizados, a seção Signatures ainda pode mostrar assinaturas feitas por Releases. Isso ocorre porque o comando remove remove a autorização para o signatário assinar imagens futuras, mas não remove necessariamente as assinaturas existentes do servidor de notário imediatamente. No entanto, para fins de verificação da remoção do papel do signatário para o repositório, verificar a lista Signers é suficiente.

A ausência de Releases na seção Signers of docker/trusttest confirma que o signatário foi removido com sucesso deste repositório específico.

Remover um signatário de múltiplos repositórios

Nesta etapa, aprenderemos como remover um signatário de múltiplos repositórios Docker simultaneamente usando o Docker Content Trust. Isso é eficiente quando um signatário precisa ser desautorizado em vários repositórios.

O comando docker trust signer remove permite que você especifique múltiplos repositórios após o nome do signatário.

Vamos supor que temos outro repositório, digamos docker/another-trusttest, que também possui o signatário Releases. Para remover o signatário Releases de ambos docker/trusttest e docker/another-trusttest em um único comando, você listaria os nomes de ambos os repositórios.

Primeiro, vamos fazer o pull da imagem hello-world para usar como um segundo repositório para fins de demonstração. Em seguida, vamos marcá-la para simular outro repositório.

docker pull hello-world
docker tag hello-world docker/another-trusttest

Agora, vamos remover o signatário Releases de ambos docker/trusttest e docker/another-trusttest. Observe que docker/another-trusttest pode não ter realmente o signatário Releases em um cenário do mundo real, mas este comando demonstra a sintaxe para remover um signatário de múltiplos repositórios.

docker trust signer remove Releases docker/trusttest docker/another-trusttest

Você será solicitado a confirmar a remoção para cada repositório. Digite y e pressione Enter para cada confirmação.

Removing signer "Releases" from docker/trusttest. Are you sure you want to continue? (y/n): y
Successfully removed signer "Releases" from docker/trusttest
Removing signer "Releases" from docker/another-trusttest. Are you sure you want to continue? (y/n): y
Successfully removed signer "Releases" from docker/another-trusttest

A saída confirma que o signatário Releases foi removido de ambos os repositórios especificados. Este comando é uma maneira conveniente de gerenciar as autorizações de signatários em múltiplos repositórios com uma única ação.

Verificar a remoção do signatário de múltiplos repositórios

Nesta etapa, verificaremos se o signatário foi removido com sucesso de ambos os repositórios especificados na etapa anterior. Usaremos novamente o comando docker trust inspect para cada repositório.

Primeiro, vamos inspecionar os signatários para docker/trusttest. Esperamos que o signatário Releases ainda esteja ausente da lista Signers, pois o removemos em uma etapa anterior e confirmamos sua remoção.

docker trust inspect docker/trusttest

A saída deve mostrar que Releases não está listado em Signers of docker/trusttest.

Signers of docker/trusttest:

ROLE         KEYS
----         ----
Targets      0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Signatures for docker/trusttest:

SIGNER     KEYS
------     ----
Releases   0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Agora, vamos inspecionar os signatários para docker/another-trusttest. Como tentamos remover o signatário Releases também deste repositório, esperamos que ele também esteja ausente da lista Signers para este repositório.

docker trust inspect docker/another-trusttest

A saída para docker/another-trusttest deve indicar que não há signatários, pois hello-world (que marcamos como docker/another-trusttest) não é assinado por padrão, e tentamos remover o signatário Releases (que não estava lá inicialmente para esta tag específica).

No signatures for docker/another-trusttest

Isso confirma que o comando docker trust signer remove, quando usado com múltiplos nomes de repositórios, tenta remover o signatário especificado de cada repositório listado. A verificação para docker/trusttest mostra a remoção bem-sucedida de um repositório que anteriormente tinha o signatário, e a verificação para docker/another-trusttest mostra o estado de um repositório que não tinha o signatário (e, portanto, a tentativa de remoção não o adicionou).

Resumo

Neste laboratório, aprendemos como gerenciar signatários para repositórios Docker usando o comando docker trust. Começamos habilitando o Docker Content Trust e inspecionando os signatários atuais de um repositório usando docker trust inspect. Isso nos permitiu ver quais chaves estavam associadas à assinatura de imagens em um determinado repositório.

Posteriormente, praticamos a remoção de um signatário de um único repositório e verificamos a remoção usando docker trust inspect novamente. Finalmente, estendemos esse conhecimento para remover um signatário de múltiplos repositórios simultaneamente e confirmamos a remoção bem-sucedida em todos os repositórios especificados. Essa experiência prática demonstrou a aplicação prática do comando docker trust signer remove para gerenciar a confiança de conteúdo dentro de um ambiente Docker.