Como usar o comando docker scout attestation add para anexar atestados a uma imagem

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como anexar atestados a uma imagem Docker usando o comando docker scout attestation add. Atestados são metadados valiosos que podem fornecer informações cruciais sobre a origem de uma imagem, o processo de construção, os resultados da verificação de segurança e muito mais.

Você começará preparando uma imagem Docker e um arquivo de atestado simples. Em seguida, usará o comando docker scout attestation add com a flag --file para anexar o atestado à imagem. Você também explorará como especificar um tipo de predicado específico para o atestado usando a flag --predicate-type. Finalmente, você verificará se os atestados foram adicionados com sucesso à imagem.

Prepare uma imagem e um arquivo de atestado

Nesta etapa, prepararemos uma imagem Docker e um arquivo de atestado. Um atestado é um pedaço de metadados que fornece informações sobre uma imagem, como ela foi construída, verificada quanto a vulnerabilidades ou assinada. Usaremos um arquivo de texto simples como nosso arquivo de atestado para este exemplo.

Primeiro, vamos puxar uma imagem Docker básica que usaremos. Usaremos a imagem alpine, que é uma distribuição Linux leve.

docker pull alpine:latest

Você deve ver uma saída indicando que a imagem está sendo puxada e baixada.

latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Em seguida, criaremos um arquivo de atestado simples. Este arquivo conterá alguns dados JSON arbitrários. Em um cenário do mundo real, este arquivo conteria dados estruturados sobre a imagem, como informações de construção, resultados de verificação ou detalhes de assinatura.

Criaremos um arquivo chamado attestation.json no seu diretório ~/project.

nano ~/project/attestation.json

Dentro do editor nano, cole o seguinte conteúdo JSON:

{
  "predicateType": "https://example.com/attestation/v1",
  "data": {
    "key": "value",
    "another_key": 123
  }
}

Pressione Ctrl + X, depois Y e Enter para salvar o arquivo.

Você pode verificar o conteúdo do arquivo usando o comando cat:

cat ~/project/attestation.json

A saída deve ser o conteúdo JSON que você acabou de colar.

Agora você tem a imagem Docker (alpine:latest) e o arquivo de atestado (~/project/attestation.json) prontos para as próximas etapas.

Adicionar um atestado à imagem usando --file

Nesta etapa, adicionaremos o arquivo de atestado que criamos na etapa anterior à imagem alpine:latest. Usaremos o comando docker buildx imagetools create com a flag --attestation-file. Este comando nos permite criar um novo manifesto de imagem com metadados adicionais, incluindo atestados.

A sintaxe básica para adicionar um arquivo de atestado é:

docker buildx imagetools create <source_image> --attestation-file <attestation_file_path> --tag <new_image_tag>

Aqui, <source_image> é a imagem à qual você deseja adicionar o atestado, <attestation_file_path> é o caminho para o seu arquivo de atestado e <new_image_tag> é a tag para o novo manifesto de imagem que incluirá o atestado.

Vamos adicionar o arquivo ~/project/attestation.json à imagem alpine:latest e marcar a nova imagem como alpine:attested.

docker buildx imagetools create alpine:latest --attestation-file ~/project/attestation.json --tag alpine:attested

Você deve ver uma saída indicando que o novo manifesto de imagem está sendo criado e enviado.

...
unpacking to docker.io/library/alpine:attested done

Este comando cria um novo manifesto de imagem com a tag alpine:attested que inclui os dados de atestado de ~/project/attestation.json. A imagem original alpine:latest permanece inalterada.

Agora você pode listar suas imagens Docker para ver a imagem alpine:attested recém-criada.

docker images

Você deve ver alpine:latest e alpine:attested na lista.

REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
alpine       attested  <image_id>     ...            ...
alpine       latest    <image_id>     ...            ...
...

Observe que o IMAGE ID pode ser o mesmo para ambas as imagens, pois imagetools create geralmente reutiliza as camadas de imagem subjacentes e apenas cria um novo manifesto.

Adicionar um atestado com um tipo de predicado específico usando --predicate-type

Na etapa anterior, adicionamos um atestado usando a flag --attestation-file. O Docker inferiu automaticamente o tipo de predicado do campo predicateType dentro do arquivo JSON. No entanto, você também pode especificar explicitamente o tipo de predicado usando a flag --predicate-type. Isso é útil se seus dados de atestado não incluírem o campo predicateType ou se você quiser substituir o que está no arquivo.

A sintaxe básica para adicionar um atestado com um tipo de predicado específico é:

docker buildx imagetools create <source_image> --attestation-file <attestation_file_path> --predicate-type <predicate_type_url> --tag <new_image_tag>

Aqui, <predicate_type_url> é a URL que representa o tipo de atestado.

Vamos adicionar o mesmo arquivo ~/project/attestation.json à imagem alpine:latest novamente, mas desta vez definiremos explicitamente o tipo de predicado como https://example.com/another-attestation/v2 e marcaremos a nova imagem como alpine:attested-v2.

docker buildx imagetools create alpine:latest --attestation-file ~/project/attestation.json --predicate-type https://example.com/another-attestation/v2 --tag alpine:attested-v2

Você deve ver uma saída semelhante à etapa anterior, indicando a criação de um novo manifesto de imagem.

...
unpacking to docker.io/library/alpine:attested-v2 done

Este comando cria um novo manifesto de imagem com a tag alpine:attested-v2. Mesmo que o arquivo attestation.json contenha "predicateType": "https://example.com/attestation/v1", a flag --predicate-type substitui isso, e o atestado no novo manifesto terá o tipo de predicado https://example.com/another-attestation/v2.

Vamos listar as imagens novamente para ver a nova tag.

docker images

Você deve agora ver alpine:latest, alpine:attested e alpine:attested-v2.

REPOSITORY   TAG           IMAGE ID       CREATED        SIZE
alpine       attested-v2   <image_id>     ...            ...
alpine       attested      <image_id>     ...            ...
alpine       latest        <image_id>     ...            ...
...

Na próxima etapa, verificaremos se os atestados foram adicionados corretamente e inspecionaremos seus conteúdos.

Verificar os atestados adicionados

Nesta etapa final, verificaremos se os atestados foram adicionados com sucesso às imagens e inspecionaremos seus conteúdos. Podemos usar o comando docker buildx imagetools inspect para visualizar o manifesto de uma imagem, que inclui informações sobre quaisquer atestados associados.

A sintaxe básica para inspecionar um manifesto de imagem é:

docker buildx imagetools inspect <image_tag>

Vamos primeiro inspecionar a imagem alpine:attested, que criamos usando a flag --attestation-file.

docker buildx imagetools inspect alpine:attested

Você deve ver uma saída detalhada sobre o manifesto da imagem. Procure uma seção relacionada a "attestations" (atestados). Você deve encontrar uma entrada com o tipo de predicado https://example.com/attestation/v1 e os dados do seu arquivo attestation.json.

...
  "attestations": [
    {
      "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
      "payload": "...",
      "predicateType": "https://example.com/attestation/v1"
    }
  ],
...

Agora, vamos inspecionar a imagem alpine:attested-v2, que criamos usando a flag --predicate-type para substituir o tipo de predicado.

docker buildx imagetools inspect alpine:attested-v2

Novamente, procure a seção "attestations". Desta vez, você deve ver uma entrada com o tipo de predicado https://example.com/another-attestation/v2, mesmo que o conteúdo dos dados do atestado seja o mesmo de antes.

...
  "attestations": [
    {
      "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
      "payload": "...",
      "predicateType": "https://example.com/another-attestation/v2"
    }
  ],
...

Isso confirma que adicionamos com sucesso os atestados às imagens Docker e que a flag --predicate-type pode ser usada para definir explicitamente o tipo de predicado.

Você agora aprendeu como preparar uma imagem e um arquivo de atestado, adicionar atestados a uma imagem usando as flags --attestation-file e --predicate-type, e verificar os atestados adicionados usando docker buildx imagetools inspect.

Resumo

Neste laboratório, aprendemos como anexar atestados a uma imagem Docker usando o comando docker scout attestation add. Começamos preparando uma imagem Docker (alpine:latest) e criando um simples arquivo de atestado JSON. Em seguida, usamos o comando docker scout attestation add com a flag --file para anexar o arquivo de atestado à imagem. Também exploramos como especificar um tipo de predicado personalizado para o atestado usando a flag --predicate-type. Finalmente, verificamos se os atestados foram adicionados com sucesso à imagem.