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.



