Jouer dans un bac à sable de confiance de contenu
Cette page explique comment configurer et utiliser un bac à sable pour expérimenter avec la confiance. Le bac à sable vous permet de configurer et d'essayer les opérations de confiance localement sans impacter vos images de production.
Avant de travailler avec ce bac à sable, vous devriez avoir lu l' aperçu de la confiance.
Prérequis
Ces instructions supposent que vous exécutez sous Linux ou macOS. Vous pouvez exécuter ce bac à sable sur une machine locale ou sur une machine virtuelle. Vous devez avoir les privilèges pour exécuter les commandes docker sur votre machine locale ou dans la VM.
Ce bac à sable nécessite l'installation de deux outils Docker : Docker Engine >= 1.10.0 et Docker Compose >= 1.6.0. Pour installer Docker Engine, choisissez dans la liste des plateformes supportées. Pour installer Docker Compose, voir les instructions détaillées ici.
Que contient le bac à sable ?
Si vous utilisez simplement la confiance prête à l'emploi, vous n'avez besoin que de votre client Docker Engine et d'un accès au Docker Hub. Le bac à sable imite un environnement de confiance de production, et configure ces composants supplémentaires.
Conteneur | Description |
---|---|
trustsandbox | Un conteneur avec la dernière version de Docker Engine et avec des certificats préconfigurés. C'est votre bac à sable où vous pouvez utiliser le client docker pour tester les opérations de confiance. |
Serveur Registry | Un service de registre local. |
Serveur Notary | Le service qui fait tout le gros travail de gestion de la confiance |
Cela signifie que vous exécutez votre propre serveur de confiance de contenu (Notary) et votre registre. Si vous travaillez exclusivement avec le Docker Hub, vous n'auriez pas besoin de ces composants. Ils sont intégrés dans le Docker Hub pour vous. Pour le bac à sable, cependant, vous construisez votre propre environnement de production factice complet.
Dans le conteneur trustsandbox
, vous interagissez avec votre registre local plutôt
qu'avec le Docker Hub. Cela signifie que vos dépôts d'images quotidiens ne sont pas utilisés.
Ils sont protégés pendant que vous jouez.
Lorsque vous jouez dans le bac à sable, vous créez également des clés racine et de dépôt. Le
bac à sable est configuré pour stocker toutes les clés et fichiers à l'intérieur du conteneur trustsandbox
.
Puisque les clés que vous créez dans le bac à sable ne sont que pour le jeu,
détruire le conteneur les détruit également.
En utilisant une image docker-in-docker pour le conteneur trustsandbox
, vous
ne polluez pas non plus votre cache de démon Docker réel avec les images que vous poussez et tirez.
Les images sont stockées dans un volume anonyme attaché à ce conteneur,
et peuvent être détruites après avoir détruit le conteneur.
Construire le bac à sable
Dans cette section, vous utilisez Docker Compose pour spécifier comment configurer et lier ensemble
le conteneur trustsandbox
, le serveur Notary, et le serveur Registry.
-
Créez un nouveau répertoire
trustsandbox
et allez dedans.$ mkdir trustsandbox $ cd trustsandbox
-
Créez un fichier appelé
compose.yaml
avec votre éditeur favori. Par exemple, en utilisant vim :$ touch compose.yaml $ vim compose.yaml
-
Ajoutez ce qui suit au nouveau fichier.
version: "2" services: notaryserver: image: dockersecurity/notary_autobuilds:server-v0.5.1 volumes: - notarycerts:/var/lib/notary/fixtures networks: - sandbox environment: - NOTARY_SERVER_STORAGE_TYPE=memory - NOTARY_SERVER_TRUST_SERVICE_TYPE=local sandboxregistry: image: registry:2.4.1 networks: - sandbox container_name: sandboxregistry trustsandbox: image: docker:dind networks: - sandbox volumes: - notarycerts:/notarycerts privileged: true container_name: trustsandbox entrypoint: "" command: |- sh -c ' cp /notarycerts/root-ca.crt /usr/local/share/ca-certificates/root-ca.crt && update-ca-certificates && dockerd-entrypoint.sh --insecure-registry sandboxregistry:5000' volumes: notarycerts: external: false networks: sandbox: external: false
-
Sauvegardez et fermez le fichier.
-
Exécutez les conteneurs sur votre système local.
$ docker compose up -d
La première fois que vous exécutez ceci, les images docker-in-docker, serveur Notary, et registre sont téléchargées depuis Docker Hub.
Jouer dans le bac à sable
Maintenant que tout est configuré, vous pouvez entrer dans votre conteneur trustsandbox
et
commencer à tester la confiance de contenu Docker. Depuis votre machine hôte, obtenez un shell
dans le conteneur trustsandbox
.
$ docker container exec -it trustsandbox sh
/ #
Tester quelques opérations de confiance
Maintenant, tirez quelques images depuis l'intérieur du conteneur trustsandbox
.
-
Téléchargez une image
docker
pour tester./ # docker pull docker/trusttest docker pull docker/trusttest Using default tag: latest latest: Pulling from docker/trusttest b3dbab3810fc: Pull complete a9539b34a6ab: Pull complete Digest: sha256:d149ab53f8718e987c3a3024bb8aa0e2caadf6c0328f1d9d850b2a2a67f2819a Status: Downloaded newer image for docker/trusttest:latest
-
Étiquetez-la pour être poussée vers notre registre de bac à sable :
/ # docker tag docker/trusttest sandboxregistry:5000/test/trusttest:latest
-
Activez la confiance de contenu.
/ # export DOCKER_CONTENT_TRUST=1
-
Identifiez le serveur de confiance.
/ # export DOCKER_CONTENT_TRUST_SERVER=https://notaryserver:4443
Cette étape n'est nécessaire que parce que le bac à sable utilise son propre serveur. Normalement, si vous utilisez le Docker Public Hub, cette étape n'est pas nécessaire.
-
Tirez l'image de test.
/ # docker pull sandboxregistry:5000/test/trusttest Using default tag: latest Error: remote trust data does not exist for sandboxregistry:5000/test/trusttest: notaryserver:4443 does not have trust data for sandboxregistry:5000/test/trusttest
Vous voyez une erreur, parce que ce contenu n'existe pas encore sur le
notaryserver
. -
Poussez et signez l'image de confiance.
/ # docker push sandboxregistry:5000/test/trusttest:latest The push refers to a repository [sandboxregistry:5000/test/trusttest] 5f70bf18a086: Pushed c22f7bc058a9: Pushed latest: digest: sha256:ebf59c538accdf160ef435f1a19938ab8c0d6bd96aef8d4ddd1b379edf15a926 size: 734 Signing and pushing trust metadata You are about to create a new root signing key passphrase. This passphrase will be used to protect the most sensitive key in your signing system. Please choose a long, complex passphrase and be careful to keep the password and the key file itself secure and backed up. It is highly recommended that you use a password manager to generate the passphrase and keep it safe. There will be no way to recover this key. You can find the key in your config directory. Enter passphrase for new root key with ID 27ec255: Repeat passphrase for new root key with ID 27ec255: Enter passphrase for new repository key with ID 58233f9 (sandboxregistry:5000/test/trusttest): Repeat passphrase for new repository key with ID 58233f9 (sandboxregistry:5000/test/trusttest): Finished initializing "sandboxregistry:5000/test/trusttest" Successfully signed "sandboxregistry:5000/test/trusttest":latest
Parce que vous poussez ce dépôt pour la première fois, Docker crée de nouvelles clés racine et de dépôt et vous demande des phrases de passe avec lesquelles les chiffrer. Si vous poussez à nouveau après cela, il ne demande que la phrase de passe du dépôt afin de pouvoir déchiffrer la clé et signer à nouveau.
-
Essayez de tirer l'image que vous venez de pousser :
/ # docker pull sandboxregistry:5000/test/trusttest Using default tag: latest Pull (1 of 1): sandboxregistry:5000/test/trusttest:latest@sha256:ebf59c538accdf160ef435f1a19938ab8c0d6bd96aef8d4ddd1b379edf15a926 sha256:ebf59c538accdf160ef435f1a19938ab8c0d6bd96aef8d4ddd1b379edf15a926: Pulling from test/trusttest Digest: sha256:ebf59c538accdf160ef435f1a19938ab8c0d6bd96aef8d4ddd1b379edf15a926 Status: Downloaded newer image for sandboxregistry:5000/test/trusttest@sha256:ebf59c538accdf160ef435f1a19938ab8c0d6bd96aef8d4ddd1b379edf15a926 Tagging sandboxregistry:5000/test/trusttest@sha256:ebf59c538accdf160ef435f1a19938ab8c0d6bd96aef8d4ddd1b379edf15a926 as sandboxregistry:5000/test/trusttest:latest
Tester avec des images malveillantes
Que se passe-t-il lorsque les données sont corrompues et que vous essayez de les tirer lorsque la confiance est
activée ? Dans cette section, vous entrez dans le sandboxregistry
et altérez certaines
données. Ensuite, vous essayez de les tirer.
-
Laissez le shell et le conteneur
trustsandbox
en cours d'exécution. -
Ouvrez un nouveau terminal interactif depuis votre hôte, et obtenez un shell dans le conteneur
sandboxregistry
.$ docker container exec -it sandboxregistry bash root@65084fc6f047:/#
-
Listez les couches pour l'image
test/trusttest
que vous avez poussée :root@65084fc6f047:/# ls -l /var/lib/registry/docker/registry/v2/repositories/test/trusttest/_layers/sha256 total 12 drwxr-xr-x 2 root root 4096 Jun 10 17:26 a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4 drwxr-xr-x 2 root root 4096 Jun 10 17:26 aac0c133338db2b18ff054943cee3267fe50c75cdee969aed88b1992539ed042 drwxr-xr-x 2 root root 4096 Jun 10 17:26 cc7629d1331a7362b5e5126beb5bf15ca0bf67eb41eab994c719a45de53255cd
-
Allez dans le stockage de registre pour une de ces couches (c'est dans un répertoire différent) :
root@65084fc6f047:/# cd /var/lib/registry/docker/registry/v2/blobs/sha256/aa/aac0c133338db2b18ff054943cee3267fe50c75cdee969aed88b1992539ed042
-
Ajoutez des données malveillantes à une des couches
trusttest
:root@65084fc6f047:/# echo "Malicious data" > data
-
Retournez à votre terminal
trustsandbox
. -
Listez l'image
trusttest
./ # docker image ls | grep trusttest REPOSITORY TAG IMAGE ID CREATED SIZE docker/trusttest latest cc7629d1331a 11 months ago 5.025 MB sandboxregistry:5000/test/trusttest latest cc7629d1331a 11 months ago 5.025 MB sandboxregistry:5000/test/trusttest <none> cc7629d1331a 11 months ago 5.025 MB
-
Supprimez l'image
trusttest:latest
de notre cache local./ # docker image rm -f cc7629d1331a Untagged: docker/trusttest:latest Untagged: sandboxregistry:5000/test/trusttest:latest Untagged: sandboxregistry:5000/test/trusttest@sha256:ebf59c538accdf160ef435f1a19938ab8c0d6bd96aef8d4ddd1b379edf15a926 Deleted: sha256:cc7629d1331a7362b5e5126beb5bf15ca0bf67eb41eab994c719a45de53255cd Deleted: sha256:2a1f6535dc6816ffadcdbe20590045e6cbf048d63fd4cc753a684c9bc01abeea Deleted: sha256:c22f7bc058a9a8ffeb32989b5d3338787e73855bf224af7aa162823da015d44c
Docker ne retélécharge pas les images qu'il a déjà en cache, mais nous voulons que Docker tente de télécharger l'image altérée depuis le registre et la rejette parce qu'elle est invalide.
-
Tirez l'image à nouveau. Cela télécharge l'image depuis le registre, parce que nous ne l'avons pas en cache.
/ # docker pull sandboxregistry:5000/test/trusttest Using default tag: latest Pull (1 of 1): sandboxregistry:5000/test/trusttest:latest@sha256:35d5bc26fd358da8320c137784fe590d8fcf9417263ef261653e8e1c7f15672e sha256:35d5bc26fd358da8320c137784fe590d8fcf9417263ef261653e8e1c7f15672e: Pulling from test/trusttest aac0c133338d: Retrying in 5 seconds a3ed95caeb02: Download complete error pulling image configuration: unexpected EOF
Le tirage ne s'est pas terminé parce que le système de confiance n'a pas pu vérifier l'image.
Plus de jeu dans le bac à sable
Maintenant, vous avez un bac à sable de confiance de contenu Docker complet sur votre système local, n'hésitez pas à jouer avec et voir comment il se comporte. Si vous trouvez des problèmes de sécurité avec Docker, n'hésitez pas à nous envoyer un email à [email protected].
Nettoyer votre bac à sable
Lorsque vous avez terminé, et que vous voulez nettoyer tous les services que vous avez démarrés et tous les volumes anonymes qui ont été créés, exécutez simplement la commande suivante dans le répertoire où vous avez créé votre fichier Docker Compose :
$ docker compose down -v