【Docker】webサーバーとアプリケーションを別のコンテナを分けてよりセキュアになるパターン

 ざっくりいうとwebサーバーコンテナのできることがアプリケーションコンテナのできることを包括していない場合、webサーバーを入口に乗っ取りを食らった時の被害が小さく済みます。アプリケーションコンテナはデータベースにアクセスできる、広い範囲のファイルをマウントしている、といったことが多い印象ですので有効なのではないでしょうか。

 Dockerは仮想環境を用意してその中で色々する仕組みです。開発用の便利ツールにもなりますしwebサービスを展開することも可能です。自分はよくPHPを使ったwebサービスを開発しており、次の様なPHPとwebサーバーが一体となったベースイメージを用いてよく開発をしています。一体型を使うのは管理するものが少なくなり楽だからです。

Image Layer Details – php:8.1-apache-buster | Docker Hub

 しかしながら本番環境では一体型ではなくPHPとwebサーバーを分離したものを好みます。これはその方がより安全だからです。

 ここではwebサーバーコンテナは外部に公開され、リクエストを受けアプリケーションコンテナに渡し、アプリケーションコンテナから返って来たレスポンスをクライアントに返す処理のみを行うコンテナ、アプリケーションコンテナをwebサービスを実現するための諸々の機能を持つコンテナとします。

 webサーバーとアプリケーションを別々のコンテナにすることが安全性につながる例として、外部公開しているwebサーバーソフト(Apche、nginxなど)の通信路を経由してwebサーバーコンテナ内のシェルで任意のコマンドを実行されるパターンが考えられます。この時アプリケーションと一体の場合アプリケーションを動かすために参照しているファイルを軒並み読み取られます。データベースを用いるアプリケーションの場合は接続情報から連なって更にやりたい放題されます。一方でwebサーバーとアプリケーションが別のコンテナに分離されている場合、webサーバーコンテナが乗っ取られたとしても、アプリケーションコンテナに直接アクセスする方法を得る、サービスを停止させることができる止まりです。先に述べた様な様々な情報を得るためにはwebサーバーの脆弱性を突いた後、更にアプリケーションコンテナの脆弱性を突く必要があります。

 このコンテナの分離の様な被害を軽減できる様々な方法は Docker のセキュリティ関連でしばしば聞く権限の最小化を目指していると自然に実現されやすいです。

Docker のセキュリティ — Docker-docs-ja 19.03 ドキュメント

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG