エンジニアの生き様をウォッチするメディア

まつもとりーのインフラ入門-最終回「高集積マルチテナントアーキテクチャの運用技術(2)」

みなさん、こんにちは。まつもとりーのインフラ入門、今回は最終回です。本連載では、主にインターネット基盤技術、または、インターネットのインフラ技術と呼ばれる領域に関して、Webホスティングサービスの歴史やWebサーバの設計と実装を中心に執筆していくと第一回で述べました。

第九回では、これまでのセキュリティやリソース、性能の観点を踏まえた上で、どのように効率的に運用保守していくかについて、関連研究を踏まえて紹介しました。

最終回では、前回述べた以外の研究最終動向をお伝えします。

運用技術の課題振り返り

Webホスティングサービスを提供する側が、サーバを運用管理する工数は、インターネットの普及に伴い、日々増加してきています。 これまで述べた通り、高集積マルチテナントアーキテクチャにおいては、ApacheのVirtualHost機能を使うことにより効率的にホストの収容数を増やすことができます。 一方で、収容数が増えることにより運用面の課題が生じてきます。 前回では、そのことについての各種研究開発について紹介していきました。

例えば以下の論文では、高集積マルチテナントアーキテクチャにおいて収容数が増えるに従って生じる性能や運用技術の課題についてまとめられていますので、復習にご利用頂くと良いかと思います。

松本亮介, 川原将司, 松岡輝夫, 大規模共有型Webバーチャルホスティング基盤のセキュリティと運用技術の改善, 情報処理学会論文誌, Vol.54, No.3, pp.1077-1086, 2013年3月.

高集積マルチテナントWebサーバの大規模証明書管理

従来のWebサーバソフトウェアはHTTPSで通信を行うために、サーバ起動時に、サーバ証明書とペアとなる秘密鍵をホストごとに読み込んでおく必要があります。 しかし、そのような仕組みでは、高集積マルチテナントアーキテクチャでのメリットである性能と低価格化の両立が難しくなります。 なぜなら、高集積にホストを収容すると、大量のサーバ証明書の読み込みによってサーバプロセスの起動に多くの時間を要したり、サーバプロセスのメモリ使用量が増加したりするからです。 さらには、サーバプロセスの起動処理や、CGIのようなプロセス複製の処理が大幅に遅くなり、性能への影響が大きくなるというデメリットもあります。 そのことについては、以下のブログエントリや筆者の博士公聴会でも、clone()システムコールの実装の観点から言及しています。

・松本亮介, 特定条件下のclone(2)を4倍速くする,
https://hb.matsumoto-r.jp/entry/2016/07/14/055215
・松本亮介, CPU使用率100%のWebサーバをOSのチューニングだけでCPU使用率20%まで改善する,
https://hb.matsumoto-r.jp/entry/2016/07/23/000533
・松本亮介, Webサーバの高集積マルチテナント アーキテクチャに関する研究,
https://speakerdeck.com/matsumoto_r/studies-on-highly-integrated-multi-tenant-architecture-for-web-servers-1?slide=59

また、サーバ証明書をファイルで管理する必要があり、複数のWebサーバによる処理の分散や可用性の担保に支障をきたします。

そこで、松本らは、高集積マルチテナント方式によるWebサーバにおいて、Webサーバプロセス起動時にサーバ証明書と秘密鍵を読み込んでおくのではなく、SSL/TLSハンドシェイク時において、リクエストのあったホスト名を元に、対応するサーバ証明書と秘密鍵のデータをデータベースから動的に取得することで、Webサーバプロセスのメモリ消費量を大幅に低減する効率的なサーバ証明書の管理アーキテクチャを提案しています。

・Ryosuke Matsumoto, Kenji Rikitake, Kentaro Kuribayashi, Large-scale Certificate Management on Multi-tenant Web Servers, Journal of Information Processing, Vol. 27, No. 5, pp. 650-657, Sep 2019.
・松本亮介, 200万ドメインのHTTPS化を見据えたmrubyによる大規模証明書管理アーキテクチャ,
https://speakerdeck.com/matsumoto_r/2-millions-cert-by-mruby

TLSハンドシェイク時の処理時間の大部分はクライアントから送られてきた共通鍵の復号処理にかかるCPU使用時間であり、CPU使用時間に関するコストにおいても、TLSのハンドシェイク時のコストと比較し、動的に証明書を読み込む処理はコストの低い処理となります。 そのため、ほとんど性能劣化は見られず、実用上問題にならない性能がでることを実験から示しており、メモリ消費量の大幅な改善が実現できています。 また、データベースから証明書を都度取得するため、Webサーバプロセスの再起動なく収容ホストのTLS適用が可能となり、運用技術についても改善できています。

ネットワークを介した分散システムにおけるプロセスの権限分離

この研究は、筆者が現在取り組んでいる研究のひとつですが、簡単に紹介したいと思います。

単一のOS環境に複数のテナントを配置するようなマルチテナント環境において、一般的に各テナント間での権限分離はプロセスのオーナやパーミッション情報を利用します。 一方で、Webホスティングサービスをはじめ、Webサービスにおいてもコンテナによって処理を担当するプロセスの権限分離が普及している状況において、データ処理に関しては、複数の異なるオーナのプロセスがデータベースのようなミドルウェアをネットワークを介して通信し共有することで実現されるケースがあります。

そのようなシステム構成においては、単一のOS内でのプロセス間は権限分離されていても、ネットワークを介した分散システムと捉えたときには、OS側の権限分離とは独立してユーザとパスワードによってデータベースを始めとしたミドルウェアの認証を行うことになります。 すなわち、アプリケーションやシステムの脆弱性によって、特定のプロセスが他のオーナのプロセスのユーザとパスワードを取得できた場合、容易に通信先ミドルウェアの情報にアクセスできることになります。 そこで、Linuxのプロセスのオーナ情報をTCPを介したミドルウェアの認証に付与し、特定のオーナからのみミドルウェアの認証を可能とする透過的なTCPを介した権限分離手法を考えています。

まとめ

本連載では、Webサーバの高集積マルチテナントアーキテクチャの課題と関連研究の整理および基礎概念の整理を行いました。 Webホスティングサービスで実運用上採用されることの多いApacheに関する基礎概念や用語を整理した上で、高集積マルチテナントアーキテクチャにおける、運用技術、セキュリティ、および、リソース分離に関する関連研究と課題を体系的にまとめました。

ここまでの連載を通じて紹介した研究は、全て実用可能なソフトウェアとして実装されており、既にOSSとしても公開済みのmod_process_securityやmod_resource_checker、ngx_mrubyなども、各社採用事例について紹介していただいております。

・松本亮介, セキュリティと性能要件を同時に満たすサーバホスティング技術の最新動向, 第39回インターネット技術第163委員会研究会 -ITRC meet39-, 2016年5月.
・astamuse Lab, nginx + ngx_mruby でSSL証明書の動的読み込みを実現して、作業がとても楽になった話,
http://lab.astamuse.co.jp/entry/2016/11/30/114500
・GeekOut, 大規模なユーザーコンテンツのHTTPS化 Let’s Encryptも活用した「はてなブログ」のこだわり,
https://geek-out.jp/column/entry/2018/10/02/110000/
・Hironobu Saitoh, ConoHa WINGを支える技術(インフラ編),
https://speakerdeck.com/hironobu/conoha-wingwozhi-eruji-shu-inhurabian

今後の課題としては、HTTPSによる通信が当たり前となっていく中で、高集積マルチテナントアーキテクチャのように、単一のサーバプロセス群で大量のサーバ証明書を管理する必要がある場合の、効率的な管理方法 を検討する必要があります。

高集積マルチテナントアーキテクチャを採用しており、かつ、Webコンテンツを事業者が管理できないという特性を持った歴史あるWebサービスであるWebホスティングサービスの汎用性に着目し、周辺のシステムやミドルウェアの具体的な課題を体系的にまとめることによって、本連載がWebサービスにおけるシステムやミドルウェアのセキュリティや性能および運用技術の向上のための研究開発に寄与できれば幸いです。

リファレンス
本連載は下記の私が執筆した論文を参考に、新しい読者へ広めるために平易な形へと再編集しています。
・ 松本 亮介, 栗林 健太郎, 岡部 寿男, Webサーバの高集積マルチテナントアーキテクチャと運用技術, 電子情報通信 学会論文誌B, Vol.J101-B, No.1, pp.16-30, Jan 2018.
・ copyright©2018 IEICE

(記事:松本 亮介)

京都大学博士(情報学)、さくらインターネット研究所上級研究員、ペパボ研究所客員研究員、Forkwell技術顧問、セキュリティ・キャンプ講師、情報処理学会各種委員、松本亮介事務所所長。

2008年に現場の技術を知るため修士に行かずにホスティング系企業に就職したのち、2012年に異例の修士飛ばしで京都大学大学院の博士課程に入学。インターネット基盤技術の研究に取り組み、mod_mrubyやngx_mrubyなどのOSSを始めとした多数のOSSへの貢献や学術的成果を修める。

2015年4月より2018年10月までGMOペパボ株式会社にてチーフエンジニアとしてプロダクトのアーキテクトやエンジニア組織のマネージメントに従事すると同時に、ペパボ研究所では主席研究員としてOS・Middleware・HTTPに関する研究、及び、事業で実践できるレベルまで作りこむことを目標に研究に従事。

2018年11月より現職のさくらインターネット研究所で上級研究員を務める。

第9回日本OSS奨励賞や2014年度情報処理学会山下記念研究賞など、その他受賞多数。2016年に情報処理学会IPSJ-ONEにおいて時流に乗る日本の若手トップ研究者19名に選出される。