Comment utiliser la commande docker scout attestation add pour attacher des attestations à une image

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à attacher des attestations à une image Docker en utilisant la commande docker scout attestation add. Les attestations sont des métadonnées précieuses qui peuvent fournir des informations cruciales sur l'origine d'une image, le processus de construction, les résultats des scans de sécurité, etc.

Vous commencerez par préparer une image Docker et un fichier d'attestation simple. Ensuite, vous utiliserez la commande docker scout attestation add avec le paramètre --file pour attacher l'attestation à l'image. Vous explorerez également comment spécifier un type de prédicat particulier pour l'attestation en utilisant le paramètre --predicate-type. Enfin, vous vérifierez que les attestations ont été ajoutées avec succès à l'image.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/ls -.-> lab-555197{{"Comment utiliser la commande docker scout attestation add pour attacher des attestations à une image"}} docker/inspect -.-> lab-555197{{"Comment utiliser la commande docker scout attestation add pour attacher des attestations à une image"}} docker/pull -.-> lab-555197{{"Comment utiliser la commande docker scout attestation add pour attacher des attestations à une image"}} docker/images -.-> lab-555197{{"Comment utiliser la commande docker scout attestation add pour attacher des attestations à une image"}} docker/build -.-> lab-555197{{"Comment utiliser la commande docker scout attestation add pour attacher des attestations à une image"}} end

Préparer une image et un fichier d'attestation

Dans cette étape, nous allons préparer une image Docker et un fichier d'attestation. Une attestation est un élément de métadonnées qui fournit des informations sur une image, telles que la manière dont elle a été construite, analysée pour détecter les vulnérabilités ou signée. Nous utiliserons un simple fichier texte comme fichier d'attestation pour cet exemple.

Tout d'abord, téléchargeons une image Docker de base que nous allons utiliser. Nous utiliserons l'image alpine, qui est une distribution Linux légère.

docker pull alpine:latest

Vous devriez voir un affichage indiquant que l'image est en cours de téléchargement.

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

Ensuite, nous allons créer un simple fichier d'attestation. Ce fichier contiendra des données JSON arbitraires. Dans un scénario réel, ce fichier contiendrait des données structurées sur l'image, telles que des informations de construction, des résultats d'analyse ou des détails de signature.

Nous allons créer un fichier nommé attestation.json dans votre répertoire ~/project.

nano ~/project/attestation.json

Dans l'éditeur nano, collez le contenu JSON suivant :

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

Appuyez sur Ctrl + X, puis Y, et Entrée pour enregistrer le fichier.

Vous pouvez vérifier le contenu du fichier en utilisant la commande cat :

cat ~/project/attestation.json

La sortie devrait être le contenu JSON que vous venez de coller.

Maintenant, vous avez à la fois l'image Docker (alpine:latest) et le fichier d'attestation (~/project/attestation.json) prêts pour les étapes suivantes.

Ajouter une attestation à l'image en utilisant --file

Dans cette étape, nous allons ajouter le fichier d'attestation que nous avons créé à l'étape précédente à l'image alpine:latest. Nous utiliserons la commande docker buildx imagetools create avec le paramètre --attestation-file. Cette commande nous permet de créer un nouveau manifeste d'image avec des métadonnées supplémentaires, y compris des attestations.

La syntaxe de base pour ajouter un fichier d'attestation est la suivante :

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

Ici, <source_image> est l'image à laquelle vous souhaitez ajouter l'attestation, <attestation_file_path> est le chemin de votre fichier d'attestation, et <new_image_tag> est l'étiquette (tag) pour le nouveau manifeste d'image qui inclura l'attestation.

Ajoutons le fichier ~/project/attestation.json à l'image alpine:latest et étiquetons la nouvelle image comme alpine:attested.

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

Vous devriez voir un affichage indiquant que le nouveau manifeste d'image est en cours de création et d'envoi.

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

Cette commande crée un nouveau manifeste d'image avec l'étiquette alpine:attested qui inclut les données d'attestation du fichier ~/project/attestation.json. L'image originale alpine:latest reste inchangée.

Vous pouvez maintenant lister vos images Docker pour voir la nouvelle image alpine:attested créée.

docker images

Vous devriez voir à la fois alpine:latest et alpine:attested dans la liste.

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

Notez que l'IMAGE ID peut être le même pour les deux images, car imagetools create réutilise souvent les couches d'image sous - jacentes et ne crée qu'un nouveau manifeste.

Ajouter une attestation avec un type de prédicat spécifique en utilisant --predicate-type

Dans l'étape précédente, nous avons ajouté une attestation en utilisant le paramètre --attestation-file. Docker a automatiquement déduit le type de prédicat à partir du champ predicateType dans le fichier JSON. Cependant, vous pouvez également spécifier explicitement le type de prédicat en utilisant le paramètre --predicate-type. Cela est utile si vos données d'attestation ne contiennent pas le champ predicateType ou si vous souhaitez remplacer celui du fichier.

La syntaxe de base pour ajouter une attestation avec un type de prédicat spécifique est la suivante :

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

Ici, <predicate_type_url> est l'URL représentant le type d'attestation.

Ajoutons de nouveau le même fichier ~/project/attestation.json à l'image alpine:latest, mais cette fois, nous allons définir explicitement le type de prédicat sur https://example.com/another-attestation/v2 et étiqueter la nouvelle image comme 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

Vous devriez voir un affichage similaire à l'étape précédente, indiquant la création d'un nouveau manifeste d'image.

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

Cette commande crée un nouveau manifeste d'image avec l'étiquette alpine:attested-v2. Même si le fichier attestation.json contient "predicateType": "https://example.com/attestation/v1", le paramètre --predicate-type remplace cela, et l'attestation dans le nouveau manifeste aura le type de prédicat https://example.com/another-attestation/v2.

Listons à nouveau les images pour voir la nouvelle étiquette.

docker images

Vous devriez maintenant voir alpine:latest, alpine:attested et alpine:attested-v2.

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

Dans l'étape suivante, nous allons vérifier que les attestations ont été ajoutées correctement et examiner leur contenu.

Vérifier les attestations ajoutées

Dans cette étape finale, nous allons vérifier que les attestations ont été ajoutées avec succès aux images et examiner leur contenu. Nous pouvons utiliser la commande docker buildx imagetools inspect pour afficher le manifeste d'une image, qui inclut des informations sur les attestations associées.

La syntaxe de base pour inspecter un manifeste d'image est la suivante :

docker buildx imagetools inspect <image_tag>

Inspectons d'abord l'image alpine:attested, que nous avons créée en utilisant le paramètre --attestation-file.

docker buildx imagetools inspect alpine:attested

Vous devriez voir un affichage détaillé du manifeste de l'image. Recherchez une section relative aux "attestations". Vous devriez trouver une entrée avec le type de prédicat https://example.com/attestation/v1 et les données de votre fichier attestation.json.

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

Maintenant, inspectons l'image alpine:attested-v2, que nous avons créée en utilisant le paramètre --predicate-type pour remplacer le type de prédicat.

docker buildx imagetools inspect alpine:attested-v2

Encore une fois, recherchez la section "attestations". Cette fois, vous devriez voir une entrée avec le type de prédicat https://example.com/another-attestation/v2, même si le contenu des données d'attestation est le même que précédemment.

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

Cela confirme que nous avons ajouté avec succès des attestations aux images Docker et que le paramètre --predicate-type peut être utilisé pour définir explicitement le type de prédicat.

Vous avez maintenant appris à préparer une image et un fichier d'attestation, à ajouter des attestations à une image en utilisant à la fois les paramètres --attestation-file et --predicate-type, et à vérifier les attestations ajoutées en utilisant docker buildx imagetools inspect.

Résumé

Dans ce laboratoire (lab), nous avons appris à attacher des attestations à une image Docker en utilisant la commande docker scout attestation add. Nous avons commencé par préparer une image Docker (alpine:latest) et créer un simple fichier d'attestation JSON. Nous avons ensuite utilisé la commande docker scout attestation add avec le paramètre --file pour attacher le fichier d'attestation à l'image. Nous avons également exploré comment spécifier un type de prédicat personnalisé pour l'attestation en utilisant le paramètre --predicate-type. Enfin, nous avons vérifié que les attestations ont été ajoutées avec succès à l'image.