Web サーバの高集積マルチテナントアーキテクチャと運用技術 *
松本 亮介
†a)栗林健太郎
††岡部 寿男
†††Highly Integrated Multi-Tenant Architecture of Web Servers and Operation Technology
∗Ryosuke MATSUMOTO
†a), Kentaro KURIBAYASHI
††, and Yasuo OKABE
†††あらまし Webサービスのハードウェアコストや運用管理コストを低減するために採用される高集積マルチテ ナントアーキテクチャは,複数のユーザを同居させる特性上,ユーザ単位でセキュリティを担保するために,適 切な権限分離を行う必要がある.そして,ホストに配置されるWebコンテンツを事業者が管理できないことを 前提に,コンテンツに依存することなく基盤技術でセキュリティと性能を両立させるアーキテクチャが必要であ る.これまでに,実用上十分なセキュリティを担保しつつハードウェアの性能とリソース効率を最大化するため の手法が数多く提案されてきた.また,マルチテナントアーキテクチャでは,ホスト間で権限分離だけでなく適 切なリソース分離が行われる必要がある.リソース分離が不十分な場合,収容するホスト数が増えるにつれ,管 理者により高負荷の原因となっているホストを特定し対処する作業の必要が生じ,運用管理コストが逆に増大し てしまう.そのような運用上の問題の生じないリソース分離が可能なマルチテナントアーキテクチャの必要性も 高まっている.更に,高集積マルチテナントアーキテクチャ採用時に,セキュリティを担保し,リソース分離を 適切に行いながら,付随して生じる運用・保守に関するコストを低減させるためには,いかに運用技術を改善し ていくかが重要である.本論文では,Webサーバの高集積マルチテナントアーキテクチャにおいて,Webコン テンツをサービス事業者が管理できないことを前提に,高い性能とリソース効率を維持しつつハードウェアや運 用管理コストを低減させるためのアーキテクチャについて,これまでの研究を概観するとともに,著者らによる 最新の研究成果について紹介する.
キーワード Webサーバ,運用技術,マルチテナント,セキュリティ,リソース管理
1.
ま え が きWeb
サービスの普及とスマートフォンのように手軽 にWeb
サービスを利用できる個人端末の爆発的普及 により,安定したWeb
サービスを構築するための基 盤技術とシステム運用技術が注目されている[1]
.Web
サーバ上に複数のホストを高集積に同居させることを 目的とした高集積マルチテナントアーキテクチャ[2]
†GMOペパボ株式会社ペパボ研究所,福岡市
Pepabo Research and Development Institute, GMO Pepabo, Inc., Tenjin, Chuo-ku, Fukuoka-shi, 810–0001 Japan
††GMOペパボ株式会社ペパボ研究所,東京都
Pepabo Research and Development Institute, GMO Pepabo, Inc., Shibuya-ku, Tokyo, 150–8512 Japan
†††京都大学学術情報メディアセンター,京都市
Academic Center for Computing and Media Studies, Kyoto University, Kyoto-shi, 606–8501 Japan
a) E-mail: [email protected]
*本論文は,システム開発・ソフトウェア開発論文である.
DOI:10.14923/transcomj.2017IAI0002
は,大幅にハードウェアコストを低減するだけでなく,
負荷分散や可用性を担保できる構成をとることで運用 コストも低減できる.特に,マルチテナントアーキテ クチャを採用した代表的な
Web
サービスであるWeb
ホスティングサービスは,高集積化とそれによる低価 格化が進んでいる.Web
ホスティングサービスは,各 ユーザ領域に利用者が任意のWeb
コンテンツを置く ことを許すため,管理者はWeb
コンテンツに依存し ないOS
やミドルウェアといった基盤技術のみで,マ ルチテナント環境におけるセキュリティや安定性を担 保しなければならない[3]
.高集積マルチテナントアーキテクチャを採用するこ とで,サーバプロセスの設定を収容ホスト数の増加 に伴って変更することなく高集積に収容できる.その ため,同一設定のまま新しいサーバを増やすといった ようなスケールアウト型の負荷分散
[4]
も可能となり ハードウェアのコストを効率良く利用できる.しかし,そのようなシステムの信頼性を高め,安定的にサービ スを提供するためには,セキュリティ,リソース分離,
及び,運用技術の改善が重要である.
Web
サーバにおける高集積マルチテナントアーキ テクチャのアプローチは,1
台のサーバに数万以上の ホストの収容を目指しながらも,収容するホスト数に 依存して,リソース使用量や設定変更に伴う再起動が 極端に増加しないようにすることである.また,Web
ホスティングサービスの場合,サービス利用者が各ホ ストに自由にWeb
コンテンツを配置できる.そのた め,ホストに対するアクセスは事前に予測できず,特 定のホストにアクセス集中し,サーバが高負荷状態に なることもある.このような課題を解決するためには,HTTP
リクエストのあったホスト名に従って,ホスト ごとにサーバプロセス群を待機させるのではなく,単 一のサーバプロセス群を事前に待機させて,複数のホ ストに対するリクエストを処理する必要がある.ただ し,実際にサーバプロセスの処理を行うプロセスは,ホスト数には依存しないものの,
Web
サーバの実装に よっては常に数十から数百プロセスが待機している.この構成により,収容ホスト数が増加してもホスト数 に依存して待機しておくプロセス群を増やす必要がな く,リソース効率が良い.
CGI [5]
のように,リクエ スト単位でプロセスを複製するような処理であっても,待機プロセスの数以上に増加することはないため,リ ソース使用量は待機プロセス数に依存し,極端に増加 しない.また,複数のホストを単一のサーバプロセス 群で処理するため,同一の設定のまま
Web
サーバを 複数台に増やすことも可能となり,スケールアウト型 の負荷分散も可能となる.そのため,ホストのセキュリティをプロセスの機能 を利用して
HTTP
リクエスト単位で担保しながら,性能を最大化する必要がある.同様に,複数のホスト のリソースが共有されるため,いかにホスト間で生じ るリソース競合を低減させるかも課題である.また,
セキュリティやリソース管理について,いかに人の手 を介さずに
Web
サーバの機能として実現し運用コス トを減らせるかが,高集積マルチテナントアーキテク チャを採用したシステムの運用・保守にかかるコスト を低減させるために重要である.本論文では,大規模
Web
ホスティング基盤を実現 するにあたり,Apache
のVirtualHost [6]
のような汎 用性のある高集積マルチテナントアーキテクチャを採 用することで生じる,セキュリティや性能上,運用上の課題及びリソース分離についての関連研究を,
Web
サーバのアーキテクチャに基づいて[7]
体系的にまと める.本論文は,第一著者(松本)の学位論文[8]
を もとにして書いている.以下,
2.
ではWeb
サーバのアーキテクチャやWeb
ホスティングシステムの構成について整理し,3.
では マルチテナントアーキテクチャのリソース分離,4.
で は仮想ホスト方式における権限分離,5.
では高集積マ ルチテナントアーキテクチャに伴う運用技術の課題と これまでの研究についてそれぞれ整理する.6.
で関連 研究の総括をする.2. Web
サーバとWeb
ホスティングシス テム2. 1 Web
ホスティングシステムWeb
ホスティングサービスとは,複数のホストで サーバのリソースを共有し,それぞれの管理者のドメ インに対してHTTP
サーバ機能を提供するサービス である.Web
ホスティングサービス[1]
において,ドメイン名
(FQDN)
によって識別され,対応するコンテンツを配信する機能をホストと呼ぶ.
サービス提供側が
Web
ホスティングシステムを構 築する手法は,主に以下の4
種類に分類される.(
1
)Xen
やVMware
等の仮想マシンでホストを 分ける手法[9], [10]
(
2
)FreeBSD jail
やLXC
,OpenVZ
等のコンテ ナ型仮想化のようにファイルシステムや名前空間を操 作するシステムコールによってOS
上に複数の仮想的 な隔離環境を用意しホストを分ける手法[11], [12]
(
3
)IP
アドレスやポート単位でWeb
コンテンツ が配置された複数のホストを分離し各ホストに個別の プロセスを用意して起動させる手法(
4
) 単一のサーバプロセス群で複数のホストを仮 想ホスト方式により扱う手法サーバの運用面やセキュリティを重視した場合は,
手法
(1) (2) (3)
等の,管理者それぞれに対して,個別 のサーバプロセスや仮想マシンを割り当てる構成がと られてきた.例えば,OS
のシステム領域に近い環境 を,特定のディレクトリ配下に作り,IP
アドレスを1
台のサーバに複数設定した上で,リクエストを受けたIP
アドレスに応じてそのディレクトリ内へchroot()
システムコールによりルートディレクトリを移動する.更に,
unshare()
システムコールによって,プロセスID
やネットワーク名前空間を隔離し,そのようなコ図1 chroot()システムコール等を活用したホスト分離 Fig. 1 Privilege separation each hosts using chroot().
ンテナ型の仮想環境を複数用意し,それぞれで個別の
IP
アドレスで通信できるWeb
サーバプロセスを起動 する.図1
で,運用面とセキュリティを重視した場合 に,(2)
の手法をApache
で構築した場合の概要図を 示す.chroot
環境内部において,Web
サーバプロセスはchroot()
システムコールの実行権限をもたない一般 ユーザとして起動し,OS
のシステム領域に到達する ことはできないため,セキュリティ面で堅牢である.また,
chroot
環境はOS
のシステム領域とほぼ同等の ライブラリ群を任意に配置できる.サーバプロセスの 設定を全てホスト専用に設定することができ,運用面 でも可用性が高い.更に,不必要なコマンドやライブ ラリを配置しないことで,セキュリティを高めること もできる.JaveServlet [13]
のように個別のJVM
を複数用意 して,各JVM
のプロセス単位で複数のホストを収容 する方式は(3)
に該当する.同様に,Ruby on Rails
も(3)
の方式であり,Web
サーバ機能と一体となって アプリケーションサーバとして動作するため,複数ホ ストを収容するためにはその数だけアプリケーション サーバプロセスを用意する必要がある.Stein
は,(3)
の手法を利用して複数のサーバプロセスをそれぞれ異 なるユーザ権限で起動する手法を提案している[14]
. しかし,各chroot
環境などにおいて,ホスティング 利用者単位でサーバプロセスを起動させると,複数 のサーバへのスケールアウト[4]
することが困難にな る[2]
.これに対し,
(4)
の手法による単一のサーバプロセス 群で複数のホストを仮想的に処理する構成の場合,仮 想ホスト方式[6]
と呼ばれるマルチテナントアーキテ図2 単一プロセスで複数ホストを扱う構成 Fig. 2 Configuration that handles multiple hosts in
a single process.
クチャを用いることで,スケールアウト型の負荷分散 の課題を解決できる.図
2
でApache
のVirtualHost
で構築した場合の構成を示す.本論文では,仮想ホス ト方式によるマルチテナントアーキテクチャにおいて 数万以上のホストを収容できるものを高集積マルチテ ナントアーキテクチャと呼ぶ.仮想ホスト方式では,アクセスのあったホスト名に 対応したドキュメントルートにアクセスするように
Web
サーバ内部で制御するので,複数のホストに対 して単一のサーバプロセス群が起動していればよい.更に,複数の仮想ホストが設定されたサーバを複数台 用意しておくことにより,いずれかのサーバの
Web
サーバプロセスにアクセスがあれば,共有ストレージ を介して,適切なレスポンスを返すことができる.各 サーバのサーバプロセス数は収容するホストの数に依 存しないため,複数台の物理サーバ上で同一の設定の サーバプロセスを起動しておくことで,共有ストレー ジを用いた効率の良い負荷分散構成も構築できる.Web
サーバにおける動的コンテンツの実行方式に は,Web
サーバプロセスにインタプリタを組み込み,Web
サーバプロセス内部で直接プログラムを実行するDynamic Shared Object (DSO)
実行方式[15]
と,新 たに別のプロセスをfork()
システムコールにより生成 して,そのプロセスでexecve()
システムコールにより プログラムを実行するCommon Gateway Interface (CGI) [5]
実行方式がある.実行方式にかかわらず,権 限分離機能を利用しない場合,動的コンテンツはWeb
サーバプロセスと同様のオーナで実行される.特に,(4)
の仮想ホスト方式を権限分離機能を利用せずに採 用すると,全てのホストのコンテンツが同一のオーナ で実行されるため,セキュリティ上の問題がある.2. 2 Web
サーバのリソース分離手法の分類 単一のサーバで複数のホストを管理する場合,セ キュリティを担保するための権限分離を考慮しながら,複数のホストでサーバのハードウェアリソースを共有 する構成が一般的である.
2. 1
で述べた分類において,手法(1)
の,ホストそ れぞれに対して,個別の仮想マシン[16]
〜[18]
を割り 当てる構成では,仮想マシンレベルでのリソース分離 機構により,特定のホストにアクセスが集中しても他 のホストへの影響が及ばないような設定が可能である.しかし,単一のサーバに複数の仮想マシンを収容する には,ホスト単位でのリソース使用量が多くなり,限 られたリソースで,高集積にホストを収容するには不 向きである.
(2)
や(3)
の方式では,ホスト単位でchroot()
シス テムコールによるファイルシステムの隔離やプロセス リソース管理技術を組み合わせたコンテナ環境[19]
〜[21]
を構築し,その環境ごとにサーバプロセスを起動 させる.ホスト単位のリソース分離に,仮想ホスト方 式では利用できない設定や,プロセス単位でのリソー ス制限や隔離機能を利用することができる.しかし,プロセス数がホスト数に依存し,収容数が搭載メモリ 容量により制約されるため,高集積にはむいていない.
(4)
のように,単一のサーバプロセス群で複数のホ ストを管理するアーキテクチャの場合,サーバプロセ スがホスト数に依存しないため高集積が可能である.しかし,
(4)
の方式では,単一のサーバプロセス群で 複数のホストを処理しているため,特定のホストやリ クエスト処理がリソースを占有した場合に,他のホス トやリクエスト処理が影響を受けやすいという問題が ある.以上より,本論文では,高集積マルチテナントアー キテクチャを実現するための手法を主題としているた め,
(4)
の方式において,リソース分離をどのように 解決するかについて3.
で述べる.2. 3 Apache
のアーキテクチャApache [22]
は,世界で最もシェアの高いWeb
サー バソフトウェアである[23]
.高集積マルチテナントの 運用では,Apache
はリクエストを処理するための子 プロセスをサーバプロセス起動時に複数起動させてお き,1
リクエストに対して一つの子プロセスを専有し てレスポンス生成を行うモデルを基本とする.そのた め,このモデルの場合,Web
サーバに対する同時接続 数の上限は子プロセスの起動数に依存する.図3 Apacheモジュールの仕組み Fig. 3 Apache module specification.
VirtualHost
は,Apache
で仮想ホスト方式による 高集積マルチテナントを実現する際,収容ホスト数に サーバプロセス数が依存しないようにするための機能 である.VirtualHost
は,前節で述べた(4)
の手法に より,単一のサーバプロセス群で複数のホストに対す るリクエストを処理する.そのため,ホストの収容数 を増加させたとしても,子プロセスの数を増やす必要 がないため,コンピュータリソースを効率良く利用す ることができる.VirtualHost
で は ,Apache
の オ ー ナ と は 別 の オーナで動的コンテンツを実行する仕組みであるsuEXEC [24]
を使って権限分離( 4.
で詳述)
を行う場 合,ホスト単位で一意の設定が必要になる.そのた め,VirtualHost
で管理するホスト数が増えるにつれ 設定数は増加し,Apache
起動時のメモリ使用量も増 加する.Apache
のサーバ機能の拡張には,Apache
モジュー ルというプラグイン機構[25]
が用いられる.図3
に,Apache
のコアとモジュールの概要図を示す.Apache
のコアとApache
モジュールの連携は,Apache
独自 のAPI
を介して実現されている.モジュールは,コア に近い実装からWeb
アプリケーションに近い実装ま で,様々な領域での拡張が可能となっている.一般的 なWeb
サーバソフトウェアと同様,Apache
モジュー ルによる機能拡張は高速性と省メモリを考慮してC
言 語で実装する仕様になっている.3.
高集積マルチテナントアーキテクチャの リソース分離限られたコンピュータリソースで複数のホストをで きるだけ高集積に管理・運用し,全体のコストを低減 しながら安定稼働させるためには,特定のホストに対 する
Web
アクセスがサーバ全体のリソースを占有し ないように,ホスト単位で公平にリソースを配分するためのリソース分離手法が必要である.
Jao
は,リソース分離のために,ファイルやホスト 単位で同時接続数を制御することによって,大量に同 時アクセスがきたとしても,制限値以上のアクセスに 対してはエラーを返す手法を提案している[26]
,しか し,CPU
やDisk I/O
等のコンピュータリソースは共 有のため,特定ホストにアクセスが集中したり,多く のリソースを消費するアプリケーションへのたった一 つのリクエストによりリソースが占有されたりするこ とで,他のホストに影響を与える問題がある.そのよ うな課題を解決するために,リソース分離手法が複数 提案されている.3. 1 VirtualHost
方式におけるリソース消費測定Web
サーバでは,静的なファイルの配信だけでな く,負荷のかかるCGI
プログラムなどの動的コンテン ツの生成が行われる.マルチテナントアーキテクチャ においては,特定のホストがリソースを占有すること で,他のホストが影響を受ける状況はできるだけ回避 したい.そのため,サーバ高負荷時の迅速な原因の特 定と対処は非常に重要である.ホスト単位で専用のサーバプロセスを起動するよう なマルチテナントアーキテクチャの場合は,リソース を占有しているホストを特定し,最悪の場合,専用の サーバプロセスさえ停止させれば他のホストへの影響 を緩和できる.一方,
VirtualHost
方式では,単一の サーバプロセス群で複数のホストを処理するために,リソースを多く占有しているホストやファイルを厳密 に特定して,問題となるリクエストのみを制限する必 要がある.
DSO
実行方式で実行されたプログラムは,ps
コマ ンドによりプロセス情報を取得すると,プロセス名は プログラムファイル名ではなくサーバプロセス名であ るhttpd
となる.そのため,サーバプロセスがリソー スを大量に消費していた場合は,それがどのホストの どのスクリプトによるものであるかを迅速に特定する ことが困難である.CGI
実行方式で実行されたプログラムは,CGI
バ イナリの引数としてプログラムファイル名が渡され,プロセス名としては
CGI
バイナリ名が表示されるた め,高負荷時等,迅速に対応しなければならない状況 において,該当の原因となるプログラムファイル名を 正確に特定できない.DSO
実行方式であっても,リソースを占有してい るプログラムを容易に特定するために,松本らは,クライアントからのリクエストを
Apache
が受け付 け処理を行ってからレスポンスを返すまでに,プロ セスが消費したリソース量を測定するモジュール,mod resource checker
(注1)を提案している[2]
.この モジュールによって,実行されたプログラムが,管理 者によって設定されていたシステムCPU
時間,ユー ザCPU
時間,メモリ使用量のしきい値を超えていた 場合に,プログラムの絶対パス,VirtualHost
名,シ ステムCPU
使用時間,ユーザCPU
使用時間,メモ リ使用量が計測されファイルに記録される.そのデー タをもとに,高負荷ホストやスクリプトをリアルタイ ムで調査,検知できる.3. 2
仮想ホスト単位でのリソース分離chroot
環境や仮想マシンでWeb
サーバを起動して いる場合は,ホストごとにサーバプロセスが起動して いるため,リソースの制限に関してサーバがもつ全て の設定を利用することができる.しかし,VirtualHost
を利用した構成の場合,Apache
では仕様上仮想ホスト 単位で設定できる項目は限られている.例えば,最大 同時接続数を設定するためにMaxClients
を仮想ホス ト単位で設定することはできない.また,VirtualHost
上でコンテンツ単位の同時接続数を柔軟に設定する方 法がないのも高負荷ホストの制限を困難にしている.VirtualHost
は複数のホストを単一のサーバプロセ ス群で管理しているため,サーバプロセスが高負荷で 停止してしまうと全てのホストの機能が停止する.そ のため,サーバプロセスが高負荷でサービス停止しな いように制限することが必要となる.例えば,Apache
が標準で備えるリソースの制限のための設定として は,メモリやプロセス数等があるが,CPU
使用の制 限の設定は限られており,RlimitCPU
という設定の みである.RlimitCPU
では,クライアントからリク エストを受けてレスポンスを生成するまでに,設定し たCPU
使用時間を超過した場合,カーネルによって 処理が強制的に切断される.そのため,ミドルウェア やWeb
コンテンツの実装によらずレスポンス処理が 中断されるため,Web
コンテンツの動作として信頼性 が低くなる.高負荷ホスト全体や高負荷スクリプトへのアクセス 数を制限するために,松本らは,リクエスト対象への最 大同時接続数を設定するモジュール
mod vlimit
(注2)を(注1):https://github.com/matsumotory/mod resource checker
(注2):https://github.com/matsumotory/mod vlimit
提案している
[2]
.設定対象は,任意のホストやファイ ル名,ファイルへの絶対パス,任意のディレクトリ,正 規表現にマッチしたファイルやフォルダ等である.同 時接続数の設定値を超えた場合は,HTTP
のステー タスコード503
(Service Unavailable
)を返す.また,同一クライアント
IP
からの同時接続数も設定できる.高集積のホスティング環境においては,単一のサー バに収容しているホスト数が多いことから,リソース を多く占有するスクリプトにアクセスが集中し,サー バが高負荷となって
OS
が停止してしまうような状況 は避けるべきである.そこで,松本らは,CPU
処理やI/O
処理の負荷の目安となるロードアベレージの数値 に着目し,リクエストを受けた後,ロードアベレージ の数値によってレスポンスを返すかどうかをApache
が判断するモジュールmod lalimit
(注3)を提案してい る[2]
.ロードアベレージの数値をしきい値として設定 し,その数値を超えた場合はステータスコード503
を 返すことで安全に処理を中断させる.1
分平均のロー ドアベレージをしきい値に設定できる.3. 3
リクエスト単位でのリソース分離Linux
には,cgroup [27]
と呼ばれるプロセスのリ ソース管理技術がある.cgroup
の優先順位機能を使う ことで,CPU
やI/O
を制御できる.筆者らは,リク エスト処理時に,cgroup
を利用して,管理者が記述し た内容に従って仮想的に分離されたリソース領域を作 成し,サーバプロセスをそのリソース領域内で動作さ せることで,リクエスト単位で任意のリソース分離が 可能なWeb
サーバのリソース分離手法を提案してい る[28]
.クライアントからサーバプロセスに対してリ クエスト処理があると,そのリクエストが制御対象で あった場合,サーバプロセス上で動作しているリソー スコントローラが,リソース分離ルールからリソース に関する設定値を取得する.そして,そのリソース設 定値を元に確保された仮想リソース領域がなければ,新規で領域を作成する.
例えば,任意のリクエストに対し,
CPU
使用率は 最大10%
,ディスクへの書き込みは最大5MB/sec
に 制限したいとする.その場合は,制御ルールを設定 ファイルに記述する.記述後,新しいリクエストを受 けた際に,リソースコントローラは制御ルールを解釈 し,ルール通りにリソース領域を生成する.そして,サーバプロセスを,作成したリソース領域に割り当て
(注3):https://github.com/matsumotory/mod lalimit
た後,リクエストをそのリソース範囲内で処理する.
処理後は,レスポンスをクライアントに返し,リソー ス領域への割り当てを解除してから,次のリクエスト 処理に備える.このようなアーキテクチャを取ること により,リクエストに含まれる情報,例えば,ホスト 名や
HTTP
メソッド,ユーザ情報等を条件に,管理 者がHTTP
リクエスト単位で柔軟にリソース分離を 行える.3. 4
特徴量抽出と変化点検出に基づくリソースの 自律制御アーキテクチャ高負荷時にどれぐらいのリソース使用量を割り当て るのが適切なのかということや,負荷原因の状況に応 じて同時接続数制限との組み合わせをどう判定する かについて,刻々と変化しログの量も肥大化していく 状況下で人力による調査に頼って判断することは高コ ストである.適切な制限項目や一定のルールに従った 制限値を,いかにシステム管理者の運用コストをかけ ずに調査し制限するかという,ホスト単位で精細なリ ソース分離を行う際の課題がある.
松本らは,
Web
サーバのコンピュータリソースの特 徴量を時系列データとして抽出してリクエストごとに 変化点検出を行い,原因となるホストやプログラムの 変化らしさの重み付けを行った上で,サーバ全体のリ ソース逼迫時には,重み付けリストの結果に基いて自 律的に原因となるリクエストを特定し分離するアーキ テクチャを提案している[29]
.時系列データには,ホ スト及びプログラム単位でのレスポンスタイムのデー タとその時点の同時接続数を使用する.この時系列 データに対して,変化の傾向を表すスコアを計算し,リクエスト時のホスト名とプログラム名に基づいて,
計測したスコアからリソースの傾向変化に寄与したホ スト及びプログラムの重み付けリストを更新していく.
そして,サーバ全体が高負荷状態になった場合に,重 み付けリストに従って原因の可能性が高いリクエスト のみを,リソース使用量が限定された隔離環境内で処 理するようにする.これらを,
Web
サーバのレスポン ス生成処理の過程に組み込むことにより,Web
サーバ はサーバ管理者の代わりに自律的に原因を解析し,必 要なときにその原因に対処できる.4.
高集積マルチテナントアーキテクチャに おける仮想ホスト方式の権限分離Apache
は,歴史的にマルチテナントアーキテクチャ のために様々な運用上の課題を解決し,改善した上で運用可能なレベルで機能追加が行われてきている.本 章では,
Apache
において,高集積マルチテナントアー キテクチャを実現するVirtualHost
機能を例に,仮想 ホスト方式における権限分離の具体的な課題をまとめ ることで,現実的なセキュリティ及び実運用上の課題 と具体的な手法を整理する.4. 1
システム領域や他ホスト領域の覗き見Apache
のVirtualHost
を採用した構成では,一般 にOS
のシステム領域でWeb
サーバプロセスを起動 するため,Web
サーバプロセスのユーザ権限や,動的 コンテンツが実行される際のユーザ権限であっても,システム上の一般ユーザ権限で閲覧可能な
/etc
等のシ ステム領域のファイルを覗き見することができる.ま た,閲覧できないように全てのシステム領域の権限を 修正するコストは非常に高い.VirtualHost
で動作しているApache
は,サーバプ ロセス権限で全てのリクエストを処理する必要があり,コンテンツファイルやディレクトリをサーバプロセス 権限で操作可能にしなければならない.そのため,単 純なマルチテナントアーキテクチャでは,異なるユー ザが管理する他ホスト領域を覗き見することができて しまう.図
4
に,他ホスト領域のファイルを覗き見す るための一般的な仕組みと権限設定を示す.図
4
では,index.cgi
はWeb
サーバプロセスの権限で あるuid500
,gid101
で実行され,/var/www/hosts/
host1.example.com/
ディレクトリはgid101
からの読 み取り権限がある.更に,ディレクトリ配下のホス ト領域内部のファイル群はWeb
サーバプロセス権 限でアクセスできるように全ユーザに読み取り権限図4 他ホスト領域の覗き見 Fig. 4 Peeping in another host area.
を与えている.そのため,
host1
を管理するユーザ は,/var/www/hosts/host2.example.com/
ディレク トリの下のコンテンツには直接アクセスできないが,host1
のindex.cgi
内でシェル等の外部コマンドを実 行することで,host2
のindex.cgi
のソースコードな どを閲覧できてしまう.また,CGI
プログラムを経由 せずとも,シンボリックリンクを他ホスト領域のファ イルに対して別名で設置するだけで,Web
サーバプロ セスを介した覗き見が可能となる.これを防ぐために,CGI
プログラム実行時に利用できるsuEXEC [24]
の ようなアクセス制御モジュールを用いて,コンテンツ の権限でCGI
プログラムを実行し,適切に各ホスト 領域の権限を設定することで,覗き見できないように する方法が用いられる[3]
.同時に,Apache
において シンボリックリンク経由で他ホスト領域へ辿れないよ うにする設定も利用される.4. 2 CGI
実行方式のためのセキュリティ機構Apache
のsuEXEC
機能[24]
を用いると,Virtual- Host
を採用していても他ホスト領域を閲覧できなく する構成をとることができる.図5
にsuEXEC
の利 用例を示す.図5
では,図4
と同様のパーミッショ ン設定をしている.suEXEC
を採用すると,クライ アントからCGI
プログラムにアクセスがあった場 合,Apache
によってCGI
プログラムの実行処理をsuEXEC
に依頼する.suEXEC
はindex.cgi
を実行 する際に,index.cgi
の権限であるuid501
,gid102
を 取得する.そして,プロセスの権限を変更するシステムコー ル
(setuid()
,setgid()
システムコールなど)
を実行し て,プロセスの権限を変更し,CGI
プログラムを実行図5 suEXECの利用例 Fig. 5 Example of suEXEC.
図6 CGI実行方式のアクセス制御アーキテクチャ Fig. 6 Access control architecture of CGI.
する.そのため
uid501
,gid102
のプロセスは,/var/
www/hosts/host2.example.com/
配下での読み取り権 限であるuid502
,gid101
に対するアクセス許可がな い.このように,suEXEC
を採用することで,他ホ スト領域にアクセスすることができず,他の領域のindex.cgi
の閲覧もできない.図
6
にサーバプロセスとsuEXEC
の詳細なアーキ テクチャを示す.図6
のように,suEXEC
はプログラ ムを実行するたびに,一般ユーザからの実行であって もroot
権限で実行されるように設定されたラッパープ ログラムを実行させていったんroot
権限になり,そこ から実行対象のプログラムの権限にsetuid()
,setgid()
システムコールを実行してからプログラムを実行する.このように,
CGI
プログラム実行ごとにプロセスの生 成,破棄が必要となるため,性能が低くなるという問 題がある[30]
.Doersch
は,システム領域や他ホスト領域を覗き見 できないように,suEXEC
時に各ホスト環境でch- root()
システムコールにより,ルートディレクトリを 各ホスト領域に移動し,隔離してからスクリプトを実 行する手法を提案している[31]
.図7
はsuEXEC
プ ログラム内部でchroot()
システムコールを実行する 仕組みの概要図である.これにより,CGI
プログラム はホスト領域内の隔離された領域で実行されるため,利用しているホスト領域外のファイルを閲覧すること ができない.一方,隔離された領域でプログラムを実 行するため,ホスト単位で個別にライブラリを含んだ 実行環境をドキュメントルートディレクトリ配下に事 前に用意しておく必要がある.ただし,複数の実行環 境のファイル間をハードリンクし参照のみにすること
図7 suEXEC実行時にchroot()システムコールを実行 する仕組み
Fig. 7 Architecture for executing chroot() at suEXEC execution.
により,実行環境の構築や使用容量のコストを下げる ことは可能である.
4. 3 DSO
実行方式のためのセキュリティ機構DSO
実行方式はApache
モジュールとして組み込 まれたインタプリタがプログラムを実行するため,一 般的にCGI
実行方式と比較して,リクエスト時にプ ロセスの生成と破棄が必要なくなり性能が高くなる.また,スクリプトの処理を渡すインタプリタを指定す るために,スクリプトの行頭に記述するシェバン行や 権限を細かく設定する必要がない.しかし,
Apache
に組み込まれて実行される以上,基本的にはApache
権限で実行されるため,図4
と同様の他ホストが覗き 見される問題が生じる.以下,DSO
実行方式を安全 に利用するためのセキュリティ機構としてこれまでに 提案されているものを紹介するとともに,それらの課 題について論ずる.4. 3. 1 PHP
のセーフモードDSO
実行方式において,広く使われているDSO
版PHP
は,他ホストの領域を閲覧できないようにする ため,セーフモードという機能があった.セーフモー ド機能を利用すると,DSO
版PHP
であっても他ホス ト領域のファイルを覗き見できない.しかし,PHP
特 有のセキュリティ機構であり汎用性が低いこと,共有 サーバ上のOS
やファイルシステム上のセキュリティ問 題をPHP
アプリケーションのレイヤーで解決しよう と試みるのはアーキテクチャ上正しくないといった理 由から,PHP5.3.0
で使用が非推奨となり,PHP5.4.0
では削除された[32]
.4. 3. 2 root
のサーバプロセスで権限分離する手法DSO
実行方式を採用した場合でも,mod suid2 [33]
というモジュールを利用すると,他ホスト領域の閲覧 を防ぐことができる.
mod suid2
は,Apache
のサー バプロセスをroot
権限で起動しておき,リクエストを 処理するたびにsetuid()
及びsetgid()
システムコール によりユーザ権限に降格する.これによって,Apache
の権限とは別の権限でプロセスを実行できるため,suEXEC
と同様,他ホスト領域を閲覧できなくなる.しかし,処理後はサーバプロセスが一般ユーザ権限で あるため,権限を元の
root
権限に戻すことができな い.そのため,ユーザ権限に降格されたプロセスはコ ンテンツ処理後に破棄する必要がある.その結果,プ ロセスを再利用できず,DSO
実行方式を利用してい たとしても,suEXEC
よりも性能が大きく低下する.また,セキュリティの観点からは,サーバプロセスを
root
で起動させていると,万一サーバプロセスそのも のに任意のコマンドを実行できるなどの脆弱性があっ た場合や,設定ミスによってサーバプロセスの権限で コンテンツが動作した場合に,悪意のあるユーザが容 易にroot
の特権を得られるという問題がある.原らによる提案手法
[34]
では,サーバプロセスをroot
で起動し,セキュアOS
の機能でroot
の権限を 一部制限した状態で,リクエストごとにfork()
システ ムコールでプロセスを新規生成し,新規生成したプロ セスの権限を変更してからリクエスト処理を行う手法 を提案している.しかし,DSO
実行方式と比較した 場合に,リクエストごとにプロセスの生成と破棄が必 要となり,性能が低下する.4. 3. 3
一般ユーザのサーバプロセスで権限分離する手法
鈴木らは,アクセスするクライアントが正確に特定 できるようなイントラネットの環境において,ユーザ 権限であっても
setuid()
システムコール等を実行可能 にする手法を提案している[35]
.この手法は,UNIX
にユーザ権限でオーナを変更できる新たなシステム コールを実装し,ident
プロトコルを利用せずに,IP
オプションを用いてクライアントプロセスの認証情報 を送ることと組み合わせることにより,ident
プロト コルに依存しないイントラネット内での透過的なクラ イアントプロセスとサーバプロセス間の権限分離シス テムを構築可能である.しかし,信頼のあるクライア ントとネットワークが前提となっており,不特定多数 のクライアントには対応していない.図8 mod ruid2のアクセス制御アーキテクチャ Fig. 8 Access control architecture of mod ruid2.
mod ruid2 [36]
というモジュールを利用すると,一 時的にユーザ権限で起動しているサーバプロセスに,root
の特権を細分化したLinux Capability [37]
と呼 ばれる機構の内,CAP SETUID
,CAP SETGID
の 特権を与えられる.図8
にmod ruid2
の詳細なアー キテクチャを示す.特権を与えられたサーバプロセスは,
root
権限で実 行されていなくても,setuid()
及びsetgid()
システム コールを実行可能となる.その後,mod suid2
同様にApache
のサーバプロセス自体を任意のuid
,gid
に権 限変更してから処理を実行し,再度,元のuid
,gid
に 戻す.この仕組みによって,DSO
実行方式であっても,PHP
スクリプトは他ホスト領域を閲覧できない.ま た,実行後でも,元のサーバプロセスの権限に戻すこ とで,プロセスの再利用も可能にしているため,DSO
実行方式の性能を維持できる.しかし,このようなプ ロセスは,root
のように全ての権限をもたないもの の,setuid()
及びsetgid()
システムコールを実行でき る特権を保持している.図8
におけるindex.php
の ようなWeb
アプリケーションの脆弱性をつかれ悪意 のある者に乗っ取られた場合,setuid()
及びsetgid()
システムコールによる権限変更を利用し,他ホスト 領域のファイル閲覧や変更及び不正プログラムの配置 や配布等が可能となる.サーバプロセスに権限を変 更できる特権の保持を許すことは,同時に数多くの 脆弱性を許すことになる.一方で,setuid()
及びset- gid()
システムコールを実行した後にCAP SETUID
及びCAP SETGID
のCapability
を放棄し,処理後 にプロセスを復帰できないように改修すれば安全であ るが,やはりサーバプロセスが再利用できなくなり,mod suid2
同様性能は著しく低下する.一般に,サーバプロセスにアクセス制御を設定後に
再度解除するというアプローチは性能上の利点を得ら れるが,共有型の大規模
Web
ホスティング基盤のセ キュリティを考える上でリスクが非常に大きく,脆弱 性をつかれた場合の利用者や閲覧者への被害は甚大で あり,避けるべきと考えられる.原らは,
Web
サーバからの権限変更を可逆的に変更 可能にしながら,実行されるプログラムからは権限を 変更されないように,プログラムから実行されるシス テムコールをフック(注4)してプログラムから実行される 権限変更の処理を無効にしてセキュリティを担保する 手法[38]
を提案している.しかし,Linux
においては,システムコールを適切にフックするためには
Linux
カーネルに直接変更を加える必要があり,可搬性が低 く,カーネルやライブラリを継続的に更新することが求 められる現場において運用上の問題になることが多い.4. 3. 4 Linux
スレッド単位でDSO
方式の権限分 離を行う手法DSO
方式の利点は,プログラムを高速に実行でき ることである.そのため,DSO
方式のアクセス制御 アーキテクチャを設計する上では,性能劣化を十分考 慮しなければならない.suEXEC
のようなプログラ ム実行時に新たに子プロセスを生成し,コンテンツ処 理後にプロセスを破棄するアーキテクチャは,性能を 大幅に低下させる.また,mod ruid2
のように,プロ セスを生成せずにサーバプロセスに権限変更の特権を 与えてプロセスを再利用すれば高速に実行できるが,4. 3. 2
で述べたとおり,脆弱性が生じる.そこで,筆者らは,
Linux
上で動作することを前提 とし,Linux
におけるスレッドをpthread create()
関 数 に よって 一 時 的 に 生 成 し ,そ の ス レッド 上 で 権 限 分 離 を 行った 後 ,ス レッド 配 下 で プ ロ グ ラ ム の 処 理 を 行 い ,最 後 に ス レッド を 破 棄 す る 手 法mod process security
(注5)を提案している[28]
.Linux
におけるスレッドはプロセス内の同一メモリ空間上で 実行でき,メモリ消費量等が軽減できる.また,Linux
上では,スレッドの生成・破棄はプロセスの生成・破 棄よりも処理が軽い[39]
.スレッドの生成・破棄を利 用することにより,サーバプロセスを破棄する必要も ない.図9
にDSO
実行方式にmod process security
を適用した場合の,処理の流れを示す.(注4):一連の処理の中で特定の処理フェーズが呼ばれたときに,同時 に,あるいは,代わりに別の処理も実行できるようにあらかじめ処理を 登録しておくこと.
(注5):https://github.com/matsumotory/mod process security
図9 mod process securityのアクセス制御アーキテク チャ
Fig. 9 Access control architecture of mod process security.
Linux
上で動作するApache
は,親サーバプロセス(
Parent Server Process
)から事前にfork()
システム コールが実行され生成された複数の子サーバプロセス(
Child Server Process
)がリクエストを受け付けるた めに待機している.リクエストを受け付けると,子サー バプロセス上で一時的にスレッド(Control Thread
) を生成する.一時的に生成したスレッドに対し権限変 更の特権であるLinux Capability
のCAP SETUID
,CAP SETGID
を付与する.この特権によって,スレッドは任意の
uid
,gid
に権限変更可能となる.その 後,実行対象のプログラムのuig
,gid
等の権限情報 を動的に取得して,その権限にスレッドの権限変更を 行う.スレッドの権限変更を行った後は,プログラム を実行する前にスレッドに付与された特権を破棄して おく.これによって,mod ruid2
で生じたような,プ ログラム経由での権限変更を防止する.スレッド上で 直接プログラムを実行した後は,スレッドを破棄して,スレッドが属した子サーバプロセスは再度リクエスト 受け付けに再利用される.
これによって,既存の
DSO
実行方式のアクセス制 御アーキテクチャのように,サーバプロセスの生成破 棄をすることなく,安全にアクセス制御を行える.ま た,スレッドの生成,破棄の処理時間の短さから性能 劣化を低減し,DSO
実行方式の特徴である高い性能 を維持できる.5.
高集積マルチテナントアーキテクチャの 運用技術Web
ホスティングサービスを提供する側が,サーバを運用管理する工数は,インターネットの普及に伴い,
日々増加してきている.
2. 1
で述べたとおり,高集積 マルチテナントアーキテクチャにおいては,Apache
のVirtualHost
機能を使うことにより効率的にホスト の収容数を増やすことができる.一方で,収容数が増 えることにより運用面の課題が生じる[2]
.5. 1 suEXEC
時のCGI
プログラムとインタプ リタの紐付けする手法suEXEC
を採用するためには,CGI
版を利用しな ければならず,シェバン行(注6)の記述や適切な実行権 限設定をホスティング利用者に強制する必要がある.しかし,例えば
Web
サイトの動的コンテンツの開発 に多く採用されるPHP
スクリプトのコードにおいて は,一般にシェバン行は記述されない.そのため,シェ バン行の記述や実行権限設定はホスティングサービス 仕様上の問題となる.mod suphp [40]
を利用すると,シェバン行の記述 や実行権限設定をホスティング利用者に強制する必要 なく,suEXEC
と同様にCGI
プログラムをユーザ権 限で実行できる.しかし,suEXEC
と同様にVirtual- Host
単位でuid
,gid
を設定ファイル内で指定する必 要があり,mod vhost alias
でも動的に扱えない.ま た,他ホスト領域への覗き見を防ぐことができるが,4. 1
で述べた,システム領域の覗き見問題を解決でき ていない.mod actions [41]
を利用すると,CGI
実行方式で あっても,スクリプトにシェバン行や実行権限を設定 しなくても実行できるラッパープログラムに渡す設定 ができる.しかし,ラッパープログラムをApache
や 各ホストの権限からアクセス可能なディレクトリに安 全に配置する必要があり,設定や構成が煩雑になりが ちである.また,ラッパープログラムはURL
からア クセスできる領域に配置する必要があり,顧客のURL
を一部占有することが問題となる場合もある.4. 1
で 述べた,システム領域の覗き見問題も解決できない.松本らは,
PHP
プログラムに対するリクエスト時は,suEXEC
プログラム内部でexecve()
システムコール を実行し,CGI
実行方式用のPHP
インタプリタファ イルにリクエストされたプログラムパスを引数に渡し て実行するように改修した手法を提案している[2]
.こ れによって,PHP
プログラムのシェバン行や実行権限(注6):UNIXで実行されるスクリプトの1行目に,スクリプトを渡す インタプリタを指定するために書く行.#!/bin/shなどと記述される.
英語表記はshebang.
の有無をサービス利用者が意識することなく,
CGI
実 行方式のPHP
プログラムをsuEXEC
で実行できる.改修によって,複数のモジュールやラッパー等を組 み込む必要がないという点で非常にシンプルな構成 になっている.また,ホスティング利用顧客が
DSO
版PHP
を扱うために,シェバン行を記述しなかったPHP
スクリプトに対しても,suEXEC
内部でCGI
版PHP
として実行されるため,CGI
版かDSO
版かを ホスティング利用顧客が気にする必要がない.一方で,PHP
プログラムとインタプリタファイルの紐付けをsuEXEC
で行う必要があるため,PHP
のようなシェ バン行を通常書かないようなプログラミング言語を提 供する場合には,別途ホスティングサービス提供者に よる紐付けが必要である.5. 2
ホストの新規設定・追加に伴うコスト3. 2
で述べたとおり,VirtualHost
においてはWeb
サーバプロセスが停止すると,全てのホスト機能が 一時的に停止する.そのため,大規模化に伴う設定の 増加を考慮すると,設定に追加あるいは変更があって もできる限りWeb
サーバプロセスのリロードやリス タートを実施しないようにするべきである.新規ホス トの追加設定やチューニングを行う場合に,Web
サー バのリロードを実施しないでよいようにするためには,mod vhost alias [42]
を用いる.mod vhost alias
はApache
モジュールで実装されて おり,Dynamically Configured Mass Virtual Host- ing
(DCMVH
)という設定記述方法を提供する.通 常,Apache
では,ホスト追加時に新規ホスト用のVir- tualHost
設定を追記する.しかし,仮想ホストの設定 はホスト名やドキュメントルート名等が異なるだけで,その他の設定は同じ場合が多い.そこで,
DCMVH
の設定記述法を利用すると,ドキュメントルートにホ スト名を含んだパスになるようにディレクトリを作成 しておけば,VirtualHost
の設定においてパスのホス ト名部分を変数で記述することができる.その記述に よって,VirtualHost
の設定を一つ書いておけば,ア クセスのあったホスト名で設定を動的に読み替え,該 当のドキュメントルートにアクセスできるようにな る.また,設定の数がホストの数に依存しないため設 定読み込みの負荷も少なくできる.図10
に,通常のVirtualHost
の設定を示す.suEXEC
を採用するためにはホスト単位でSuexe-
cUserGroup
という設定を記述する必要がある.Suex-
ecUserGroup
に設定されたuid
とgid
が,実行対象図10 通常のVirtualHostの設定例 Fig. 10 Configuration example of VirtualHost.
の
CGI
プログラムとオーナが一致するか確認し,そ の上でCGI
を実行する際にsetuid()
及びsetgid()
シ ステムコールにより,オーナを変更することでセキュ リティを高めている.しかし,5. 2
で述べたように,mod vhost alias
ではsuEXEC
の設定のuid
とgid
を 動的に扱う記述がないため,VirtualHost
単位にuid
とgid
を静的に記述しなければならない.そのため,新規
VirtualHost
を追加するたびに設定数が増加する.設定反映には
Apache
のリロードが必要であるため,ホスト数の増加とともにリロードによる設定読み込み 時間も増加する.更に,設定数の増加によって
Web
サーバプロセスのメモリ使用量が増加し,その状態 でCGI
実行方式のような,fork()
システムコールやexecve()
システムコールを伴う処理を行うと,ページ テーブルエントリ数の増大とその複製と削除の処理に 起因して処理のコストが高くなり,CPU
使用時間を 多く消費する.松本らは,各仮想ホストの
suEXEC
のユーザ名とグ ループ名を同一のダミーとして設定した上で,suEXEC
プログラム内部で実行ファイルのオーナ情報からユー ザ名とグループ名を解釈できるようにsuEXEC
を改 良し,ホスト単位で権限分離が必要な場合でも,全て の仮想ホストの設定を一つの設定に書き直すことがで きるようにしている[2]
.図11
に,mod vhost alias
による統一的設定例を示す.また,
mod vhost alias
では,環境変数に保存され るドキュメントルートが,本来保存されるべき変数を 読み替えたユーザごとの絶対パスにならない問題が あるが,松本らは,ホスティングサービスの利用者が 環境変数を使ったプログラムを配置する可能性を考慮 し,正しいドキュメントルートで保存されるように,mod vhost alias
を改良している[2]
.3. 1
,3. 2
で紹介したApache
モジュールは,各ホ スト専用の制限設定が書かれたファイルに設定を記述 することができ,Apache
のリロードを実行すること図11 mod vhost aliasとsuEXECの改修による統一 的設定例
Fig. 11 Unified configuration example by modifying mod vhost alias and suEXEC.
無くリクエストごとに新たな設定を反映させることが できる.その結果,ホスト数に依存した煩雑な設定無 く,また,
Apache
のリロードをせずに制限の設定や 新規に追加するホストの設定を反映させることができ,運用性とサービス性が向上する.
5. 3
高集積マルチテナントWeb
サーバの大規模 証明書管理従来の
Web
サーバソフトウェアはHTTPS
で通信 を行うために,サーバ起動時に,サーバ証明書とペア となる秘密鍵をホストごとに読み込んでおく必要が ある.しかし,そのような仕組みでは,高集積マルチ テナントアーキテクチャでのメリットである性能と低 価格化の両立が難しい.なぜなら,高集積にホストを 収容すると,大量のサーバ証明書の読み込みによって サーバプロセスの起動に多くの時間を要したり,サー バプロセスのメモリ使用量が増加したりするからであ る.更には,サーバプロセスの起動処理や,CGI
の ようなプロセス複製の処理が大幅に遅くなり,性能へ の影響が大きくなるというデメリットもある.また,サーバ証明書をファイルで管理する必要があり,複数 の
Web
サーバによる処理の分散や可用性の担保に支 障をきたす.松本らは,高集積マルチテナント方式による
Web
サーバにおいて,Web
サーバプロセス起動時にサーバ証 明書と秘密鍵を読み込んでおくのではなく,SSL/TLS
ハンドシェイク時において,リクエストのあったホス ト名を元に,対応するサーバ証明書と秘密鍵のデー タをデータベースから動的に取得することで,Web
サーバプロセスのメモリ消費量を大幅に低減する効率 的なサーバ証明書の管理アーキテクチャを提案してい る[43]
.TLS
ハンドシェイク時の処理時間の大部分は クライアントから送られてきた共通鍵の復号処理にか かるCPU
使用時間であり,CPU
使用時間に関する コストにおいても,TLS
のハンドシェイク時のコスト と比較し,動的に証明書を読み込む処理はコストの低 い処理となる.そのため,ほとんど性能劣化は見られ ず,実用上問題にならない性能がでることを実験から示しており,メモリ消費量の大幅な改善が実現できて いる.また,データベースから証明書を都度取得する ため,
Web
サーバプロセスの再起動なく収容ホストのTLS
適用が可能となり,運用技術についても改善でき ている.6.
む す び本論文では,
Web
サーバの高集積マルチテナント アーキテクチャの課題と関連研究の整理及び基礎概念 の整理を行った.Web
ホスティングサービスで実運用 上採用されることの多いApache
に関する基礎概念や 用語を整理した上で,高集積マルチテナントアーキテ クチャにおける,運用技術,セキュリティ,及び,リ ソース分離に関する関連研究と課題を体系的にまと めた.2.
か ら5.
を 通 し て 紹 介 し た 研 究 は ,全 て 実 用 可 能 な ソ フ ト ウェア と し て 実 装 さ れ て お り,既 にOSS
と し て も 公 開 済 み のmod process security
やmod resource checker
なども,実際に筆者が所属す るGMO
ペパボ株式会社では既に導入済みで実運用 フェーズにある[44]
.今後の課題としては,
HTTPS
による通信が当たり 前となっていく中で,高集積マルチテナントアーキ テクチャのように,単一のサーバプロセス群で大量の サーバ証明書を管理する必要がある場合の,効率的な 管理方法を検討する必要がある.高集積マルチテナントアーキテクチャを採用してお り,かつ,
Web
コンテンツを事業者が管理できないと いう特性をもった歴史あるWeb
サービスであるWeb
ホスティングサービスの汎用性に着目し,周辺のシス テムやミドルウェアの具体的な課題を体系的にまとめ ることによって,本論文がWeb
サービスにおけるシス テムやミドルウェアのセキュリティや性能及び運用技 術の向上のための研究開発に寄与できれば幸いである.文 献
[1] R. Prodan and S. Ostermann, “A survey and tax- onomy of infrastructure as a service and Web host- ing cloud providers,” 10th IEEE/ACM International Conference on Grid Computing, pp.17–25, Oct. 2009.
[2] 松本亮介,川原将司,松岡輝夫,“大規模共有型Webバー チャルホスティング基盤のセキュリティと運用技術の改善,” 情処学論,vol.54, no.3, pp.1077–1086, March 2013.
[3] S.A. Mirheidari, S. Arshad, and S. Khoshkdahan,
“Performance evaluation of shared hosting security methods,” IEEE 11th International Conference on Trust Security and Privacy in Computing and Com-
munications, pp.1310–1315, June 2012.
[4] M. Ferdman, A. Adileh, O. Kocberber, S. Volos, M.
Alisafaee, D. Jevdjic, and B. Falsafi, “Clearing the clouds: A study of emerging scale-out workloads on modern hardware,” ACM SIGPLAN Notices, vol.47, no.4, pp.37–48, March 2012.
[5] The Apache Software Foundation, Apache Tutorial:
Dynamic Content with CGI, http://httpd.apache.
org/docs/2.2/en/howto/cgi.html
[6] The Apache Software Foundation, Apache Virtual Host documentation, http://httpd.apache.org/docs/
2.2/en/vhosts/
[7] R.T. Fielding, Architectural Styles and The Design of Network-based Software Architectures, Doctoral Dis- sertation, University of California, Irvine, 2000.
[8] 松本亮介,Webサーバの高集積マルチテナントアーキテ クチャに関する研究,博士学位論文https://repository.
kulib.kyoto-u.ac.jp/dspace/handle/2433/225954, 京都大学,May 2017.
[9] L. Van Doorn, “Hardware virtualization trends,”
ACM/Usenix International Conference on Virtual Execution Environments, vol.14, no.16, p.45, June 2006.
[10] J.N. Matthews, W. Hu, M. Hapuarachchi, T.
Deshane, D. Dimatos, G. Hamilton, and J. Owens,
“Quantifying the performance isolation properties of virtualization systems,” ACM The 2007 Workshop on Experimental Computer Science, p.6, June 2007.
[11] J. Che, C. Shi, Y. Yu, and W. Lin, “A synthetical performance evaluation of OpenVZ, Xen and KVM,”
IEEE Asia Pacific Services Computing Conference (APSCC), pp.587–594, Dec. 2010.
[12] H. Chen and D. Wagner, “MOPS: An infrastructure for examining security properties of software,” 9th ACM Conference on Computer and Communications Security, pp.235–244, Nov. 2002.
[13] Java Servlet 3.0 Specification, http://jcp.org/en/jsr/
detail?id=315
[14] L. Stein, “SBOX, put CGI scripts in a box,”
USENIX Annual Technical Conference, General Track, pp.145–155, June 1999.
[15] The Apache Software Foundation, Dynamic Shared Object (DSO) Support, http://httpd.apache.org/
docs/2.2/en/dso.html
[16] R.P. Goldberg, “Survey of virtual machine research,”
Computer, vol.7, no.6, pp.34–45, 1974.
[17] T. Garfinkel and M. Rosenblum, “A virtual machine introspection based architecture for intrusion detec- tion,” NDSS, vol.3, pp.191–206, Feb. 2003.
[18] T. Garfinkel, B. Pfaff, J. Chow, M. Rosenblum, and D. Boneh, “Terra: A virtual machine-based plat- form for trusted computing,” ACM SIGOPS Oper- ating Systems Review, vol.37, no.5, pp.193–206, Oct.
2003.
[19] S. Soltesz, H. P¨otzl, M.E. Fiuczynski, A. Bavier, and