Comment utiliser la commande docker trust sign pour signer 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, vous apprendrez à utiliser la commande docker trust sign pour sécuriser vos images Docker. Nous commencerons par inspecter une image non signée pour comprendre ses caractéristiques avant de la signer. Vous allez ensuite pratiquer la signature d'une étiquette (tag) d'image en tant qu'administrateur de dépôt, affirmant son authenticité, puis vérifier la signature. Enfin, vous explorerez le processus de signature et de vérification d'une étiquette en tant que signataire désigné, démontrant la nature collaborative de la Confiance dans le contenu Docker (Docker Content Trust).


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/tag("Tag an Image") docker/ImageOperationsGroup -.-> docker/push("Push Image to Repository") subgraph Lab Skills docker/inspect -.-> lab-555255{{"Comment utiliser la commande docker trust sign pour signer une image"}} docker/pull -.-> lab-555255{{"Comment utiliser la commande docker trust sign pour signer une image"}} docker/tag -.-> lab-555255{{"Comment utiliser la commande docker trust sign pour signer une image"}} docker/push -.-> lab-555255{{"Comment utiliser la commande docker trust sign pour signer une image"}} end

Inspecter une image non signée

Dans cette étape, nous apprendrons à inspecter une image Docker qui n'a pas été signée. La Confiance dans le contenu Docker (Docker Content Trust) offre un moyen de vérifier l'intégrité et l'authenticité des images Docker. Cependant, toutes les images ne sont pas signées. L'inspection d'une image non signée nous aide à comprendre les informations de base sur l'image avant de nous plonger dans les concepts de signature et de vérification.

Tout d'abord, nous devons télécharger (pull) une image non signée depuis un registre Docker. Nous utiliserons l'image hello-world, qui n'est généralement pas signée par défaut.

docker pull hello-world

Cette commande télécharge l'image hello-world depuis le registre Docker Hub sur votre machine locale. Vous devriez voir une sortie indiquant la progression et la fin du téléchargement.

Ensuite, nous allons inspecter l'image téléchargée à l'aide de la commande docker inspect. Cette commande fournit des informations détaillées sur un objet Docker, y compris les images, les conteneurs, les volumes et les réseaux.

docker inspect hello-world

La sortie de cette commande sera un grand document JSON contenant divers détails sur l'image hello-world. Vous pouvez examiner cette sortie pour voir des informations telles que l'ID de l'image, la date de création, l'architecture, le système d'exploitation et la configuration.

Étant donné que cette image n'est pas signée, vous ne trouverez aucune information liée aux signatures ou à la confiance dans la sortie de la commande docker inspect. C'est la caractéristique principale d'une image non signée lorsqu'elle est vue à travers le prisme de la Confiance dans le contenu Docker.

Signer une étiquette (tag) en tant qu'administrateur de dépôt

Dans cette étape, nous apprendrons à signer une étiquette (tag) d'image Docker en tant qu'administrateur de dépôt. La Confiance dans le contenu Docker (Docker Content Trust) utilise des signatures numériques pour garantir que les images que vous téléchargez (pull) sont exactement celles que le publié a intentionné. En tant qu'administrateur de dépôt, vous avez l'autorité de signer les étiquettes d'image, affirmant leur authenticité.

Avant de pouvoir signer une image, nous devons activer la Confiance dans le contenu Docker. Cela se fait en définissant la variable d'environnement DOCKER_CONTENT_TRUST sur 1.

export DOCKER_CONTENT_TRUST=1

Cette commande active la confiance dans le contenu pour les commandes Docker suivantes dans votre session de terminal actuelle.

Maintenant, étiquetons l'image hello-world que nous avons téléchargée à l'étape précédente avec une nouvelle étiquette qui inclut un nom de dépôt. Nous utiliserons un nom de dépôt fictif your_docker_username/my-signed-image. Remplacez your_docker_username par votre nom d'utilisateur Docker Hub réel si vous en avez un, ou utilisez simplement labexuser pour ce laboratoire.

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

Cette commande crée une nouvelle étiquette labexuser/my-signed-image:latest qui pointe vers la même image que hello-world.

Maintenant, nous allons pousser (push) cette image étiquetée vers un registre. Lorsque la Confiance dans le contenu Docker est activée, pousser une étiquette d'image qui n'a pas été signée vous invitera à la signer.

docker push labexuser/my-signed-image:latest

Lorsque vous exécutez cette commande, Docker vous invitera à créer une nouvelle clé de signature ou à utiliser une clé existante. Étant donné que c'est probablement votre première fois que vous signez, vous serez invité à créer une nouvelle clé. Vous devrez fournir une phrase de passe pour la nouvelle clé. N'oubliez pas cette phrase de passe, car vous en aurez besoin plus tard pour signer d'autres images ou faire tourner les clés.

Après avoir entré et confirmé la phrase de passe, Docker signera l'étiquette d'image et la poussera vers le registre. Vous devriez voir une sortie indiquant le processus de signature et le succès du push.

Vérifier la signature en tant qu'administrateur de dépôt

Dans cette étape, nous allons vérifier la signature de l'étiquette (tag) d'image que nous avons signée à l'étape précédente. En tant qu'administrateur de dépôt, vous pouvez utiliser la Confiance dans le contenu Docker (Docker Content Trust) pour vous assurer que l'image que vous téléchargez (pull) est celle que vous avez signée.

Tout d'abord, assurons-nous que la Confiance dans le contenu Docker est toujours activée. Si vous avez ouvert une nouvelle session de terminal, vous devrez peut-être redéfinir la variable d'environnement.

export DOCKER_CONTENT_TRUST=1

Maintenant, nous allons essayer de télécharger l'étiquette d'image signée. Étant donné que la Confiance dans le contenu Docker est activée, Docker vérifiera la signature avant de télécharger l'image.

docker pull labexuser/my-signed-image:latest

Lorsque vous exécutez cette commande, Docker vérifiera s'il existe une signature valide pour l'étiquette labexuser/my-signed-image:latest. Si la signature est valide et fiable, l'image sera téléchargée. Vous devriez voir une sortie indiquant que l'image est en cours de téléchargement et que la signature est en cours de vérification. La sortie mentionnera explicitement "Verifying trust data for".

Si la signature était invalide ou manquante (et que la confiance dans le contenu est activée), l'opération de téléchargement échouerait, vous empêchant d'utiliser une image potentiellement compromise.

Pour inspecter plus en détail les informations de confiance associées à l'image, vous pouvez utiliser la commande docker trust inspect.

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

Cette commande affichera des informations détaillées sur les signatures associées à l'étiquette d'image spécifiée. Vous devriez voir des informations sur les signataires et les étiquettes signées. Cette sortie confirme que l'étiquette d'image a été signée avec succès et que la signature est reconnue par la Confiance dans le contenu Docker.

Signer une étiquette (tag) en tant que signataire

Dans cette étape, nous allons explorer comment un "signataire" désigné peut signer une étiquette (tag) d'image Docker. Dans un scénario réel, un dépôt peut avoir plusieurs signataires, chacun étant responsable de la signature d'étiquettes ou de versions spécifiques. Cela permet un processus de signature plus distribué et plus sécurisé.

Tout d'abord, assurez-vous que la Confiance dans le contenu Docker (Docker Content Trust) est activée :

export DOCKER_CONTENT_TRUST=1

Maintenant, créons une nouvelle étiquette pour notre image, simulant une version ou une mise à jour différente pour laquelle un signataire pourrait être responsable.

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

Cela crée une nouvelle étiquette labexuser/my-signed-image:v1.0.0 qui pointe vers la même image.

Pour signer cette nouvelle étiquette en tant que "signataire" différent, nous utilisons la commande docker trust sign. Cette commande vous permet de signer explicitement une étiquette spécifique avec une clé spécifique.

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

Lorsque vous exécutez cette commande, Docker vous demandera la phrase de passe de la clé de signature que vous souhaitez utiliser. Si vous utilisez la même clé générée à l'Étape 2, entrez cette phrase de passe. Si vous étiez un signataire différent avec une clé différente, vous utiliseriez la phrase de passe de cette clé.

Après avoir entré avec succès la phrase de passe, Docker signera l'étiquette labexuser/my-signed-image:v1.0.0. Vous devriez voir une sortie confirmant le processus de signature.

Enfin, nous devons pousser (push) les données de confiance mises à jour vers le registre. La commande docker push pour l'étiquette signée inclura les nouvelles informations de signature.

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

Cette commande pousse l'étiquette v1.0.0 ainsi que sa signature associée vers le registre.

Vérifier la signature en tant que signataire

Dans cette étape finale, nous allons vérifier la signature de l'étiquette (tag) d'image v1.0.0 que nous avons signée en tant que "signataire" à l'étape précédente. Cela montre comment tout utilisateur ayant activé la Confiance dans le contenu Docker (Docker Content Trust) peut vérifier l'authenticité d'une image signée par un signataire de confiance.

Tout d'abord, assurez-vous que la Confiance dans le contenu Docker est activée.

export DOCKER_CONTENT_TRUST=1

Maintenant, essayons de télécharger (pull) l'étiquette d'image v1.0.0. Étant donné que la Confiance dans le contenu est activée, Docker vérifiera la signature associée à cette étiquette.

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

De manière similaire à la vérification de l'Étape 3, vous devriez voir une sortie indiquant que Docker vérifie les données de confiance pour l'image puis la télécharge. Cela confirme que la signature que vous avez appliquée en tant que signataire est valide et reconnue.

Pour confirmer davantage les informations de signature, vous pouvez à nouveau utiliser la commande docker trust inspect.

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

La sortie de cette commande montrera les signataires de l'étiquette v1.0.0. Vous devriez voir les informations de clé du signataire que vous avez utilisé à l'étape précédente répertoriées ici. Cela fournit une preuve concrète que l'étiquette a été signée par une entité de confiance.

Ceci conclut notre exploration de la signature et de la vérification des étiquettes d'image Docker à l'aide de la Confiance dans le contenu Docker. En activant la confiance dans le contenu et en utilisant des clés de signature, vous pouvez améliorer considérablement la sécurité de votre flux de travail de conteneur en garantissant l'intégrité et l'authenticité des images que vous utilisez.

Résumé

Dans ce laboratoire (lab), nous avons appris à utiliser la Confiance dans le contenu Docker (Docker Content Trust) en inspectant tout d'abord une image non signée pour comprendre ses informations de base et l'absence de détails de signature. Nous avons ensuite exploré le processus de signature d'une étiquette (tag) d'image Docker en tant qu'administrateur de dépôt, qui consiste à activer la confiance dans le contenu et à utiliser la commande docker trust sign pour attester de l'authenticité de l'image.

Après le processus de signature, nous avons appris à vérifier la signature en tant qu'administrateur de dépôt pour garantir l'intégrité de l'image. Nous avons également pratiqué la signature d'une étiquette en tant que signataire désigné, démontrant la délégation de l'autorité de signature au sein d'un dépôt. Enfin, nous avons vérifié la signature en tant que signataire, confirmant l'application et la vérification réussies de la signature déléguée.