CodeMeterのDockerサポート

CodeMeterバージョン7.30では、コンテナシステム(例:Docker)で保護されたアプリケーション利用の利便性向上のため、いくつかの新機能を追加しました。この変更により、CodeMeterは「1つのコンテナ、1つのアプリケーション」という基本原則に忠実でありながら、DockerコンテナにおけるCmActLicense特有のバインディングも可能となりました。

従来のオペレーティングシステム(OS)では、CodeMeterは単純なルールの下で動作します。アプリケーションの保護に組み込まれたCodeMeterの関数は、同じシステム上で必要なCodeMeter License Serverを見つけます。しかし、Dockerや同様のコンテナベースシステムで作業する場合、このシンプルなルールは通用しません。あるコンテナで実行されるアプリケーションは、別のコンテナにあるCodeMeter License Serverを見つけることができません。ここで、追加のネットワークを作成し、この問題を解決します。

CodeMeterのネットワーク

CodeMeterのネットワークは、関連するすべてのコンテナと接続し、そのすべてのコンテナはCodeMeter License Serverがあるコンテナのアドレスを認識する必要があります。これは、CODEMETER_HOST変数の設定により行います。CodeMeterライブラリーは、CodeMeter License Serverと通信し、この変数を読み取ることができます。この接続は、ライセンスサーバーによってネットワークではなくローカルとして扱われるため、ライセンスサーバーは、ネットワークサーバーとしてCodeMeterをもつ、別のホストによって利用可能となったライセンスも使用することができます。

実際、どのように機能するのでしょうか。画像ファイルにエフェクトを加えるアプリケーションを想像してください。ユーザーが処理したい画像ごとに、保護された画像処理アプリケーションをエントリーポイントとして、画像データと関連するすべてのパラメーターをパラメーターとして、新しいコンテナが作られます。画像処理アプリケーションのそれぞれのコピーとコンテナは、作業が終了し、画像が変更されると、再び閉じられます。つまり、複数の画像を同時に処理する場合、複数のコンテナも並列して存在します。画像処理アプリケーションの実行にCodeMeterのライセンスが必要な場合、その設定で定義されたCodeMeter License Serverと通信し、1つのライセンスを占有します。そしてアプリケーション終了時には、再びライセンスがリリースされます。通常は、CodeMeter License Serverをもつ1つのコンテナがあり、画像処理アプリケーションのすべてのアクティブなコピーがこのサーバーを利用します。

また、CodeMeter License ServerとのすべてのCodeMeter固有のやり取り(例:(シングル)CodeMeter WebAdminの実行、cmuコマンドラインツールによるライセンスのロードまたはライセンス情報の一覧表示)には別のコンテナが使用されます。Wibu-Systemsが提供するサンプル設定では、CodeMeter License Serverを備えたコンテナと同じイメージを使用していますが、他のエントリーポイントでも同様に可能です。

バインドされたライセンス

Docker対応のもう一つの重要なイノベーションは、CmActLicenseへの新しいタイプのバインディングの導入です。通常は、作成時にターゲットシステムの特定のハードウェア特性をチェックします。これらは、特許取得済みのSmartBindプロセスによって結合され、精密なフィンガープリントを形成します。従って、ユーザーのシステムに小さな変更があった場合でもライセンスは機能しますが、システムが大幅に変更された場合(またはユーザーが全く別のシステムでライセンスを実行しようとした場合)には機能しません。

Dockerシステムでの課題は、CodeMeter License Serverのコンテナの2つのコピーが作成された際に、ライセンスの不正な複製は許されないということです。そこで、ネイムドボリュームにより、この課題を解決します。このネイムドボリュームは、CodeMeter License Serverがあるコンテナに配置され、CmActLicenseは、そのコンテナにバインド後、ネイムドボリュームへ配置されます。またアクティベートされたCmActLicenseが複数回使用されないように特別なロックメカニズムが追加されていますが、コンテナが切り替わっても(例:CodeMeter License Serverのあるコンテナから、CodeMeterの新しいバージョンのイメージへ)ディアクティベートされません。CodeMeterの更新は、古いコンテナを停止し、新しいバージョンで実行するだけで、簡単に行うことができます。バインディングが確実に動作し、CodeMeterがその動作を確認するには、CodeMeter License ServerのあるコンテナがDockerソケットにアクセスする必要があります。

コンテナ環境の柔軟性は、物理システム上とは異なり、CmActLicenseのDockerコンテナでの保護が困難であることを意味します。従って、CmActLicenseはコンテナ環境に対して明示的にアクティベートされる必要があり(例:CmBoxPgm-Option -lopt:vm,center)、コンテナ内のライセンスの必要性を再度検討すべきです。

クラウド上のライセンス

クラウド上のライセンスは、CodeMeter License Serverのある(要なローカル)コンテナから、簡単にアクセスすることができます。CmCloudContainer内のライセンスは、Dockerコンテナ内に直接存在するようにみえますが、不正や乱用に対する最善の予防策を提供しています。またアクティブなライセンスの数は、Dockerコンテナ内で追跡されるだけでなく、CmCloudもこれらのライセンスのカウント/管理を行っています。さらに複数のCmCloudのライセンスを使用することはできません。Dockerコンテナが常にオンライン上にある場合、CmCloudContainerにライセンスを入れることをお勧めします。

ネットワーク上のライセンス

Dockerコンテナ内のCodeMeter License Serverは、すべてのライセンスクエリーをローカルであるかのように扱います。つまり、個別のDockerコンテナやCmCloudContainerでCmActLicenseを使用する代わりに、ネットワークでライセンスを使用することも可能です。このアプローチでは、常にオンラインのPCに1つ以上のCmDongleを接続するか、CmActLicenseをアクティベートする必要があります。これらのライセンスは、CodeMeter License ServerをもつDockerコンテナを含む、ネットワーク内の他のデバイスで使用することができます。そのライセンスサーバーはクライアントとして設定され、物理的なCodeMeter License Serverの名前/アドレスが伝えられます(マスターサーバーの役割を引き継ぎます)。アプリケーションからのライセンスクエリーは、まずDockerコンテナ内のCodeMeter License Serverへ送られ、その後、ネットワークライセンスサーバーに転送されます。つまり、アプリケーションがライセンスサーバーと分離されていても、期待通りに実行することができます。

その他の注意事項

CodeMeterのコンポーネントを含むDockerイメージは、glibcベースのLinuxシステム(例:Debianベースのリーンイメージ)を使用する必要があります。但し、CodeMeterの次のバージョンでは、CodeMeterで保護されたアプリケーションをもつコンテナ用に、この要件を削除する予定です。Wibu-Systemsは現在、CodeMeterライブラリーとCodeMeter Protection Suiteの拡張に取り組んでおり、Docker環境で人気の高いAlpine Linux上でも保護されたアプリケーションを実行できることを目指しています。

 

KEYnote 42 – Edition Fall 2021

To top