Produktiv-Image#
Das Produktionsimage ist für Produktionsumgebungen mit hohen Sicherheitsanforderungen vorgesehen. Es erfordert einen externen etcd-Schlüsselwertspeicher, der über eine verschlüsselte Verbindung angeschlossen ist. Der NetHSM-Prozess kann mit hardwarebasierter Trennung (KVM) und gerätespezifischer Verschlüsselung ausgeführt werden. Das Image wird als OCI-Image verteilt und kann lokal mit einem kompatiblen Executor wie Docker und Podman ausgeführt werden.
Im Vergleich zur NetHSM-Hardware sind die folgenden Funktionen nicht in der REST-API des Software-Containers implementiert:
Netzwerkkonfiguration
Werkseinstellung
Neustart
Software-Aktualisierung
Der NetHSM-Produktionscontainer ist ein Produkt nur für zahlende Kunden und kann hier erworben werden. Das Image kann von Nitrokey NetHSM registry unter Verwendung der nach dem Kauf angegebenen Anmeldeinformationen bezogen werden.
Warnung
Die Sicherheit des NetHSM-Software-Containers hängt stark von der Sicherheit der Plattform ab. Eine kompromittierte Plattform könnte einen von ihr ausgeführten NetHSM-Softwarecontainer leicht kompromittieren. Darüber hinaus ist der TRNG nicht vorhanden, so dass die vom NetHSM verwendete und bereitgestellte Entropie von der Entropie der Plattform abhängt.
Tagging-Richtlinie#
Die images im Repository sind mit dem Git-Commit-Hash und der Version der Veröffentlichung gekennzeichnet. Das neueste image ist mit latest
gekennzeichnet.
Betriebsarten#
Das Image kann in zwei Betriebsarten ausgeführt werden, nämlich als Unix-Prozess oder Unikernel.
Im Unix-Prozessmodus wird NetHSM als Prozess oberhalb des Betriebssystems ausgeführt.
Im Unikernel-Modus wird NetHSM als Gast in einer KVM-basierten virtuellen Maschine ausgeführt und bietet eine starke Trennung vom Host-Betriebssystem. Dieser Modus ist nur unter Linux verfügbar und erfordert den Zugriff auf die Geräteknoten /dev/tun
und /dev/kvm
sowie die Fähigkeit NET_ADMIN
.
Wichtig
Aus Sicherheitsgründen sollten Sie den Container im Unikernel-Modus betreiben.
Der Modus kann mit der Umgebungsvariablen MODE
eingestellt werden (siehe nächstes Kapitel Konfiguration).
Konfiguration#
Der Container kann mit den folgenden Umgebungsvariablen konfiguriert werden.
Umgebungsvariable |
Beschreibung |
---|---|
|
Aktiviert die erweiterte Protokollierung für NetHSM. |
|
Eine gesetzte Unlock-Passphrase entsperrt den Container automatisch beim Start. |
|
Der Modus kann die Werte unix oder unikernel annehmen, die Voreinstellung ist unix. |
|
Die URL/IP-Adresse des Hosts, auf dem der etcd-Dienst läuft. |
|
Der Port, auf dem der etcd-Dienst läuft, ist standardmäßig 2379. |
|
Der Pfad zum Zertifikat der CA (Certificate Authority), die das Client-Zertifikat signiert hat. |
|
Der Pfad zum Zertifikat für die Client-Authentifizierung. |
|
Der Pfad zum geheimen Schlüssel für die Client-Authentifizierung. |
Die Geheimnisse der Container-Laufzeit, wie z. B. Zertifikate und private Schlüssel, müssen mit der Secrets-Funktion von Docker oder Podman festgelegt werden.
Geheime Variable |
Beschreibung |
---|---|
|
CA-Zertifikat, welches das Client- und Server-Zertifikat signiert hat. |
|
Client-Zertifikat für die Authentifizierung des NetHSM-Prozesses mit dem Schlüsselwertspeicher. |
|
Client-Schlüssel für die Authentifizierung des NetHSM-Prozesses mit dem Key-Value-Store. |
|
Server-Zertifikat für die API des Key-Value-Stores. |
|
Serverschlüssel für die API des Key-Value-Stores. |
|
Geräteschlüssel des NetHSM-Prozesses. Weitere Informationen über den Geräteschlüssel finden Sie im Kapitel Terminologie und Konventionen im Systementwurf. |
Verwendung#
Der Produktionscontainer unterstützt zwei Betriebsmodi. In den folgenden Kapiteln wird beschrieben, wie der Container mit den bereitgestellten Compose-Dateien oder mit dem Befehl _run_ betrieben werden kann.
Unix-Modus#
Sie können eine mitgelieferte Kompositionsdatei hier erhalten. Vergewissern Sie sich, dass Sie die erforderlichen Dateien für die in der Kompositionsdatei genannten Geheimnisse zur Verfügung haben.
Um den Container ohne die Compose-Datei zu betreiben, müssen Sie selbst einen externen etcd bereitstellen. Hier finden Sie das empfohlene Container-Image für etcd. Stellen Sie sicher, dass Sie die Konfigurationsoptionen übergeben, wie im Kapitel Konfiguration beschrieben.
Der Container kann wie folgt ausgeführt werden.
$ docker run -ti --rm -p 8443:8443 registry.git.nitrokey.com/distribution/nethsm:latest
$ podman run -ti --rm -p 8443:8443 registry.git.nitrokey.com/distribution/nethsm:latest
Dadurch wird NetHSM als Unix-Prozess innerhalb des Containers ausgeführt und die REST-API über das HTTPS-Protokoll auf dem Port „8443“ zugänglich gemacht.
Wichtig
Der Container verwendet ein selbstsigniertes TLS-Zertifikat. Stellen Sie sicher, dass Sie die richtigen Verbindungseinstellungen verwenden, um eine Verbindung herzustellen. Weitere Informationen finden Sie im Kapitel NetHSM Einführung.
Unikernel-Modus#
Sie können eine mitgelieferte Kompositionsdatei hier erhalten. Vergewissern Sie sich, dass Sie die erforderlichen Dateien für die in der Kompositionsdatei genannten Geheimnisse zur Verfügung haben.
Um den Container ohne die Compose-Datei zu betreiben, müssen Sie selbst einen externen etcd bereitstellen. Hier finden Sie das empfohlene Container-Image für etcd. Stellen Sie sicher, dass Sie die Konfigurationsoptionen übergeben, wie im Kapitel Konfiguration beschrieben.
Der Container kann wie folgt ausgeführt werden.
$ docker run -ti --rm -p 8443:8443 --device /dev/net/tun --device /dev/kvm --cap-add=NET_ADMIN -e "MODE=unikernel" registry.git.nitrokey.com/distribution/nethsm:latest
$ podman run -ti --rm -p 8443:8443 --device /dev/net/tun --device /dev/kvm --cap-add=NET_ADMIN -e "MODE=unikernel" registry.git.nitrokey.com/distribution/nethsm:latest
Dadurch wird NetHSM als Unikernel innerhalb einer virtuellen KVM-Maschine ausgeführt. Der Container stellt die REST-API über das HTTPS-Protokoll auf der Schnittstelle „tap200“ mit der IP-Adresse „192.168.1.100“ und Port „8443“ bereit.
Wichtig
Der Container verwendet ein selbstsigniertes TLS-Zertifikat. Stellen Sie sicher, dass Sie die richtigen Verbindungseinstellungen verwenden, um eine Verbindung herzustellen. Weitere Informationen finden Sie im Kapitel NetHSM Einführung.