To top
Resources Resources
CodeMeter Docker

CodeMeter & Docker

Der isolierte Betrieb von Applikationen in Container-Systemen wie Docker wird immer beliebter, da diese Container einfach verwendet und vervielfältigt werden können. Als Hersteller von Software haben Sie aber überdies ein Interesse daran, auch in Containern laufende Applikationen sicher zu lizenzieren. Wie sich das scheinbar einfache Vervielfältigen von Containern mit CodeMeter und Ihrem Wunsch nach korrekter Lizenzierung verträgt und was man dazu wissen sollte, zeigen wir Ihnen im Folgenden.

Das Prinzip, Software in einem Container zu betreiben, ist nicht ganz neu. Die zugrunde liegenden Funktionen sind unter dem Betriebssystem Linux schon länger vorhanden. Mit der Entwicklung und Bereitstellung einer gut handhabbaren Container-Technologie durch das Docker-Projekt sind Container für viele verwendbar geworden. Docker hat es geschafft, die kritische Grenze zu überschreiten und sich zum führenden Anbieter für Container-Technologie zu mausern. Spätestens seitdem Microsoft die Container-Technologie von Docker in den Windows Server 2016 und Windows 10 integriert hat, ist klar, dass Docker zum De-facto-Standard geworden ist. 

Die Vorteile des Betriebs von Applikationen in einem Container sind vielfältig. Im Prinzip sind Container kleine virtuelle Maschinen (VM) ohne eigenes Betriebssystem. Die Container teilen sich mit dem vorhandenen Host-Betriebssystem den Betriebssystem-Kernel und die wichtigen Systemdateien. Dadurch ist ein Container wesentlich schlanker als eine VM, die die gleichen Dienste bereitstellt, und Applikationen können somit kostengünstiger betrieben werden. Neben dem geringeren Ressourcenverbrauch sind auch weniger Systeme zu pflegen (Updates, Security-Patches, etc.).

Container müssen also beim Starten nicht erst Betriebssystem, Ressourcen und Bibliotheken laden, sondern können direkt auf Komponenten und Daten der Betriebsumgebung zugreifen. Auch lassen sich weitere Container wesentlich schneller bereitstellen, da keinerlei Betriebssystem installiert werden muss. Durch die Automatisierung der Erstellung von Containern kann man darüber hinaus einfach skalieren. Diese Eigenschaften sorgen dafür, dass Container immer beliebter werden.

Bei aller Euphorie sollte man aber auch einen Blick auf die Nachteile werfen. Die Isolierung der einzelnen Container, sowohl dem Host gegenüber als auch untereinander, bleibt hinter den Möglichkeiten der herkömmlichen Virtualisierungstechnologien deutlich zurück. Da sich die in den Containern enthaltenen Prozesse alle die gleichen Systembibliotheken und den gleichen Kernel teilen, können Kompatibilitätsprobleme die Folge sein. Auch Sicherheitslücken oder Softwarefehler können bei der Verwendung von Containern zu einem echten Problem werden und das System in seiner Gesamtheit in Mitleidenschaft ziehen.

Wie verhält sich CodeMeter in diesem Umfeld und was müssen Sie als Softwarehersteller und Lizenzgeber beachten? Wie können Sie Container verwenden und trotzdem die Kontrolle über die vergebenen Lizenzen behalten? Schon nach den vorangegangenen theoretischen Betrachtungen ahnt man, dass sich eine in einem Container erstellte und gebundene Lizenz gut vervielfältigen lässt. Eine Instanz vom CodeMeter Lizenzserver in einem Container unterscheidet sich quasi nicht von der in einem anderen Container – die Bindung bleibt identisch. Um mehrere Instanzen des CodeMeter Lizenzservers in verschiedenen Containern auf einem Host zu betreiben, musste man allerdings bislang einige Veränderungen vornehmen. Das neue CodeMeter 6.90 bringt unter anderem in zwei Bereichen Änderungen, die sich auf den Betrieb mit Containern auswirken.

Der erste Bereich umfasst die erlaubten Varianten von CmActLicenses innerhalb von Containern. Mit der CodeMeter Version 6.90 ist der Betrieb und die Aktivierung in Containern grundsätzlich verboten – mit zwei Ausnahmen: Die erste Ausnahme sind Lizenzen, die sowohl ohne konkrete Bindung an die Hardware des Systems (NoneBind) als auch für mehrfachen Import (Reimport) erstellt wurden. Solche Lizenzen dienen rein als Basis für die Entschlüsselung von Applikationen, aber ohne Lizenzbeschränkung; diese Anwendung wird gerne als „Protection Only“ bezeichnet. In Zukunft wird dieser Anwendungsfall durch die Verwendung von CodeMeter Protection Suite mit IP Protection abgedeckt (siehe Beitrag „IP Protection für Software ohne Lizenzierung“ auf Seite 6). Da diese Art der CmActLicenses keinerlei Lizenzbeschränkung enthält, besteht auch keine Betrugsgefahr, wenn eine solche Lizenz in vielen Containern gleichzeitig betrieben wird. Die zweite Ausnahme sind von Ihnen explizit genehmigte CmActLicenses. Sie als Softwarehersteller können über eine neue Option eine CmActLicense so konfigurieren, dass diese auch in einem Container aktiviert werden darf. Die zugehörige Kommandozeilenoption in CmBoxPgm ist „-lopt:container“; sie ist ausschließlich für Universal Firm Code anwendbar.

Der zweite Bereich betrifft das veränderte Verhalten der Bindung an die Netzwerkschnittstellen. Damit so wenig Angriffsmöglichkeiten wie möglich geboten werden – das hat gar nichts mit Containern zu tun, sondern gilt generell –, bindet der CodeMeter Lizenzserver nur noch dann an den Port 22350, wenn dieser CodeMeter Lizenzserver für den Betrieb als CodeMeter Server im Netzwerk konfiguriert wurde. In der Grundkonfiguration bindet sich der CodeMeter Lizenzserver daher nur an den Localhost-Adapter. Damit empfängt er im Falle eines Betriebs in einem (Docker-) Container Anfragen von darin laufenden Applikationen und kann diese dann entweder durch eine im Container vorhandene Lizenz (siehe oben, erlaubte Varianten von CmActLicenses) beantworten oder kann als Client gegenüber einem anderen CodeMeter Lizenzserver im Netzwerk die Anfragen weiterleiten.

Somit lassen sich verschiedene Anwendungsfälle gut mit CodeMeter umsetzen. Derzeit ist allen diesen Fällen gemein, dass dazu der Container im Bridged-Modus betrieben werden muss, welcher die Standardeinstellung ist.

"Protection Only“: Die Lizenz, die nur als Basis für die Entschlüsselung und Verwendung der Applikation dient, kann im Container aktiviert werden. Der Container kann einfach skaliert werden und die Applikation in vielen Instanzen gleichzeitig laufen.

"Lizenzierung am Host“: Die Lizenz zur Begrenzung und Kontrolle der bestimmungsgemäßen Verwendung wird am Host aktiviert, z.B. als CodeMeter SmartBind Lizenz. In den einzelnen Containern läuft jeweils ein CodeMeter Lizenzserver im Client-Modus. Er empfängt die Anfragen der Applikationen aus diesem Container und leitet diese an den CodeMeter Lizenzserver am Host weiter. Dazu wird in der Serversuchliste im Container fest die IP-Adresse des Hosts im Docker-Netzwerk eingetragen. Diese ist im Kontext der Container dauerhaft fest, z.B. 172.17.0.1.

"Lizenzierung über Netzwerk“: Dieser Fall unterscheidet sich nur bezüglich des Serverortes von der „Lizenzierung am Host“. Voraussetzung ist ein im Netzwerk laufender CodeMeter
Lizenzserver, der die gekaufte Lizenz bereitstellt. In den einzelnen Containern läuft jeweils ein CodeMeter Lizenzserver im Client-Modus. Er empfängt die Anfragen der Applikationen aus diesem Container und leitet diese an den CodeMeter Lizenzserver im Netzwerk weiter.