• 検索結果がありません。

Web サーバの高集積マルチテナントアーキテクチャと運用技術 *

N/A
N/A
Protected

Academic year: 2021

シェア "Web サーバの高集積マルチテナントアーキテクチャと運用技術 *"

Copied!
15
0
0

読み込み中.... (全文を見る)

全文

(1)

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]

も可能となり ハードウェアのコストを効率良く利用できる.しかし,

(2)

そのようなシステムの信頼性を高め,安定的にサービ スを提供するためには,セキュリティ,リソース分離,

及び,運用技術の改善が重要である.

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

やネットワーク名前空間を隔離し,そのようなコ

(3)

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)

の仮想ホスト方式を権限分離機能を利用せずに採 用すると,全てのホストのコンテンツが同一のオーナ で実行されるため,セキュリティ上の問題がある.

(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

アクセスがサーバ全体のリソースを占有し ないように,ホスト単位で公平にリソースを配分する

(5)

ためのリソース分離手法が必要である.

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)

(注1https://github.com/matsumotory/mod resource checker

(注2https://github.com/matsumotory/mod vlimit

(6)

提案している

[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

に 制限したいとする.その場合は,制御ルールを設定 ファイルに記述する.記述後,新しいリクエストを受 けた際に,リソースコントローラは制御ルールを解釈 し,ルール通りにリソース領域を生成する.そして,

サーバプロセスを,作成したリソース領域に割り当て

(注3https://github.com/matsumotory/mod lalimit

た後,リクエストをそのリソース範囲内で処理する.

処理後は,レスポンスをクライアントに返し,リソー ス領域への割り当てを解除してから,次のリクエスト 処理に備える.このようなアーキテクチャを取ること により,リクエストに含まれる情報,例えば,ホスト 名や

HTTP

メソッド,ユーザ情報等を条件に,管理 者が

HTTP

リクエスト単位で柔軟にリソース分離を 行える.

3. 4

特徴量抽出と変化点検出に基づくリソースの 自律制御アーキテクチャ

高負荷時にどれぐらいのリソース使用量を割り当て るのが適切なのかということや,負荷原因の状況に応 じて同時接続数制限との組み合わせをどう判定する かについて,刻々と変化しログの量も肥大化していく 状況下で人力による調査に頼って判断することは高コ ストである.適切な制限項目や一定のルールに従った 制限値を,いかにシステム管理者の運用コストをかけ ずに調査し制限するかという,ホスト単位で精細なリ ソース分離を行う際の課題がある.

松本らは,

Web

サーバのコンピュータリソースの特 徴量を時系列データとして抽出してリクエストごとに 変化点検出を行い,原因となるホストやプログラムの 変化らしさの重み付けを行った上で,サーバ全体のリ ソース逼迫時には,重み付けリストの結果に基いて自 律的に原因となるリクエストを特定し分離するアーキ テクチャを提案している

[29]

.時系列データには,ホ スト及びプログラム単位でのレスポンスタイムのデー タとその時点の同時接続数を使用する.この時系列 データに対して,変化の傾向を表すスコアを計算し,

リクエスト時のホスト名とプログラム名に基づいて,

計測したスコアからリソースの傾向変化に寄与したホ スト及びプログラムの重み付けリストを更新していく.

そして,サーバ全体が高負荷状態になった場合に,重 み付けリストに従って原因の可能性が高いリクエスト のみを,リソース使用量が限定された隔離環境内で処 理するようにする.これらを,

Web

サーバのレスポン ス生成処理の過程に組み込むことにより,

Web

サーバ はサーバ管理者の代わりに自律的に原因を解析し,必 要なときにその原因に対処できる.

4.

高集積マルチテナントアーキテクチャに おける仮想ホスト方式の権限分離

Apache

は,歴史的にマルチテナントアーキテクチャ のために様々な運用上の課題を解決し,改善した上で

(7)

運用可能なレベルで機能追加が行われてきている.本 章では,

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.

(8)

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]

(9)

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

同様性能は著しく低下する.

一般に,サーバプロセスにアクセス制御を設定後に

(10)

再度解除するというアプローチは性能上の利点を得ら れるが,共有型の大規模

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:一連の処理の中で特定の処理フェーズが呼ばれたときに,同時 に,あるいは,代わりに別の処理も実行できるようにあらかじめ処理を 登録しておくこと.

(注5https://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

ホスティングサービスを提供する側が,サーバ

(11)

を運用管理する工数は,インターネットの普及に伴い,

日々増加してきている.

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

プログラムのシェバン行や実行権限

(注6UNIXで実行されるスクリプトの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

が,実行対象

(12)

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 aliassuEXECの改修による統一 的設定例

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

のハンドシェイク時のコスト と比較し,動的に証明書を読み込む処理はコストの低 い処理となる.そのため,ほとんど性能劣化は見られ ず,実用上問題にならない性能がでることを実験から

(13)

示しており,メモリ消費量の大幅な改善が実現できて いる.また,データベースから証明書を都度取得する ため,

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

図 1 chroot() システムコール等を活用したホスト分離 Fig. 1 Privilege separation each hosts using chroot().
図 4 他ホスト領域の覗き見 Fig. 4 Peeping in another host area.
Fig. 7 Architecture for executing chroot() at suEXEC execution. により,実行環境の構築や使用容量のコストを下げる ことは可能である. 4
図 9 mod process security のアクセス制御アーキテク チャ
+2

参照

関連したドキュメント

WAKE_IN ピンを Low から High にして DeepSleep モードから Active モードに移行し、. 16ch*8byte のデータ送信を行い、送信完了後に

図 3.1 に RX63N に搭載されている RSPI と簡易 SPI の仕様差から、推奨する SPI

・M.2 Flash モジュール専用RAID設定サービス[PYBAS1SM2]とWindows Server 2022 Standard(16コア/Hyper-V)[PYBWPS5H]インストール/Windows Server 2019

このように、このWの姿を捉えることを通して、「子どもが生き、自ら願いを形成し実現しよう

高(法 のり 肩と法 のり 尻との高低差をいい、擁壁を設置する場合は、法 のり 高と擁壁の高さとを合

2021年9月以降受験のTOEFL iBTまたはIELTS(Academicモジュール)にて希望大学の要件を 満たしていること。ただし、協定校が要件を設定していない場合はTOEFL

運航当時、 GPSはなく、 青函連絡船には、 レーダーを利用した独自開発の位置測定装置 が装備されていた。 しかし、

基準の電力は,原則として次のいずれかを基準として決定するも