web-dev-qa-db-fra.com

Comment fournir en toute sécurité des certificats SSL à une application Docker

Quel est le moyen le plus sûr de fournir des certificats SSL (pour HTTPS) à une application Docker?

Les approches que j'ai envisagées:

  1. L'environnement

    Il est courant (mais évidemment pas obligatoire) d'utiliser l'approche 12factor avec les applications Docker, qui suggérerait des variables d'environnement qui sont considérées comme sûres , mais les chaînes de certificats peuvent être un peu longues et peu maniable pour les variables d'environnement (pas que ce soit un disjoncteur complet).

  2. Image privée

    Je peux également créer une image Docker privée et personnalisée, mais si je n'utilise pas de dépôt Docker privé (et je ne le suis pas - j'utilise Docker Hub pour le moment), cela signifie faire confiance à au moins une autre partie avec mon secret. Si j'utilise des versions automatisées, cela signifie également faire confiance à une autre partie (c'est-à-dire GitHub).

  3. Un volume monté

    Cela semble moins fastidieux que de passer de longues variables d'environnement qui doivent être traitées. Mais jusqu'à présent, je n'ai pas du tout eu besoin d'un volume local, et cela semble un peu malheureux si c'est la seule chose qui m'oblige à en utiliser un. Mais c'est peut-être le prix à payer pour la sécurité?

Du point de vue de la sécurité, quelle est la meilleure option? Ou y a-t-il des avantages et des inconvénients de ces approches que je n'ai pas envisagés?

Pour référence, mon image Docker actuelle est hébergée sur Docker Hub, créée avec une construction automatisée de GitHub, et les conteneurs s'exécutent sur Tutum. Mes dépôts Docker Hub et GitHub sont actuellement privés, mais j'espère les rendre publics plus tard, lorsque le projet sera un peu plus mature. Bien que j'espère une réponse suffisamment générale pour s'appliquer plus largement que dans cette configuration spécifique.

23
Flimzy

Un défi avec l'approche des variables d'environnement est qu'elles sont partagées avec tous les conteneurs liés (plus d'informations ici ), ce qui peut restreindre l'utilisation de cette approche dans certaines configurations.

Les images privées comme vous le dites sont un problème car vous partagez la clé avec un certain nombre de parties et cela pourrait également affecter votre capacité à utiliser d'autres services connexes qui auraient besoin d'accéder au dépôt github ou docker (par exemple Jenkins )

Cela laisse la solution de volume monté, qui semble être la meilleure approche du point de vue de la sécurité. Il restreint la distribution nécessaire à l'hôte docker, qui dans la plupart des cas est moins exposé que de le placer auprès de tiers ou de l'exposer potentiellement à d'autres conteneurs liés.

8
Rory McCune

Si quelqu'un rencontre ce sujet, notez qu'une solution plus récente pourrait être d'utiliser les secrets Docker: https://docs.docker.com/engine/swarm/secrets/

Il permet aux services Docker Swarm de transmettre en toute sécurité des informations telles que des mots de passe, des certificats SSL, etc., dans des conteneurs.

6
ttaveira