Key Management Server (KMS) für vSphere: PyKMIP als Docker-Container installieren

    KMS für die VM-Verschlüsselung in VMware vSphereEs gibt mehrere Dritt­anbieter für KMIP-kompatible KMS, die VMware für seine Ver­schlüsselungs­funktion unter­stützt. Es handelt sich dabei jedoch um kommer­zielle Produkte, die für eine Eva­luierung schlecht geeig­net sind. Dafür em­pfiehlt sich die Open-Source-Lösung PyKMIP, die als Linux-Container verfügbar ist.

    PyKMIP ist eine Python-Implementierung des Key Management Interoperability Protocol (KMIP), ein Kommunikations­standard von OASIS für die Verwaltung von Objekten, die von Schlüssel­verwaltungs­systemen gespeichert und verwaltet werden.

    Voraussetzungen für PyKMIP schaffen

    PyKMIT allein ist nur mit großen Aufwand und viel Know-how zu einer Zusammen­arbeit mit vSphere zu bewegen. VMware hat jedoch in der Betaphase von vSphere 6.5 mit PyKMIT experi­mentiert und seinerzeit eine virtuelle KMIP-Server-Appliance auf PyKMIP-Basis bereit­gestellt. Diese ist leider heute nicht mehr verfügbar.

    Allerdings hat William Lam vom VMware Cloud on AWS-Team vor einiger Zeit ein Docker-Image gebaut, mit dem man die Verschlüsselung leidlich gut testen kann. Der nur 163MB große Docker-Container lässt sich einfach hoch­fahren und stellt elementare, auf KMIP basierende Dienste bereit. Das Container-Image gibt es auf Docker Hub unter lamw/ vmwkmip.

    Das Schöne am Docker-Container ist, dass das Image in Labor­umgebungen mit eingeschränkten Ressourcen oder für Demozwecke direkt auf der vCenter Server Appliance (vCSA) ausführt werden kann. Diese basiert inzwischen bekanntlich auf Photon, was die Installation von Docker recht einfach macht.

    Der Docker-Container enthält genau die Version von PyKMIP, die auch in der künftigen Version der virtuellen Appliance enthalten sein soll. Es ist allerdings sehr wichtig zu beachten, dass diese Methode nicht für Produktions-Workloads oder VMs verwendet werden kann, weil PyKMIP die Verschlüsselungs­schlüssel im RAM speichert und diese bei einem Neustart verloren gehen.

    Docker auf der vCSA installieren

    Wer mit der Installation von Docker auf der vCSA experimentieren möchte, sollte vorher einen Klon oder zumindest einen Snapshot seiner vCSA anfertigen oder besser eine separate Test-Appliance ausrollen.

    Ist das erledigt, dann meldet man sich zunächst an der vCSA-Bash an. Diese muss man erst an der Appliance-Management-UI (Port 5480) im Menü Zugriff zunächst aktivieren.

    Bash-Shell in der vCenter Server Appliance (vCSA) über das VAMI aktivieren

    Alternativ kann man auch nach dem Anmelden mit root an der Konsolen-CLI das Kommando shell eingeben. Anschließend installiert man Docker mit

    tdnf -y install docker

    Dann lädt man das im folgenden Befehl angegebene Kernel-Modul, um den Docker-Client starten zu können:

    modprobe bridge --ignore-install

    Ob das Modul korrekt geladen wurde, zeigt

    lsmod | grep bridge

    Der Start von Docker erfolgt dann mit

    systemctl enable docker

    systemctl start docker

    Docker in der vCSA installieren und starten

    Achtung: Mit dieser Methode ist das Laden des Bridge-Moduls nicht Reboot-resistent, was aber für unseren Test ausreicht, da PyKMIT die Schlüssel ohnehin nur im RAM hält. Wer Docker aus anderen Gründen auf der vCSA nutzen möchte, kann das Modul natürlich persistent machen. Entsprechende Linux-HowTos finden sich im Netz.

    PyKMIP-Container installieren

    Zuerst beziehen wir das PyKMIP-Docker-Image von Docker-Hub:

    docker pull lamw/vmwkmip

    Dann Starten wir den Container mit

    docker run --rm -it -p 5696:5696 lamw/vmwkmip

    Docker-Image für PyKMIP von Docker-Hub beziehen

    Wie die Abbildung zeigt, wurde der PyKMIP-Dienst erfolgreich gestartet und für die Verwendung des Standard-Ports 5696 konfiguriert. Wer den Docker-Container nicht im interaktiven Modus ausführen möchte, kann ihn auch im Daemon-Modus starten. Das erfolgt

    docker run -d -p 5696:5696 lamw/vmwkmip

    Als Nächstes verknüpft man den KMIP- mit dem vCenter-Server. Dazu meldet man sich beim vSphere Web Client an, markiert das logische vCenter-Server-Objekt im Navigator und wechselt dann zu Konfigurieren => Schlüssel­verwaltungs­server.

    PyKMIP in vCenter als neuen KMS hinzufügen

    Hier sind ein Name für den KMS-Cluster, der Server-Name, die Server-Adresse (das ist in diesem Fall die IP des vCenter-Servers), der Server-Port (das ist der im Docker-Container veröffentlichte Port) und optional ein SSO-Benutzername anzugeben.

    Klappt die Verbindung, dann muss man vCenter für KMS vertrauens­würdig machen, indem man das angezeigte Zertifikat bestätigt.

    Zertifikat bestätigen, um vCenter für den KMS vertrauenswürdig zu machen

    Wenn alles richtig konfiguriert wurde und der vCenter-Server mit dem KMIP-Server kommunizieren kann, werden sowohl der Verbindungs­status als auch der Zertifikat­status grün angezeigt.

    PyKMIP wurde erfolgreich als KMS zu vCenter hinzugefügt.

    Sollte das nicht der Fall sein, dann liegt wahrscheinlich ein Verbindungsproblem zwischen dem vCenter-Server und dem Docker-Container vor. Dazu muss man etwa sicherstellen, dass keine Firewalls die Verbindung blockieren, von der aus der Docker-Container ausgeführt wird.

    Ab diesem Punkt kann man mit der Verschlüsselung von VMs beginnen, so wie ich es in diesem Beitrag beschrieben habe. Zu diesem Zweck muss man lediglich die VM-Verschlüsselungs­richtlinie entweder auf die gesamte VM (VM Home + VMDKs) oder auf einzelne VMDKs anwenden.

    1 Kommentar

    Bild von Daniel
    Daniel sagt:
    23. April 2020 - 10:04

    Schöner Artikel/Anleitung. Auf der Seite von William Lam zu dem Container, habe ich in den Kommentaren von einen Nutzer dieses hier gefunden.

    https://github.com/gwojcieszczuk/kms4vsphere

    Sein Kommentar dazu.

    Greg Wreg says

    04/12/2019 at 4:22 am

    I developed vapp for pykmip that can be deployed in vcenter environment.
    https://github.com/gwojcieszczuk/kms4vsphere
    Latest PyKMIP supports persistent storage (sqlite db) so all keys are preserved across reboots, etc.

    Ist evtl. auch eines genaueren Blickes Ihrerseits wert.