0G.プライベートクラウド登場前夜
プライベートクラウドより前の世代について(2002年〜2006年)
レンタルサーバ(Webホスティング)時代
2002年にリリースされたPhase1Plus(フェイズワンプラス)は、ApacheベースのVirtualHostでテナントを分離し、FTPによりコンテンツデータをアップロードする「いわゆる通常のレンタルサーバ」だ。
現在もWebホスティングは小規模層に人気であり、十分にコモディティ化されている。ただしマルチテナント環境としての隔離性は、UNIX/Linuxのユーザグループとしての隔離に過ぎず、リソース制限もulimit程度でしかない。いわゆるレンタルサーバと言われるものは、当時、だいたいこの形を取っており、Phase1Plusも大枠からそれず、同じ実装を行っていた。
データベースはMySQLかPostgreSQLの共有型で、UNIXユーザ単位の隔離となる。リソース制限はつけられない。
コンテンツやプログラム(cgiやphp)のアップロードは、FTPという暗号化されない方法でアップロードしていた。当時からFTPはやめるべきでSFTPの必要性が言われていたが、当時はFTP以外に使いやすいWindowsクライアントがなかったり、SFTP自体がOS設定にシェルアクセス権を要求することもあったなど、苦渋の選択でFTPを採用する必要があった。
≫参照:FTPを避けたかった理由
アップロードされたプログラムは、「SuExec」というユーザごと(この場合テナントごと)に異なるユーザ権限で実行する。これである程度の権限分離はできるものの、同サーバ上に設置したプログラムが書き込んだファイルは、ブラウザ経由では見えなくしたとしても、ファイルやディレクトリのパーミッションの設定をミスすると、プログラム同士で互いに閲覧可能になってしまう。つまりセキュリティ付きマンションのようなもので「エントランスの鍵を持つ人(この場合、FTPでアクセス出来るホストに収容された人達) は悪い人ではないに違いない」という性善説に基づいて作られているのだ。このレベルのセキュリティはサービスとして脆弱性があるが、ウェブホスティング業界ではホームページをコモディティ化するという共通の目的があり、これらを許容範囲としていた。
マルチテナントでも、ちゃんと「隔離」をしたい!
OSによるユーザ特権は設定の問題があったり、セキュリティホール(特に特権昇格)があると、大きな問題が起きる。
中小企業のウェブホスティングでは問題がないかもしれないが、当時は業務システムが徐々にウェブ化されてきており、現在で言うSaaS(当時の言い方ではASP)が広がっていた。
当社では「業務システムの多くがWeb化するだろう」という予想を立てていた。もちろんこういった用途では、大きなサーバを用意し専用でシステムを作るものだ。しかし、リソースを共有しつつ、セキュリティ的に隔離できるマルチテナントが作れれば、コストは低くなるし、投資サイクルとサービスのサイクルをある程度分離できる。
そこで注目されたのが、仮想化だ。
仮想化といっても一般的にはハイパバイザを用いたものが多いが、当時のコンピュータでその技術を用い、サービスレベルまでこぎつけるのは、様々な面で困難が伴う。そこで、様々な試験的サービスを作ることとなり、これがプライベートクラウドの技術的な基礎になっていく。
VMware Workstation
まず評価を行なったのが当時のVMware Workstationだ。起動時にVNC Desktopを起動し、仮想デスクトップ上にVMware Workstationだけを起動するという変則的な実装だ。ここでゲストOSを稼働させ、サーバとする。隔離性はあるものの、当時のマシンのスペックからすると1台に乗せられる仮想OSが少ないし、ライセンス的な問題もあるだろうということで、自社内の試験環境の利用にとどまった。
User Mode Linux
2つめにUML(UserMode Linux)。技術としては非常に面白いもので、テナント単位のカーネルが個別のユーザランドプロセスになる一方で、ゲストOSのプログラムが親OSからみるとカーネルスレッドに見えるというもの。当時人気を集めていたLinuxで隔離実行ができることも面白い部分だったが、リソース隔離性は低く、当時はデプロイが難しいところがあったり、多数のゲストOSの動作には一工夫が必要なこともあり、当社内では試験で終わった。
FreeBSD Jail
3つめに、FreeBSDのjail。プロセスパーティション、いわゆるコンテナ型技術で、プロセスレベルで隔離してカーネル層を共有するため、リソース利用率という意味で着目した。すでにjail break技術はちらほらとは存在したものの、プロセスレベルの隔離よりはよほど隔離性が高い。FreeBSD(※)であるということを除き、当時としては良いソリューションだと考えられた。(※当時の当社の顧客はLinuxを好んでいたため)
OpenVZ
Linuxへのコンテナ実装は、現在はLXCが標準実装であるものの当時は存在していない。また、OpenVZという技術評価も行われたが、残念ながらOSのディストリビューションにメインストリームとして入る技術ではなかったため、様々な状況で試験利用に留まった。
Xen
当時のCPUは命令セット、アーキテクチャの面の双方で、仮想化に対してはまだ貧弱であった。
XenはPVモードというモードを用意し、特権命令がなくてもハイパバイザコールを利用して、CPUやメモリ、IOの管理を割り当てる仕組みがあった。こちらは重要候補として研究されたが、一旦は社内利用に留まる。
というのは、当時の当社のメインストリームCPUの性能がまだまだだったからだ。Pentium 4 NetBurstアーキテクチャベースのXeon(Prestonia/Nocona)。このCPUは消費電力が大きく、また、当時のデータセンターは電力に余裕があまりないこともあって、1ラックあたりの集積度問題を抱えていた。このCPUはHyper-Threadingによって1CPUで2並列の動作が可能であったが、むしろ有効にすることによって、ほとんどの実アプリのベンチマークが悪化するため、無効にすることもあった。結果として、消費電力が少ないPentiumM(PentiumⅢベースのモバイル用CPU)系のCPUを搭載した小型サーバを並べた方がラック効率が高いため、その導入は何度も検討されていた。
こうした流れの中、InfiniCloudの最初のプライベートクラウドである「Phase2Server Lite」「Solaris x86 VPS」というプロジェクトへつながっていく。
FTPを避けたかった理由
まったく余談であるが、なぜこの当時FTPがすでに問題があると言われていたのかは次の理由となる。
- コントロールセッション(ステートフル)と、データセッションの2つを張る。
- データセッションのポート番号は、コントロールセッションの「データブロック」の中にテキストで入る。
- セッション接続方向は、Ported、Passiveの2種類があるため、PortedでReverse NATをするか、Passiveでアクセスする必要がある。
FTPはNATが生まれる前に作られたプロトコルのため、クライアントとホストは相互にセッションが貼っていた。しかし、NATルータを経由すると次の問題がでる。
- コントロールセッションのデータブロックにテキストでポート番号が入る為、ルータが「データブロック」を見る必要がある。
- つまり、ルータの仕事(IPヘッダを見て振り先を変える)以上の仕事、イメージで言えば小包を空けてポート番号を盗み見て、接続ポートを決めるというレイヤーバイオレーションが必要とする。
- Portedでサーバからクライアントに接続するにはPATが必要になる(Firewallに一時的にでも穴を開ける必要がある)
- Passiveでつなげてもデータセッションがデータ転送中、コントロールセッションを閉じるわけにはいかない。
- つまり、ルータとしては2つのセッションに相関関係があると認識する必要があるか、純粋にNATテーブルのタイムアウトを長くするしかない。
などなど。実はセキュリティではなく、NATルータの普及によるものだった。
その後、暗号化でも難航し、
- FTPSのデータブロックがSSLで暗号化するかどうか、プロトコルで決められ、クライアントが普及するまで時間がかかった。
- コントロールセッションの暗号化は、TLSの実装まで待たねばならなかったし、暗号化されるとNAT問題がでる。
- SFTPというSSHベースのものに一時は流された。
- シェル権限を与えることになる件が問題視されたが、sftp-serverというロジックが実装されたりしている。
当社では、これらに加えて対応を研究していたのが「WebDAV」だ。
WebDAVは、HTTPベースのプロトコルであり、HTTPSを使えば、シングルセッション、ステートレスでデータの転送ができる。ルータがNATになった時代にもマッチしているし、Windowsも標準でサポートしている。しかし、サービスとして実装したものの、Windowsの標準クライアントに癖があり、途中で転送が止まったりすることも多かったため、このときは採用を見送ることになった。
しかしその後、コンシューマー用のInfiniCLOUDのストレージサービスで、再びWebDAVが利用されることになる。