Kunden fragen uns häufig, wie sie unsere Plattform für die Verwaltung von PKI und digitalen Zertifikaten nutzen können, Keyfactor Commandzur Verwaltung von Anwendungszertifikaten in einer DevOps-Umgebung nutzen kann. Sie "containerisieren" ihre Anwendungen mit Docker und möchten Zertifikate in Docker-Containern verwalten.
Ein paar Hintergrundinformationen zu dieser Frage...
Bei DevOps (oder der Verschmelzung von software Entwicklung und IT-Betrieb) besteht das Konzept darin, Ihre Infrastruktur ähnlich zu behandeln wie Ihren Anwendungscode - über formale Spezifikationen und automatisierte Build-Prozesse - zu behandeln [sollten].
Bevor es DevOps gab, erstellten die Entwickler von software häufig Anwendungen, ohne die Details der tatsächlichen Umgebung und Infrastruktur zu berücksichtigen, in der software ausgeführt werden muss. Selbst wenn die Zielumgebung in Betracht gezogen wurde, wurden häufig falsche Annahmen getroffen oder den IT-Betriebsmitarbeitern unzureichend kommuniziert. Wenn es dann an der Zeit war, die Anwendung in Produktion zu bringen, hatten die IT-Mitarbeiter Schwierigkeiten, die Anwendungen korrekt zum Laufen zu bringen. Bei DevOps ist die Erstellung einer formalen Definition der erforderlichen Infrastruktur Teil des software Entwicklungsprozesses, und für die Bereitstellung von software innerhalb dieser Infrastruktur werden automatisierte Tools verwendet. Die formale Spezifikation der Infrastruktur wird als "Infrastructure as Code" oder IaC bezeichnet.
Der Vorteil von IaC besteht darin, dass die Definition der Infrastruktur in der Versionskontrolle zusammen mit dem Quellcode der Anwendung verfolgt werden kann, was dazu beiträgt, dass die Entwicklungsseite mit der Infrastrukturseite synchronisiert wird. Mit IaC wird die Bereitstellung der Infrastruktur Teil des Build-Prozesses der Anwendung. Dies ermöglicht die Konsistenz Ihres Bereitstellungsprozesses zwischen verschiedenen Bereitstellungsumgebungen (Test, QA, Staging, Produktion usw.) und die kontinuierliche Integration der Infrastruktur.
Docker ist ein gängiges Werkzeug im Rahmen eines DevOps-Szenarios. Mit Docker kann ein Teil von software in einem "Container" platziert werden, der die Infrastruktur abstrahiert und der Anwendung ein Sandbox-Betriebssystem zur Verfügung stellt. Orchestrierungs-Engines wie Kubernetes oder Docker Swarm nutzen IaC, um eine automatische Bereitstellung und Skalierung von Containern durchzuführen. Öffentliche Repositories wie Docker Hub erleichtern die gemeinsame Nutzung von Containern (und der zugehörigen software) durch Anwendungen und Unternehmen.
Das alles ist großartig, aber die Hinzufügung von Zertifikaten zu diesem Mix schafft zusätzliche Herausforderungen:
- Die Erneuerung von Zertifikaten erfolgt in einem anderen Rhythmus als die Aktualisierung von Anwendungen. Sie können monatliche oder vierteljährliche Versionen Ihrer software haben, aber Zertifikate müssen jährlich erneuert werden. Wenn die Entwicklung der Anwendung eingestellt wird, müssen die Zertifikate dennoch erneuert werden, solange die Anwendung verwendet wird.
- Zertifikate werden von verschiedenen Parteien verwaltet. Zertifikate können von öffentlichen Zertifizierungsstellen erworben oder von einer internen privaten Public-Key-Infrastruktur (PKI) ausgestellt werden; in beiden Fällen sind die für den Erwerb oder die Ausstellung zuständigen Personen in der Regel nicht die Entwickler und auch nicht die IT-Betriebsmitarbeiter.
Aus der Sicht der Entwicklung können Sie zwar einen Container erstellen, der Ihre Webinhalte oder Ihre Webanwendung enthält, und Ihr kontinuierlicher Integrationstest- und Build-Prozess kann diese Container bei jeder Revision von software aktualisieren und neu bereitstellen, aber Sie müssen sich immer noch Gedanken darüber machen, wie Sie die Zertifikate, die Ihr System nach außen hin präsentiert, aktualisieren und pflegen. Dies ist der Kern der Frage.
Wie lautet also die Antwort...
Wie bei allem in unserem Bereich lautet die Antwort im Allgemeinen: "Es kommt darauf an". Es gibt verschiedene Modelle für die Verwaltung von Anwendungszertifikaten mit Keyfactor Command und Docker. Die gute Nachricht ist, dass in den meisten Fällen das Modell (und die Antwort) einfach ist.
Wenn Sie keinen Code schreiben möchten, ist es am einfachsten, unseren Container für die Zertifikatsorchestrierung neben Ihren anderen Anwendungscontainern einzusetzen. Unser Agent verwaltet dann die von Ihrer Anwendung verwendeten Zertifikate über den in Docker nativ verfügbaren gemeinsamen Speicher. Unter der Voraussetzung, dass Ihre Anwendung ihr Zertifikat aus dem Dateisystem beziehen kann, erfordert dies keine Änderungen an Ihrer Anwendung oder Ihren Containern, und es ist keine Codierung oder Skripterstellung erforderlich. Es handelt sich um eine vollständig einsatzbereite Lösung.
Der Vorteil dieses Modells ist, dass jede Instanz des Containers denselben gemeinsamen Speicherort verwendet, was dazu führt, dass alle Ihre Container dasselbe Zertifikat verwenden. Wenn Ihr Orchestrierungsprozess die Anzahl der Knoten erhöht, müssen Sie sich nicht darum kümmern, dass jeder Webserver hinter Ihrem Load Balancer das gleiche Zertifikat hat. Wenn es an der Zeit ist, das Zertifikat zu erneuern oder zu ändern, haben alle Container automatisch Zugriff auf das neue Zertifikat.
Beachten Sie, dass bei diesem Modell Ihre Zertifikate in einem gemeinsam genutzten Speicher aufbewahrt werden, was bedeutet, dass die Administratoren Ihres gemeinsam genutzten Speichers Zugriff auf den privaten Schlüssel Ihres Zertifikats haben. Normalerweise sind die Administratoren des gemeinsam genutzten Speichers auch Docker-Administratoren, die bereits Zugriff auf die Container haben (in denen sich auch die privaten Schlüssel befinden), sodass dies kein zusätzliches Risiko darstellt. Wenn Ihr Verwaltungsmodell jedoch eine Aufgabentrennung zwischen den Docker-Administratoren und den Administratoren des gemeinsam genutzten Speichers vorsieht, kann dies ein Problem darstellen. In diesem Fall können Docker-Secrets anstelle des gemeinsamen Speichers verwendet werden. Bei Docker-Secrets werden die privaten Schlüssel im Ruhezustand und bei der Übertragung verschlüsselt, und Ihre Speicheradministratoren haben keinen Zugriff auf sie.
Bei der Verwendung von Docker-Geheimnissen müssen Sie ein kleines Skript innerhalb Ihres Orchestrierungssystems verwenden, um das Zertifikat von Keyfactor Command abzurufen und es als Docker-Geheimnis zu speichern.
Wenn Ihre Anwendung nicht in der Lage ist, ihre Zertifikate aus dem Dateisystem abzurufen oder ein nicht standardisiertes Zertifikatspeicherformat verwendet, kann ein Container-Startskript verwendet werden, um die erforderlichen Zertifikate von Keyfactor Command abzurufen und sie in Ihre Anwendung zu injizieren oder sie in Ihrem eigenen Format zu speichern, wenn der Container bereitgestellt wird.
Wenn Sie damit einverstanden sind, die Prozesse der Zertifikatserneuerung und der Anwendungsfreigabe miteinander zu koppeln, oder wenn Sie Container in Umgebungen bereitstellen müssen, die keinen Zugriff auf Keyfactor Command haben, können Sie Keyfactor Command verwenden, um Zertifikate während des Container-Erstellungsprozesses zu injizieren.
Zusammenfassend lässt sich also sagen, dass es bei der Verwaltung von Anwendungszertifikaten in einer Docker-Umgebung mit Keyfactor Command verschiedene Möglichkeiten gibt, diese Aufgabe zu bewältigen, je nach den Anforderungen Ihrer Anwendung und ihrer Laufzeitumgebung. Die meisten Kunden werden in der Lage sein, ihre Docker-Zertifikate mit einem einfachen Container zu verwalten.