To top
Resources Resources
CodeMeter Docker

CodeMeter と Docker

Dockerのようなコンテナシステムは、アプリケーションを独立させて実行する点で人気のある選択肢になりつつあります。コンテナは使いやすく、複製も簡単です。ソフトウェア開発者は、そのようなコンテナ環境でもアプリケーションを保護し、安全にライセンス管理することに関心を寄せるのは当然です。この記事では、コンテナを使用・複製・追加する機能とソフトウェアのライセンス管理を正しく行いたいという願望をどのように調和させることができるか、およびDockerがCodeMeterとどのように連携できるかについて説明します。

コンテナでソフトウェアを実行するという原理は、全く新しいものではありません。その基礎となる機能は、以前からLinux OSで利用可能です。Dockerプロジェクトによる管理しやすいコンテナ技術の開発・提供により、コンテナは多くの人にとって使いやすいものとなっています。Dockerは、拡大における重要な閾値を超えることができ、コンテナ技術の主要なプロバイダになることができました。マイクロソフトがDockerのコンテナ技術をWindows Server 2016やWindows 10に統合して以降、遅くともDockerがデファクトスタンダードになったことは間違いないでしょう。

コンテナでアプリケーションを実行することには、多くの利点があります。本質的には、コンテナは独自のOSを持たない小さな仮想マシン(VM)です。これらはホストシステムのOSカーネルと重要なシステムファイルを共有するため、同じサービスを提供する本格的なVMよりも大幅にスリム化されます。これで、セットアップで使用するリソースが少なくなり、維持する必要のあるシステムが少なくなるため(更新プログラムやセキュリティパッチなどで)、実行コストが削減されます。

コンテナは、起動時にOS、リソース、またはライブラリをロードする必要はありません。代わりに、オペレーティング環境のコンポーネントとデータに直接アクセスできます。OSをインストールする必要がないため、追加のコンテナをより速く追加することもできます。プロセスが自動化されると、セットアップは完全にスケーリングします。これは、コンテナがますます人気になる理由の1つです。

しかし、良い情報だけでなく、欠点も知る必要があります。従来の仮想テクノロジーと比較して、個々のコンテナはお互いまたはそのホストから十分に隔離されていません。コンテナで実行されているプロセスは、同じシステムライブラリと同じカーネルも共有するため、互換性の問題が発生する可能性があります。脆弱性やソフトウェアのバグは、コンテナの使用時に問題を引き起こし、システム全体に影響を与える可能性があります。

CodeMeterはこの環境でどのように動作し、ソフトウェア開発者とライセンスベンダは何に留意する必要があるのでしょうか?ライセンスを管理しながら、コンテナをどのように使用できるのでしょうか?上記の簡単な概要から、作成されたライセンスをコピーしてコンテナにバインドするのがいかに簡単かがわかります。あるコンテナにCodeMeterライセンスサーバーをインストールしても、別のコンテナにインストールされているサーバーと基本的に変わりません。バインディングプロパティは同じになります。CodeMeter License Serverの複数のインストールを単一のホスト上の別々のコンテナで実行するには、いくつかの特定の変更が必要です。CodeMeter 6.90では、コンテナ内の操作に影響する2つの領域を変更する必要がありました。

1つ目は、Dockerコンテナでの操作が許可されているCmActLicenseのタイプに関するものです。CodeMeterバージョン6.90では、2つの特定の例外を除いて、通常アクティベーションと使用が禁止されています。1つ目の例外は、複数のインポート(再インポート)を可能にするシステムハードウェア(NoneBind)への具体的なバインドのないライセンスです。これらのライセンスは、アプリケーションを復号する手段としてのみ機能しますが、ライセンスの制限はなく、本質的に「Protection Only」のユースケースをつくります。将来的には、このユースケースは、CodeMeter Protection Suiteの新しいIP Protectionモードに置き換えられる予定です(詳細については、このKEYnoteの本号を参照してください)。このタイプのCmActLicenseにはライセンス制限がないため、同じライセンスが複数のコンテナで使用されている場合でも、不正利用のリスクはありません。2つ目の例外は、この使用が特に承認されているCmActLicenseです。ソフトウェア開発者は、コンテナでアクティベーションを可能にするCmActLicenseの新しいオプションを設定できます。 CmBoxPgmのコマンドラインオプションは「-lopt:container」で、ユニバーサルファームコードでのみ使用できます。

2つ目の領域は、バインディングがネットワークインターフェイスで機能する方法の変更に関するものです。コンテナだけでなくすべてのライセンスに対する攻撃の可能性を減らすために、CodeMeter License Serverは、ネットワーク上でCodeMeterサーバーとして動作するように構成されている場合にのみ、Port22350にバインドします。基本的な構成では、CodeMeter License Serverはローカルホストアダプターにのみバインドします。(Docker)コンテナで操作する場合は、実行中のアプリケーションからのクエリのみを受信し、コンテナに存在するライセンスで応答するか(許可されているCmActLicenseの種類については上記を参照)、クライアントとして別のネットワーク上のCodeMeter License Serverに転送することができます。

CodeMeterは、この方法でさまざまなユースケースをカバーするのに十分な万能性があります。それらすべてに共通することは、コンテナがブリッジモードで動作する必要があるということです。これは、革新的な標準設定です。

「Protection Only」:コンテナ内でライセンスをアクティベーションして、単にアプリケーションを暗号化および使用する手段として機能させることができます。たとえば、コンテナを簡単にスケーリングして、一度に複数のインストールでアプリケーションを実行できます。

「Licensing on the Host」:ライセンスはホスト上でアクティベーションされ、アプリケーションの正当な使用を制限およびチェックし続けます(例:CodeMeter SmartBindライセンスとして)。各コンテナではCodeMeter License Serverがクライアントモードで実行されており、コンテナ内のアプリケーションからのリクエストをホスト上のCodeMeter License Serverに渡します。Dockerネットワークのサーバー検索リストには、ホストのIPアドレス(例:172.17.0.1)が記録されます。これは、コンテナの観点からは永続的です。

「Licensing via the Network」:このユースケースは、前の例とはサーバーの場所のみが異なります。使用可能なライセンスを提供するには、ネットワーク上で動作するCodeMeter License Serverが必要です。個別のコンテナごとに、クライアントモードのCodeMeter License Serverは再びコンテナ内のアプリケーションからクエリを受信し、ネットワークライセンスサーバーに転送します。

  

KEYnote 38 – Edition Fall 2019