Automatisation avec la confiance de contenu
Il est très courant que Docker Content Trust soit intégré dans des systèmes d'automatisation existants. Pour permettre aux outils d'envelopper Docker et de pousser du contenu de confiance, il y a des variables d'environnement qui peuvent être transmises au client.
Ce guide suit les étapes décrites dans Signer des images avec Docker Content Trust. Assurez-vous de comprendre et de suivre les prérequis.
Lorsque vous travaillez directement avec le client Notary, il utilise son propre ensemble de variables d'environnement.
Ajouter une clé privée de délégation
Pour automatiser l'importation d'une clé privée de délégation dans le magasin de confiance Docker local, nous devons passer une phrase de passe pour la nouvelle clé. Cette phrase de passe sera requise chaque fois que cette délégation signe une étiquette.
$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="mypassphrase123"
$ docker trust key load delegation.key --name jeff
Loading key from "delegation.key"...
Successfully imported key from delegation.key
Ajouter une clé publique de délégation
Si vous initialisez un dépôt en même temps que vous ajoutez une clé publique de délégation, alors vous devrez utiliser la phrase de passe de la clé racine canonique Notary locale pour créer les données de confiance du dépôt. Si le dépôt a déjà été initié, alors vous n'avez besoin que de la phrase de passe du dépôt.
# Exportez la phrase de passe de la clé racine locale si nécessaire.
$ export DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE="rootpassphrase123"
# Exportez la phrase de passe du dépôt
$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="repopassphrase123"
# Initialisez le dépôt et poussez la délégation
$ docker trust signer add --key delegation.crt jeff registry.example.com/admin/demo
Adding signer "jeff" to registry.example.com/admin/demo...
Initializing signed repository for registry.example.com/admin/demo...
Successfully initialized "registry.example.com/admin/demo"
Successfully added signer: registry.example.com/admin/demo
Signer une image
Enfin, lors de la signature d'une image, nous devrons exporter la phrase de passe de la
clé de signature. Celle-ci a été créée lorsque la clé a été chargée dans le magasin de confiance Docker local
avec $ docker trust key load
.
$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="mypassphrase123"
$ docker trust sign registry.example.com/admin/demo:1
Signing and pushing trust data for local image registry.example.com/admin/demo:1, may overwrite remote trust data
The push refers to repository [registry.example.com/admin/demo]
428c97da766c: Layer already exists
2: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
Signing and pushing trust metadata
Successfully signed registry.example.com/admin/demo:1
Construire avec la confiance de contenu
Vous pouvez également construire avec la confiance de contenu. Avant d'exécuter la commande docker build
,
vous devriez définir la variable d'environnement DOCKER_CONTENT_TRUST
soit manuellement soit
de manière scriptée. Considérez le Dockerfile simple ci-dessous.
# syntax=docker/dockerfile:1
FROM docker/trusttest:latest
RUN echo
La balise FROM
tire une image signée. Vous ne pouvez pas construire une image qui a un
FROM
qui n'est pas présent localement ou signé. Étant donné que les données de confiance de contenu
existent pour la balise latest
, la construction suivante devrait réussir :
$ docker build -t docker/trusttest:testing .
Using default tag: latest
latest: Pulling from docker/trusttest
b3dbab3810fc: Pull complete
a9539b34a6ab: Pull complete
Digest: sha256:d149ab53f871
Si la confiance de contenu est activée, construire à partir d'un Dockerfile qui dépend d'une balise sans données de confiance, fait échouer la commande de construction :
$ docker build -t docker/trusttest:testing .
unable to process Dockerfile: No trust data for notrust