it-swarm.com.de

So stellen Sie SSL-Zertifikate sicher für eine Docker-App bereit

Was ist der sicherste Weg, um einer Docker-Anwendung SSL-Zertifikate (für HTTPS) bereitzustellen?

Die Ansätze, die ich in Betracht gezogen habe:

  1. Die Umgebung

    Es ist üblich (aber offensichtlich nicht erforderlich), den Ansatz 12factor mit Docker-Apps zu verwenden, der Umgebungsvariablen vorschlagen würde, die als sicher gelten, aber Zertifikatketten können etwas lang sein und unhandlich für Umgebungsvariablen (nicht, dass dies ein vollständiger Deal Breaker ist).

  2. Privates Bild

    Ich kann auch ein benutzerdefiniertes, privates Docker-Image erstellen. Wenn ich jedoch kein privates Docker-Repo verwende (und derzeit kein Docker Hub verwende), bedeutet dies, dass ich mindestens einer anderen Partei mein Image anvertraue Geheimnis. Wenn ich automatisierte Builds verwende, bedeutet dies, dass ich auch einer anderen Partei (d. H. GitHub) vertraue.

  3. Ein montiertes Volume

    Dies scheint weniger klobig zu sein als lange Umgebungsvariablen zu übergeben, die verarbeitet werden müssen. Aber bis zu diesem Punkt hatte ich überhaupt keine Notwendigkeit für ein lokales Volume, und es scheint ein bisschen bedauerlich, wenn dies das einzige ist, was mich dazu zwingt, eines zu verwenden. Aber vielleicht ist das der Preis für Sicherheit?

Was ist aus Sicherheitsgründen die beste Option? Oder gibt es Vor- und Nachteile dieser Ansätze, die ich nicht berücksichtigt habe?

Als Referenz wird mein aktuelles Docker-Image auf Docker Hub gehostet, das mit einem automatisierten Build von GitHub erstellt wurde, und die Container werden auf Tutum ausgeführt. Meine Docker Hub- und GitHub-Repos sind derzeit privat, aber ich hoffe, sie später veröffentlichen zu können, wenn das Projekt etwas ausgereifter ist. Obwohl ich auf eine Antwort hoffen würde, die allgemein genug ist, um breiter angewendet zu werden als in diesem speziellen Setup.

23
Flimzy

Eine Herausforderung beim Ansatz mit Umgebungsvariablen besteht darin, dass sie mit allen verknüpften Containern geteilt werden (weitere Informationen hier ), was die Verwendung dieses Ansatzes in einigen Setups einschränken kann.

Private Bilder sind, wie Sie sagen, ein Problem, da Sie den Schlüssel an mehrere Parteien weitergeben. Dies kann sich auch auf Ihre Fähigkeit auswirken, andere verwandte Dienste zu nutzen, die Zugriff auf die Github- oder Docker-Repos benötigen (z. B. Jenkins )

Damit bleibt die Lösung für gemountete Volumes erhalten, die unter Sicherheitsgesichtspunkten als der beste Ansatz erscheint. Dadurch wird die erforderliche Verteilung auf den Docker-Host eingeschränkt, was in den meisten Fällen eine geringere Gefährdung darstellt als die Weitergabe an Dritte oder die potenzielle Gefährdung durch andere verknüpfte Container.

8
Rory McCune

Wenn jemand auf dieses Thema stößt, beachten Sie, dass eine neuere Lösung möglicherweise darin besteht, Docker-Geheimnisse zu verwenden: https://docs.docker.com/engine/swarm/secrets/

Es ermöglicht Docker Swarm-Diensten, Informationen wie Kennwörter, SSL-Zertifikate usw. sicher in Container zu übertragen.

6
ttaveira