IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特開2023-127486アクセス制御方法、アクセス制御プログラム、および情報処理装置
<>
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図1
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図2
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図3
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図4
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図5
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図6
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図7
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図8
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図9
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図10
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図11
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図12
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図13
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図14
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図15
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図16
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図17
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図18
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図19
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図20
  • 特開-アクセス制御方法、アクセス制御プログラム、および情報処理装置 図21
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023127486
(43)【公開日】2023-09-13
(54)【発明の名称】アクセス制御方法、アクセス制御プログラム、および情報処理装置
(51)【国際特許分類】
   G06F 21/62 20130101AFI20230906BHJP
【FI】
G06F21/62 318
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2022031310
(22)【出願日】2022-03-01
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】加藤 千裕
(57)【要約】
【課題】ソフトウェアの種別ごとの効率的なアクセス制限を可能とする。
【解決手段】情報処理装置1は、プロセスが生成されたことを検知すると、生成されたプロセスを有するコンテナのアドレスとプロセスとの対応関係を管理情報7に登録する。次に情報処理装置1は、データベース2aへのアクセス要求の出力を検知すると、管理情報7においてアクセス要求の送信元アドレスに対応付けられた1または複数のプロセスの中から、アクセス要求の送信元ポート番号を使用している送信元プロセスを特定する。そして情報処理装置1は、特定した送信元プロセスが実行している送信元ソフトウェアを特定する。情報処理装置2は、特定した送信元ソフトウェアからのアクセス要求に応じたデータベース2aへのアクセスが許可されているか否かを判定する。
【選択図】図1
【特許請求の範囲】
【請求項1】
1または複数のコンテナのいずれかでプロセスが生成されたことを検知すると、生成された前記プロセスを有するコンテナにおけるネットワーク通信用のアドレスと生成された前記プロセスとの対応関係を管理情報に登録し、
データベースへのアクセス要求の出力を検知すると、前記管理情報において前記アクセス要求の送信元アドレスに対応付けられた1または複数のプロセスの中から、前記アクセス要求の送信元ポート番号を使用している送信元プロセスを特定し、
特定した前記送信元プロセスが実行している送信元ソフトウェアを特定し、
特定した前記送信元ソフトウェアからの前記アクセス要求に応じた前記データベースへのアクセスが許可されているか否かを判定する、
処理をコンピュータが実行するアクセス制御方法。
【請求項2】
前記送信元プロセスを特定する処理では、前記送信元ポート番号を用いた通信で使用しているファイルのファイル識別情報を取得し、取得した前記ファイル識別情報に基づいて、前記送信元プロセスの識別情報を取得する、
請求項1記載のアクセス制御方法。
【請求項3】
前記送信元プロセスを特定する処理では、前記1または複数のプロセスそれぞれが使用しているファイルの中から、取得した前記ファイル識別情報に対応するファイルを検索し、該当するファイルを使用しているプロセスを前記送信元プロセスとして特定する、
請求項2記載のアクセス制御方法。
【請求項4】
前記管理情報には、ネットワーク通信用の前記アドレスが共通のコンテナが共通で使用するネットワークネームスペースを示す情報が、前記アドレスに対応付けて設定されており、
前記アドレスと生成された前記プロセスとの対応関係を管理情報に登録する処理では、生成された前記プロセスが使用する前記ネットワークネームスペースに対応する前記アドレスに対応付けて、生成された前記プロセスの識別情報を登録する、
請求項2または3に記載のアクセス制御方法。
【請求項5】
前記送信元プロセスを特定する処理では、前記管理情報において前記送信元アドレスに対応する前記ネットワークネームスペースにアクセスすることで、前記送信元ポート番号を用いた通信で使用しているファイルの前記ファイル識別情報を取得する、
請求項4に記載のアクセス制御方法。
【請求項6】
前記データベースへのアクセスが許可されているか否かを判定する処理では、前記データベース内のデータテーブルに対してアクセスを許可するソフトウェアが設定された許可情報において、前記アクセス要求におけるアクセス先となる対象データテーブルに対して、特定した前記送信元プロセスが実行している前記送信元ソフトウェアからのアクセスが許可されている場合、前記データベースへのアクセスを許可する、
請求項1から5までのいずれかに記載のアクセス制御方法。
【請求項7】
1または複数のコンテナのいずれかでプロセスが生成されたことを検知すると、生成された前記プロセスを有するコンテナにおけるネットワーク通信用のアドレスと生成された前記プロセスとの対応関係を管理情報に登録し、
データベースへのアクセス要求の出力を検知すると、前記管理情報において前記アクセス要求の送信元アドレスに対応付けられた1または複数のプロセスの中から、前記アクセス要求の送信元ポート番号を使用している送信元プロセスを特定し、
特定した前記送信元プロセスが実行している送信元ソフトウェアを特定し、
特定した前記送信元ソフトウェアからの前記アクセス要求に応じた前記データベースへのアクセスが許可されているか否かを判定する、
処理をコンピュータに実行させるアクセス制御プログラム。
【請求項8】
1または複数のコンテナのいずれかでプロセスが生成されたことを検知すると、生成された前記プロセスを有するコンテナにおけるネットワーク通信用のアドレスと生成された前記プロセスとの対応関係を管理情報に登録し、データベースへのアクセス要求の出力を検知すると、前記管理情報において前記アクセス要求の送信元アドレスに対応付けられた1または複数のプロセスの中から、前記アクセス要求の送信元ポート番号を使用している送信元プロセスを特定し、特定した前記送信元プロセスが実行している送信元ソフトウェアを特定し、特定した前記送信元ソフトウェアからの前記アクセス要求に応じた前記データベースへのアクセスが許可されているか否かを判定する処理部、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、アクセス制御方法、アクセス制御プログラム、および情報処理装置に関する。
【背景技術】
【0002】
アプリケーションソフトウェアなどの様々なソフトウェアを実行する動作環境では、各ソフトウェアからデータベース(DB:DataBase)内のデータへのアクセスを適切に制限することは非常に重要である。特に第三者から提供された秘密情報を扱う場合には、過失によって秘密情報を漏洩してしまうと大きな問題に発展する恐れがある。そのため、規定や規則によってこれを抑制するだけでなく、コンピュータシステム内でのアクセス制御機構によりアクセスを制限できることが求められる。
【0003】
なおアクセス制御の対象となるソフトウェアは、コンテナと呼ばれる仮想実行環境で実行される場合がある。ソフトウェアを実行するコンテナは、オーケストレーションツールと呼ばれる管理用ソフトウェアを用いて管理される。オーケストレーションツールにおいては、クラスタ内部のネットワーク機構を制御するためのソフトウェアが併用されることが多い。ネットワーク機構を制御するためのソフトウェアとしては、例えばサイドカープロキシと呼ばれる機構がある。代表的なものとしては、例えば、Envoyと呼ばれるOSS(Open Source Software)がある。
【0004】
サイドカープロキシでは、ソフトウェアのポート番号を用いて、ソフトウェアからDBへのアクセスの抑制などの制御を行うことができる。すなわちネットワークを介したDBへのアクセスの場合、各ソフトウェアには通信用のポート番号が割り振られる。ポート番号が固定的に決まっているソフトウェアであれば、アクセス要求のポート番号に基づいて、そのソフトウェアに関するDBへのアクセス制御を行うことができる。
【0005】
また、データ管理のソフトウェアである関係データベース管理システム(RDBMS:Relational DataBase Management System)においても、データへのアクセス制御の機構は存在する。RDBMSではユーザごとにアクセスの権限を設定し、その権限に従ってデータのアクセス可否を判断する。この権限はテーブル単位、行単位、列単位など、多数の粒度での設定が可能である。
【0006】
コンテナを管理する技術としては、例えばコンテナ間で行われる通信の監視結果を用いて不正動作を検出できる監視システムが提案されている。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2020-115358号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
コンテナ上で実行されているソフトウェアには、データ送信を行う際に、その時点で未使用のポート番号を用いて通信を行うソフトウェアが多数存在する。このように、ポート番号が通信の度に異なるソフトウェアがネットワーク経由でDBにアクセスする場合、従来技術では、アクセス要求のポート番号に対応するソフトウェアの種別の判別を効率的に行うことができない。そのため、ソフトウェアの種別ごとにDBへの効率的なアクセス制限が困難となっている。
【0009】
1つの側面では、本件は、ソフトウェアの種別ごとの効率的なアクセス制限を可能とすることを目的とする。
【課題を解決するための手段】
【0010】
1つの案では、以下の処理をコンピュータが実行するアクセス制御方法が提供される。
コンピュータは、1または複数のコンテナのいずれかでプロセスが生成されたことを検知すると、生成されたプロセスを有するコンテナにおけるネットワーク通信用のアドレスと生成されたプロセスとの対応関係を管理情報に登録する。次にコンピュータは、データベースへのアクセス要求の出力を検知すると、管理情報においてアクセス要求の送信元アドレスに対応付けられた1または複数のプロセスの中から、アクセス要求の送信元ポート番号を使用している送信元プロセスを特定する。さらにコンピュータは、特定した送信元プロセスが実行している送信元ソフトウェアを特定する。そしてコンピュータは、特定した送信元ソフトウェアからのアクセス要求に応じたデータベースへのアクセスが許可されているか否かを判定する。
【発明の効果】
【0011】
1態様によれば、ソフトウェアの種別ごとの効率的なアクセス制限が可能となる。
【図面の簡単な説明】
【0012】
図1】第1の実施の形態に係るアクセス制御方法の一例を示す図である。
図2】第2の実施の形態のシステム構成の一例を示す図である。
図3】ノードのハードウェアの一例を示す図である。
図4】アプリケーションごとのDBへのアクセス管理の一例を示す図である。
図5】DBへのアクセス制御に関する参考技術の第1の例を示す図である。
図6】DBへのアクセス制御に関する参考技術の第2の例を示す図である。
図7】inode番号を介したアプリケーション特定の一例を示す図である。
図8】DBへのアクセス制御に関する参考技術の第3の例を示す図である。
図9】アプリケーション単位でのアクセス制御機能の一例を示すブロック図である。
図10】死活監視処理の一例を示す図である。
図11】コンテナ詳細情報の一例を示す図である。
図12】Pod情報リソース群の一例を示す図である。
図13】Pod生成時の処理の手順の一例を示すフローチャートである。
図14】生成されたプロセスのPIDが追記されたPod情報リソースの一例を示す図である。
図15】プロセス生成時の処理の手順の一例を示すフローチャートである。
図16】DBへのアクセスの際の情報の流れを示す図である。
図17】アプリケーションのファイルパスの取得手順の一例を示すフローチャートである。
図18】接続先テーブル名の取得方法の一例を示す図である。
図19】カスタムリソースから取得する許可情報の一例を示す図である。
図20】投機的なDBアクセス処理の一例を示すシーケンス図である。
図21】クエリの実行に時間がかかる場合の投機的なDBアクセス処理の一例を示すシーケンス図である。
【発明を実施するための形態】
【0013】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
第1の実施の形態は、ソフトウェアの種別ごとにDBへのアクセスを制限可能なアクセス制御方法である。
【0014】
図1は、第1の実施の形態に係るアクセス制御方法の一例を示す図である。図1には、アクセス制御方法を情報処理装置1,2によって実施した場合の例を示している。情報処理装置1,2は、例えばコンピュータであり、アクセス制御プログラムを実行することにより、アクセス制御方法を実施することができる。
【0015】
情報処理装置1は、記憶部1aと処理部1bとを有する。記憶部1aは、情報処理装置1が有するメモリまたはストレージ装置である。処理部1bは、例えば情報処理装置1が有するプロセッサまたは演算回路である。情報処理装置2は、データベース(DB)2aと処理部2bとを有する。DB2aは、情報処理装置2が有するメモリまたはストレージ装置である。処理部2bは、例えば情報処理装置2が有するプロセッサまたは演算回路である。
【0016】
情報処理装置1の記憶部1aは、Pod6に含まれる1または複数のコンテナ6a,6b,・・・内の1または複数のプロセスと、Pod6のネットワーク通信用のアドレス(PodIP:192.16.18.22)との対応関係を示す管理情報7を記憶する。ネットワーク通信用のアドレスは、例えばIP(Internet Protocol)アドレスである。プロセスは、例えばそのプロセスのプロセスID(PID:[15424,15756,・・・])で示される。また管理情報7には、例えばPod6で使用されるネットワークネームスペースを示す情報(ns:4026531968)が含まれる。ネットワークネームスペースを示す情報は、例えばネットワークネームスペースに対応するファイルのinode番号である。
【0017】
情報処理装置1の処理部1bは、ソフトウェアの仮想的な実行環境であるコンテナの集合体であるPod5,6を有している。例えばPod5にはコンテナ5aが含まれており、Pod6にはコンテナ6a,6b,・・・が含まれている。コンテナ5aは、他のPod6およびそのPod6内のコンテナ6a,6b,・・・を監視するためのコンテナである。コンテナ6a,6b,・・・は、ユーザからの要求に応じたサービスの提供に用いるソフトウェア8a,8bを実行するためのコンテナである。各Pod5,6には、ネットワーク通信用のアドレスが割り振られている。各Pod5,6内のコンテナは、属するPodに割り振られたアドレスを共有する。
【0018】
例えばコンテナ6aでは、ソフトウェア8a,8bそれぞれを実行するためのプロセスが生成される。各プロセスは、ソフトウェア8a,8bの実行過程でDB2a内のデータを用いた処理が発生すると、DB2aへのアクセス要求9a,9bを出力する。出力されるアクセス要求9a,9bの送信元アドレスは、Pod6に割り振られたアドレスである。またアクセス要求9a,9bの送信元ポート番号は、アクセス要求9a,9bの出力時点で他のプロセスが使用していないポート番号である。そのためどのソフトウェア8a,8bからのアクセス要求9a,9bがどのポート番号を使用するのかを事前に知ることはできない。
【0019】
Pod5内のコンテナ5aは、Pod6の死活監視およびPod6内のプロセスの死活監視に用いられる。Pod6の死活監視は、例えばPod5,6を管理するために用意されたAPI(Application Programming Interface)を用いて行うことができる。Pod5,6を管理するためのAPIは、例えば図示しないAPIサーバによって提供される。例えばコンテナ5a内の監視プロセスは、ネットワーク通信用に同一アドレスを使用するコンテナのPodが生成されるごとに、生成されたPodに対応する管理情報7を生成する。
【0020】
プロセスの死活監視は、情報処理装置1のOS(Operating System)3を介して行うことができる。例えばコンテナ5a内の監視プロセスは、OS3のファイルシステムが管理しているプロセスごとのファイルの生成の有無を監視することで、コンテナ6a内のプロセスの死活監視を行うことができる。
【0021】
コンテナ5a内の監視プロセスは、1または複数のコンテナ6a,6b,・・・のいずれかでプロセスが生成されたことを検知すると、管理情報7に、Pod6のアドレスに対応付けて、生成されたプロセスの識別情報を登録する。例えば監視プロセスは、OS3を介して、生成されたプロセスの使用しているネットワークネームスペースに対応するファイルのinode番号を取得する。そして監視プロセスは、取得したinode番号を含む管理情報7に、生成されたプロセスの識別情報を登録する。
【0022】
さらにコンテナ5a内の監視プロセスは、Pod6においてソフトウェア8a,8b(送信元ソフトウェア)を実行する送信元プロセスによるDB2aへのアクセス要求9a,9bの出力を検知する。例えばコンテナ5a内の監視プロセスは、情報処理装置2から、出力されたアクセス要求9a,9bの送信元アドレスと送信元ポート番号との組を受信することで、アクセス要求9a,9bの出力を検知することができる。
【0023】
DB2aへのアクセス要求9a,9bの出力を検知すると、コンテナ5a内の監視プロセスは、管理情報7において検知したアクセス要求9a,9bの送信元アドレスに関連付けられた1または複数のプロセスを特定する。さらにコンテナ5a内の監視プロセスは、特定した1または複数のプロセスの中から、アクセス要求9a,9bの送信元ポート番号を使用している送信元プロセスを特定する。例えばコンテナ5a内の監視プロセスは、送信元ポート番号を用いた通信で使用しているファイル(例えば受信データのバッファ)のファイル識別情報を取得し、取得したファイル識別情報に基づいて、送信元プロセスの識別情報を取得する。ファイルの識別情報は、例えばinode番号である。
【0024】
そしてコンテナ5a内の監視プロセスは、例えばアクセス要求9a,9bを出力した送信元プロセスが実行しているソフトウェア8a,8bを示す情報を情報処理装置2に送信する。ソフトウェアを示す情報は、例えばそのソフトウェアの名前(ソフトウェア名)である。例えばコンテナ5a内の監視プロセスは、OS3から、アクセス要求9a,9bを出力したプロセスの識別情報を用いて、そのプロセスが実行している実行ファイルのファイル名と、そのファイルの保存場所を示すパスとを取得する。そしてコンテナ5a内の監視プロセスは、パスとファイル名との組を、ソフトウェア名として情報処理装置2に送信する。以下、パスとファイル名の組をファイルパスと呼ぶこともある。
【0025】
図1の例では、コンテナ5aの監視プロセスは、送信元アドレスと送信元ポート番号との組「10.36.0.2:55765」に応じて、そのポート番号「55765」に対応するソフトウェアのソフトウェア名「sw_1」を、情報処理装置2に送信する。またコンテナ5aの監視プロセスは、送信元アドレスと送信元ポート番号との組「10.36.0.2:50212」に応じて、そのポート番号「50212」に対応するソフトウェアのソフトウェア名「sw_2」を、情報処理装置2に送信する。
【0026】
情報処理装置2の処理部2bは、情報処理装置1からDB2aへのアクセス要求9a,9bを受信すると、そのアクセス要求9a,9bの送信元アドレスと送信元ポート番号との組を、情報処理装置1のPod5のアドレスを指定して送信する。すると情報処理装置1から、アクセス要求9a,9bを送信したプロセスが実行するソフトウェア8a,8bを示す情報が送られる。そして処理部2bは、アクセス要求9a,9bを送信したプロセスが実行しているソフトウェア8a,8bに基づき、DB2aへのアクセスが許可されているか否かを判定する。
【0027】
例えばDB2aには、複数のデータテーブル3a,3bが含まれる。アクセス要求9a,9bには、アクセス対象のデータテーブルが指定されている。処理部2bは、データテーブルごとに、そのデータテーブルに対するアクセスを許可するソフトウェアが示された許可情報4を有する。例えば許可情報4には、データテーブル名に対応付けて、そのデータテーブルへのアクセスを許可するソフトウェア名(許可対象ソフトウェア名)が設定されている。処理部2bは、許可情報4に基づいてアクセスが許可されているか否かを判定する。
【0028】
処理部2bは、アクセス要求9a,9bに応じたアクセスが許可されている場合、そのアクセス要求9a,9bに応じたDB2aへのアクセスを行い、アクセス結果を情報処理装置1に送信する。また処理部2bは、アクセス要求9a,9bに応じたアクセスが許可されてない場合、そのアクセス要求9a,9bに応じたDB2aへのアクセスを行わずに、エラーメッセージを情報処理装置1に送信する。
【0029】
図1の例では、ソフトウェア8aを実行するプロセスから出力されたアクセス要求9aのアクセス先は、データテーブル名「tbl_1」のデータテーブル3aである。許可情報4では、データテーブル3aに対するソフトウェア名「sw_1」からのアクセスが許可されている。従って、処理部2bは、アクセス要求9aの送信元ソフトウェアのソフトウェア名が「sw_1」であることを認識すると、アクセス要求9aに応じたデータテーブル3aへのアクセスを実行する。
【0030】
またソフトウェア8bを実行するプロセスから出力されたアクセス要求9bのアクセス先も、データテーブル名「tbl_1」のデータテーブル3aである。許可情報4では、データテーブル3aに対するソフトウェア名「sw_2」からのアクセスが許可されていない。従って、処理部2bは、アクセス要求9bの送信元ソフトウェアのソフトウェア名が「sw_2」であることを認識すると、アクセス要求9bに応じたデータテーブル3aへのアクセスを許否する。
【0031】
このように処理部2bは、コンテナ6a,6b,・・・と同じ情報処理装置1内に実装されているコンテナ5aからポート番号に対応するソフトウェア名を取得することで、一時的に割り当てられたポート番号を使用しているソフトウェアを認識できる。その結果、ポート番号を用いて、データテーブルに対するソフトウェアごとのアクセス制限を行うことができる。しかも情報処理装置1では、予めコンテナ6a,6b,・・・内のプロセスの死活監視により、Pod6とプロセスとの対応関係が管理情報7で管理されている。そのため、Pod6のアドレスを送信元アドレスとするアクセス要求9a,9bであれば、Pod6内に生成されているプロセスの中から、アクセス要求9a,9bを出力した送信元プロセスを探索すればよい。そのためPod6以外にも情報処理装置1内に多数のPodが存在している場合において、アクセス要求9a,9bを出力した送信元プロセスを効率的に特定することができる。
【0032】
Pod6のアドレスと生成されたプロセスとの対応関係を管理情報7に登録する際には、Pod6のネットワークネームスペースの情報を有効に利用することができる。例えばコンテナ5a内の監視プロセスは、管理情報7に、Pod6内のコンテナ6a,6b,・・・が共通で使用するネットワークネームスペースを示す情報を、コンテナ6a,6b,・・・が共通で使用するアドレスに対応付けて設定する。コンテナ5a内の監視プロセスは、生成されたプロセスが使用するネットワークネームスペースに対応するアドレスに対応付けて、生成されたプロセスの識別情報を管理情報7に登録する。
【0033】
Pod6のネットワークネームスペースを示す情報を管理情報7に含めておくことで、送信元ポート番号に対応するファイル識別情報の取得が容易となる。すなわちPod5とPod6とのネットワークネームスペースは分かれていることが多い。そのためPod5内のプロセスからPod6内のネットワークネームスペースで管理されている情報を取得するには、Pod6のネットワークネームスペースを特定する処理を行うこととなる。ネットワークネームスペースを示す情報が管理情報7に予め設定されていれば、例えばコンテナ5a内の監視プロセスは、Pod6のネットワークネームスペースにアクセスして、送信元ポート番号を用いた通信で使用しているファイルのファイル識別情報を取得することができる。このようにPod6のネットワークネームスペースの特定が容易となり、送信元ポート番号に対応するファイル識別情報の取得も容易となる。
【0034】
またコンテナ5a内の監視プロセスは、取得したファイル識別情報に基づいて、アクセス要求9a,9bを出力したプロセスの識別情報を取得する。その際、コンテナ5a内の監視プロセスは、例えば管理情報7においてPod6に対応付けて登録されているプロセスそれぞれが使用しているファイルの中から、取得したファイル識別情報に対応するファイルを検索する。このように検索の対象が管理情報7においてPod6に対応付けて登録されているプロセスそれぞれが使用しているファイルに限定されることで、処理が効率的となる。
【0035】
なお図1の例では、アクセス制御を行う装置を2台の情報処理装置1,2として説明しているが、2台の情報処理装置1,2を含むシステム全体を1つの情報処理装置と呼ぶこともできる。またDB2aを情報処理装置1内に設けることもできる。その場合、情報処理装置2の処理部2bが実行する許否決定などの処理を情報処理装置1で実行させることとなり、1台の情報処理装置1のみでアクセス制御が実現される。
【0036】
〔第2の実施の形態〕
次に第2の実施の形態について説明する。第2の実施の形態のシステムでは、アプリケーションソフトウェア(以下、アプリケーションと呼ぶ)ごとのDBへのアクセス管理を投機的に実行することで、アクセス管理に伴うDBのアクセス遅延を抑止する。
【0037】
図2は、第2の実施の形態のシステム構成の一例を示す図である。第2の実施の形態では、ネットワーク20を介して3台のノード100,200,300が接続されている。ノード100は、コンテナを用いてアプリケーションからDBへのアクセスを管理する。ノード200は、コンテナを用いてアプリケーションを実行する。ノード300は、ノード100とノード200で実行されているコンテナを管理する。
【0038】
図3は、ノードのハードウェアの一例を示す図である。ノード100は、プロセッサ101によって装置全体が制御されている。プロセッサ101には、バス109を介してメモリ102と複数の周辺機器が接続されている。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU(Central Processing Unit)、MPU(Micro Processing Unit)、またはDSP(Digital Signal Processor)である。プロセッサ101がプログラムを実行することで実現する機能の少なくとも一部を、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現してもよい。
【0039】
メモリ102は、ノード100の主記憶装置として使用される。メモリ102には、プロセッサ101に実行させるOSのプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ102には、プロセッサ101による処理に利用する各種データが格納される。メモリ102としては、例えばRAM(Random Access Memory)などの揮発性の半導体記憶装置が使用される。
【0040】
バス109に接続されている周辺機器としては、ストレージ装置103、GPU(Graphics Processing Unit)104、入力インタフェース105、光学ドライブ装置106、機器接続インタフェース107およびネットワークインタフェース108がある。
【0041】
ストレージ装置103は、内蔵した記録媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置103は、コンピュータの補助記憶装置として使用される。ストレージ装置103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置103としては、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)を使用することができる。
【0042】
GPU104は画像処理を行う演算装置であり、グラフィックコントローラとも呼ばれる。GPU104には、モニタ21が接続されている。GPU104は、プロセッサ101からの命令に従って、画像をモニタ21の画面に表示させる。モニタ21としては、有機EL(Electro Luminescence)を用いた表示装置や液晶表示装置などがある。
【0043】
入力インタフェース105には、キーボード22とマウス23とが接続されている。入力インタフェース105は、キーボード22やマウス23から送られてくる信号をプロセッサ101に送信する。なお、マウス23は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【0044】
光学ドライブ装置106は、レーザ光などを利用して、光ディスク24に記録されたデータの読み取り、または光ディスク24へのデータの書き込みを行う。光ディスク24は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク24には、DVD(Digital Versatile Disc)、DVD-RAM、CD-ROM(Compact Disc Read Only Memory)、CD-R(Recordable)/RW(ReWritable)などがある。
【0045】
機器接続インタフェース107は、ノード100に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース107には、メモリ装置25やメモリリーダライタ26を接続することができる。メモリ装置25は、機器接続インタフェース107との通信機能を搭載した記録媒体である。メモリリーダライタ26は、メモリカード27へのデータの書き込み、またはメモリカード27からのデータの読み出しを行う装置である。メモリカード27は、カード型の記録媒体である。
【0046】
ネットワークインタフェース108は、ネットワーク20に接続されている。ネットワークインタフェース108は、ネットワーク20を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。ネットワークインタフェース108は、例えばスイッチやルータなどの有線通信装置にケーブルで接続される有線通信インタフェースである。またネットワークインタフェース108は、基地局やアクセスポイントなどの無線通信装置に電波によって通信接続される無線通信インタフェースであってもよい。
【0047】
ノード100は、以上のようなハードウェアによって、第2の実施の形態の処理機能を実現することができる。ノード200,300も、図3に示したノード100と同様のハードウェアにより実現することができる。なお、第1の実施の形態に示した情報処理装置1,2も、図3に示したノード100と同様のハードウェアにより実現することができる。
【0048】
ノード100は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第2の実施の形態に示す処理機能を実現する。ノード100に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、ノード100に実行させるプログラムをストレージ装置103に格納しておくことができる。プロセッサ101は、ストレージ装置103内のプログラムの少なくとも一部をメモリ102にロードし、プログラムを実行する。またノード100に実行させるプログラムを、光ディスク24、メモリ装置25、メモリカード27などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ101からの制御により、ストレージ装置103にインストールされた後、実行可能となる。またプロセッサ101が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【0049】
他のノード200,300についてもノード100と同様に、コンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第2の実施の形態に示す処理機能を実現することができる。
【0050】
ここで、第2の実施の形態によって実現しようとするアプリケーションごとのDBへのアクセス管理について説明する。
図4は、アプリケーションごとのDBへのアクセス管理の一例を示す図である。ノード100はDB110を有している。DB110内にRDBMSによって個人情報(住所、氏名)を含む機密情報が保持されている。RDBMSでは、データが複数のデータテーブルに分けて格納されている。各データテーブルには、そのデータテーブルごとに定められたデータ定義に合致するデータが格納される。RDBMSではデータテーブルは一つ以上存在し、それぞれのテーブルに依存関係がある場合もある。
【0051】
図4の例では、DB110内に登録者情報テーブル111と購入情報テーブル112とがある。登録者情報テーブル111には、登録者ID、登録者、年齢、都道府県の欄が設けられており、各欄に対応するデータを含む複数のレコードが登録されている。購入情報テーブル112には、購入ID、登録者ID、商品ID、および日時の欄が設けられており、各欄に対応するデータを含む複数のレコードが登録されている。登録者情報テーブル111と購入情報テーブル112とは、登録者IDを介して互いに関係付けられている。
【0052】
ノード200は、コンテナ211,212を用いてDB110へアクセスする。コンテナ211,212は、コンテナオーケストレーションツールで管理されているものとする。コンテナオーケストレーションツールでは、Pod単位でコンテナを管理する。コンテナ211,212は、ユーザアプリPod210に含まれている。
【0053】
ユーザアプリPod210内のコンテナ211,212のように同一のPod内のコンテナは、共有のストレージアクセス環境・ネットワークアクセス環境を持ち、同じネットワーク名前空間(ネットワークネームスペース)を使用する。そのため、互いに簡単に通信が出来る。多くの場合、メインの動作を行うプログラムが入ったコンテナ一つに、それをサポートするヘルパープログラム(ログ収集、プロキシ、コントローラ、バックアップなど)を実行するコンテナがいくつか入ったものがPodとして使用される。このようなヘルパープログラムを実行するコンテナを、サイドカーコンテナと呼ぶ。
【0054】
ノード200はユーザアプリPod210を有している。ユーザアプリPod210は、アプリケーションを実行させるための実行単位である。ユーザアプリPod210は、複数のコンテナ211,212を有する。コンテナ211では、アプリケーション211aが実行されている。コンテナ212では、アプリケーション212aが実行されている。
【0055】
例えばアプリケーション212aは、DB110から読み出したデータの匿名化を行うアプリケーションであるものとする。登録者情報テーブル111には、ユーザの個人情報が含まれているため、登録者情報テーブル111から読み出したデータは、匿名化処理を行った後に利用するのが適切である。そこでノード100は、アプリケーション212aからのみ登録者情報テーブル111にアクセス可能となるように、アクセスを制御する。この場合、アプリケーション211aは、アプリケーション212aを介して、登録者情報テーブル111内のデータにアクセス可能となる。なお、購入情報テーブル112には個人情報が含まれていないため、ノード100は、両方のアプリケーション211a,212aから購入情報テーブル112へのアクセスが可能となるように制御する。
【0056】
このようにノード100は、テーブル単位で、アプリケーションごとに異なるアクセス制限を課すようにアクセス制御を行う。以下、図5図6を参照して、アプリケーションごとに異なるアクセス制限を課すようなアクセス制御を行うことの困難性について説明する。
【0057】
図5は、DBへのアクセス制御に関する参考技術の第1の例を示す図である。図5には、サイドカーコンテナを用いたコンテナオーケストレーションツールによって、DB110へのアクセスを制御する例が示されている。サイドカーコンテナとしてプロキシコンテナ900を挿入することで、プロキシコンテナ900を介した通信について、フィルタリングや統計情報の保存を行うことができる。例えばプロキシコンテナ900は、DB110へのアクセス要求の送信元のIPアドレスとポート番号とに基づいてフィルタリングを行うことができる。送信元のIPアドレスとポート番号は、アクセス要求の送信に用いられたパケットのヘッダから取得できる。ただし図5に示すプロキシコンテナ900は、ポート番号に対応するアプリケーション211a,212aの識別情報(アプリケーション名など)を取得する機能を持たないものとする。
【0058】
Pod単位でコンテナ211,212を管理している場合、Pod単位でIPアドレスが割り振られる。そのためプロキシコンテナ900を用いて送信元のIPアドレスとポート番号でフィルタリングを行う場合、IPアドレスだけでは同一のユーザアプリPod210内のアプリケーション211a,212aを識別することができない。送信元ポート番号は別々に振られているが、特別に送信元が設定しない限りは空いているポート番号が用いられている。すなわちアプリケーション211a,212aそれぞれが使用するポート番号は動的に変更され、プロキシコンテナ900においてアクセス要求のポート番号から、そのアクセス要求の送信元のアプリケーションの種別を判別するのは不可能である。
【0059】
またプロキシコンテナ900では、IPアドレスとポート番号だけではアクセス先となるデータテーブルを把握することができない。そのためプロキシコンテナ900によるDB110内のテーブルごとに、アプリケーションに応じたアクセスの許否を判断するには、送信元のIPアドレスとポート番号に対応するアプリケーションの種別が把握できるだけでは不十分である。
【0060】
図6は、DBへのアクセス制御に関する参考技術の第2の例を示す図である。図6には、RDBMSにおけるユーザ単位でのアクセス制御機能を用いて、アプリケーション単位でのアクセス制御を可能とする例が示されている。
【0061】
RDBMSは、テーブルごとに、そのテーブルに対するアクセスを許容するユーザを制限する機構を持っている。そこでPod作成者30は、アプリケーション211a,212aを、別々のユーザアカウントで実行する。例えばアプリケーション211aは「ユーザB」のユーザアカウントで実行され、アプリケーション212aは「ユーザA」のユーザアカウントで実行されている。
【0062】
RDBMSには、登録者情報テーブル111に設定されているデータ(登録者情報)にアクセス可能なユーザとして、「ユーザA」が設定される。また購入情報テーブル112に設定されているデータ(購入情報)にアクセス可能なユーザとして、「ユーザA、ユーザB」が設定される。このようにRDBMSには、各テーブルについて、ユーザ単位でのアクセス権限を定義することができる。そしてRDBMSは、アクセス可能なユーザのアカウントで実行されているアプリケーションからのアクセスであれば、データへのアクセスを許容する。
【0063】
図6の例では、「ユーザB」のアカウントで実行されているアプリケーション211aは、購入情報テーブル112へのアクセスは可能であるが、登録者情報テーブル111へのアクセスは不可能となる。他方、「ユーザA」のアカウントで実行されているアプリケーション212aは、登録者情報テーブル111と購入情報テーブル112との両方へアクセス可能である。このようにRDBMSにおけるユーザのアカウントのアクセス権限管理を用いれば、ユーザのアカウントとアプリケーションとを関連付けることで、アプリケーション単位でのアクセス制御が可能となる。
【0064】
しかし、RDBMSは、アクセスの要求元のアプリケーションのユーザアカウントを判別することはできても、これがどのアプリケーションに使われているかを把握することはできない。そのため、Pod作成者30が、RDBMSへのアプリケーションテーブルとユーザアカウントとの関係付けの設定を誤った場合、アクセスを拒否するべきアプリケーションからのテーブルへのアクセスが許可されてしまう可能性がある。
【0065】
しかも複数のアプリケーション211a,212aそれぞれに個別のユーザアカウントを割り当てる場合、Pod作成者30一人が、アプリケーション211a,212aそれぞれを実行するための複数のユーザアカウントを管理することとなる。アプリケーション数が多数になると、アプリケーションとユーザアカウントとの関連付けの設定ミスが発生しやすくなる。さらに、アプリケーションの実行に使用するユーザアカウントがPod作成者30のアカウントに制限されることはシステムの運用の柔軟性を低下させることとなり、汎用的に用いることができる手段ではない。
【0066】
以上のように、プロキシによるIPアドレスとポート番号による制限ではアプリケーション単位での各テーブルへのアクセス許否の判別ができないという問題がある。他方、テーブルごとのアクセス制御において、RDBMSのユーザをアプリケーションに紐づけてアクセス管理を行うのは、システムの運用や管理を難しくすることとなり不適切である。
【0067】
そこで第2の実施の形態に示すシステムでは、Pod作成者30への過度な負担をかけずにアプリケーション単位でのアクセス制御を実現する。なお第2の実施の形態ではDB110をRDBMSで管理しているが、DB110の構造はRDBMSに限定されない。例えばNoSQLとよばれるドキュメントDB、グラフDBといった種類でアクセス制御されているDBに対しても、第2の実施の形態に示すアプリケーション単位でのアクセス制御を適用することができる。
【0068】
なお、ノード200内のユーザアプリPod210のIPアドレス・ポート番号のネームスペース(ネットワークネームスペース)がノード200のOSのネームスペースと一致している場合がある。その場合、DB110にアクセスするためのクエリの送信元のIPアドレス・ポート番号に対応するアプリケーションをノード200のOSに問い合わせることで、クエリの送信元のアプリケーションを一意に特定することができる。ただしネットワークネームスペースの共有は、セキュリティリスクを高めてしまうため、この設定ができない場合がある。
【0069】
そこで例えば、inode番号を利用し、情報取得用のコンテナを介して、ポート番号に対応するアプリケーションのファイルパスの取得を可能とする案が考えられる。inode番号は、ファイルシステムにおいてファイルまたはディレクトリ(フォルダとも呼ばれる)それぞれに関する情報を示すinodeの識別番号である。inodeはすべてのファイルまたはディレクトリに対応付けて設けられている。そのためinodee番号は、各ファイルまたはディレクトリの識別情報として利用できる。例えばアプリケーションプログラムが格納されたファイルのinode番号は、そのアプリケーションプログラムを一意に示している。
【0070】
しかもinode番号はネットワークネームスペースに関わらず共通である。そのため、inode番号を介すことで、Pod内のアプリケーションにより出力されたクエリの送信元IPアドレスとポート番号との組から情報を辿り、そのアプリケーションを特定することができる。アプリケーションを特定する情報は、例えばそのアプリケーションの名称(アプリ名)とそのアプリケーションの実行ファイルの格納場所までのパスの組(ファイルパス)である。
【0071】
図7は、inode番号を介したアプリケーション特定の一例を示す図である。例えばあるPod内で動作しているアプリケーションから出力されたクエリには、Pod内ネットワークネームスペース31で管理されている送信元IPアドレスとポート番号の組(送信元IP・ポート番号)が含まれている。Pod内ネットワークネームスペース31では、送信元IPアドレスとポート番号の組に基づいて、対応するinode番号を特定することができる。
【0072】
ホストOS32では、アプリケーションプログラムを実行するプロセスに関する情報として、そのプロセスが実行しているアプリケーションプログラムのファイルのinode番号が管理されている。そのためホストOS32では、クエリを出力したアプリケーションのinode番号に基づいて、そのアプリケーションを実行しているプロセスのプロセスID(PID)を特定することができる。さらにホストOS32は、PIDに基づいて、そのプロセスが実行しているアプリ名とパスを特定することができる。
【0073】
図8は、DBへのアクセス制御に関する参考技術の第3の例を示す図である。図8に示す例では、ノード200のユーザアプリPod210内には、コンテナ211,212に加えて、情報取得コンテナ213が設けられている。またノード200には監視用Pod220が設けられている。監視用Pod220は、ノード200内でのアプリケーション211a,212aの動作を監視するための監視用コンテナ221を有する。ノード100は、DB110とPod120とを有する。Pod120は、プロキシコンテナ121を有する。
【0074】
プロキシコンテナ121は、アプリケーション212aからクエリを取得すると、クエリを含むパケットからIPアドレスとポート番号を取得する。そしてプロキシコンテナ121は、取得したIPアドレスを有するユーザアプリPod210内の情報取得コンテナ213に対して、クエリの送信元のポート番号に対応するアプリケーション問合せを送信する。なお情報取得コンテナ213のパケット受信用のポート番号は固定的に決めてあり、プロキシコンテナ121には、情報取得コンテナ213のパケット受信用のポート番号が予め登録されているものとする。
【0075】
情報取得コンテナ213は、アプリケーション問合せで指定されたポート番号に基づいて、そのポート番号に対応するinode番号を取得する。ポート番号には、そのポート番号を用いた通信に使用するファイル(例えば受信データのバッファ)が存在し、そのファイルにinode番号が付与されている。inode番号はネームスペースに関わらずノード200内で一意である。
【0076】
情報取得コンテナ213は、監視用コンテナ221に、inodeに対応するアプリケーションの問合せを行う。監視用コンテナ221は、指定されたinode番号を/procディレクトリ内で検索し、inode番号とアプリケーションのファイルパスとの対応関係を取得する。監視用コンテナ221は、取得したアプリケーションのファイルパスを情報取得コンテナ213に送信する。情報取得コンテナ213は、受信したアプリケーションのファイルパスをプロキシコンテナ121に送信する。
【0077】
プロキシコンテナ121は、アプリケーションのファイルパスに含まれるファイル名に基づいて、クエリを送信したアプリケーション212aが何なのかを認識する。そしてプロキシコンテナ121は、クエリのアクセス先のテーブルに対するアプリケーション212aからのアクセスが許可されていればクエリを実行し、その実行結果をアプリケーション212aに送信する。
【0078】
このようにしてプロキシコンテナ121は、ノード200内のPodとOSとのネットワークネームスペースの共有化が図られていない場合であっても、inode番号を利用し、ポート番号に対応するアプリケーションのファイルパスを取得することができる。そしてプロキシコンテナ121は、ファイルパスに基づいてアプリケーションを識別し、DB110へのアクセスの許否を判断できる。
【0079】
しかし、図8に示した技術ではまだいくつかの課題が残されている。第1の課題は、コンポーネントが分散して煩雑な機構になっていることである。例えばプロキシコンテナ121から監視用コンテナ221への問合せが、ユーザアプリPod210内の情報取得コンテナ213経由で行われている。これによりPodを跨いだ通信回数が多くなり、Pod間の通信のどこかで失敗すると、DB110へのアクセスが止まってしまう。そのため、機構を単純化し通信回数を減らすことが望まれる。
【0080】
第2の課題は、処理速度が遅くなることである。図8に示す機構では、監視用コンテナ221は、例えばinode番号を使っているプロセスを特定する際に、全プロセスの「/proc/[PID]/fd」以下を全走査して該当inode番号を使っているPIDを発見する。この場合、ノード200内のプロセス数が多いほど発見までの時間が増える。例えばプロセスが1600ほどある場合には、全走査には0.25秒ほどの時間が掛かる。この時間はプロセスの量に比例するため、業務運用中のシステムであり多くのプロセスが活発に実行されている状況ではオーバーヘッドが大きくなる。実用性を高めるためにも、プロキシコンテナ121でのクエリごとのDB110へのアクセス許否判断についての処理速度を削減することが望まれる。
【0081】
そこで監視用コンテナ221において、IPアドレスとポート番号との組に対応するアプリケーションの特定に有用な情報を予め収集しておく。これにより、プロキシコンテナ121は、クエリの送信元のIPアドレスとポート番号との組を指定して監視用コンテナ221に問い合わせるだけで、クエリの送信元のアプリケーションを認識できる。
【0082】
例えば監視用コンテナ221は、Podの死活監視とプロセスの死活監視とを行う。Podの死活監視では、新たに生成されたPodの情報(IPアドレスなど)を得ることができる。またプロセスの死活監視では、生成されたプロセスを、そのプロセスが所属するPodごとに分類することができる。
【0083】
監視用コンテナ221がPodの死活監視とプロセスの死活監視と行い、予め有用な情報を収集しておくことで、クエリが出されたときの処理効率を改善することができる。
図9は、アプリケーション単位でのアクセス制御機能の一例を示すブロック図である。ノード100は、DB110とPod120とを有する。DB110は、RDBMSで管理される。DB110とPod120とは、ノード100のプロセッサ101がプログラムを実行することで実現される機能である。
【0084】
Pod120は、プロキシコンテナ121とDBコンテナ122とを有する。プロキシコンテナ121は、コンテナ間通信を途中でキャッチし、送信元のアプリケーションと通信の内容(クエリ)に基づいて、許可された通信かどうかを判断し、アクセス制御を行う。DBコンテナ122は、RDBMSによってDB110内のデータを管理する。
【0085】
プロキシコンテナ121は、プロキシ部121a、アプリ情報取得部121b、許可情報取得部121c、接続先テーブル取得部121d、および許否判断部121eを有する。
【0086】
プロキシ部121aは、アプリケーション211a,212aからのDB110へのアクセス要求であるクエリを取得する。プロキシ部121aは、取得したクエリをDBコンテナ122に転送し、アクセス可能なテーブルへのアクセスの場合に、アクセス結果をクエリの送信元のアプリケーションに送信する。
【0087】
アプリ情報取得部121bは、クエリの送信元のポート番号に対応するアプリケーションの情報を監視用コンテナ221に問い合わせる。アプリ情報取得部121bは、取得したアプリケーションの情報を許否判断部121eに送信する。なお、アプリ情報取得部121bは、監視用コンテナ221の位置情報を予め認識している。例えばアプリ情報取得部121bは、ノード300内のAPIサーバ310から監視用コンテナ221の位置情報を取得することができる。
【0088】
許可情報取得部121cは、ノード300内のカスタムリソース320から、アクセスを許可するDB110内のテーブルとアプリケーションとの対応関係を示す許可情報を取得する。許可情報取得部121cは、取得した許可情報を許否判断部121eに送信する。
【0089】
接続先テーブル取得部121dは、DBコンテナ122から、クエリに応じたアクセスの対象となるデータテーブルの名前(接続先テーブル名)を取得する。接続先テーブル取得部121dは、取得した接続先テーブル名を許否判断部121eに送信する。
【0090】
許否判断部121eは、クエリの送信元のポート番号に対応するアプリケーションの情報、許可情報、および接続先テーブル名に基づいて、クエリに応じたアクセスを許可するか否かを判定する。許否判断部121eは、判定結果をプロキシ部121aに送信する。
【0091】
ノード200は、OS201上でコンテナエンジン202が実行され、コンテナエンジン202によってユーザアプリPod210と監視用Pod220とが生成されている。OS201、コンテナエンジン202、ユーザアプリPod210、および監視用Pod220は、ノード200のプロセッサがプログラムを実行することにより実現される機能である。なお図9では省略しているが、ノード100においてもOS上で実行されているコンテナエンジンによってPod120が生成されている。
【0092】
監視用Pod220は、監視用コンテナ221を有している。監視用コンテナ221は、内部アプリ情報取得部221aを有する。
内部アプリ情報取得部221aは、APIサーバ310と通信して、ユーザアプリPod210の死活監視を行う。内部アプリ情報取得部221aは、ユーザアプリPod210の死活監視により、ユーザアプリPod210に関する情報を取得し、ネットワークネームスペースとユーザアプリPod210との対応関係を、Pod情報リソースとして保存する。ユーザアプリPod210は、例えばIPアドレスで示される。
【0093】
また内部アプリ情報取得部221aは、OS201と通信して、アプリケーション211a,212aを実行しているプロセスの死活監視を行う。内部アプリ情報取得部221aは、プロセスの死活監視により、発生したプロセスがどのPod内で行われているプロセスかを特定し、ネットワークネームスペースとプロセスとの対応関係を、Pod情報リソースに保存する。
【0094】
そして内部アプリ情報取得部221aは、クエリの送信元のIPアドレスとポート番号との組を受信すると、Pod情報リソースを利用して、クエリの送信元のアプリケーションのファイルパスを取得する。
【0095】
ノード300は、APIサーバ310とカスタムリソース320とを有する。APIサーバ310とカスタムリソース320とは、ノード300のプロセッサがプログラムを実行することにより実現される機能である。
【0096】
APIサーバ310は、コンテナオーケストレーションツールで提供されるAPIであり、ノードにおけるPodの起動・停止、各コンテナの位置(コンテナを実行してるノード)などの情報を管理する。カスタムリソース320は、コンテナオーケストレーションツールの拡張APIであり、Pod作成者が用意した任意の機能である。例えばカスタムリソース320は、データテーブルと、そのデータテーブルへのアクセスを許可するアプリケーションとの対応関係を示す許可情報を有する。そしてカスタムリソース320は、許可情報の取得要求に応じて、許可情報をプロキシコンテナ121に送信する。
【0097】
なお、図9に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
図9に示した構成のシステムにより、アプリケーション211a,212aからDB110へのアクセスのためのクエリが出力されるごとに、そのクエリに応じたアクセスの許否判定処理を効率的に行うことができる。効率的な許否判定のために、監視用コンテナ221は、Pod死活監視とプロセス死活監視とを行い、Pod情報リソースを生成する。
【0098】
図10は、死活監視処理の一例を示す図である。監視用Pod220が有する監視用コンテナ221は、例えばAPIサーバ310を介して、ユーザアプリPod210の死活監視を行う。すなわち、APIサーバ310は、特定のリソースが作成・更新・削除されたときにそれを検知することができる。監視用コンテナ221は、APIサーバ310の機能を利用して、ユーザアプリPod210の死活監視を行う。
【0099】
監視用コンテナ221は、例えば、定期的にAPIサーバ310が管理対象としているPodの情報をAPIサーバ310から取得する。監視用コンテナ221は、ユーザアプリPod210が生成されたことを検知すると、そのユーザアプリPod210に関するPod情報リソース41をAPIサーバ310から取得する。Pod情報リソース41には、例えばユーザアプリPod210のIPアドレス、ユーザアプリPod210のネットワークネームスペース用のinode番号、ユーザアプリPod210内のコンテナのPIDが含まれる。
【0100】
また監視用コンテナ221は、例えばOS201を介して、ユーザアプリPod210内のプロセスの死活監視を行う。OS201は、ノード200内で生成されたプロセスの管理ファイルを有している。そこで監視用コンテナ221は、例えばプロセスの管理用のファイル(/proc/[PID])の生成または削除を検知することで、プロセスの死活監視を行うことができる。監視用コンテナ221は、プロセスが生成された場合には、そのプロセスの管理ファイルから、プロセス情報51を取得する。プロセス情報51には、例えばPID、ネットワークネームスペースを示す情報(ネットワークネームスペースのinode番号)などが含まれる。
【0101】
監視用コンテナ221は、プロセス情報51に示されるネットワークネームスペースのinode番号に基づいて、該当プロセスを有するユーザアプリPod210を特定する。そして監視用コンテナ221は、特定したユーザアプリPod210のPod情報リソース41に、生成されたプロセスのPIDを登録する。
【0102】
次に、Pod死活監視処理におけるPod生成時の処理について詳細に説明する。監視用コンテナ221内の内部アプリ情報取得部221aは、ユーザアプリPod210が作成されたことを検知すると、ユーザアプリPod210内で共通となるネットワークネームスペースの特定処理を行う。なおユーザアプリPod210から得られる詳細情報にはユーザアプリPod210内のネットワークネームスペースを直接的に特定する情報は含まれていない。そのため内部アプリ情報取得部221aは、ユーザアプリPod210内のコンテナのIDからコンテナ情報を辿り、そのコンテナのプロセスを特定する。そして内部アプリ情報取得部221aは、特定したプロセスの情報から、ユーザアプリPod210のネットワークネームスペースを特定する情報(inode番号)を取得する。
【0103】
例えばコンテナエンジン202がDocker(登録商標)であれば、内部アプリ情報取得部221aは、コンテナIDからコンテナ詳細情報を取ることで、コンテナのPIDを取得することができる。コンテナ詳細情報の取得には、docker inspectコマンドを利用することができる。
【0104】
図11は、コンテナ詳細情報の一例を示す図である。コンテナ詳細情報52には、例えばコンテナのIDに加え、そのコンテナ内のプロセスのPIDが含まれている。図11の例では、コンテナ詳細情報52内にPID「375」が示されている。
【0105】
ユーザアプリPod210内ではネットワークネームスペースが共有される。そのため、ユーザアプリPod210内のコンテナのPIDが分かればユーザアプリPod210内で共通のネットワークネームスペースへとアクセスすることができる。そこで内部アプリ情報取得部221aは、コンテナ詳細情報52に示されるPIDに対応するプロセスが使用しているネットワークネームスペースにアクセスする。そして内部アプリ情報取得部221aは、そのネットワークネームスペースを共有するプロセスの検出用に、ファイル「/proc/[PID]/ns/net」のinode番号を、例えばOS201から取得する。
【0106】
内部アプリ情報取得部221aは、生成されたユーザアプリPod210に関する情報を、Pod情報リソースとして保存する。内部アプリ情報取得部221aは、他のユーザアプリPodが生成された場合にも、同様にPodリソースを生成し、保存する。その結果、Pod情報リソース群が生成される。なおPodリソース群は、第1の実施の形態における管理情報7の一例である。
【0107】
図12は、Pod情報リソース群の一例を示す図である。Pod情報リソース群40には、複数のPod情報リソース41,42,43,・・・が含まれる。例えばPod情報リソース41には、Pod名「test-pod-1hsyab」、IPアドレス「192.16.18.22」、inode番号「4026531968」、ユーザアプリPod210内のプロセスのPID「15424」が含まれている。Pod情報リソース41に示されるinode番号は、ネットワークネームスペースに関する情報を示すファイルのinode番号である。
【0108】
なおPod情報リソース41に含まれているPIDは、ユーザアプリPod210内の1つのコンテナのPIDであり、ユーザアプリPod210内で動作しているアプリケーション211a,212aのPIDとは必ずしも一致しない。例えばコンテナ211を動かしてから内部でアプリケーション211aを起動した場合には、アプリケーション211a実行用にコンテナ211とは別のプロセスが生成される。アプリケーション211aからクエリが送信される場合、そのクエリの送信元のPIDはアプリケーション211aを実行するプロセスのPIDである。そのため、図12に示す情報だけでは送信元アプリまで対応付けることはできない。
【0109】
図13は、Pod生成時の処理の手順の一例を示すフローチャートである。以下、図13に示す処理をステップ番号に沿って説明する。
[ステップS101]内部アプリ情報取得部221aは、ユーザアプリPodが生成されたことを検知する。例えば内部アプリ情報取得部221aは、APIサーバ310から管理対象となるユーザアプリPodの情報を取得し、未知のユーザアプリPodがある場合、そのユーザアプリPodが生成されたと検知する。
【0110】
[ステップS102]内部アプリ情報取得部221aは、生成されたユーザアプリPodのコンテナIDに基づいて、そのコンテナのPIDを取得する。
[ステップS103]内部アプリ情報取得部221aは、取得したPIDに対応するファイル「/proc/[PID]」の情報に基づいて、ネットワークネームスペースのinode番号を取得する。
【0111】
[ステップS104]内部アプリ情報取得部221aは、Pod名、IPアドレス、ネットワークネームスペースのinode番号を含むPod情報リソースを、メモリまたはストレージ装置に保存する。
【0112】
このようなPod死活監視により、例えばユーザアプリPod210が生成されると、そのユーザアプリPod210に対応するPod情報リソース41が生成され、内部アプリ情報取得部221aで管理される。
【0113】
次にプロセス死活監視処理について詳細に説明する。内部アプリ情報取得部221aは、例えば定期的に「/proc」フォルダをチェックすることでプロセスの死活監視を行う。内部アプリ情報取得部221aは、「/proc」フォルダ内に新しい「/proc/[PID]」ファイルが生成された場合、それを検知する。そして内部アプリ情報取得部221aは、そのPIDの「/proc/[PID]/ns」フォルダを調べることにより、ネットワークネームスペース用のinode番号を取得する。
【0114】
例えば「/proc/[PID]/ns」フォルダ内にはシンボリックリンクとして見える複数のファイルが配置されている。それらのファイルのうち「/proc/[PID]/ns/net」は[PID]に対応するプロセスのネットワークネームスペースの操作用ファイルである。内部アプリ情報取得部221aは、このネットワークネームスペースの操作用ファイルのシンボリックリンク先をreadlinkまたは「ls -l」コマンドで参照する。これにより、そのプロセスが使用するネットワークネームスペースのinode番号を取得することができる。
【0115】
例えば内部アプリ情報取得部221aは、PIDが「1」のとき、スーパーユーザ権限で「readlink /proc/1/ns/net」コマンドの実行をOS201に指示する。するとOS201からは、例えば「net:[4026531968]」という情報が応答される。応答された情報内の数字列が、ネットワークネームスペースのinode番号である。また内部アプリ情報取得部221aは、PIDが「1」のとき、スーパーユーザ権限で「ls -la /proc/1/ns/net」コマンドの実行をOS201に指示する。するとOS201からは、例えば「lrwxrwxrwx 1 root root 0 1月 17 11:09 /proc/1/ns/net -> ’net:[4026531968]’」という情報が応答される。応答された情報内の最後の数字列が、ネットワークネームスペースのinode番号である。
【0116】
内部アプリ情報取得部221aは、ネットワークネームスペースのinode番号を取得すると、対応するPod情報リソースを検索する。例えば内部アプリ情報取得部221aは、取得したinode番号を検索キーとして、Pod情報リソース群40内のPod情報リソース41,42,43,・・・を検索する。内部アプリ情報取得部221aは、検索でヒットしたPod情報リソースに対応するユーザアプリPodが、生成されたプロセスを含むユーザアプリPodであると判断する。内部アプリ情報取得部221aは、生成されたプロセスを含むユーザアプリPodを特定したら、対応するPod情報リソース内に、生成されたプロセスのPIDを追記する。
【0117】
図14は、生成されたプロセスのPIDが追記されたPod情報リソースの一例を示す図である。Pod情報リソース41には、生成されたプロセスのPIDとして「15756」などのPIDが追記されている。このように生成されたプロセスのPIDをPod情報リソース41,42,43,・・・に追記することで、ユーザアプリPodと、そのユーザアプリPodの中で動作する複数のプロセスのPID(PID一覧)とが関連付けられる。
【0118】
図15は、プロセス生成時の処理の手順の一例を示すフローチャートである。以下、図15に示す処理をステップ番号に沿って説明する。
[ステップS111]内部アプリ情報取得部221aは、「/proc」フォルダ内に新たな「/Pod/[PID]」ファイルが生成されたことを検知する。内部アプリ情報取得部221aは、生成されたファイルの[PID]の部分の文字列を、生成されたプロセスのPIDとして認識する。
【0119】
[ステップS112]内部アプリ情報取得部221aは、「/Pod/[PID]」ファイルの情報に基づいて、生成されたプロセスが使用するネットワークネームスペースのinode番号を取得する。
【0120】
[ステップS113]内部アプリ情報取得部221aは、生成されたプロセスとネットワークネームスペースが同じユーザアプリPodのPod情報リソースを、Pod情報リソース群40から検索する。例えば内部アプリ情報取得部221aは、Pod情報リソース群40から、ステップS112で取得したinode番号を含むPod情報リソースを検索する。
【0121】
[ステップS114]内部アプリ情報取得部221aは、ステップS113の検索でヒットしたPod情報リソースに、生成されたプロセスのPIDを追記する。
このようにして、プロセスが生成されるごとに、そのプロセスのPIDが、そのプロセスを含むユーザアプリPodのPod情報リソースに追記される。
【0122】
プロセスの死活監視では、プロセスの消滅も検知することができる。プロセスが消滅した場合、対応するPod情報リソースから、消滅したプロセスのPIDの表記を削除するのが望ましい。しかし、「/proc」フォルダから1つの「/Pod/[PID]」ファイルが消えたとき、そのファイルが消えた後に、そのファイルに対応するプロセスがどのネットワークネームスペースを使っていたかを後追いするのは困難である。例えば内部アプリ情報取得部221aは、プロセスの消滅を検知したとき、すべてのPod情報リソース41,42,43,・・・を調べて、対応する「/Pod/[PID]」ファイルが存在しないPIDを見つけ出すこととなる。このような処理は、ユーザアプリPodの数が増えるほどオーバーヘッドが増大する。場合によっては、PIDを削除するために、システム全体のパフォーマンスに影響が出る可能性もある。ただしPIDの削除処理は重要度が高くないため、システムのパフォーマンスを犠牲にしてまで実行することは推奨されない。そこで内部アプリ情報取得部221aは、プロセスの消滅に対応するため、以下の2通りの処理のいずれかを行うことができる。
【0123】
第1の処理は、消滅したプロセスのPIDを迅速に削除するものである。例えば内部アプリ情報取得部221aは、PIDとネットワークネームスペースの対応をキャッシュとして、メモリまたはストレージ装置に保存しておく。これによりPIDに基づいて、そのPIDが記載されたPod情報リソースに迅速にアクセス可能となる。その結果、消滅したプロセスのPIDの検出も効率的に行うことができ、システムのパフォーマンスの低下を抑止する。
【0124】
第2の処理は、プロセス消滅時には何も行わず、クエリの送信元アプリ特定時に、存在しないPIDを検出したときに、そのPIDをPod情報リソースから削除するものである。例えば消滅したプロセスと同じPIDの別プロセスが生成され、生成されたプロセスと同じPIDが存在するときがある。この場合、内部アプリ情報取得部221aは、クエリの送信元に対応するプロセスのPIDとは異なるネットワークネームスペースのPod情報リソースに同じPIDが登録されていることを検出し、消滅したプロセスのPIDの存在を認識する。内部アプリ情報取得部221aは、消滅したプロセスのPIDの存在を認識したら、そのPIDを削除する。
【0125】
より理想に近い挙動は第1の処理である。しかし第2の処理を採用しても、悪い影響は少ない。なぜなら、既に存在しないPIDからクエリが出力されることはなく、クエリの送信元を探索するときは既にPod内にないPIDが残存していても、該当するプロセスではないとして検出されないだけで終わるからである。それでも検索対象のPIDの数が増大しすぎると処理速度の低下の原因になりかねない。そのためプロセスの消滅を見つけ次第Pod情報リソースから該当プロセスのPIDを削除するのが好ましい。
【0126】
次にクエリが出力された場合の処理について詳細に説明する。
図16は、DBへのアクセスの際の情報の流れを示す図である。例えばコンテナ212内のアプリケーション212aから、アプリケーションからのアクセスが許可されているテーブル内のデータを参照するクエリが出力されているものとする。出力されたクエリは、プロキシコンテナ121内のプロキシ部121aに送信される。プロキシ部121aは、アプリ情報取得部121bへクエリの送信元のIPアドレスとポート番号とを送信する。またプロキシ部121aは、接続先テーブル取得部121dにクエリを送信する。
【0127】
アプリ情報取得部121bは、監視用コンテナ221に、クエリの送信元のIPアドレスとポート番号との組を送信する。監視用コンテナ221内の内部アプリ情報取得部221aは、Pod情報リソース群40内のPod情報リソース41,42,43,・・・から、取得したIPアドレスを含むPod情報リソースを特定する。内部アプリ情報取得部221aは、特定したPod情報リソースに示されているネットワークネームスペースのinode番号と、そのネットワークネームスペース内で動作するプロセスのPID一覧を取得する。次に内部アプリ情報取得部221aは、inode番号で示されるネットワークネームスペース内にアクセスし、送信元のポート番号に対応するinode番号(送信元アプリのinode番号)を取得する。
【0128】
さらに内部アプリ情報取得部221aは、PID一覧に示されるPIDについて「/proc/[PID]/fd」フォルダ内から、送信元アプリのinode番号に対応するファイルディスクリプタを検索する。一致したフォルダのPIDが、送信元アプリのPIDである。このとき検索するPIDは対象となるPod情報リソース内のPIDのみを用いればよい。そのため、ノード200内のすべてのプロセスのPIDを検索対象とする場合に比べ、実行時間を削減することができる。
【0129】
送信元アプリのPIDが特定できると、内部アプリ情報取得部221aは、送信元アプリのPIDに基づいて、「/proc/[PID]/exe」などの情報からアプリ名やパスを取得する。そして内部アプリ情報取得部221aは、送信元アプリのファイルパス(パス+アプリ名)をノード100のアプリ情報取得部121bに送信する。
【0130】
アプリ情報取得部121bは、取得したファイルパスを許否判断部121eに送信する。許可情報取得部121cは、カスタムリソース320に許可情報の問合せを送信する。カスタムリソース320は、許可情報取得部121cに許可情報を送信する。許可情報取得部121cは、取得した許可情報を許否判断部121eに送信する。
【0131】
接続先テーブル取得部121dは、プロキシ部121aから送られたクエリのExplainコマンドをDBコンテナ122に送信する。DBコンテナ122は、クエリの接続先テーブル名を含むExplain結果を接続先テーブル取得部121dに送信する。接続先テーブル取得部121dは、接続先テーブルを示す情報を許否判断部121eに送信する。
【0132】
許否判断部121eは、ファイルパス、許可情報、接続先テーブル名に基づいて、クエリによるアクセスの許否を判断し、判断結果(許可または不許可)をプロキシ部121aに送信する。プロキシ部121aは、クエリをDBコンテナ122に送信する。DBコンテナ122は、RDBMSによりクエリに応じたDB110へのアクセスを行い、アクセス結果をプロキシ部121aに送信する。プロキシ部121aは、アクセスが許可と判断された場合、取得したアクセス結果をアプリケーション212aに送信する。
【0133】
図16に示すようなアクセス制御機能によれば、プロキシコンテナ121によってDB110へのクエリが途中でキャッチされ、送信元のアプリケーションの通信の内容(クエリ)に基づいて、送信元のアプリケーションと接続先テーブルとが特定される。そして、特定されたアプリケーションから接続先テーブルへのアクセスを許可する許可情報が設定されていれば、クエリに基づくDB110へのアクセス結果が、クエリの送信元のアプリケーションに送信される。
【0134】
図17は、アプリケーションのファイルパスの取得手順の一例を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。
[ステップS201]プロキシコンテナ121では、アプリ情報取得部121bがプロキシ部121aから、クエリの送信元のIPアドレスとポート番号を受信する。
【0135】
[ステップS202]アプリ情報取得部121bは、監視用コンテナ221に送信元のIPアドレスとポート番号との組を送信する。
[ステップS203]監視用コンテナ221では、内部アプリ情報取得部221aが送信元のIPアドレスで、Pod情報リソース群40内のPod情報リソースを検索する。内部アプリ情報取得部221aは、送信元のIPアドレスを含むPod情報リソースを、送信元のアプリケーションを含むユーザアプリPodのPod情報リソースであると特定する。
【0136】
[ステップS204]内部アプリ情報取得部221aは、特定したPod情報リソースに基づいて、送信元のポート番号とinode番号との対応関係を取得する。例えば内部アプリ情報取得部221aは、特定したPod情報リソースに示されるネットワークネームスペースのinode番号に基づいてネットワークネームスペースを特定し、そのネットワークネームスペースにアクセスする。そして内部アプリ情報取得部221aは、ネットワークネームスペースから、送信元のポート番号に対応するアプリケーションのみが使用するファイルのinode番号を取得する。
【0137】
[ステップS205]内部アプリ情報取得部221aは、送信元ポート番号に対応するinode番号に基づいて、送信元のアプリケーションのPIDを特定する。例えば内部アプリ情報取得部221aは、ステップS203で特定したPod情報リソース内のPID一覧に含まれるPIDそれぞれに対応するプロセスが使用するファイルのファイルディスクリプタを参照する。そして内部アプリ情報取得部221aは、ステップS204で取得したinode番号と一致するファイルディスクリプタを検出する。内部アプリ情報取得部221aは、検出したファイルディスクリプタを使用しているプロセスのPIDを、送信元のアプリケーションのPIDとして特定する。
【0138】
[ステップS206]内部アプリ情報取得部221aは、特定したPIDに対応するアプリケーションのファイルパスを取得する。例えば内部アプリ情報取得部221aは、ファイル「/proc/[PID]/exe」([PID]はステップS205で特定したPID)にアクセスし、ファイル内の情報を取得する。このファイルは、PIDに対応する実行ファイルへのシンボリックリンクであり、該当ファイルのファイルパスが含まれている。
【0139】
[ステップS207]内部アプリ情報取得部221aは、取得したファイルパスをプロキシコンテナ121に送信する。
このようにして、プロキシコンテナ121においてポート番号に対応するアプリケーションのファイルパスを取得することができる。これにより、アプリケーションからクエリが送信されるごとにポート番号が異なっていても、プロキシコンテナ121においてクエリの送信元のアプリケーションを正しく認識できる。
【0140】
テーブルへのアプリケーションごとのアクセス制御を行うため、プロキシコンテナ121は、クエリの送信元のアプリケーションの把握に加え、アクセスのために接続する接続先テーブル名の取得を行う。
【0141】
なお、メッセージ内のクエリから正確な情報を取り出すためには、パーサを用いてクエリを解析することとなる。しかし、クエリにはDBごとに様々な方言があり、これらすべてのDBに応じたパーサをプロキシコンテナ121に実装するのは困難であり、拡張性を妨げる可能性もある。
【0142】
そこでプロキシコンテナ121は、クエリに対するExplainコマンドという比較的解析が簡単な情報を用いてアクセス先のテーブルを取得する。クエリに対するExplain構文は基本的に後付けが容易なため、クエリを解析せずにすむ。また、Explain結果はyamlやJSON(JavaScript(登録商標) Object Notation)などの半構造データで返すことが可能なRDBMSが多く、Explainコマンドを用いれば容易に接続先テーブル名を抽出できる。
【0143】
図18は、接続先テーブル名の取得方法の一例を示す図である。アプリケーション212aからクエリ61がプロキシコンテナ121に送信されると、プロキシコンテナ121内の接続先テーブル取得部121dは、クエリ61の内容を含むExplainコマンド62を生成する。Explainコマンド62は、命令文「Explain」に続けて、クエリ61の内容を記載したものである。接続先テーブル取得部121dは、生成したExplainコマンド62をDBコンテナ122に送信する。
【0144】
DBコンテナ122は、Explainコマンド62を受信すると、Explainコマンド62内に示されるクエリ61の実行計画を生成する。そしてDBコンテナ122は、実行計画をExplain結果63としてプロキシコンテナ121に送信する。
【0145】
図18に示されているのはPostgreSQLでのExplain結果63である。このExplain結果63には、接続先テーブルの名称「”Relation Name”:”t”,」が含まれている。プロキシコンテナ121は、Explain結果63から、接続先テーブルの名称の記述を、接続先テーブル名として抽出する。
【0146】
このようにプロキシコンテナ121は、Explainのコマンド文字列に、クエリ61の内容を追加するだけでExplainコマンド62を生成できる。すなわちクエリそのものを解析する場合は文字列を解釈しなければならないが、Explainコマンド62でJSON形式の実行計画をExplain結果63として取得できる。JSON形式の実行計画は、既存のJSONライブラリにより解析できる。そこでプロキシコンテナ121は、JSONライブラリを用いて、Explain結果63における「Plan」内の「Relation Name」の値を読み込む。読み込んだ値が、接続先テーブルの名称である。このようにExplainコマンド62を用いることで、接続先テーブルを容易に判断できる。
【0147】
Explainコマンド62による実行計画の出力機能は多くのDBに実装されており、NoSQLであるMongoDBや、グラフDBのNeo4jなども例外ではない。すなわち、Explainコマンド62を用いた接続先テーブルの判定はRDBMSに限らず、その他の様々なDBでも同様に可能である。
【0148】
接続先テーブルに対してアクセスを許可するアプリケーションの種別を示す許可情報は、Pod作成者30によってカスタムリソース320に予め定義される。プロキシコンテナ121は、カスタムリソース320から許可情報を取得することで、接続先テーブルへのアクセスが許可されているアプリケーションを認識できる。
【0149】
図19は、カスタムリソースから取得する許可情報の一例を示す図である。例えばプロキシコンテナ121は、カスタムリソース320から、すべてのデータテーブルについての許可情報71,72,・・・を取得する。許可情報71,72,・・・は、アクセス制限をかけるRDB1つに対して1つ作成される。許可情報71,72,・・・には、RDBのサービス名、RDBのポート番号、許可するアプリケーションのファイルパス、許可するテーブル名などが含まれる。
【0150】
プロキシコンテナ121は、クエリ61の送信元のアプリケーションのファイルパスと接続先テーブルの名前との組を、許可情報71,72,・・・と照合することで、アクセスの許否を判断する。
【0151】
なお、監視用コンテナ221との通信や、テーブル取得のためのExplainコマンド62の実行は、DB110へのアクセス処理において無視できないオーバーヘッドとなる可能性がある。そこでプロキシコンテナ121は通信の投機的実行を行う。
【0152】
図20は、投機的なDBアクセス処理の一例を示すシーケンス図である。プロキシコンテナ121は、DB110へのクエリを受信すると、アプリケーションのファイルパスの取得処理、接続先テーブル名の取得処理、許可情報の取得処理、およびDB110に対するクエリの実行処理を並列に行う。
【0153】
アプリケーションのファイルパスの取得処理は、2つのステップS11~S12に分かれている。まずプロキシコンテナ121は、監視用コンテナ221にクエリの送信元のIPアドレスとポート番号との組に対応するアプリケーションを問い合わせる(ステップS11)。監視用コンテナ221は、アプリケーションのフィルパスをプロキシコンテナ121に送信する(ステップS12)。以上が、アプリケーションのファイルパスの取得処理である。
【0154】
接続先テーブル名の取得処理は、2つのステップS21~S22に分かれている。まずプロキシコンテナ121は、DBコンテナ122に、クエリの内容を含むExplainコマンドを送信する(ステップS21)。DBコンテナ122は、Explainコマンドに応じて、クエリの実行計画(接続先テーブル名を含む)を示すExplain結果をプロキシコンテナ121に送信する(ステップS22)。以上が、接続先テーブル名の取得処理である。
【0155】
許可情報の取得処理は、2つのステップS31~S32に分かれている。まずプロキシコンテナ121は、カスタムリソース320に許可情報を要求する(ステップS31)。カスタムリソース320は、DB110内のすべてのデータテーブルに関する許可情報群をプロキシコンテナ121に送信する(ステップS32)。以上が、許可情報の取得処理である。
【0156】
クエリの実行処理は、2つのステップS41~S42に分かれている。まずプロキシコンテナ121は、DBコンテナ122に対してクエリを送信することで、クエリの実行を要求する(ステップS41)。DBコンテナ122は、クエリのアクセス先のデータテーブルへの接続を行い、該当データテーブルに対してクエリに応じた処理を実行し、実行結果をプロキシコンテナ121に送信する(ステップS42)。クエリがデータの参照を要求していれば、実行結果にはクエリに応じたデータが含まれる。クエリがDB110内でのデータの操作(更新、削除など)を要求していれば、操作処理の成否を示す情報が実行結果に含まれる。以上が、クエリの実行処理である。
【0157】
プロキシコンテナ121は、アプリケーションのファイルパスの取得処理、接続先テーブル名の取得処理、および許可情報の取得処理が完了すると、アクセスの許否を判断する。プロキシコンテナ121は、アクセスの許否の判断の前にクエリの実行結果を受信した場合、アクセスの許否が判断できるようになるまでアプリケーションへの応答を待機する。そしてプロキシコンテナ121は、クエリに基づく接続先テーブルへのアクセスが許可されたアクセスであると判断できた場合、クエリの実行結果を、クエリの送信元のアプリケーションに送信する(ステップS51)。またプロキシコンテナ121は、クエリに基づく接続先テーブルへのアクセスが許可されていないアクセスであると判断した場合、権限エラーを示すメッセージを、クエリの送信元のアプリケーションに送信する(ステップS52)。
【0158】
図20に示した例は、クエリが短時間で実行できた場合を想定したものである。クエリの実行に長時間を要する場合、クエリの実行が終了するよりも先にアクセスの許否の判断結果が得られる場合がある。この場合において、アクセスが不許可であれば、クエリの実行を中止することで、無駄な処理の発生を最小限に抑えることができる。
【0159】
図21は、クエリの実行に時間がかかる場合の投機的なDBアクセス処理の一例を示すシーケンス図である。アプリケーションのファイルパスの取得処理、接続先テーブル名の取得処理、許可情報の取得処理、およびDB110に対するクエリの実行処理を並列に行う点は、図20と同様である。またアプリケーションのファイルパスの取得処理、接続先テーブル名の取得処理、および許可情報の取得処理の内容も図20と同様である。クエリの実行処理については、クエリの実行の要求(ステップS41)までは、図20と同様である。
【0160】
プロキシコンテナ121は、クエリの実行が終了するよりも先に許可されたアクセスであると判断した場合、DBコンテナ122からの実行結果の受信を待つ。その後、DBコンテナ122は、クエリの実行が終了すると実行結果をプロキシコンテナ121に送信する(ステップS43)。そしてプロキシコンテナ121は、クエリの実行結果を、クエリの送信元のアプリケーションに送信する(ステップS53)。
【0161】
他方、プロキシコンテナ121は、クエリの実行が終了するよりも先に不許可のアクセスであると判断した場合、クエリの実行終了を待たずに、DBコンテナ122に対してクエリの実行のキャンセルを示すメッセージを送信する(ステップS44)。そしてプロキシコンテナ121は、権限エラーを示すメッセージを、クエリの送信元のアプリケーションに送信する(ステップS54)。
【0162】
このような処理を行うことにより、本来の通信処理に加わるオーバーヘッドを最小限にしつつ、アプリケーションごとのアクセス制御を実現することが可能となる。
以上のように、第2の実施の形態のシステムでは、コンテナ内のアプリケーションに紐づいたテーブル単位のアクセス制御に関して、コンポーネントを最適化したうえでそのオーバーヘッドを削減し、より良いパフォーマンスを引き出すことができる。例えば、1600程度のプロセスが動作するノードでは、全走査には0.2~0.25秒ほどの時間がかかる。しかし、この検索をユーザアプリPod内の数プロセスのみに限定することができれば、例えば10プロセスほどが動いているユーザアプリPodであれば0.0015秒程度に収まる。このように、オーバーヘッドを大きく減らすことができる。
【0163】
〔その他の実施の形態〕
第2の実施の形態では、クエリを受信するごとに、許可情報の取得処理を行っているが、許可情報を一度取得したら、許可情報をキャッシュとして保持しておいてもよい。これにより、以降の同じアプリケーションからの同じテーブルへのクエリの受信時には、カスタムリソース320からの許可情報の取得処理を省略することができる。
【0164】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。
【符号の説明】
【0165】
1,2 情報処理装置
1a 記憶部
2a データベース
1b,2b 処理部
3a,3b データテーブル
4 許可情報
5,6 Pod
5a,6a,6b,・・・ コンテナ
7 管理情報
8a,8b ソフトウェア
9a,9b アクセス要求
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21