Comment utiliser les secrets Docker sans cluster Swarm?

29

Actuellement, nous sommes une application en cours d'exécution sur un seul conteneur Docker, l'application a besoin de toutes sortes de données sensibles pour être transmises en tant que variables d'environnement,

Je mets ceux-ci sur la commande d'exécution afin qu'ils ne se retrouvent pas dans l'image, puis sur un référentiel, mais je me retrouve avec une commande d'exécution très non sécurisée,

Maintenant, je comprends que des secrets de docker existent, cependant, comment puis-je les utiliser sans déployer un cluster? ou existe-t-il un autre moyen de sécuriser ces données?

Meilleures salutations,

Juan Sebastian
la source
6
Il existe plusieurs façons d'utiliser les secrets sans essaim blog.mikesir87.io/2017/05/…
Aleksandr Aksarin

Réponses:

6

Vous ne pouvez pas ... Il ne prend pas en charge les secrets sans Swarm. À moins que '' ne soit '' vous '' Swarm '' n'utilisant qu'un seul nœud.

L'autre solution serait, je pense, d'utiliser un logiciel de coffre tiers comme celui-ci:

https://www.vaultproject.io/

Mais ensuite, pour utiliser les secrets de Vault dans vos conteneurs, vous devez lire le document.

J'espère que cela vous amènera sur la bonne voie pour commencer.

rendement
la source
En fait, j'ai juste besoin d'injecter ces secrets lors de la création des conteneurs, ils n'ont pas vraiment besoin de rester "secrets" à l'intérieur des conteneurs en cours d'exécution, donc je suppose qu'il serait logique que l'hôte puisse accéder et utiliser les secrets lors de l'appel du docker run command, je suppose que je peux écrire un script avec un tas de remplacements et d'appels au coffre-fort.
Juan Sebastian
@JuanSebastian, vous devriez consulter Docker 'build-args' pour ce cas d'utilisation.
user23390
@JuanSebastian Je peux me tromper, mais obtenir l'ENV local vous donnerait ce qu'il y a à l'intérieur de ces build-args .... Pas sûr .....
donnez
build-argsne sont pas inclus dans l'image finale, mais ne sont accessibles que pendant la construction de l'image. Une solution appropriée consiste à écrire les secrets dans des fichiers sur l'hôte (avec les autorisations appropriées, bien sûr), puis à les monter en volume dans votre conteneur Docker. Votre application à l'intérieur du conteneur peut alors lire les secrets de ces fichiers
Brandon
22

Oui , vous pouvez utiliser des secrets si vous utilisez un fichier de composition . (Vous n'avez pas besoin d'exécuter un essaim).

Vous utilisez un fichier de composition avec docker-compose : il existe une documentation pour les "secrets" dans un fichier docker-compose.yml .

Je suis passé à docker-compose parce que je voulais utiliser des secrets. Je suis content de l'avoir fait, il semble beaucoup plus propre. Chaque service est mappé sur un conteneur. Et si jamais vous souhaitez passer à l'exécution d'un essaim à la place, vous êtes déjà là.

Remarque: les secrets ne sont pas chargés dans l'environnement du conteneur, ils sont montés dans / run / secrets /

Voici un exemple:

1) Structure du projet:

|
|---    docker-compose.yml
|---    super_duper_secret.txt

2) Contenu de docker-compose.yml:

version: "3.6"

services:

  my_service:
    image: centos:7
    entrypoint: "cat /run/secrets/my_secret"
    secrets:
      - my_secret

secrets:
  my_secret:
    file: ./super_duper_secret.txt

3) Contenu de super_duper_secret.txt:

Whatever you want to write for a secret really.

4) Exécutez cette commande à partir de la racine du projet pour voir que le conteneur a accès à votre secret (Docker doit être en cours d'exécution et docker-compose installé):

docker-compose up --build my_service

Vous devriez voir votre conteneur sortir votre secret.

Lindsay-Needs-Sleep
la source
Pouvez-vous montrer un exemple pratique d' docker-composeutilisation d'un secret? La documentation et ma compréhension de l'implémentation indiquent que le secret ne sera pas configuré dans le conteneur.
BMitch
2
Les secrets Docker ne sont disponibles que pour les services Swarm, pas pour les conteneurs autonomes. Pour utiliser cette fonctionnalité, envisagez d'adapter votre conteneur pour qu'il s'exécute en tant que service. Les conteneurs avec état peuvent généralement s'exécuter avec une échelle de 1 sans modifier le code du conteneur. docker
Alwin Kesler
@BMitch Ajout d'un exemple. J'espère que cela vous aide! (Cela fait un moment que je n'ai pas travaillé avec Docker et mon environnement est un peu plus actif ... mais je pense que cela devrait fonctionner. S'il vous plaît, faites-moi savoir si j'ai raté quelque chose!)
Lindsay-Needs-Sleep
Je ne peux pas répliquer cela sur mes services sans essaim ( docker-compose.ymlsur un seul nœud); lorsque je démarre, le conteneur /runne contient qu'un nginx.pidet il n'y en a pas Mountsmontré par docker inspect $container.
giorgiosironi
2
Je pensais juste que je lierais au PR qui l'a ajouté à plain-docker-compose (sans essaim). github.com/docker/compose/pull/4368 C'est vraiment là et d'après le code, il semble que la version min pour le fichier de composition soit 3.1 et l'API soit 1.13.0. Le code est toujours dans le maître actuel ( github.com/dnephin/compose/blob/… ), donc ne vous attendez pas à une version max.
ssnobody