(57)【要約】【課題】仮想マシン利用時のライセンス管理を適切に行うこと。【解決手段】記憶部１ａは、仮想マシンまたは仮想マシンにより実行されるソフトウェアの利用可能数をユーザ情報毎に記憶する。演算部１ｂは、マシンコードＣ１を仮想マシン２ａから受信すると、マシンコードＣ１からユーザ情報Ｙ１を取得する。演算部１ｂは、記憶部１ａに記憶されたユーザ情報Ｙ１の利用可能数に基づいて仮想マシン２ａまたは仮想マシン２ａ上のソフトウェアの利用を許可するか否かを判定する。演算部１ｂは、許可する場合にはマシンコードＣ１を含む認証コードを仮想マシン２ａに送信する。演算部１ｂは、許可しない場合にはエラーコードを仮想マシン２ａに送信する。【選択図】図１
2017058711.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシンを実行可能な情報処理装置と通信するライセンス管理装置であって、
前記仮想マシンまたは前記仮想マシンにより実行されるソフトウェアの利用可能数をユーザ情報毎に記憶する記憶部と、
前記ユーザ情報と前記仮想マシンの固有情報とに基づいて生成された第１のコードを前記仮想マシンから受信すると、前記第１のコードから前記ユーザ情報を取得し、前記ユーザ情報および前記利用可能数に基づいて前記仮想マシンまたは前記ソフトウェアの利用を許可するか否か判定し、許可する場合は前記第１のコードを含む第２のコードを前記仮想マシンに送信し、許可しない場合はエラーを示す第３のコードを前記仮想マシンに送信する演算部と、
を有するライセンス管理装置。
【請求項２】
前記第２のコードは、前記第２のコードを受信した前記仮想マシンにより前記仮想マシンの起動元のイメージファイルに追加され、前記イメージファイルから起動される前記仮想マシンによって、当該仮想マシンまたは前記ソフトウェアのユーザによる利用可否の判定に用いられるコードである、請求項１記載のライセンス管理装置。
【請求項３】
前記演算部は、受信した前記第１のコードおよび前記ユーザ情報に対応付けて前記第２のコードを前記記憶部に格納する、請求項１または２記載のライセンス管理装置。
【請求項４】
前記記憶部は、前記仮想マシンの起動元のイメージファイルの識別情報または前記ソフトウェアの識別情報に対応付けて前記ユーザ情報毎の利用可能数の情報を記憶し、
前記演算部は、前記マシンコードを受信する際に前記イメージファイルまたは前記ソフトウェアの識別情報を前記仮想マシンから受信し、前記ユーザ情報および当該識別情報に基づいて前記仮想マシンまたは前記ソフトウェアの利用を許可するか否かを判定する、
請求項１乃至３の何れか１項に記載のライセンス管理装置。
【請求項５】
前記固有情報は、前記仮想マシンの起動元のイメージファイルとは異なるファイルに格納され、前記仮想マシンの起動元の前記イメージファイルの異同に拘わらず、前記仮想マシン毎に一意な情報である、請求項１乃至４の何れか１項に記載のライセンス管理装置。
【請求項６】
仮想マシンを実行可能な情報処理装置と、
前記仮想マシンまたは前記仮想マシンにより実行されるソフトウェアの利用可能数をユーザ情報毎に記憶し、前記ユーザ情報と前記仮想マシンの固有情報とに基づいて生成された第１のコードを前記仮想マシンから受信すると、前記第１のコードから前記ユーザ情報を取得し、前記ユーザ情報および前記利用可能数に基づいて前記仮想マシンまたは前記ソフトウェアの利用を許可するか否か判定し、許可する場合は前記第１のコードを含む第２のコードを前記仮想マシンに送信し、許可しない場合はエラーを示す第３のコードを前記仮想マシンに送信するライセンス管理装置と、
を有するライセンス管理システム。
【請求項７】
前記仮想マシンは、前記第２のコードを受信すると、前記仮想マシンの起動元のイメージファイルに前記第２のコードを追加し、当該第２のコードに基づいて、前記仮想マシンまたは前記ソフトウェアをユーザに利用させるか否かを決定する、請求項６記載のライセンス管理システム。
【請求項８】
前記仮想マシンは、前記仮想マシンまたは前記ソフトウェアの前記ユーザによる利用が開始される際に前記ユーザによる前記ユーザ情報の入力を受け付け、前記イメージファイルに含まれる前記第２のコードから前記第１のコードを取得し、当該第１のコードが今回受け付けた前記ユーザ情報および前記仮想マシンの固有情報に対応しているか否かの照合に応じて、前記仮想マシンまたは前記ソフトウェアを前記ユーザに利用させるか否かを決定する、請求項７記載のライセンス管理システム。
【請求項９】
仮想マシンを実行可能な情報処理装置と通信するコンピュータに、
ユーザ情報と前記仮想マシンの固有情報とに基づいて生成された第１のコードを前記仮想マシンから受信すると、前記第１のコードから前記ユーザ情報を取得し、前記仮想マシンまたは前記仮想マシンにより実行されるソフトウェアの前記ユーザ情報毎の利用可能数を示す情報に基づいて前記仮想マシンまたは前記ソフトウェアの利用を許可するか否か判定し、許可する場合は前記第１のコードを含む第２のコードを前記仮想マシンに送信し、許可しない場合はエラーを示す第３のコードを前記仮想マシンに送信する、
処理を実行させるライセンス管理プログラム。
【請求項１０】
仮想マシンを実行可能な情報処理装置と通信するコンピュータが、
ユーザ情報と前記仮想マシンの固有情報とに基づいて生成された第１のコードを前記仮想マシンから受信すると、前記第１のコードから前記ユーザ情報を取得し、前記仮想マシンまたは前記仮想マシンにより実行されるソフトウェアの前記ユーザ情報毎の利用可能数を示す情報に基づいて前記仮想マシンまたは前記ソフトウェアの利用を許可するか否か判定し、許可する場合は前記第１のコードを含む第２のコードを前記仮想マシンに送信し、許可しない場合はエラーを示す第３のコードを前記仮想マシンに送信する、
ライセンス管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はライセンス管理装置、ライセンス管理システム、ライセンス管理プログラムおよびライセンス管理方法に関する。
【背景技術】
【０００２】
情報処理の分野では、物理的なコンピュータ（物理マシンや物理ホストと呼ぶことがある）上で、仮想的なコンピュータ（仮想マシンや論理ホストと呼ぶことがある）を動作させる仮想化技術が利用されている。各仮想マシン上では、ＯＳ（Operating System）などのソフトウェアを実行できる。仮想化技術を利用する物理マシンは、複数の仮想マシンを管理するためのソフトウェアを実行する。例えば、ハイパーバイザと呼ばれるソフトウェアが、ＣＰＵ（Central Processing Unit）の処理能力やＲＡＭ（Random Access Memory）の記憶領域を、演算のリソースとして複数の仮想マシンに割り振ることがある。
【０００３】
仮想マシンで実行されるＯＳやアプリケーションなどのソフトウェアのプログラムは、補助記憶装置のデータイメージであるイメージファイルとして提供され得る。物理マシンは、イメージファイルを基に仮想マシンや仮想マシン上のソフトウェアを実行できる。
【０００４】
ところで、情報処理システムでは、コンピュータにより種々のソフトウェアが実行されている。ソフトウェアには、ユーザやライセンスなどを認証する機能をもつものがある。例えば、各ユーザ専用の論理ボリュームをストレージに定義し、ユーザが計算機を使用する際に、ユーザを認証し、そのユーザ専用のＬＵ（Logical Unit）を当該ユーザが使用する計算機のみからアクセス許可するよう制御する提案がある。また、読み出し専用の外部媒体により演算装置端末をブートする際に、管理サーバ側で記録されているクッキー情報を演算装置端末に提供することで、ユーザの自動ログイン認証を行う提案がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２９３９２２号公報
【特許文献２】特開２００９−１３９９７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
仮想マシンの実行に用いられるイメージファイルは、他の物理マシン上に複製可能である。このため、仮想マシンにおけるソフトウェアの使用ライセンスの管理が問題となる。
例えば、ある仮想マシンで、あるソフトウェアを適正にライセンス認証済とし、認証済である旨の情報がイメージファイルに追加された後に、当該イメージファイルが他の物理マシン上に複製され得る。すると、他の物理マシンにより、複製したイメージファイルを用いて、ライセンス認証済の状態のソフトウェアを含む仮想マシンが起動され、ソフトウェアが不正に使用されるおそれがある。
【０００７】
この点、各物理マシンでライセンス管理用のソフトウェアを実行して、物理マシン上の仮想マシンで実行されるソフトウェアがライセンス認証済であるかを管理することも考えられる。しかし、仮想マシンのイメージファイルの提供者が必ずしも各物理マシンを管理しているとは限らない。すなわち、上記ライセンス管理用のソフトウェアを各物理マシンに導入するのが難しいこともあり、ソフトウェアの不正使用を防ぐのは容易ではない。
【０００８】
１つの側面では、本発明は、仮想マシン利用時のライセンス管理を適切に行えるライセンス管理装置、ライセンス管理システム、ライセンス管理プログラムおよびライセンス管理方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、仮想マシンを実行可能な情報処理装置と通信するライセンス管理装置が提供される。このライセンス管理装置は、記憶部と演算部とを有する。記憶部は、仮想マシンまたは仮想マシンにより実行されるソフトウェアの利用可能数をユーザ情報毎に記憶する。演算部は、ユーザ情報と仮想マシンの固有情報とに基づいて生成された第１のコードを仮想マシンから受信すると、第１のコードからユーザ情報を取得し、ユーザ情報および利用可能数に基づいて仮想マシンまたはソフトウェアの利用を許可するか否かを判定し、許可する場合は第１のコードを含む第２のコードを仮想マシンに送信し、許可しない場合はエラーを示す第３のコードを仮想マシンに送信する。
【発明の効果】
【００１０】
１つの側面では、仮想マシン利用時のライセンス管理を適切に行える。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態のライセンス管理装置を示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】管理サーバのハードウェア例を示す図である。
【図４】仮想マシンの動作に用いられるファイルの例を示す図である。
【図５】情報処理システムの機能例を示す図である。
【図６】固有情報の例を示す図である。
【図７】ユーザ管理テーブルの例を示す図である。
【図８】仮想マシン管理テーブルの例を示す図である。
【図９】認証コードの例を示す図である。
【図１０】仮想マシンの使用開始時の処理例を示すフローチャートである。
【図１１】管理サーバのライセンス管理の処理例を示すフローチャートである。
【図１２】イメージファイル複製時の認証処理の具体例を示す図である。
【図１３】他のテーブル例（その１）を示す図である。
【図１４】他のテーブル例（その２）を示す図である。
【発明を実施するための形態】
【００１２】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のライセンス管理装置を示す図である。ライセンス管理装置１は、情報処理装置２，３とネットワーク４を介して接続されている。ライセンス管理装置１は、情報処理装置２，３とネットワーク４を介して通信する。情報処理装置２は、仮想マシン２ａを実行可能な物理マシンである。情報処理装置３は、仮想マシン３ａを実行可能な物理マシンである。情報処理装置２，３は、ハイパーバイザと呼ばれるソフトウェアを実行してもよい。情報処理装置２のハイパーバイザは、情報処理装置２が備えるＣＰＵやＲＡＭなどのハードウェア資源を用いて仮想マシン２ａを動作させる。同様に、情報処理装置３のハイパーバイザは、情報処理装置３が備えるＣＰＵやＲＡＭなどのハードウェア資源を用いて仮想マシン３ａを動作させる。
【００１３】
ここで、情報処理装置２は記憶装置を有し、当該記憶装置によりイメージファイル２ｂおよび構成ファイル２ｃを記憶する。イメージファイル２ｂは、仮想マシン２ａの補助記憶装置のイメージデータである。イメージファイル２ｂは、仮想ディスクイメージ、または、ディスクファイルなどと呼ばれることもある。例えば、イメージファイル２ｂは、仮想マシン２ａが実行するソフトウェア（ＯＳ、ミドルウェアまたはアプリケーションソフトウェアなど）がインストール済の状態となっている。構成ファイル２ｃは、仮想マシン２ａに割り当てる物理的なリソースに関するデータである。構成ファイル２ｃは、仮想マシン２ａの固有情報Ｘ１を含む。固有情報Ｘ１は、仮想マシン２ａに固有の情報である。固有情報Ｘ１の一例として、ＵＵＩＤ（Universally Unique IDentifier）やＭＡＣ（Media Access Control）アドレスなどが考えられる。例えば、情報処理装置２のハイパーバイザは、イメージファイル２ｂおよび構成ファイル２ｃを基に、仮想マシン２ａを動作させることができる。ここで、後述するように、仮想マシン３ａは、イメージファイル２ｂの複製であるイメージファイル３ｂによって起動される仮想マシンである（仮想マシン３ａは仮想マシン２ａのいわゆるクローンであるということができる）。
【００１４】
ライセンス管理装置１は、仮想マシン２ａ，３ａ、または、仮想マシン２ａ，３ａにより実行されるソフトウェアのライセンスを管理する情報処理装置である。例えば、ライセンス管理装置１によるライセンス管理の対象となるソフトウェアとしては、仮想マシン２ａ，３ａにより実行されるＯＳ、ミドルウェアまたはアプリケーションソフトウェアなどが考えられる。ライセンス管理装置１はコンピュータと呼ばれるものでもよい。
【００１５】
ライセンス管理装置１は、記憶部１ａおよび演算部１ｂを有する。記憶部１ａは、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性記憶装置でもよい。演算部１ｂは、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。演算部１ｂはプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。
【００１６】
記憶部１ａは、仮想マシンまたは仮想マシンでのソフトウェアの利用可能数をユーザ情報毎に記憶する。ユーザ情報は、ユーザＩＤなどを含む。ユーザ情報は、ユーザアカウントに関するアカウント情報であるということもできる。具体的には、記憶部１ａは、ライセンス情報Ｔ１を記憶する。ライセンス情報Ｔ１は、ユーザのユーザ情報と、仮想マシンまたはソフトウェアの利用可能数との対応関係の情報である。仮想マシンの利用可能数とは、ユーザが利用してよい仮想マシンの数である。ソフトウェアの利用可能数とは、ユーザ毎の利用ライセンス数（仮想マシンへのインストールが認められている数）である。
【００１７】
例えば、ユーザは、あるイメージファイルから起動される仮想マシンを利用する権利を当該イメージファイルの提供元から購入できる。また、例えば、ユーザは、ソフトウェアのベンダなどからソフトウェアを仮想マシンにインストールして利用する権利を購入できる。すると、購入数に応じて、ライセンス情報Ｔ１の利用可能数を追加できる（例えば、購入数に応じて発行されたライセンス追加用のコードをライセンス管理装置１に入力するなど）。例えば、ユーザは、仮想マシンにソフトウェアをインストールして利用することができる。すると、インストール数に応じてライセンス情報Ｔ１の利用可能数が減少する。ライセンス管理装置１は、該当のユーザが利用可能な上限数と現在の利用数とによって利用可能数（上限数と現在の利用数との差）を管理してもよい。
【００１８】
例えば、ライセンス情報Ｔ１には、あるイメージファイルから起動される仮想マシン、または、あるソフトウェアについて、ユーザ“Ａ”に対して、利用可能数“１”という情報が登録されている。これは、当該仮想マシンまたはソフトウェアが、ユーザ情報“Ａ”に対応するユーザに対して、１つの利用が認められていることを示す。また、例えば、ライセンス情報Ｔ１には、同ソフトウェアについて、ユーザ情報“Ｂ”に対して、利用可能数“２”という情報が登録されている。これは、当該ソフトウェアが、ユーザ情報“Ｂ”に対応するユーザに対して、２つの利用が認められていることを示す。
【００１９】
演算部１ｂは、ユーザ情報と仮想マシンの固有情報とに基づいて生成された第１のコード（以下、マシンコードと称する）を仮想マシンから受信する。例えば、仮想マシン２ａは、ユーザＵ１によって利用される。ユーザＵ１は、情報処理装置２に接続された入力デバイスを操作して、仮想マシン２ａを利用することもできるし、ネットワーク４を介して情報処理装置２に接続された端末装置を操作して、ネットワーク４経由で仮想マシン２ａを利用することもできる。例えば、仮想マシン２ａは、ユーザＵ１が仮想マシン２ａの利用を開始しようとするときに、情報処理装置２に接続された表示装置またはユーザＵ１が操作する端末装置に所定のログイン画面を表示させ、ユーザＵ１によるユーザ情報Ｙ１の入力を受け付ける。すると、仮想マシン２ａは、仮想マシン２ａの固有情報Ｘ１およびユーザ情報Ｙ１に基づいて、マシンコードＣ１を生成し、ライセンス管理装置１に送信する。演算部１ｂは、マシンコードＣ１を仮想マシン２ａから受信する。
【００２０】
演算部１ｂは、マシンコードからユーザ情報を取得し、ユーザ情報および利用可能数に基づいて仮想マシンまたは管理対象のソフトウェアの利用を許可するか否かを判定する。
例えば、演算部１ｂは、マシンコードＣ１からユーザ情報Ｙ１を取得する。演算部１ｂは、ユーザ情報Ｙ１およびライセンス情報Ｔ１に登録されたユーザ情報毎の利用可能数に基づいて、管理対象のソフトウェアがユーザＵ１により利用可能であるか否かを判定する。例えば、ユーザ情報Ｙ１は“Ａ”を示す。ライセンス情報Ｔ１によれば、ユーザ情報“Ａ”に対する管理対象のソフトウェアの利用可能数は“１”である。この場合、当該ソフトウェアはユーザＵ１により利用可能となる。なお、着目するユーザ情報のレコードがライセンス情報Ｔ１に存在しない場合や、当該レコードが存在しても利用可能数が“０”の場合、当該ソフトウェアはユーザＵ１により利用不可となる。
【００２１】
演算部１ｂは、利用を許可する場合はマシンコード（第１のコード）を含む第２のコード（以下、認証コードと称する）を仮想マシンに送信する。また、演算部１ｂは、利用を許可しない場合は、エラーを示す第３のコード（以下、エラーコードと称する）を仮想マシンに送信する。
【００２２】
例えば、演算部１ｂは、上記の利用可否判定で、該当のソフトウェアがユーザＵ１により利用可能であると判定した場合、マシンコードＣ１を含む認証コードＣを仮想マシン２ａに送信する。このとき、演算部１ｂは、ライセンス情報Ｔ１において、該当のソフトウェアのユーザＵ１（ユーザ情報“Ａ”）による利用可能数を１減算する。一方、演算部１ｂは、上記の利用可否判定で、該当のソフトウェアがユーザＵ１により利用不可であると判定した場合、エラーコードを仮想マシン２ａに送信する。演算部１ｂによるマシンコードの受信から認証コード（またはエラーコード）の送信までの一連の処理をライセンス管理装置１によるライセンス認証の処理といえる。
【００２３】
仮想マシン２ａは、ライセンス管理装置１からエラーコードを受信した場合、ユーザＵ１が不正ユーザであると判断して、仮想マシン２ａまたは管理対象のソフトウェアの利用を許可しない。
【００２４】
仮想マシン２ａは、認証コードＣを受信した場合、イメージファイル２ｂに認証コードＣを追加する。仮想マシン２ａは、認証コードＣに含まれるマシンコードＣ１が、仮想マシン２ａの固有情報Ｘ１およびユーザ情報Ｙ１に基づいて作成されたものであることを検証する。仮想マシン２ａは、検証に成功すると、ユーザＵ１による仮想マシン２ａまたは管理対象のソフトウェアの利用を許可する。仮想マシン２ａは、固有情報Ｘ１およびユーザ情報Ｙ１により作成されるマシンコードＣ１と、認証コードＣに含まれるマシンコードＣ１との両者が一致する場合、当該検証が成功であると判断する。一方、両者が一致しない場合、仮想マシン２ａは、検証が失敗であると判断する。仮想マシン２ａは、検証に失敗した場合、ユーザＵ１による仮想マシン２ａまたは管理対象のソフトウェアの利用を許可しない（一連の認証処理において、コード改ざんなどの不正な操作が行われた可能性があるため）。
【００２５】
同様に、仮想マシン２ａは、以後、イメージファイル２ｂに追加された認証コードＣを用いて、ユーザによる利用可否の判定を仮想マシン２ａ自身により行える。具体的には、仮想マシン２ａは、仮想マシン２ａへのログインのたびにユーザＵ１により入力されるユーザ情報Ｙ１と、固有情報Ｘ１とを用いてマシンコードＣ１を生成する。そして、仮想マシン２ａは、生成したマシンコードＣ１と、イメージファイル２ｂ内の認証コードＣに含まれるマシンコードＣ１との両者が一致する場合、仮想マシン２ａまたは管理対象のソフトウェアの利用を許可する。仮想マシン２ａは、両者が一致しなければ、仮想マシン２ａまたは管理対象のソフトウェアの利用を許可せずに、今回生成したマシンコードをライセンス管理装置１に送信して再度ライセンス認証を受ける。
【００２６】
これにより、仮想マシンで実行されるソフトウェアのライセンスを適切に管理できる。具体的には次の通りである。例えば、ユーザＵ１またはユーザＵ２は、イメージファイル２ｂを複製したイメージファイル３ｂを、情報処理装置３が備える記憶装置に格納することができる。すると、情報処理装置３は、イメージファイル３ｂを用いて、仮想マシン２ａのクローンである仮想マシン３ａを情報処理装置３上で動作させることが可能となる。
【００２７】
この場合、仮想マシン３ａは、仮想マシン２ａと同様にイメージファイル３ｂに含まれる認証コードＣに基づく認証を行うことになる。例えば、仮想マシン３ａを動作させるために、情報処理装置３では構成ファイル３ｃが新たに生成される。構成ファイル３ｃは、仮想マシン３ａの固有情報Ｘ２を含む。固有情報Ｘ２は、固有情報Ｘ１とは異なる値をとる。このとき、仮想マシン３ａは、固有情報Ｘ２と、ユーザＵ２により入力されたユーザ情報Ｙ２とに基づいてマシンコードＣ２を生成し、認証コードＣに含まれるマシンコードＣ１と照合する。この場合、両者は一致しないので、仮想マシン３ａは、マシンコードＣ２をライセンス管理装置１に送信して再度ライセンス認証を受けることになる。
【００２８】
あるいは、仮想マシン３ａは、固有情報Ｘ２とユーザＵ１により入力されたユーザ情報Ｙ１とに基づいてマシンコードを生成し、認証コードＣに含まれるマシンコードＣ１と照合する。この場合、両者は一致しないので、仮想マシン３ａは、生成したマシンコードをライセンス管理装置１に送信して再度ライセンス認証を受けることになる。
【００２９】
一方、例えば、あるソフトウェアについて、単にライセンス認証済であることを示す認証済情報（マシンコードを含まない）をイメージファイル２ｂに格納することも考えられる。しかし、この場合、イメージファイル２ｂを複製してイメージファイル３ｂが作成されてしまうと、該当のソフトウェアが認証済の状態で、イメージファイル３ｂにより仮想マシン３ａを起動可能となってしまう。すると、ライセンスをもたない不正なユーザにより仮想マシンやソフトウェアが不正に利用されたり、ライセンスをもつユーザによりライセンスで許容されている数を超過して仮想マシンやソフトウェアが不正に利用されたりするおそれがある。
【００３０】
これに対し、ライセンス管理装置１によれば、マシンコードを仮想マシン２ａから取得してライセンス認証を行い、当該マシンコード含む認証コードを仮想マシン２ａに送信する。そして、ユーザＵ２が仮想マシン２ａを利用する際やユーザＵ１またはユーザＵ２が仮想マシン３ａを利用しようとする際に、ライセンス管理装置１による再度のライセンス認証を課すことができ、ライセンス管理を適切に行うことができる。
【００３１】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムを示す図である。第２の実施の形態の情報処理システムは、管理サーバ１００、業務サーバ２００，２００ａおよびＰＣ（Personal Computer）３００，３００ａを含む。管理サーバ１００は、ネットワーク１０に接続されている。ネットワーク１０は、ＬＡＮ（Local Area Network）でもよいしインターネットやＷＡＮ（Wide Area Network）などでもよい。業務サーバ２００，２００ａおよびＰＣ３００，３００ａは、ネットワーク２０に接続されている。ネットワーク２０は、例えばＬＡＮである。ネットワーク２０は、ネットワーク１０に接続されている。
【００３２】
管理サーバ１００は、業務サーバ２００，２００ａで実行されるソフトウェアのライセンスを管理するサーバコンピュータである。管理対象のソフトウェアは、ＯＳ、ミドルウェアおよびアプリケーションソフトウェアを含む。管理サーバ１００は、第１の実施の形態のライセンス管理装置１の一例である。
【００３３】
業務サーバ２００，２００ａは、ユーザの業務を支援するサーバコンピュータである。業務サーバ２００，２００ａは、仮想マシンを実行する。仮想マシンは、ユーザの業務支援に用いられる各種のソフトウェア（ＯＳ、ミドルウェアおよびアプリケーションソフトウェアを含む）を実行する。業務サーバ２００，２００ａは、第１の実施の形態の情報処理装置２，３の一例である。
【００３４】
ＰＣ３００，３００ａは、ユーザによって利用されるクライアントコンピュータである。ＰＣ３００は、ユーザ３０によって利用される。ＰＣ３００ａは、ユーザ３０ａによって利用される。ユーザ３０は、ＰＣ３００を操作して、業務サーバ２００で動作する仮想マシンに業務処理を要求できる。すると、要求を受け付けた仮想マシンは、業務処理を実行し、その結果をＰＣ３００に応答する。ＰＣ３００は、業務サーバ２００，２００ａで動作する仮想マシンの利用を開始する際、仮想マシンに対してユーザ情報を入力し、ログイン認証を受ける。ユーザ３０ａも同様にして、ＰＣ３００ａを操作して、業務サーバ２００や業務サーバ２００ａで動作する仮想マシンを利用できる。
【００３５】
図３は、管理サーバのハードウェア例を示す図である。管理サーバ１００は、プロセッサ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。各ユニットは管理サーバ１００のバスに接続されている。業務サーバ２００，２００ａおよびＰＣ３００，３００ａも管理サーバ１００と同様のユニットを用いて実現できる。
【００３６】
プロセッサ１０１は、管理サーバ１００の情報処理を制御する。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ１０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００３７】
ＲＡＭ１０２は、管理サーバ１００の主記憶装置である。ＲＡＭ１０２は、プロセッサ１０１に実行させるＯＳのプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０２は、プロセッサ１０１による処理に用いる各種データを記憶する。
【００３８】
ＨＤＤ１０３は、管理サーバ１００の補助記憶装置である。ＨＤＤ１０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、ＯＳのプログラム、アプリケーションプログラム、および各種データを記憶する。管理サーバ１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００３９】
画像信号処理部１０４は、プロセッサ１０１からの命令に従って、管理サーバ１００に接続されたディスプレイ１１に画像を出力する。ディスプレイ１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００４０】
入力信号処理部１０５は、管理サーバ１００に接続された入力デバイス１２から入力信号を取得し、プロセッサ１０１に出力する。入力デバイス１２としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００４１】
媒体リーダ１０６は、記録媒体１３に記録されたプログラムやデータを読み取る装置である。記録媒体１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。また、記録媒体１３として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。媒体リーダ１０６は、例えば、プロセッサ１０１からの命令に従って、記録媒体１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００４２】
通信インタフェース１０７は、ネットワーク１０を介して他の装置と通信を行う。通信インタフェース１０７は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
【００４３】
なお、管理サーバ１００、業務サーバ２００，２００ａおよびＰＣ３００，３００ａは、ディスプレイ１１および入力デバイス１２の少なくとも何れかを内蔵してもよい。
図４は、仮想マシンの動作に用いられるファイルの例を示す図である。業務サーバ２００は、ハイパーバイザＶ１を実行する。業務サーバ２００ａは、ハイパーバイザＶ２を実行する。ハイパーバイザＶ１，Ｖ２は、仮想マシンモニタ（ＶＭＭ：Virtual Machine Monitor）と呼ばれることもある。
【００４４】
ハイパーバイザＶ１は、業務サーバ２００が備えるプロセッサやメモリなどのリソースを用いて、業務サーバ２００上で仮想マシンＭ１を動作させる。このとき、仮想マシンＭ１が利用可能な仮想的な補助記憶装置は、イメージファイルＦ１１として提供される。
【００４５】
イメージファイルＦ１１は、業務サーバ２００が備えるＨＤＤやＳＳＤなどの補助記憶装置に格納されるファイルである。イメージファイルＦ１１は、ＯＳ、ミドルウェアおよびアプリケーションソフトウェアが予めインストールされた状態の補助記憶装置のデータである。イメージファイルＦ１１は、仮想的な補助記憶装置（仮想ディスクということもある）に相当するデータであるということもできる。すなわち、仮想マシンＭ１により不揮発性の記憶装置にデータを格納する処理は、イメージファイルＦ１１に当該データを格納することに相当する。例えば、仮想マシンＭ１は、仮想マシンＭ１のＯＳなどのソフトウェアが、適正にライセンス認証されると、ライセンス認証済であることを示す認証情報を、イメージファイルＦ１１に追加する。
【００４６】
また、仮想マシンＭ１のハードウェア構成に関する情報は、構成ファイルＦ１２として提供される。構成ファイルＦ１２は、仮想マシンＭ１で用いられるハードウェアに関する固有情報（ＵＵＩＤやＭＡＣアドレスなど）を含む。例えば、ＵＵＩＤは、業務サーバ２００の所定の識別子と、構成ファイルＦ１２の格納パスとを基に、構成ファイルＦ１２の作成時に決定される。また、例えば、ＭＡＣアドレスは、所定のルールに則って、あるいは、システムの管理者により静的に、仮想マシン毎に一意の値が付与される。
【００４７】
ここで、イメージファイルＦ１１は、業務サーバ２００のファイルシステムで管理される通常のファイルと同様に、複製が可能である。このため、例えば、イメージファイルＦ１１を複製したファイルであるイメージファイルＦ２１を、ネットワーク２０経由または記録媒体を用いて、業務サーバ２００ａの補助記憶装置に格納することもできる。すると、ハイパーバイザＶ２は、業務サーバ２００ａが備えるプロセッサやメモリなどのリソースを用いて、イメージファイルＦ２１を基に、仮想マシンＭ２を動作させることが可能となる。なお、この場合、構成ファイルＦ２２については、仮想マシンＭ２に固有の設定としなければ仮想マシンＭ２を適切に動作させることができない（例えば、仮想マシンＭ１，Ｍ２でＭＡＣアドレスの重複があると適切に通信できないなど）。このため、業務サーバ２００ａで、仮想マシンＭ２に対して、構成ファイルＦ１２とは異なる設定の構成ファイルＦ２２を新たに作成することになる。
【００４８】
このように、業務サーバ２００ａでは、イメージファイルＦ２１を用いて、仮想マシンＭ１のいわゆるクローンである仮想マシンＭ２を動作させることができる。イメージファイルＦ２１がソフトウェアの認証情報を含んでいると、仮想マシンＭ２動作時に、当該認証情報によりライセンス認証が済んでいるものと判断されてしまう。すると、ライセンス契約がなされていないユーザであるにも関わらず、該当のソフトウェアが利用されるおそれがある。または、ライセンスをもつユーザであるがライセンスされた数を超過しているにも関わらず、該当のソフトウェアが利用されるおそれもある。そこで、第２の実施の形態の情報処理システムは、仮想マシンにおけるソフトウェアのライセンスを適切に管理可能にする機能を提供する。
【００４９】
図５は、情報処理システムの機能例を示す図である。管理サーバ１００は、記憶部１１０、認証部１２０および認証コード生成部１３０を有する。記憶部１１０は、ＲＡＭ１０２またはＨＤＤ１０３に確保された記憶領域として実現される。認証部１２０および認証コード生成部１３０は、ＲＡＭ１０２に格納されたプログラムをプロセッサ１０１が実行することで実現される。
【００５０】
記憶部１１０は、ユーザによるソフトウェアの利用に関するライセンスを管理するためのライセンス管理情報を記憶する。第２の実施の形態では、ライセンス管理対象のソフトウェアの一例として、仮想マシンＭ１，Ｍ２で実行されるＯＳを考える。ただし、管理サーバ１００は、ミドルウェアやアプリケーションソフトウェアなどの他の種類のソフトウェアのライセンスも同様に管理可能である。あるいは、ＯＳ、ミドルウェアおよびアプリケーションソフトウェアなどを１つにまとめた仮想アプライアンスとして仮想マシンが利用される場合、仮想アプライアンス単位にライセンスを管理することも考えられる。また、管理対象のライセンスは、仮想マシン自体の利用に関するライセンスでもよい（仮想マシン自体もソフトウェアによって実現されるので、仮想マシンの利用ライセンスをソフトウェアの利用ライセンスと考えてもよい）。
【００５１】
認証部１２０は、仮想マシンＭ１から受信するマシンコードと、記憶部１１０に記憶されたライセンス管理情報とに基づいて、仮想マシンＭ１で利用されるソフトウェア（ここでは、ＯＳ）のライセンス認証を行う。マシンコードは、仮想マシンＭ１の固有情報および仮想マシンＭ１に入力されたユーザ３０のユーザ情報に基づいて、仮想マシンＭ１により作成されるコードである。
【００５２】
認証コード生成部１３０は、認証部１２０によるライセンス認証の結果に応じて、所定のコードを生成し、仮想マシンＭ１に送信する。認証コード生成部１３０が生成するコードは２種類ある。第１には、ライセンス認証に成功したことを示す認証コードである。第２には、ライセンス認証に失敗したことを示すエラーコードである。認証コードは、仮想マシンＭ１から取得したマシンコードを含む。また、認証コードは、管理サーバ１００によって仮想マシンＭ１に対して付与されたマシンＩＤを含む。マシンＩＤは、管理サーバ１００によって各仮想マシンに付与される管理用のＩＤである。認証コード生成部１３０は、認証コードおよびエラーコードを暗号化して、業務サーバ２００に送信してもよい。暗号化方式としては、例えば共通鍵方式や公開鍵方式などを利用できる。
【００５３】
業務サーバ２００は、記憶部２１０、マシンコード生成部２２０および検証部２３０を有する。記憶部２１０は、業務サーバ２００が備えるＨＤＤに確保された記憶領域として実現される。マシンコード生成部２２０および検証部２３０は、業務サーバ２００が備えるＲＡＭに格納されたプログラムを、業務サーバ２００が備えるプロセッサが実行することで実現される。マシンコード生成部２２０および検証部２３０の機能は、仮想マシンＭ１上で実現される。このため、例えば、マシンコード生成部２２０および検証部２３０の機能を実現するプログラムはイメージファイルＦ１１に格納される。例えば、マシンコード生成部２２０および検証部２３０は、ユーザ３０による仮想マシンＭ１の利用開始時のログイン処理のタイミングで仮想マシンＭ１により実行される機能である。
【００５４】
記憶部２１０は、イメージファイルＦ１１および構成ファイルＦ１２を記憶する。イメージファイルＦ１１および構成ファイルＦ１２の具体的な内容は、図４で例示した通りである。
【００５５】
マシンコード生成部２２０は、ユーザ３０によるユーザ情報の入力を受け付ける。マシンコード生成部２２０は、構成ファイルＦ１２に含まれる固有情報と、ユーザ３０により入力されたユーザ情報とを用いてマシンコードを生成し、管理サーバ１００に送信する。例えば、マシンコード生成部２２０は、仮想マシンＭ１に関する単一または複数の固有情報を組み合わせた情報に対して所定の不可逆演算を施すことで、第１の長さの第１の文字列を生成する。また、マシンコード生成部２２０は、ユーザ情報に対して所定の可逆演算を施すことで、第２の長さの第２の文字列を生成する。マシンコード生成部２２０は、第１の文字列に第２の文字列を付加した結果を、マシンコードとする。すると、管理サーバ１００では、マシンコードの先頭の第１の長さの部分を除去することで、第２の文字列を取得し、上記可逆演算によって、第２の文字列からユーザ情報を復元可能である。マシンコードのコード長や、第１および第２の文字列部分のコード長は、管理サーバ１００および業務サーバ２００の間で予め合意されている。マシンコード生成部２２０は、マシンコードを暗号化して、管理サーバ１００に送信してもよい。暗号化方式としては、例えば共通鍵方式や公開鍵方式などを利用できる。
【００５６】
検証部２３０は、認証コードまたはエラーコードを管理サーバ１００から受信する。認証コードまたはエラーコードは、マシンコード生成部２２０が送信したマシンコードに対して、管理サーバ１００により生成されたコードである。認証コードは、前述のように、マシンコードおよびマシンＩＤを含む。マシンＩＤのコード長は、管理サーバ１００および業務サーバ２００の間で予め合意されている。
【００５７】
検証部２３０は、認証コードを検証する。具体的には、検証部２３０は、ユーザ３０により入力されたユーザ情報と、構成ファイルＦ１２に含まれる固有情報とを用いて、マシンコード生成部２２０により再度マシンコードを生成させる。なお、マシンコード生成部２２０がマシンコードを生成済の場合は当該マシンコードを記憶部２１０に格納しておいて検証に流用してもよい。検証部２３０は、受信した認証コードからマシンコードを取得する。
【００５８】
検証部２３０は、マシンコード生成部２２０が生成したマシンコードと、認証コードに含まれるマシンコードとが一致するか否かを判定する。検証部２３０は、両方のマシンコードが一致する場合、ライセンス認証に成功したと判断して、仮想マシンＭ１のユーザ３０による利用を許可する。すると、ユーザ３０は、仮想マシンＭ１にログインし、仮想マシンＭ１が提供する業務サービスを利用可能となる。検証部２３０は、両方のマシンコードが一致しない場合、ライセンス認証に失敗したと判断して、仮想マシンＭ１のユーザ３０による利用を許可しない。この場合、ユーザ３０は、仮想マシンＭ１にログインできず、仮想マシンＭ１を利用することができない。検証部２３０は、ライセンス認証に失敗したと判断した場合、マシンコード生成部２２０によってマシンコードを管理サーバ１００に送信するステップから、ライセンス認証をやり直してもよい。
【００５９】
検証部２３０は、管理サーバ１００からエラーコードを受信することもある。検証部２３０は、管理サーバ１００からエラーコードを受信した場合、ライセンス認証に失敗したと判断して、仮想マシンＭ１のユーザ３０による利用を許可しない。この場合、ユーザ３０は、仮想マシンＭ１にログインできず、仮想マシンＭ１を利用することができない。
【００６０】
上記の例では、仮想マシンＭ１を例示して説明したが、仮想マシンＭ２も同様に、マシンコード生成部２２０および検証部２３０に相当する機能を有する。
図６は、固有情報の例を示す図である。固有情報２１１は、構成ファイルＦ１２に含まれる。固有情報２１１は、例えば、ＵＵＩＤやＭＡＣアドレスなどの項目、および、各項目に設定されている値を含む。例えば、仮想マシンＭ１のＵＵＩＤの値は、“ＵＵＩＤ＿ａ”である。仮想マシンＭ１のＭＡＣアドレスの値は、“ＭＡＣ＿ｂ”である。
【００６１】
固有情報２１１は、仮想マシンＭ１に固有の情報である。仮想マシンＭ２でも、固有情報として同じ項目（ＵＵＩＤやＭＡＣアドレス）が存在するが、各項目に設定される値は、仮想マシンＭ１の固有情報の値とは異なる値となる。なお、固有情報２１１は、ＵＵＩＤおよびＭＡＣアドレス以外の仮想マシンＭ１に固有な情報を含んでもよい。
【００６２】
図７は、ユーザ管理テーブルの例を示す図である。ユーザ管理テーブル１１１は、記憶部１１０に格納されている。ユーザ管理テーブル１１１は、ユーザＩＤおよび登録可能数の項目を含む。
【００６３】
ユーザＩＤの項目には、ユーザの識別情報（ユーザＩＤ）が登録される。登録可能数の項目には、ライセンス管理対象のＯＳに対して、該当のユーザが保有するライセンス数が登録される（このライセンス数を登録可能数と称している）。このライセンス数は、該当のユーザに対して許容されている当該ＯＳの仮想マシンへのインストール数の上限ということもできる。
【００６４】
例えば、ユーザ管理テーブル１１１には、ユーザＩＤが“Ｘ”、登録可能数が“３”という情報が登録されている。これは、ユーザＩＤ“Ｘ”で識別されるユーザが保有する管理対象のＯＳのライセンス数が“３”であることを示す。すなわち、該当のユーザは、合計で３つの仮想マシンに対して当該ＯＳをインストールして利用することが許可されていることになる。
【００６５】
図８は、仮想マシン管理テーブルの例を示す図である。仮想マシン管理テーブル１１２は、記憶部１１０に格納されている。仮想マシン管理テーブル１１２は、ユーザＩＤ、マシンコードおよびマシンＩＤの項目を含む。
【００６６】
ユーザＩＤの項目には、ユーザＩＤが登録される。マシンコードの項目には、マシンコードが登録される。マシンＩＤの項目には、マシンＩＤが登録される。
例えば、仮想マシン管理テーブル１１２には、ユーザＩＤが“Ｘ”、マシンコードが“ａ１ｂｃ３ｄ・・・”、マシンＩＤが“１２３４５”という情報が登録されている。これは、ユーザＩＤ“Ｘ”で識別されるユーザが、マシンコード“ａ１ｂｃ３ｄ・・・”およびマシンＩＤ“１２３４５”に対応する仮想マシンにおいて、ライセンス管理対象のＯＳを利用していることを示す。
【００６７】
仮想マシン管理テーブル１１２には、仮想マシンとユーザとの組み合わせ毎にレコードが追加される。例えば、ユーザＩＤ“Ｘ”で識別されるユーザが、別の仮想マシンにより該当のＯＳを利用している場合には、仮想マシン管理テーブル１１２に１つのレコードが追加されることになる。図８の例では、ユーザＩＤ“Ｘ”で識別されるユーザは、２つの仮想マシンを用いて、ライセンス管理対象のＯＳを利用していることになる。
【００６８】
図９は、認証コードの例を示す図である。認証コード４０は、前述のように、管理サーバ１００によって生成され、業務サーバ２００に提供される。認証コード４０は、マシンコードおよびマシンＩＤを含む。検証部２３０は、認証コード４０を受信し、検証に成功すると、イメージファイルＦ１１に認証コード４０を追加する。
【００６９】
すると、イメージファイルＦ１１は、ユーザ３０および仮想マシンＭ１に対してライセンス認証された状態となる。その後、検証部２３０は、イメージファイルＦ１１に含まれる認証コード４０によって、イメージファイルＦ１１を基に起動される仮想マシンＭ１のログイン認証を行える。
【００７０】
具体的には、マシンコード生成部２２０は、ユーザ３０が再びログインする際に、ユーザ３０により入力されたユーザ情報を取得し、構成ファイルＦ１２に含まれる固有情報と、取得したユーザ情報とを基にマシンコードを生成する。また、検証部２３０は、イメージファイルＦ１１に含まれる認証コード４０から、マシンコードを取得する。検証部２３０は、今回生成されたマシンコードと、認証コード４０から取得したマシンコードとが一致するか否かを判定する。検証部２３０は、両マシンコードが一致する場合、ログイン認証成功とし、両マシンコードが一致しない場合、ログイン認証失敗とする。
【００７１】
次に、第２の実施の形態の情報処理システムで実行される処理手順を説明する。
図１０は、仮想マシンの使用開始時の処理例を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。
【００７２】
（Ｓ１１）マシンコード生成部２２０は、ユーザ３０のユーザ情報をＰＣ３００から受信する。ここで、ユーザ３０は、ＰＣ３００を操作することで、仮想マシンＭ１を利用できる。例えば、仮想マシンＭ１は、ユーザ３０が仮想マシンＭ１を利用する際に、ユーザ情報を入力するためのＧＵＩ（Graphical User Interface）情報をＰＣ３００に提供してもよい。
【００７３】
（Ｓ１２）マシンコード生成部２２０は、ＰＣ３００から受信したユーザ情報と、構成ファイルＦ１２に含まれる固有情報とを用いて、マシンコードを生成する。マシンコード生成部２２０は、例えば、仮想マシンＭ１に関する単一または複数の固有情報を組み合わせた情報に対して所定の不可逆演算を施すことで、第１の文字列を生成する。また、マシンコード生成部２２０は、ユーザ情報に対して所定の可逆演算を施すことで、第２の文字列を生成する。マシンコード生成部２２０は、第１の文字列に第２の文字列を付加した結果を、マシンコードとする。
【００７４】
（Ｓ１３）マシンコード生成部２２０は、イメージファイルＦ１１の中に認証コードがあるか否かを判定する。イメージファイルＦ１１の中に認証コードがある場合、処理をステップＳ１７に進める。イメージファイルＦ１１の中に認証コードがない場合、処理をステップＳ１４に進める。
【００７５】
（Ｓ１４）マシンコード生成部２２０は、ステップＳ１２で生成したマシンコードを、管理サーバ１００に送信する。前述のように、マシンコード生成部２２０は、所定の鍵を用いてマシンコードを暗号化して、管理サーバ１００に送信してもよい。
【００７６】
（Ｓ１５）検証部２３０は、管理サーバ１００からマシンコードに対する応答（認証コードまたはエラーコード）を受信する。認証コードまたはエラーコードは、暗号化されていることもある。その場合、検証部２３０は、所定の鍵を用いて、認証コードまたはエラーコードを復号する。
【００７７】
（Ｓ１６）検証部２３０は、エラーコードを受信したか否かを判定する。エラーコードを受信した場合、処理をステップＳ２０に進める。エラーコードを受信していない（すなわち、認証コードを受信した）場合、処理をステップＳ１７に進める。
【００７８】
（Ｓ１７）検証部２３０は、認証コードを検証し、検証結果が正常であるか否かを判定する。検証結果が正常である場合、処理をステップＳ１８に進める。検証結果が正常でない場合、処理をステップＳ２０に進める。具体的には、ステップＳ１２で生成されたマシンコードと、認証コードに含まれるマシンコードとが一致する場合、検証結果は正常である。一方、ステップＳ１２で生成されたマシンコードと、認証コードに含まれるマシンコードとが一致しない場合、検証結果は正常でない。ここで、マシンコードの抽出元の認証コードは、ステップＳ１３でＹｅｓまたはＮｏの何れに進んだかによって異なる。ステップＳ１３でＹｅｓの場合、マシンコードの抽出元の認証コードは、イメージファイルＦ１１に含まれる認証コードである。一方、ステップＳ１３でＮｏの場合、マシンコードの抽出元の認証コードは、ステップＳ１５で管理サーバ１００から受信した認証コードである。
【００７９】
（Ｓ１８）検証部２３０は、イメージファイルＦ１１に認証コードを追加する。なお、ステップＳ１３でＹｅｓの場合は、同認証コードが既にイメージファイルＦ１１に格納済であるため、ステップＳ１８をスキップしてステップＳ１９に進んでよい。
【００８０】
（Ｓ１９）検証部２３０は、仮想マシンＭ１のユーザ３０による使用を許可する。ユーザ３０は、仮想マシンＭ１が実行するＯＳを利用可能となる。そして、処理を終了する。
（Ｓ２０）検証部２３０は、仮想マシンＭ１のユーザ３０による使用を不許可とする。ユーザ３０は、仮想マシンＭ１を利用できないことになる。そして、処理を終了する。なお、ステップＳ１３でＹｅｓ、かつ、ステップＳ１７でＮｏの場合、処理をステップＳ１４に進めてもよい。すなわち、仮想マシンＭ１のユーザ３０による利用について、管理サーバ１００によるライセンス認証を改めて受けるようにしてもよい。
【００８１】
図１１は、管理サーバのライセンス管理の処理例を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。
（Ｓ２１）認証部１２０は、仮想マシンＭ１からマシンコードを受信する。マシンコードは暗号化されていることもある。その場合、認証部１２０は、所定の鍵を用いて、マシンコードを復号する。
【００８２】
（Ｓ２２）認証部１２０は、マシンコードからユーザＩＤを抽出する。例えば、認証部１２０は、先頭の第１の長さの第１の文字列をマシンコードから除去することで、第２の文字列を取得し、当該第２の文字列に所定の可逆演算を施すことでユーザＩＤを取得できる。
【００８３】
（Ｓ２３）認証部１２０は、ステップＳ２２で抽出したユーザＩＤがユーザ管理テーブル１１１に登録されているか否かを判定する。登録されている場合、処理をステップＳ２４に進める。登録されていない場合、処理をステップＳ２８に進める。
【００８４】
（Ｓ２４）認証部１２０は、仮想マシン管理テーブル１１２を参照して、該当のユーザＩＤによる利用済数が登録可能数よりも小さいか否かを判定する。該当のユーザＩＤによる利用済数が登録可能数よりも小さい場合、処理をステップＳ２５に進める。該当のユーザＩＤによる利用済数が登録可能数以上である場合、処理をステップＳ２８に進める。利用済数は、該当のユーザＩＤを含むレコードの数に相当する。図８の仮想マシン管理テーブル１１２の例でいえば、ユーザＩＤ“Ｘ”による利用済数は“２”ということになる。
【００８５】
（Ｓ２５）認証部１２０は、マシンＩＤを発行する。マシンＩＤの発行方法は、任意の方法でよい。ただし、認証部１２０は、各仮想マシンでマシンＩＤが重複しないようにする。
【００８６】
（Ｓ２６）認証部１２０は、ステップＳ２２で抽出したユーザＩＤ、ステップＳ２１で受信したマシンコード、および、ステップＳ２５で発行したマシンＩＤを含むレコードを仮想マシン管理テーブル１１２に登録する。
【００８７】
（Ｓ２７）認証コード生成部１３０は、認証コードを生成し、業務サーバ２００に送信する。認証コードは、ステップＳ２１で取得したマシンコードを含む。また、認証コードは、ステップＳ２５で発行したマシンＩＤを含む。認証コード生成部１３０は、マシンコードおよびマシンＩＤに所定の可逆演算を施した結果を結合して、認証コードを生成してもよい（その場合、業務サーバ２００では当該可逆演算により認証コードからマシンコードおよびマシンＩＤを抽出する）。認証コード生成部１３０は、所定の鍵により認証コードを暗号化して、業務サーバ２００に送信してもよい。そして、処理を終了する。
【００８８】
（Ｓ２８）認証コード生成部１３０は、エラーコードを生成し、業務サーバ２００に送信する。認証コード生成部１３０は、所定の鍵によりエラーコードを暗号化して、業務サーバ２００に送信してもよい。そして、処理を終了する。
【００８９】
このようにして、管理サーバ１００は、仮想マシンＭ１で実行されるソフトウェアのライセンス管理を行う。仮想マシンＭ１のイメージファイルＦ１１に認証コードを追加し、仮想マシンＭ１により認証コードの検証を課すことで、仮想マシンＭ１が適切にライセンス許諾を受けずに不正に利用されることを防げる。特に、認証コードが追加された状態のイメージファイルＦ１１の複製であるイメージファイルＦ２１によって仮想マシンＭ２が利用される場合にも、ソフトウェアの不正利用を防げる。
【００９０】
図１２は、イメージファイル複製時の認証処理の具体例を示す図である。例えば、イメージファイルＦ１１に、認証コード“ＸＸＸＮＮＮ”が追加されている状態で、仮想マシンＭ１が起動される場合を考える。この場合、認証コードの先頭の所定長の“ＸＸＸ”の部分がマシンコードである。仮想マシンＭ１は、ユーザ３０が仮想マシンＭ１の利用を開始する際に、ユーザ３０のユーザ情報を取得し、構成ファイルＦ１２に含まれる仮想マシンＭ１の固有情報と、ユーザ３０のユーザＩＤとを用いてマシンコード“ＸＸＸ”を生成する。マシンコード“ＸＸＸ”は、イメージファイルＦ１１に含まれるマシンコード“ＸＸＸ”と一致する。よって、仮想マシンＭ１は、ユーザ３０による仮想マシンＭ１の利用を許可する（認証成功）。
【００９１】
一方、ユーザ３０またはユーザ３０ａにより、イメージファイルＦ１１の複製であるイメージファイルＦ２１が業務サーバ２００ａの補助記憶装置に格納されることもある。イメージファイルＦ２１は、イメージファイルＦ１１の複製なので、認証コード“ＸＸＸＮＮＮ”を含んでいる。この状態で、仮想マシンＭ２が起動される場合を考える。
【００９２】
例えば、ユーザ３０が仮想マシンＭ２の利用を開始するケースを考える。この場合、仮想マシンＭ２は、ユーザ３０のユーザ情報を取得し、構成ファイルＦ２２に含まれる仮想マシンＭ２の固有情報と、ユーザ３０のユーザＩＤとを用いてマシンコード“ＹＹＹ”を生成する。マシンコード“ＹＹＹ”は、イメージファイルＦ２１に含まれるマシンコード“ＸＸＸ”と一致しない。よって、仮想マシンＭ２は、ユーザ３０による仮想マシンＭ２の利用を不許可とする（認証失敗）。
【００９３】
このとき、仮想マシンＭ２は、管理サーバ１００にマシンコード“ＹＹＹ”を送信して、ライセンス認証を受けることができる。ユーザ３０が利用可能なライセンス数が残っていれば、仮想マシンＭ２は管理サーバ１００から認証コード“ＹＹＹＭＭＭ”を受信して、イメージファイルＦ２１に追加し、ユーザ３０による仮想マシンＭ２の利用を許可する。なお、仮想マシンＭ２は、新たな認証コードをイメージファイルＦ２１に追加する際に、既存の認証コード“ＸＸＸＮＮＮ”を上書きしてもよい。
【００９４】
次に、ユーザ３０ａが仮想マシンＭ２の利用を開始するケースを考える。この場合、仮想マシンＭ２は、ユーザ３０ａのユーザ情報を取得し、構成ファイルＦ２２に含まれる仮想マシンＭ２の固有情報と、ユーザ３０ａのユーザＩＤとを用いてマシンコード“ＺＺＺ”を生成する。マシンコード“ＺＺＺ”は、イメージファイルＦ２１に含まれるマシンコード“ＸＸＸ”と一致しない。よって、仮想マシンＭ２は、ユーザ３０ａによる仮想マシンＭ２の利用を不許可とする（認証失敗）。
【００９５】
このとき、仮想マシンＭ２は、管理サーバ１００にマシンコード“ＺＺＺ”を送信して、ライセンス認証を受けることができる。ユーザ３０ａが利用可能なライセンス数があれば、仮想マシンＭ２は管理サーバ１００から認証コード“ＺＺＺＬＬＬ”を受信して、イメージファイルＦ２１に追加し、ユーザ３０ａによる仮想マシンＭ２の利用を許可する。なお、仮想マシンＭ２は、新たな認証コードをイメージファイルＦ２１に追加する際に、既存の認証コード“ＸＸＸＮＮＮ”を上書きしてもよい。
【００９６】
このようにして、イメージファイルＦ１１を複製したイメージファイルＦ２１を用いて仮想マシンＭ２を起動する場合にも、管理サーバ１００によるライセンス認証を課すことができ、仮想マシンＭ２が不正に利用されることを防げる。
【００９７】
なお、第２の実施の形態の説明では、ライセンスの管理対象のソフトウェアを特定のＯＳに限る場合について例示したが、管理サーバ１００は、種々のソフトウェアのライセンスを管理することが可能である。例えば、ソフトウェアの識別情報（ソフトウェアＩＤ）に対応付けて、ユーザ毎の登録可能数を管理することも考えられる。
【００９８】
図１３は、他のテーブル例（その１）を示す図である。図１３（Ａ）は、ソフトウェアＩＤ毎にユーザの登録可能数を管理するためのユーザ管理テーブル１１１ａを例示している。ユーザ管理テーブル１１１ａは、ソフトウェアＩＤ、ユーザＩＤおよび登録可能数の項目を含む。
【００９９】
ソフトウェアＩＤの項目には、ソフトウェアＩＤが登録される。ソフトウェアＩＤは、ソフトウェアの名称（例えば、ＯＳの名称やアプリケーションの名称など）でもよい。ユーザＩＤおよび登録可能数の項目に登録される内容は、ユーザ管理テーブル１１１の同名の項目に登録される内容と同様である。ユーザ管理テーブル１１１ａによれば、例えば、ＯＳの種類およびユーザＩＤの組毎に、登録可能数を管理できる。
【０１００】
図１３（Ｂ）は、ソフトウェアＩＤ毎にユーザの利用状況を管理するための仮想マシン管理テーブル１１２ａを例示している。仮想マシン管理テーブル１１２ａは、ソフトウェアＩＤ、ユーザＩＤ、マシンコードおよびマシンＩＤの項目を含む。
【０１０１】
ソフトウェアＩＤの項目には、ソフトウェアＩＤが登録される。ユーザＩＤ、マシンコードおよびマシンＩＤの項目に登録される内容は、仮想マシン管理テーブル１１２の同名の項目に登録される内容と同様である。仮想マシン管理テーブル１１２ａによれば、例えば、ＯＳの種類およびユーザＩＤの組毎に、何れの仮想マシンによって利用されているかを管理できる。
【０１０２】
なお、ユーザ管理テーブル１１１ａおよび仮想マシン管理テーブル１１２ａを用いて、ソフトウェアＩＤに応じたライセンス管理を行う場合、管理サーバ１００は、ライセンス認証時に仮想マシンＭ１，Ｍ２からソフトウェアＩＤの情報も取得する。すなわち、仮想マシンＭ１，Ｍ２は、管理サーバ１００に対してマシンコードを送信する際に、ライセンス管理対象のソフトウェアのソフトウェアＩＤも併せて管理サーバ１００に送信する。すると、管理サーバ１００は、ユーザ管理テーブル１１１ａを参照して、該当のソフトウェアＩＤおよびユーザＩＤに対応する登録可能数を取得できる。また、管理サーバ１００は、仮想マシン管理テーブル１１２ａを参照して、該当のソフトウェアＩＤおよびユーザＩＤによるソフトウェアの利用数が登録可能数よりも小さいか否かを判定できる。
【０１０３】
図１３では、ソフトウェアＩＤにより区別して登録可能数や利用状況を管理する例を示したが更に他の管理方法も考えられる。例えば、管理サーバ１００は、イメージファイル単位にライセンスを管理してもよい。具体的には、管理サーバ１００は、イメージファイルの識別情報（イメージファイルＩＤ）に対応付けて、ユーザ毎の登録可能数を管理することも考えられる。
【０１０４】
図１４は、他のテーブル例（その２）を示す図である。図１４（Ａ）は、イメージファイルＩＤ毎にユーザの登録可能数を管理するためのユーザ管理テーブル１１１ｂを例示している。ユーザ管理テーブル１１１ｂは、イメージファイルＩＤ、ユーザＩＤおよび登録可能数の項目を含む。
【０１０５】
イメージファイルＩＤの項目には、イメージファイルＩＤが登録される。イメージファイルＩＤはイメージファイルに付与されるＩＤである。イメージファイルＩＤは、イメージファイルＦ１１に格納される。このため、イメージファイルＦ１１を複製したイメージファイルＦ２１のイメージファイルＩＤは同じである。ユーザＩＤおよび登録可能数の項目に登録される内容は、ユーザ管理テーブル１１１の同名の項目に登録される内容と同様である。ユーザ管理テーブル１１１ｂによれば、例えば、イメージファイル単位に利用ライセンスが付与される場合に、当該イメージファイルのイメージファイルＩＤおよびユーザＩＤの組毎に、登録可能数を管理できる。
【０１０６】
図１４（Ｂ）は、イメージファイルＩＤ毎にユーザの利用状況を管理するための仮想マシン管理テーブル１１２ｂを例示している。仮想マシン管理テーブル１１２ｂは、イメージファイルＩＤ、ユーザＩＤ、マシンコードおよびマシンＩＤの項目を含む。
【０１０７】
イメージファイルＩＤの項目には、イメージファイルＩＤが登録される。ユーザＩＤ、マシンコードおよびマシンＩＤの項目に登録される内容は、仮想マシン管理テーブル１１２の同名の項目に登録される内容と同様である。仮想マシン管理テーブル１１２ｂによれば、イメージファイルＩＤおよびユーザＩＤの組毎に、何れの仮想マシンによって利用されているかを管理できる。
【０１０８】
なお、ユーザ管理テーブル１１１ｂおよび仮想マシン管理テーブル１１２ｂを用いて、イメージファイルＩＤに応じたライセンス管理を行う場合、管理サーバ１００は、ライセンス認証時に仮想マシンＭ１，Ｍ２からイメージファイルＩＤの情報も取得する。すなわち、仮想マシンＭ１，Ｍ２は、管理サーバ１００に対してマシンコードを送信する際に、起動元のイメージファイルのイメージファイルＩＤも管理サーバ１００に送信する。すると、管理サーバ１００は、ユーザ管理テーブル１１１ｂを参照して、該当のイメージファイルＩＤおよびユーザＩＤに対応する登録可能数を取得できる。また、管理サーバ１００は、仮想マシン管理テーブル１１２ｂを参照して、該当のイメージファイルＩＤおよびユーザＩＤによるイメージファイルの利用数が登録可能数よりも小さいか否かを判定できる。
【０１０９】
例えば、仮想アプライアンスのように、ＯＳ、ミドルウェアおよびアプリケーションソフトウェアを一体にしたイメージファイルが提供される場合、当該イメージファイル単位でのライセンスが提供されることも考えられる。図１４で例示したようにイメージファイル単位にライセンスを管理することで、イメージファイル単位にライセンスが提供される場合にも、適切なライセンス管理が可能となる。
【０１１０】
また、ユーザによるライセンスを超過した利用を検出した際には、該当のユーザに対してライセンスを適切に取得することを促してもよい。その際、ライセンス購入のために課金用のＧＵＩをユーザに提供することで、ユーザによる課金やユーザによる仮想マシンの追加利用を円滑に行えるよう支援することも考えられる。
【０１１１】
なお、第１の実施の形態の情報処理は、演算部１ｂにプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、プロセッサ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体１３に記録できる。
【０１１２】
例えば、プログラムを記録した記録媒体１３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体１３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＨＤＤ１０３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０１１３】
１  ライセンス管理装置
１ａ  記憶部
１ｂ  演算部
２，３  情報処理装置
２ａ，３ａ  仮想マシン
２ｂ，３ｂ  イメージファイル
２ｃ，３ｃ  構成ファイル
４  ネットワーク
Ｃ  認証コード
Ｃ１，Ｃ２  マシンコード
Ｔ１  ライセンス情報
Ｕ１，Ｕ２  ユーザ
Ｘ１，Ｘ２  固有情報
Ｙ１，Ｙ２  ユーザ情報
【図１】
2017058711.tif 000003
【図２】
2017058711.tif 000004
【図３】
2017058711.tif 000005
【図４】
2017058711.tif 000006
【図５】
2017058711.tif 000007
【図６】
2017058711.tif 000008
【図７】
2017058711.tif 000009
【図８】
2017058711.tif 000010
【図９】
2017058711.tif 000011
【図１０】
2017058711.tif 000012
【図１１】
2017058711.tif 000013
【図１２】
2017058711.tif 000014
【図１３】
2017058711.tif 000015
【図１４】
2017058711.tif 000016