以下の説明では、「インターフェース装置」は、一つ以上のインターフェースデバイスでよい。当該一つ以上のインターフェースデバイスは、下記のうちの少なくとも一つでよい。
・一つ以上のI/O(Input/Output)インターフェースデバイス。I/O(Input/Output)インターフェースデバイスは、I/Oデバイスと遠隔の表示用計算機とのうちの少なくとも一つに対するインターフェースデバイスである。表示用計算機に対するI/Oインターフェースデバイスは、通信インターフェースデバイスでよい。少なくとも一つのI/Oデバイスは、ユーザインターフェースデバイス、例えば、キーボードおよびポインティングデバイスのような入力デバイスと、表示デバイスのような出力デバイスとのうちのいずれでもよい。
・一つ以上の通信インターフェースデバイス。一つ以上の通信インターフェースデバイスは、一つ以上の同種の通信インターフェースデバイス(例えば一つ以上のNIC(Network Interface Card))であってもよいし二つ以上の異種の通信インターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
また、以下の説明では、「メモリ」は、一つ以上のメモリデバイスであり、典型的には主記憶デバイスでよい。メモリにおける少なくとも一つのメモリデバイスは、揮発性メモリデバイスであってもよいし不揮発性メモリデバイスであってもよい。
また、以下の説明では、「永続記憶装置」は、一つ以上の永続記憶デバイスである。永続記憶デバイスは、典型的には、不揮発性の記憶デバイス(例えば補助記憶デバイス)であり、具体的には、例えば、HDD(Hard Disk Drive)またはSSD(Solid State Drive)である。
また、以下の説明では、「記憶装置」は、メモリと永続記憶装置の少なくともメモリでよい。
また、以下の説明では、「プロセッサ」は、一つ以上のプロセッサデバイスである。少なくとも一つのプロセッサデバイスは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサデバイスであるが、GPU(Graphics Processing Unit)のような他種のプロセッサデバイスでもよい。少なくとも一つのプロセッサデバイスは、シングルコアでもよいしマルチコアでもよい。少なくとも一つのプロセッサデバイスは、プロセッサコアでもよい。少なくとも一つのプロセッサデバイスは、処理の一部または全部を行うハードウェア回路(例えばFPGA(Field-Programmable Gate Array)またはASIC(Application Specific Integrated Circuit))といった広義のプロセッサデバイスでもよい。
また、以下の説明では、「xxxテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、当該情報は、どのような構造のデータでもよいし、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。従って、「xxxテーブル」を「xxx情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、一つのテーブルは、二つ以上のテーブルに分割されてもよいし、二つ以上のテーブルの全部または一部が一つのテーブルであってもよい。
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶装置及び/又はインターフェース装置等を用いながら行うため、処理の主語が、プロセッサ(或いは、そのプロセッサを有するコントローラのようなデバイス)とされてもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な(例えば非一時的な)記録媒体であってもよい。また、以下の説明において、二つ以上のプログラムが一つのプログラムとして実現されてもよいし、一つのプログラムが二つ以上のプログラムとして実現されてもよい。
また、以下の説明では、「kkk部」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサによって実行されることで実現されてもよいし、一つ以上のハードウェア回路(例えばFPGAまたはASIC)によって実現されてもよい。プログラムがプロセッサによって実行されることで機能が実現される場合、定められた処理が、適宜に記憶装置および/またはインターフェース装置等を用いながら行われるため、機能はプロセッサの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機または計算機が読み取り可能な記録媒体(例えば非一時的な記録媒体)であってもよい。各機能の説明は一例であり、複数の機能が一つの機能にまとめられたり、一つの機能が複数の機能に分割されたりしてもよい。
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通部分を使用し、同種の要素を区別する場合は、参照符号を使用することがある。例えば、認証認可ゲートウェイを区別しない場合には、「認証認可ゲートウェイ312」と言い、認証認可ゲートウェイを区別する場合には、「認証認可ゲートウェイ312A」、「認証認可ゲートウェイ312B」のように言うことがある。
以下、本発明の実施の形態を添付図面に基づいて説明する。
[実施形態1]
図1および図2は、本発明の実施形態1に係るシステム全体の構成と当該システム全体における関係とを示す。
コーディネータ110と、システム実行基盤提供者(以下、提供者)120と、バックエンドサービス開発者(以下、開発者)130と、テナント100とが存在する。テナント100内にテナント管理者(以下、管理者)101およびシステム利用者(以下、利用者)102が存在する。
テナント100は、企業または企業内の部門でよい。管理者101は、テナント用システム104を管理する一従業員でよい。利用者102は、テナント用システム104を利用する一従業員でよい。
コーディネータ110は、提供者120および開発者130とテナント100と間をコーディネートする。例えば、コーディネータ110は、コーディネーションサービス113を操作して、一または複数の開発者130により開発された複数のサービスモジュールのうちの二つ以上のサービスモジュールを組み合わせたテナント用システム104(サービスシステムの一例)を設計し、テナント用システム104をテナント100に提供する。また、コーディネータ110は、テナント用システム104の従量課金によりテナント100から利用料を取得する。また、コーディネータ110は、テナント用システム104の実行に関し計算資源の使用量に応じた料金を提供者120に支払う。また、コーディネータ110は、当該テナント用システム104の構成要素である一つ以上のバックエンドサービスの各々について、当該バックエンドサービスの使用量に応じた料金を開発者130に支払う。
提供者120が提供するシステム実行基盤サービス122は、例えば、クラウドコンピューティングサービスでよい。コーディネーションサービス113およびシステム実行基盤サービス122の少なくとも一つは、複数の計算資源(例えば、インターフェース装置、記憶装置およびプロセッサ)を有する物理的な計算機システム(例えば、一つ以上の物理計算機)でもよいし、当該複数の計算資源上に構築された論理的な計算機システム(例えば、一つ以上の仮想計算機)でもよい。
矢印A131によれば、一または複数の開発者130が、複数のバックエンドサービスのイメージをイメージリポジトリ124に登録する。
矢印A112によれば、コーディネータ110は、テナント100との契約に基づいて、テナント100に対し、サービス一式の提供を行う。「サービス一式」とは、少なくともテナント100用のシステム104を含む。
矢印A117によれば、コーディネータ110は、前述のサービス一式を具現化するために、一または複数の開発者130からは一つ以上のバックエンドサービスを調達し(例えば、マーケットプレイス経由で調達し)、提供者120からはそれらのバックエンドサービスを稼動させるためのシステム実行基盤サービス122を調達する。調達されたバックエンドサービスをテナント用システム104が含み、テナント用システム104が、調査津されたシステム実行基盤サービス122のうちのシステム実行領域126で実行される。
矢印A111によれば、コーディネータ110は、テナント用システム104をシステム実行領域126へ配備(デプロイメント)するための操作をコーディネーションサービス113に対して行う。
矢印A118によれば、コーディネーションサービス113は、矢印A111が示す操作に対しシステム実行基盤サービス122を制御する。
矢印A105によれば、テナント用システム104は、CPUやメモリなどの計算資源を持つシステム実行領域126上で稼働する。
矢印A103によれば、管理者101や利用者102はテナント用システム104が提供するインターフェース(例えば、GUI(Graphical User Interface)、REST(Representational State Transfer)など)を通じてテナント用システム104を利用する。コーディネーションサービス113は、テンプレート部114と、デプロイメント要求部115と、ログ分類部117と、ログ管理部116とを含む。
矢印A121によれば、提供者120は、システム実行基盤サービス122を所有および運営する。システム実行基盤サービス122は、システム実行領域126と、デプロイメント実行部123と、イメージリポジトリ124と、認証認可サービス群125とを含む。システム実行領域126は、複数の計算資源(例えば、インターフェース装置、記憶装置およびプロセッサ)に基づく論理的な領域であり、テナント用システム104が実行される領域である。
図2によれば、テナント用システム104(具体的には、当該システム104が実行されるシステム実行領域126)と、コーディネーションサービス113とは、ネットワーク200にて接続されている。
矢印A201によれば、デプロイメント要求部115は、デプロイメント実行部123に対し、テナント用システム104のデプロイメント要求を送信する。矢印A202によれば、デプロイメント実行部123は、システム実行領域126へ、デプロイメント要求に従ってテナント用システム104のデプロイメントを実行する。矢印A203によれば、テナント用システム104のデプロイメント実行の際に、テナント用システムを構成するバックエンドサービスのイメージ(例えば、コンテナイメージ)がイメージリポジトリ124からロードされ、起動される。矢印A204によれば、デプロイメントされたテナント用システム104は、必要に応じて認証および認可を行うために認証認可サービス群125にアクセスする。
図3は、システム実行基盤サービス122およびログ管理部116の構成の例を示す図である。
ログ管理部116は、実行ログテーブル300と、通過ログテーブル301とを格納する。実行ログテーブル300は、矢印A340が示すように、バックエンドサービス311(インスタンス)の実行ログが格納されるテーブルである。通過ログテーブル301は、矢印A341が示すように、認証認可ゲートウェイ312(インスタンス)の通過ログが格納されるテーブルである。
テナントA用システム領域310は、テナントA100A用に、システム実行領域126が持つ計算資源や権限などが論理的に分割されたことにより得られた領域である。テナントA用システム領域310には、一つ以上のバックエンドサービス311のインスタンスと、バックエンドサービス制御プログラム313と、認証認可ゲートウェイ312のインスタンスとが展開される。
バックエンドサービス制御プログラム313は、利用者クライアント350およびバックエンドサービス311間の連携を行う。例えば、バックエンドサービス制御プログラム313は、事前に定義された制御ルール314(例えば、ロジック、処理フローまたはステップ)に従って、要求および応答データの相互通信を制御する。なお、利用者クライアント350は、利用者が使用する物理的または仮想的な情報処理端末でよい。
認証認可ゲートウェイ312は、矢印A343が示すように、バックエンドサービス311およびバックエンドサービス制御プログラム313の代わりに認証認可サービス群125にアクセスする。
イメージリポジトリ124は、イメージの実態(例えばコンテナファイル)となるイメージファイル322と、イメージのメタ情報を管理するイメージ管理部323とを持つ。
デプロイメント実行部123は、デプロイ処理部320と、アンデプロイ処理321とを備える。デプロイ処理部320は、イメージファイル322を用いて、システム実行領域126に、テナント用システム104を構成する各バックエンドサービスなどのインスタンスを作成する。アンデプロイ処理321は、テナント用システム104の廃棄時に、システム実行領域126から、当該テナント用システム104のバックエンドサービスなどのインスタンスを削除する。
認証認可サービス群125は、認証部360と認可部361とを含む。認証部360は、要求(例えば、利用者クライアント350からバックエンドサービス311(または、当該サービス311を含むテナント用システム104)への要求)の認証を行う。認可部361は、要求の認可を行う。「認証認可」は、上述したように、認証および認可のうちの少なくとも一つを意味するが、本実施形態では両方を意味する。本実施形態では、要求の認証認可は、認証認可ゲートウェイ312が認証認可サービス群125(認証部360と認可部361)にアクセスすることにより行われる。
バックエンドサービス311は、矢印A340が示すように、バックエンドサービス311の実行ログを実行ログテーブル300に転送する。認証認可ゲートウェイ312は、図8で示すような内部処理による結果を表す通過ログを、矢印A341が示すように、通過ログテーブル301に転送する。矢印A340および矢印A341は、直接転送(例えば、HTTP通信)を意味してもよいし、間接転送(例えば、転送用エージェントや、システム実行基盤サービス122に別途用意されるログ転送部による転送)を意味してもよい。
本実施形態では、例えば、テナントA用システム104Aが、一つ以上のサービスモジュールを含むサービスシステムの一例である。テナントA用システム104AがテナントA用システム領域310にデプロイされ、かつ、認証認可ゲートウェイ312が当該領域310にデプロイされる。具体的には、例えば、バックエンドサービス311毎の認証認可ゲートウェイ312と、利用者クライアント350から要求を受け付ける認証認可ゲートウェイ312とがデプロイされる。また、一つのサービスモジュールが複数のテナント用システム104の部品とされることもある。具体的には、一つのサービスモジュールの複数の複製がそれぞれ複数のテナント用システム104の部品とされることもある。
図4は、コーディネーションサービス113の構成の例を示す図である。
コーディネーションサービス113は、ログ分類部117、テンプレート部114、デプロイメント要求部115、ログ管理部116、および、ロググルーピング部401を含む。コーディネーションサービス113には、ネットワーク200などを通じて、コーディネータ110の情報処理端末の一例である作業用端末530から操作される。
テンプレート部114により用意されたテンプレート(例えば、テナント用システムのテンプレート)には、デプロイメントに必要な情報の一例として、テナント用システム104の構成要素となるバックエンドサービス311の情報(例えば、イメージ名称や稼働に必要な設定情報(環境変数、起動時引数、システム実行領域126に要求するリソース量など))の集合が含まれる。
ゲートウェイ制御部400は、ゲートウェイデプロイメント部410、転送設定部411、認可設定部412、ヘッダ設定部413、認証認可要件テーブル420、追加ヘッダテーブル421、および、ゲートウェイインスタンステーブル422を含む。ロググルーピング部401は、認証検知部430、ユーザ判定部431、ロググループ出力部432、確認状態テーブル440、追加ヘッダテーブル421、および、ロググループテーブル442を含む。追加ヘッダテーブル421は、図示の例の通り、ゲートウェイ制御部400とロググルーピング部401に共通でよい。ゲートウェイ制御部400およびロググルーピング部401が有する機能およびテーブルの詳細は後述する。
図5は、実行ログテーブル300および通過ログテーブル301の構成の例と、要求の転送とログの出力との関係の例とを示す図である。
実行ログテーブル300は、実行ログ毎にエントリを有する。実行ログは、バックエンドサービス311のタスクの実行のログである。各レコードは、バックエンドサービスを識別するためのバックエンドサービスID500と、実行ログの出力時刻を示す時刻501と、要求に従い実行されたタスクを識別するためのタスク名502と、バックエンドサービス311に送信された要求(HTTP要求)のヘッダを示す要求ヘッダ503と、タスクの実行内容(例えば、要求から抽出した引数、処理の概要、実行結果)を示すタスク内容504とを含む。図5では、複数のバックエンドサービスの実行ログを集約することとし、バックエンドサービスID500を設けたが、実行ログテーブル300は、バックエンドサービス毎に設けられてもよい。また、タスク名502やタスク内容504は統合および分割(例えば、タスク内容504から引数情報のみを別のカラムにするなど)されてもよい。
通過ログテーブル301は、通過ログ毎にエントリを有する。通過ログは、利用者クライアント350から認証認可ゲートウェイ312を経由してバックエンドサービス311に要求が送信される際の、認証認可ゲートウェイ312の要求受信履歴に関するログである。各レコードは、受信した要求の通過ID(言い換えれば、通過ログを識別するID)を示す通過ID510、要求を受信したゲートウェイのゲートウェイIDであるゲートウェイID511、要求から抽出したアクセストークンであるアクセストークン512、および、要求から抽出した親の通過ID(1つ前の認証認可ゲートウェイ312が残した通過ログの通過ID)を示す親通過ID513を持つ。「通過ID」としての値は、認証認可ゲートウェイ312が要求受信時に発行したUUID(Universally Unique Identifier)としての値でよい。認証認可ゲートウェイ312が、要求受信時に事前に定めた要求ヘッダに、当該ゲートウェイ312が発行した通過IDが埋め込まれる。この要求ヘッダを持つ要求を次の認証認可ゲートウェイ312が受けた場合、当該次の認証認可ゲートウェイ312が、当該要求の要求ヘッダから、1つ前の認証認可ゲートウェイ312により埋め込まれた通過IDを抽出できる。この抽出された通過IDが、親通過IDである。アクセストークンや親通過IDの埋め込み先となる要求ヘッダのヘッダ名は、図6に示すように、追加ヘッダテーブル421にて管理される。
図5によれば、一例として、以下の処理が行われる。なお、図5の説明では、ID“α”を持つ要素を、要素“α”と言うことがある。
・利用者クライアント350から要求01を認証認可ゲートウェイ“gw-312a”312Cが受ける。認証認可ゲートウェイ“gw-312a”312Cが、当該要求からアクセストークン“3SUJBZl…”を取得し、かつ、通過ID“Da417013df”を付与する。認証認可ゲートウェイ“gw-312a”312Cが、アクセストークン“3SUJBZl…”および通過ID“Da417013df”を含んだ通過ログ#1を通過ログテーブル301に格納する。認証認可ゲートウェイ“gw-312a”312Cが、要求01のヘッダに通過ID“Da417013df”を設定し、当該要求01をバックエンドサービス制御プログラム313へと転送する。
・バックエンドサービス制御プログラム313が、制御ルール314に従い、最初のバックエンドサービス311Aに要求01を転送する。転送した要求01のアクセストークンは、例えば、利用者クライアント350からのアクセストークン“3SUJBZl…”(利用者のアクセストークン)に代えて、制御ルール314で指定されているアクセストークン“LS0u9tL…”(テナントAのアクセストークン)が採用される。
・その要求01を、バックエンドサービス311Aについての認証認可ゲートウェイ“gw-312b”312Aが受ける。認証認可ゲートウェイ“gw-312b”312Aが、要求01からアクセストークン“LS0u9tL…”を取得し、要求01のヘッダから通過ID“Da417013df”を取得し、かつ、通過ID“60ed6bf4oPp”を付与する。認証認可ゲートウェイ“gw-312b”312Aが、アクセストークン“LS0u9tL…”、親通過ID“Da417013df”および通過ID“60ed6bf4oPp”を含んだ通過ログ#2を通過ログテーブル301に格納する。認証認可ゲートウェイ“gw-312b”312Aが、要求01のヘッダに通過ID“60ed6bf4oPp”を設定し(ヘッダにおける親通過ID“Da417013df”を通過ID“60ed6bf4oPp”に差し替え)、当該要求01をバックエンドサービス311Aへと転送する。
・バックエンドサービス311Aが、認証認可ゲートウェイ“gw-312b”312Aから要求01を受け、当該要求01に従いタスクを実行する。バックエンドサービス311Aが、要求01の要求ヘッダとタスク内容とを含む実行ログ#3を、実行ログテーブル300に格納する。
・バックエンドサービス311Aが、要求01の実行結果に従う応答02を返す。応答02は、例えば、要求01のヘッダ、つまり、通過ID“60ed6bf4oPp”を含む。応答02は、バックエンドサービス制御プログラム313が受ける。
・バックエンドサービス制御プログラム313が、制御ルール314に従い、応答02が持つ実行結果に基づく要求03を、次のバックエンドサービス311Bに転送する。要求03のヘッダは、応答02が持つ通過ID“60ed6bf4oPp”を持つ。
・その要求03を、バックエンドサービス311Bについての認証認可ゲートウェイ“gw-312c”312Bが受ける。以降、認証認可ゲートウェイ“gw-312c”312Bにより、要求01を受けた認証認可ゲートウェイ“gw-312b”312Aが行った処理と同様の処理が行われる。故に、要求03から取得された親通過ID“60ed6bf4oPp”と、要求03を受けたときに認証認可ゲートウェイ“gw-312c”312Bが付与した通過IDとを含む通過ログが、通過ログテーブル301に格納される。そして、要求03がバックエンドサービス311Bに転送される。
図6は、ゲートウェイ制御部400が持つテーブルの構成の例を示す図である。
認証認可要件テーブル420は、バックエンドサービス311およびバックエンドサービス制御プログラム313が認証認可およびその両方を必要とするかを示すテーブルである。認証認可要件テーブル420の各レコードは、バックエンドサービス311およびバックエンドサービス制御プログラム313のイメージを識別するサービスイメージ名600、サービスイメージ名600が示すイメージによって作成されたインスタンスが認証を必要または不要とするかを示す認証連携601、および、サービスイメージ名600が示すイメージによって作成されたインスタンスが認可を必要または不要とするかを示す認可連携602を持つ。
追加ヘッダテーブル421は、要求ヘッダの役割を示すメタ情報である。追加ヘッダテーブル421の各レコードは、認証認可ゲートウェイ312のゲートウェイIDであるゲートウェイID610、要求ヘッダの役割を示す用途611、および、要求ヘッダの名称を示す要求ヘッダ名612を持つ。
ゲートウェイインスタンステーブル422は、バックエンドサービス311およびバックエンドサービス制御プログラム313と、認証認可ゲートウェイ312のインスタンスとの関連を管理するテーブルである。ゲートウェイインスタンステーブル422の各レコードは、認証認可ゲートウェイ312のゲートウェイIDであるゲートウェイID620、および、バックエンドサービス311およびバックエンドサービス制御プログラム313のインスタンスのIDであるサービスID621を持つ。
図7は、ロググルーピング部401が持つテーブルの構成の例を示す図である。なお、追加ヘッダテーブル421の図示は省略されている。
確認状態テーブル440は、実行ログテーブル300に蓄積された各実行ログに関して、どの実行ログまでを確認したか、または次にどの実行ログを確認するかを特定するための情報を保持する。図7では、実行ログが時系列順に蓄積され、実行ログ間で時系列関係を示す情報(例えば、タイムスタンプのような時刻)は重複しないものとして説明する。キー700は、実行ログの出力元(例えば、インスタンス名など)を識別する文字列である。位置関連701は、確認した最も新しい実行ログまたは次に確認すべき最も古い実行ログの時刻(タイムスタンプ)である。実行ログが時系列順に蓄積されない場合は、エントリ番号(行番号)またはそれに類する値が、位置関連701の値となる。
ロググループテーブル442は、実行ログテーブル300の各実行ログを、利用者(ユーザ)観点でグループ化するための情報を保持する。ロググループテーブル442の各レコードにおいて、ラベル710は、ロググループを識別するための文字列である。ユーザ識別711は、アクセストークンなどユーザを識別できる情報である。通過ID712は、通過ログテーブル301と関連付けるための情報である。
図8は、認証認可ゲートウェイ312の動作の流れの例を示す図である。
認証認可ゲートウェイ312は、バックエンドサービス制御の要求元800(利用者クライアント350またはバックエンドサービス制御プログラム313)と、認可部361と、認証部360と、ロール管理サービス810と連携する。認証認可ゲートウェイ312は、認証を行う役割を持つ(要求元800の認証連携601が“Y”である)場合は、要求元800からの要求801について認証向け制御803を行う。また、認証認可ゲートウェイ312は、認可を行う役割を持つ(要求元800の認可連携602が“Y”である)場合は、要求801について認可向け制御804を実行する。図8は、認証認可ゲートウェイ312が認証と認可の両方の役割を持つ場合を例示する。また、本実施形態では、要求801は、HTTP要求である。
まず、認証認可ゲートウェイ312は、要求元800より、バックエンドサービス311向けのHTTP要求801を受信する(矢印A802)。
次に、認証認可ゲートウェイ312は、認証結果取得処理805を行う。具体的には、例えば、認証認可ゲートウェイ312は、HTTP要求801から認証の入力情報(例えば、要求ヘッダ内のアクセストークンとユーザ識別情報)を取得する。認証認可ゲートウェイ312は、取得した認証入力情報を認証部360に送信し認証を要求する。認証部360は、入力情報と認証テーブル809(例えば、ユーザ識別情報とトークンの関係を表すテーブル)を照らし合わせて認証を行い、その結果を認証認可ゲートウェイ312に返す(矢印A807)。
続いて、認証認可ゲートウェイ312は、認証結果取得処理805において認証成功であった場合(認証入力情報内のユーザの識別情報とアクセストークンとのペアの承認が得られた場合)に、認可引数取得処理806へ処理を移す(矢印A813)。認可引数取得処理806では、認証認可ゲートウェイ312は、ユーザの識別情報を入力として、ロール管理サービス810に対し当該ユーザのロール情報取得を要求する。ロール管理サービス810は、入力をキーとしてロールテーブル811(例えば、ユーザの識別情報とロール名の関係を表すテーブル)よりロール名を取得し返す(矢印A812)。その後、認証認可ゲートウェイ312は、ヘッダ付与処理816へ処理を移す(矢印A814)。
認証認可ゲートウェイ312は、ヘッダ付与処理816において、ヘッダ設定部413を通じて事前に定められたルールに従って、HTTP要求801のヘッダに、前述のロール名を少なくとも含む追加ヘッダ情報を付与する(矢印A817)。
その後、認証認可ゲートウェイ312は、要求送信処理819を行う。具体的には、例えば、認証認可ゲートウェイ312は、転送エントリ824の内容に従って、追加ヘッダ情報つきHTTP要求821を認可部361へ送信する(矢印A820)。また、認証認可ゲートウェイ312は、要求801から取得されたアクセストークンと追加ヘッダ情報に含まれる通過ID(認証認可ゲートウェイ312が付与したID)とを含む通過ログを通過ログテーブル301に格納する(矢印A818)。
認可部361は、ロール名と認可ルール822を照らし合わせて認可を行い、認可成功(入力のロール名はバックエンドサービスのアクセス権限を持つ)の場合は、バックエンドサービス311へHTTP要求821を送信する(矢印A823)。
認可向け制御804が不要の場合、認証結果取得処理805の後、処理が、ヘッダ付与処理816に移動する(矢印A815)。
図9は、ロググルーピング部401の動作の流れの例を示す図である。
認証検知部430は、確認状態テーブル440にアクセスし、次に確認すべき実行ログテーブル300の位置を特定する。その後、認証検知部430は、特定した位置より実行ログテーブル300から実行ログ(実行ログレコード)を取得する。認証検知部430は、新規に受けた要求について認証があった場合は、ユーザ判定部431を開始する。
ユーザ判定部431は、通過ログテーブル301を辿り、アクセストークン512がユーザ用である通過ログ(通過ログレコード)を特定し、特定された通過ログから通過ID510を抽出する。
ロググループ出力部432は、抽出された通過IDと、当該通過IDに対応したユーザ識別情報(当該通過IDをキーに実行ログ中の要求ヘッダから取得されたユーザ識別情報)とを入力として起動する。ロググループ出力部432は、通過IDとユーザ識別情報のセットに任意のラベル(例えば、UUIDや連番などの一意性が保証できる文字列)を付与する。ロググループ出力部432は、ラベル、通過IDおよびユーザ識別情報の組を、ロググループテーブル442に格納する。
図10は、ゲートウェイデプロイメント部410の処理フローチャートの例を示す。
ゲートウェイデプロイメント部410は、情報Aを引数として起動する。情報Aは、イメージ名と、認証認可ゲートウェイ312からの転送先APIエンドポイントと、外部公開用のAPIエンドポイントと、領域名称(デプロイメント先となるシステム実行領域の名称)とを含む。
ゲートウェイデプロイメント部410は、認証実行要求のためのメタ情報を認証部360より取得する(ステップ1000)。ゲートウェイデプロイメント部410は、認証認可ゲートウェイ312からの接続受付のためのメタ情報を認証部360に送信する(ステップ1001)。
ゲートウェイデプロイメント部410は、情報A内のイメージ名に対応した認証連携601および認可連携602を認証認可要件テーブル420から取得する(ステップ1002)。
ゲートウェイデプロイメント部410は、情報A内の領域名称をデプロイメントの第一引数とする(ステップ1004)。
ゲートウェイデプロイメント部410は、ステップ1002で取得した認証連携601の値が“Y”か確認する(ステップ1005)。認証連携601の値が“Y”であれば、ゲートウェイデプロイメント部410は、ステップ1000とステップ1001で取得したメタ情報をデプロイメントの第2の引数(環境変数など)とする(ステップ1006)。
ゲートウェイデプロイメント部410は、デプロイメントの引数を用いて、デプロイメント要求部115に対して、認証認可ゲートウェイ312のデプロイメントを依頼し完了を待つ(ステップ1007)。
ゲートウェイデプロイメント部410は、情報A内の転送先APIエンドポイントと外部公開用APIエンドポイントと領域名称とを引数として、転送設定部411を開始し完了を待つ(ステップ1008)。
ゲートウェイデプロイメント部410は、ステップ1002で取得した認可連携602の値が“Y”か確認する(ステップ1009)。認可連携602の値が“Y”であれば、ゲートウェイデプロイメント部410は、認可部361のAPIエンドポイントを引数として認可設定部412を開始し完了を待つ(ステップ1010)。
図11は、転送設定部411および認証認可ゲートウェイ311の処理フローチャートの例を示す図である。
転送設定部411は、情報Bを引数として起動する。情報Bは、図10のステップ1008について説明した通り、転送先APIエンドポイント、外部公開用APIエンドポイント、および、領域名称(システム実行領域の名称)を含む。
転送設定部411は、情報B内の転送先APIエンドポイント、外部公開用APIエンドポイントおよび領域名称のセットを転送エントリとする(ステップ1100)。
転送設定部411は、転送エントリを引数に認証認可ゲートウェイの転送エントリ追加APIにアクセスする(ステップ1101)。
認証認可ゲートウェイ311は、環境変数などより、認証部360に接続するためのメタ情報を取得する(ステップ1110)。認証認可ゲートウェイ311は、当該取得したメタ情報を認証結果取得処理805(図8参照)に設定する(ステップ1111)。
認証認可ゲートウェイ311は、APIサービスを開始し要求受信を待つ(ステップ1112)。認証認可ゲートウェイ311は、転送エントリ追加APIが呼ばれた(要求を受信した)場合(ステップ1113:Y)、当該APIの呼び出しの引数とされ受信した転送エントリを転送エントリ824(例えば、メモリ上の変数、外部DB、設定ファイルなど)に追加し、再び要求受信を待つ(ステップ1112)。
図12は、認可設定部412および認証認可ゲートウェイの処理フローチャートの例を示す図である。
認可設定部412は、情報Cを引数として起動する。情報Cは、領域名称(システム実行領域の名称)、転送先APIエンドポイント、ロール名、およびユーザ名を含む。ここで言う転送先APIエンドポイントは、図10のステップ1010において引数とされた、認可部361のAPIエンドポイントである。領域名称は、ゲートウェイデプロイメント部410に入力された情報A内の領域名称である。ロール名およびユーザ名は、ロール管理サービス810から取得された情報である。
認可設定部412は、情報Cを認可エントリとする(ステップ1200)。認可設定部412は、認可エントリを引数に認証認可ゲートウェイ311の認可エントリ追加APIにアクセスする(ステップ1201)。
認証認可ゲートウェイ312のステップ1210~1212は、図11のステップ1110~1112と同じである。認証認可ゲートウェイ312は、認可エントリ追加APIが呼ばれた(要求を受信した)場合(ステップ1213:Y)、認可エントリを引数に認可部361の認可ルール追加APIにアクセス(要求を送信)する(ステップ1214)。
認可部361の認可ルール追加API1220は、認証認可ゲートウェイ312から受けた要求より認可エントリを取得し、取得した認可エントリを認可ルール822に追加する(ステップ1221)。
図13は、ヘッダ設定部413の処理フローチャートの例を示す図である。
ヘッダ設定部413は、通過ID用のヘッダ名“auth_id”を引数に起働する。ヘッダ設定部413は、ヘッダ付与処理816に対して、入力のヘッダ名で通過IDをHTTP要求のヘッダに付与するための設定を行う(ステップ1300)。
図14は、認証検知部430の処理フローチャートの例を示す図である。
認証検知部430は、タスク実行ログキー(バックエンドサービス311のインスタンス名など)を入力に起動する。
認証検知部430は、追加ヘッダテーブル421より、用途611が“ゲートウェイ通過識別”のレコードのヘッダ名612を取得する(ステップ1400)。認証検知部430は、タスク実行ログキーを用いて、確認状態テーブル440より位置関連701を取得する(ステップ1401)。認証検知部430は、タスク実行ログキーと取得された位置関連701より、実行ログテーブル300の読み取り開始点を決定する(ステップ1402)。
認証検知部430は、実行ログテーブル300の次の実行ログレコード(開始点に属するレコードの次のレコード)を取得する(ステップ1403)。認証検知部430は、当該取得した実行ログレコードの要求ヘッダ503より、ステップ1400で取得したヘッダ名に関するヘッダ値を取得する(ステップ1404)。認証検知部430は、ロググループテーブル442の通過ID712内に、ステップ1404で取得したヘッダ値が存在するか確認する(ステップ1405)。
当該ヘッダ値が存在する場合(ステップ1406:Y)、認証検知部430は、当該ヘッダ値(通過ID)を引数に図15のユーザアクセストークン特定を開始する(ステップ1407)。
当該ヘッダ値が存在しない場合(ステップ1406:N)、または、ステップ1407の後、認証検知部430は、ステップ1403で取得した実行ログレコードがタスク実行ログキーに関して実行ログテーブル300の最後のレコードか確認する(ステップ1408)。確認結果が真であれば、処理が終了する。確認結果が偽であれば、処理がステップ1403へ移動する。
図15は、ユーザアクセストークン特定の処理フローチャートの例を示す。
認証検知部430は、引数とされた通過IDを持つ通過ログレコードを通過ログテーブル331から取得する(ステップ1500)。認証検知部430は、ステップ1500で取得した通過ログレコードよりゲートウェイIDを取得する(ステップ1501)。認証検知部430は、ステップ1501で取得したゲートウェイIDと同じゲートウェイID620を持つレコードを、ゲートウェイインスタンステーブル422から取得する(ステップ1502)。認証検知部430は、ステップ1502で取得したレコードのサービスID621に属するサービスイメージ名600を持つレコードを認証認可要件テーブル420から取得する(ステップ1503)。ステップ1503で取得したレコードの認証連携601が“Y”の場合(ステップ1504:Y)、処理がステップ1508へ移動する。当該認証連携601が“N”であるが当該レコードの認可連携602が“Y”の場合(ステップ1504:N、ステップ1505:Y)、処理がステップ1506へ移動する。認証連携601と認可連携602のいずれも“N”の場合は(ステップ1504:N、ステップ1505:N)、処理が終了する。
ステップ1505:Yの場合、認証検知部430は、ステップ1501で取得した通過ログレコードより親通過ID513を取得する(ステップ1506)。認証検知部430は、ステップ1506で取得した親通過IDを通過IDとし(ステップ1507)、ステップ1500以降を実施する。
ステップ1504:Yの場合、認証検知部430は、ステップ1500で取得した通過ログレコードのアクセストークン512をユーザ識別情報とする(ステップ1508)。認証検知部430は、通過IDとユーザ識別情報を引数としてロググループ出力部432を開始する(ステップ1509)。認証検知部430は、ゲートウェイインスタンステーブル422に次のレコードがあるか確認する(ステップ1510)。確認結果が真であれば、処理がステップ1501に移動する。確認結果が偽であれば、処理が終了する。
図16は、ロググループ出力部432の処理フローチャートの例を示す図である。
ロググループ出力部432は、通過IDと、ユーザ識別情報を入力として起動する。ロググループ出力部432は、通過IDとユーザ識別情報のセットに任意のラベル(UUIDや連番などの一意性が保証できる文字列)を付与する(ステップ1600)。ロググループ出力部432は、通過ID、ユーザ識別情報およびラベルをロググループテーブル442のレコードとして出力する(ステップ1601)。
本実施形態によれば、バックエンドサービス311は認証認可機能を持たず、かつ複数のユーザで共用する場合でも、ユーザ(利用者)毎の利用明細を出力できる。
[実施形態2]
実施形態2を説明する。その際、実施形態1との相違点を主に説明し、実施形態1との共通点については説明を省略または簡略する。
実施形態1では、バックエンドサービス311への要求にあるアクセストークンと、各要求が認証認可ゲートウェイ312(インスタンス)を通過する際に当該要求のヘッダに自動的に埋め込まれた要求IDと、要求ID間の親子関係を用いて、バックエンドサービス311が出力する実行ログをユーザ(利用者)毎に分類するためのグループ情報が生成される。本実施形態では、前述の実行ログとグループ情報を用いて、業務(例えば、ユーザ毎の課金や利用状況の可視化など)に向けたデータが出力される。
図17は、本実施形態におけるコーディネーションサービス1701の構成の例を示す図である。
コーディネーションサービス1701は、課金用データ出力部1700を備える。課金用データ出力部1700は、前述の実行ログとグループ情報を用いて業務に向けたデータを出力するデータ出力部1710を持つ。
図18は、データ出力部1710の処理フローチャートの例を示す図である。
データ出力部1710は、ユーザ識別情報と追加のフィルタ情報(時刻範囲など)を入力として起動する。追加のフィルタ情報は必須ではない。
データ出力部1710は、入力のユーザ識別情報を用いてロググループテーブル442から通過IDの集合を取得する(ステップ1800)。データ出力部1710は、ステップ1800で取得した通過ID集合のいずれかの通過IDを要求ヘッダ503に持つ実行ログを実行ログテーブル300から取得する(ステップ1801)。
データ出力部1710は、追加のフィルタ情報が入力されているかを確認する(ステップ1802)。確認結果が偽であれば、処理がステップ1804に移動する。
確認結果が真であれば、データ出力部1710は、ステップ1801で取得した実行ログに対して追加のフィルタ情報でフィルタする(ステップ1803)。
データ出力部1710は、要求元に実行ログを返す(ステップ1804)。
図18では、実行ログの出力先として実行ログの要求元としたが、既定のディレクトリやテーブルなどへの実行ログが出力されてもよい。
[実施形態3]
実施形態3を説明する。その際、実施形態2との相違点を主に説明し、実施形態2との共通点については説明を省略または簡略する。
実施形態2では、ログとそのグループ情報を用いて、業務(例えば、ユーザ毎の課金や利用状況の可視化など)に向けたデータが出力される。本実施形態では、請求実行などに必要な契約関連情報が、前述のデータに付与される。
図19は、本実施形態におけるコーディネーションサービス1910の構成の例を示す図である。
コーディネーションサービス1910において、課金用データ出力部1920が、データ出力部1950と、契約マッピングテーブル1900とを備える。また、契約管理サービス1902が備えられる。契約管理サービス1902は、契約ID、および、契約内容(例えば、利用するバックエンドサービスとその利用単価などといった情報)を持つ。契約マッピングテーブル1900は、前述の契約IDと、課金用データ(例えば、実行ログレコードの集合)を関連付けるためのマッピングテーブルである。矢印A1901が示すように、データ出力部1950は、契約マッピングテーブル1900から、課金用データのラベルに対応した契約IDを取得し、契約管理サービス1902から、当該契約IDに対応した契約内容を取得し、取得した契約内容を基に課金用データを加工する(例えば、契約内容の情報を付与する)。
図20は、契約マッピングテーブル1900の構成の例を示す図である。
契約マッピングテーブル1900は、契約ID2000とラベル2001の対応関係を管理する。
図21は、本実施形態におけるデータ出力部1950の処理フローチャートの例を示す図である。
図18との違いは、ステップ2100、2101、2102の追加である。データ出力部1950は、ロググループテーブル442のラベル710をキーに、ラベル710に一致するラベル2001に対応した契約ID2000を契約マッピングテーブル1900から取得する(ステップ2100)。データ出力部1950は、契約管理サービス1902から、取得した契約ID2000に一致する契約IDに対応した契約内容を取得する(ステップ2101)。データ出力部1950は、ステップ2101で取得した契約内容を用いて課金用データを加工する(ステップ2102)。
以上の実施形態1~3の説明を、例えば以下のように総括することができる。また、以下では、上述の説明が必要に応じて補足されてよい。
一または複数の開発者130により開発された複数のバックエンドサービス311(複数のサービスモジュールの一例)うちの一つ以上のバックエンドサービス311により構成されたテナント用システム104(サービスシステムの一例)が、複数種類の計算資源に基づく実行基盤サービス122にデプロイされる。実行基盤サービス122に、コーディネーションサービス113(システム実行支援装置の一例)のゲートウェイ制御部400により、テナント用システム104について一つ以上のゲートウェイ312がデプロイされる。
各バックエンドサービス311は、当該バックエンドサービス311についての要求を実行した場合に当該要求の実行における使用量を含む実行内容と当該要求のヘッダ情報(要求のヘッダが有する情報)とを含んだログである実行ログを実行ログテーブル300(第1のログ情報の一例)に書き込むようになっている。「使用量」は、時間、計算資源量およびデータ量の少なくとも一種類の量を含んでよい。また、「使用量」は、バックエンドサービス311の実行により使用された物理的な計算資源の使用量でもよいし、バックエンドサービス311の使用量でもよい。
テナント用システム104におけるバックエンドサービス311A(対象のサービスモジュールの一例)について、ゲートウェイ312Aが、アクセストークン(認証および認可の少なくとも一つのためのデータである認証認可データの一例)を持つ要求を受ける。すると、ゲートウェイ312Aは、受けた要求に対し当該要求の通過IDを付与し、当該要求のヘッダに、アクセストークンに代えて当該付与した通過IDを設定する。ゲートウェイ312Aは、当該通過IDを含んだヘッダを持つ要求を、対象のバックエンドサービス311Aに転送し、当該通過IDと上記アクセストークンとを含んだログである通過ログを通過ログテーブル301(第2のログ情報の一例)に書き込む。
各バックエンドサービス311が上述の実行ログを書き込むようになっていても、実行ログは、利用者の識別情報相当の情報を含んでいない。一方、ゲートウェイ312が、アクセストークンを含む上述の通過ログを書き込むようになっていても、通過ログは、バックエンドサービス311の実行に従う使用量を表す情報を含んでいない。実行ログと通過ログが、通過IDを介して互いに関連付けられる。具体的には、実行ログ内のヘッダ情報に設定された通過IDと、通過ログに設定された通過IDとにより、実行ログと通過ログとが関連付けられる。結果として、通過IDをキーに使用量の特定が可能となり、故に、使用量に応じた従量課金が可能となる。
なお、アクセストークンは、認証認可に使用されるデータでありログに記録されることは避ける方が好ましい。バックエンドサービス311に転送される要求のヘッダ情報は、アクセストークンに代えて通過IDを持つので、実行ログにヘッダ情報が含まれても、アクセストークンが実行ログに含まれずに済む。
実行ログテーブル300および通過ログテーブル301は、ログ管理部116により管理されてよい。ログ管理部116は、例えばファイルシステムでよい。
また、要求のメタ情報として、ヘッダ情報以外の情報でもよいが、メタ情報がヘッダ情報であることで、要求としてHTTP要求の採用が可能である。また、認証認可データは、アクセストークン以外のデータでもよいが、認証認可データがアクセストークンであることで、要求としてHTTP要求の採用が可能である。
テナント用システム104を構成するバックエンドサービス311Aおよび311Bにそれぞれ用意されるゲートウェイ312Aおよび312B(第2のゲートウェイの一例)の他に、テナント用システム104についてのゲートウェイ312C(第1のゲートウェイの一例)がある。ゲートウェイ312Cが、クライアント350から、利用者のアクセストークンを持つ要求を受ける。ゲートウェイ312Cが、当該要求に対し通過IDを付与し、当該要求のヘッダに当該付与した通過IDを設定する。ゲートウェイ312Cが、当該通過IDを含んだヘッダ情報を持つ要求を転送し、当該要求IDと利用者のアクセストークンとを含んだ通過ログを通過ログテーブル301に書き込む。ゲートウェイ312Cにより転送された要求を、ゲートウェイ312Aが受ける。
このようにゲートウェイ312間で要求が転送され、個々のゲートウェイ312により通過ログが蓄積される。通過ログを辿ることで、利用者のアクセストークンについて実行ログ毎の使用量を算出することが期待できる。
また、テナント用システム104に関し一連の要求の転送について、最初の通過ログには、クライアント350からの要求が持つアクセストークンが含まれる。この場合、仮に、バックエンドサービス制御プログラム313を通じてバックエンドサービス311が受ける要求のアクセストークンが、テナントのアクセストークンであるとしても、ゲートウェイ312Cがクライアント350から受ける要求が持つアクセストークンは、利用者のアクセストークンである可能性が高い。このため、テナント用システム104についてテナント単位のアクセストークンが発行されているケースでも、利用者単位で、テナント用システム104の実行に従う使用量の集計が可能であることが期待される。
通過ログは、当該通過ログに対応し要求を転送したゲートウェイより付与された通過IDと、当該要求から抽出された認証認可データと、当該要求の転送元のゲートウェイにより付与された通過IDである親通過IDとを含む。ゲートウェイ312Cが受けた要求のアクセストークンについて、通過IDを用いて通過ログを辿ることができる。
具体的には、例えば、親通過IDの無いアクセストークンについて、ロググルーピング部401が、当該アクセストークンに対応した通過IDに関連付いている一つ以上の通過IDの集合である通過ID集合を通過ログテーブル301から特定してよい。ロググルーピング部401が、当該通過ID集合を構成する通過ID毎に、当該通過IDを含んだヘッダ情報に対応する実行内容(タスク内容504)を特定してよい。ログテーブル301が、当該通過ID集合について特定された実行内容に従う使用量を表す情報である利用情報を生成してよい。このようにして、親通過IDの無いアクセストークン毎に、使用量を表す利用情報の生成が可能である。
また、例えば、親通過IDの無いアクセストークンについて、さらに、課金用データ出力部1700が、生成され利用情報を基に、当該利用情報が表す使用量に応じた課金額を決定し、決定した課金額を出力してよい。このようにして、親通過IDの無いアクセストークン毎に、使用量に応じた従量課金が可能である。
また、例えば、親通過IDの無いアクセストークンについて、さらに、課金用データ出力部1920が、当該アクセストークンに対応した契約内容を特定し、上記決定した課金額に上記特定した契約内容を関連付けて出力してよい。このようにして、課金額の根拠の一例となる契約内容を表す情報も一緒に出力することが可能である。
ゲートウェイ制御部400が、テナント用システム104を構成する一つ以上のバックエンドサービス311の各々を、実行基盤サービス122にデプロイし、当該テナント用システム104についてゲートウェイ312Cを実行基盤サービス122にデプロイし、当該テナント用システム104を構成するバックエンドサービス311Aおよび312B(一つ以上のサービスモジュールの一例)についてゲートウェイ312Aおよび312B(一つ以上の第2のゲートウェイの一例)を実行基盤サービス122にデプロイする。このようにして、テナント用システム104の窓口としてゲートウェイ312Cと、テナント用システム104を構成するバックエンドサービス311A(311B)のゲートウェイ312A(312B)とを配備することができる。例えば、ゲートウェイ制御部400は、テナント用システム104のテンプレート情報またはイメージといった情報から、テナント用システム104を構成する個々のバックエンドサービス311を特定し、特定したバックエンドサービス311毎にゲートウェイ312をデプロイし、テナント用システム104についてゲートウェイ312Cをデプロイすることができる。
各ゲートウェイ312は、要求を受けた場合、必要に応じて(例えば、転送先サービスモジュールのサービスイメージ名600に対応した認証連携601と認可連携602の値に応じて)、当該要求が持つアクセストークンを、テナント用システム104の外部に設けられ認証認可を行う機能である認証認可サービス群125に送信することで、当該認証認可サービス群125に認証認可を実行させる。このため、いずれのバックエンドサービス311が認証認可機能を持たなくても、認証認可を行うことができる。
以上の説明は、本発明の説明のための例示であって、本発明の範囲を上述の実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
例えば、テナント用システム104は、それぞれがアプリケーションサービスに関連付けられている複数のノードと当該複数のノードにおける各ノード間の結線とで表現されたアプリケーションソフトウェアフローでよい。ノードに関連付いたアプリケーションサービスは、サービスモジュールの一例でよい。アプリケーションソフトウェアフローは、ビジュアルプログラミングツールで記述されてよい。ビジュアルプログラミングツールは、「モデル開発環境」と呼ばれてもよい。ソフトウェアの構成要素や処理単位がノードであり、ノード同士の結線は「エッジ」と呼ばれてもよい。
また、本発明は、要求にメタ情報を付与できる環境全般に適用することが期待できる。例えば、WEBシステムに代えて、クライアントプログラムがライブラリにデータを記述する環境であって、関数の引数に独自の引数を追加することが許容されている環境にも、本発明を適用可能である。