92 votes

comment gérez-vous les valeurs secrètes avec docker-compose v3.1?

La version 3.1 de la spécification docker-compose.yml introduit la prise en charge des secrets .

J'ai essayé ceci:

 version: '3.1'

services:
  a: 
    image: tutum/hello-world
  secret: 
    password: the_password
  b:
    image: tutum/hello-world
 

$ docker-compose up retours:

Unsupported config option for services.secret: 'password'

Comment pouvons-nous utiliser la fonctionnalité de secrets dans la pratique?

163voto

Mike Hearn Points 693

Vous pouvez lire la section correspondante de la documentation officielle.

Pour utiliser les secrets que vous devez ajouter deux choses en docker-compose.yml le fichier. Tout d'abord, un niveau supérieur secrets: bloc qui définit tous les secrets. Ensuite, un autre secrets: bloc sous chaque service qui spécifie ce qui les secrets, le service doit recevoir.

Comme un exemple, créer deux types de secrets que Docker va comprendre: externe secrets et fichier secrets.

1. Créer un "alias" secret à l'aide de docker secret create

Première chose: secrets d'utilisation avec menu fixe, le nœud doit être partie d'un essaim.

$ docker swarm init

Ensuite, créer un "alias" secret:

$ echo "This is an external secret" | docker secret create my_external_secret -

(Assurez-vous d'inclure le dernier tableau de bord, -. Il est facile de rater.)

2. Écrire un autre secret dans un fichier

$ echo "This is a file secret." > my_file_secret.txt

3. Créer un docker-compose.yml le fichier qui utilise à la fois les secrets

Maintenant que les deux types de secrets sont créés, ici, c'est l' docker-compose.yml le fichier qui sera lu à la fois de ceux et de les écrire dans l' web service:

version: '3.1'

services:
  web:
    image: nginxdemos/hello
    secrets:                    # secrets block only for 'web' service
     - my_external_secret
     - my_file_secret

secrets:                        # top level secrets block
  my_external_secret:
    external: true
  my_file_secret:
    file: my_file_secret.txt

Docker peut lire les secrets soit à partir de sa propre base de données (par exemple, secrets faite avec docker secret create) ou à partir d'un fichier. Le ci-dessus montre les deux exemples.

4. Déployer votre test de la pile

Déployer la pile à l'aide:

$ docker stack deploy --compose-file=docker-compose.yml secret_test

Cela va créer une instance de l' web service, nommé secret_test_web.

5. Vérifiez que le conteneur créé par le service a deux secrets

Utiliser docker exec -ti [container] /bin/sh afin de vérifier que les secrets existent.

(Note: dans le dessous de docker exec de la commande, l' m2jgac... partie va être différent sur votre ordinateur. Exécutez docker ps pour trouver votre nom de conteneur.)

$ docker exec -ti secret_test_web.1.m2jgacogzsiaqhgq1z0yrwekd /bin/sh

# Now inside secret_test_web; secrets are contained in /run/secrets/
root@secret_test_web:~$ cd /run/secrets/

root@secret_test_web:/run/secrets$ ls
my_external_secret  my_file_secret

root@secret_test_web:/run/secrets$ cat my_external_secret
This is an external secret

root@secret_test_web:/run/secrets$ cat my_file_secret
This is a file secret.

Si tout va bien, les deux secrets nous avons créé dans les étapes 1 et 2 doivent être à l'intérieur de l' web conteneur qui a été créé lorsque nous avons déployé notre stack.

17voto

Vanuan Points 4751

Étant donné que vous avez un service d' myapp et un secrets fichier secrets.yml:

Créer un fichier composer:

version: '3.1'

services:
  myapp:
    build: .
    secrets:
      secrets_yaml

Disposition un secret à l'aide de cette commande:

docker secret create secrets_yaml secrets.yml

Déployer votre service à l'aide de cette commande:

docker deploy --compose-file docker-compose.yml myappstack

Maintenant, votre application peut accéder au dossier secret à l' /run/secrets/secrets_yaml. Vous pouvez coder en dur le chemin d'accès dans votre application ou de créer un lien symbolique.


L'autre question

Cette réponse est probablement à la question "comment faites-vous votre disposition les secrets de votre menu fixe essaim de cluster".

La question initiale "comment gérez-vous le secret des valeurs avec menu fixe composé" implique que le docker-composition de fichier contient le secret des valeurs. Il n'a pas.

Il y a une autre question: "Où voulez-vous stocker les canonique source de l' secrets.yml le fichier". C'est à vous de voir. Vous pouvez les stocker dans votre tête, imprimer sur une feuille de papier, utilisez un gestionnaire de mot de passe, utilisez un des secrets de l'application/de la base de données. Heck, vous pouvez même utiliser un dépôt git si c'est de façon sécuritaire lui-même. Bien sûr, ne jamais stocker à l'intérieur du système de fixation avec elle :)

Je recommanderais de la voûte. Pour stocker un secret:

# create a temporary secret file
cat secrets.yml | vault write secret/myappsecrets -

Pour récupérer un secret et le mettre dans votre panneau de l'essaim:

vault read -field=value secret/myappsecrets | docker secret create secrets_yaml -

Bien sûr, vous pouvez utiliser le panneau de cluster lui-même en tant que source unique de la vérité pour vous secrets, mais si votre panneau de cluster pauses, vous auriez perdu vos secrets. Donc, assurez-vous d'avoir une sauvegarde ailleurs.


La question posée personne

La troisième question (que personne n'a demandé), c'est comment à disposition de secrets pour les développeurs de machines'. Il peut être nécessaire quand il y a un service externe qui est impossible de se moquer localement ou une grande base de données qui est impossible à copier.

Encore une fois, docker n'a rien à faire avec elle (encore). Il n'a pas de listes de contrôle d'accès qui précisent que les développeurs ont accès à ce qui les secrets. Il n'a aucun mécanisme d'authentification.

La solution idéale semble être ceci:

  • Un développeur s'ouvre certaines applications web.
  • S'authentifie à l'aide de quelques-uns des signe sur le mécanisme.
  • Des Copies de quelques longue liste d' docker secret create commandes et les exécute dans le terminal.

Nous avons encore à voir si une telle application s'affiche.

11voto

nathanleclaire Points 725

Vous pouvez également spécifier secrets stockés localement dans un fichier en utilisant file: clé en secrets objet. Alors vous n'avez pas à docker secret create les vous-même, Compose / docker stack deploy fera pour vous.

 version: '3.1'

secrets:
  password:
    file: ./password

services:
  password_consumer:
    image: alpine
    secrets:
      - password
 

Référence: Référence de la version 3 du fichier Compose: Secrets

1voto

sxn Points 398

S'agit-il de l'indentation exacte de votre fichier docker-compose.yml ? Je pense que secret secrets devrait être imbriqué sous a (c'est-à-dire un des services), pas directement sous services section.

-3voto

fzgregor Points 1285

Je suppose que le mot clé est secrets non secret . C’est au moins ce que j’ai compris en lisant le schéma .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X