目次
■クラウド&インフラストラクチャ
2020.02.27 2024.02.20 約4分
本連載では、インターネット基盤技術、または、インターネットのインフラ技術と呼ばれる領域に関して、Webホスティングサービスの歴史やWebサーバの設計と実装を中心に執筆していきます。第9回では、これまでのセキュリティやリソース、性能の観点を踏まえた上で、どのように効率よく運用保守していくかを関連研究を踏まえて紹介しました。最終回では、前回述べた研究以外の研究最終動向をお伝えします。
連載一覧:まつもとりーのインフラ入門
Webホスティングサービスを提供する側が、サーバを運用管理する工数は、インターネットの普及に伴い、日々増加してきています。 これまで述べた通り、高集積マルチテナントアーキテクチャにおいては、ApacheのVirtualHost機能を使うことにより効率的にホストの収容数を増やすことができます。
一方で、収容数が増えることにより運用面の課題が生じてきます。 前回では、そのことについての各種研究開発について紹介してきました。
例えば以下の論文では、高集積マルチテナントアーキテクチャにおいて収容数が増えるに従って生じる性能や運用技術の課題についてまとめられていますので、復習にご利用頂くと良いかと思います。
従来のWebサーバソフトウェアはHTTPSで通信を行うために、サーバ起動時に、サーバ証明書とペアとなる秘密鍵をホストごとに読み込んでおく必要があります。 しかし、そのような仕組みでは、高集積マルチテナントアーキテクチャでのメリットである性能と低価格化の両立が難しくなります。
なぜなら、高集積にホストを収容すると、大量のサーバ証明書の読み込みによってサーバプロセスの起動に多くの時間を要したり、サーバプロセスのメモリ使用量が増加したりするからです。 さらには、サーバプロセスの起動処理や、CGIのようなプロセス複製の処理が大幅に遅くなり、性能への影響が大きくなるというデメリットもあります。 そのことについては、以下のブログエントリや筆者の博士公聴会でも、clone()システムコールの実装の観点から言及しています。
また、サーバ証明書をファイルで管理する必要があり、複数のWebサーバによる処理の分散や可用性の担保に支障をきたします。
そこで、松本らは、高集積マルチテナント方式によるWebサーバにおいて、Webサーバプロセス起動時にサーバ証明書と秘密鍵を読み込んでおくのではなく、SSL/TLSハンドシェイク時において、リクエストのあったホスト名を元に、対応するサーバ証明書と秘密鍵のデータをデータベースから動的に取得することで、Webサーバプロセスのメモリ消費量を大幅に低減する効率的なサーバ証明書の管理アーキテクチャを提案しています。
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
(記事:松本 亮介)