VirtuozzoがサービスプロバイダーのDockerセキュリティを改善する方法

画像 Odin *ビジネス部門は最近、VirtuozzoでDockerコンテナのサポートを発表しました 。 このサポートは、Virtuozzoをコンテナ化された仮想化プラットフォームのインフラストラクチャ基盤として実装する戦略の一部であり、主な要件がセキュリティとパフォーマンスである環境での作業に最適です。



Dockerなどのコンテナプロジェクトは、当社の開発により競合他社と呼ばれることもあります。 実際、私たちはさまざまなレベルで働いています-Dockerはアプリケーションの管理を担当し、Dockerが使用するものも含めて仮想化しています。 その結果、多くの場合、パートナーシップとチームワークによって結び付けられます。 たとえば、Dockerと一緒に、核コンテナコンポーネントへのインターフェイスを提供するシステムライブラリプロジェクトを開発します-これは、Docker(Canonical、Google、およびRedHatとともに)によって起動されたLibcontainerプロジェクトであり、私たちのものはlibct(LXCおよびGoogleとともに)です。

以下は、共同技術が提供するこのような機会の例です。



Virtuozzo内のDockerサポートにより、Virtuozzo Linuxカーネルに「コンテナ内のコンテナ」が追加され、Virtuozzoコンテナ内にDockerコンテナを作成できます。 これは、Dockerの追加のネームスペースがVirtuozzo仮想コンテナー内に表示される方法です。 KVMなどのハイパーバイザーでの同様のシナリオはデフォルトで機能します。ゲストOSのコアとサーバーのコアはそこで分離されているため、名前空間は最初は重複していません。 コンテナ仮想化の利点を追加することで、同じことができるようになりました。つまり、クイックスタート、インスタントスケーリング、高い弾力性、物理機器のパフォーマンスと同等のパフォーマンスです。

サービスプロバイダーやマルチユーザーモードを必要とするすべての人にとって、これは、Virtuozzoコンテナーがハイパーバイザーのパフォーマンスを低下させることなくDockerセキュリティの問題を修正できることを意味します。 Docker独自の境界設定ツールは非常に限られています。たとえば、 この記事で説明したように、Dockerコマンドラインにアクセスできるということは、基本的にサーバーでrootユーザー権限を持つことを意味します。

ルートを取得できるコマンドの例を次に示します。



$ docker run -v $PWD:/stuff -t my-docker-image /bin/sh -c \ 'cp /bin/sh /stuff && chown root.root /stuff/sh && chmod a+s /stuff/sh'
      
      





画像



その実行結果は、suidビットが設定された現在のディレクトリ内のシェルのコピーになります(これにより、現在のユーザーに代わってではなく、ファイルの所有者(この場合はルート)に代わってシェルを実行できます)。



明らかに、このような構成では、Dockerを使用して多くの潜在的に敵意のあるユーザーを同じ物理機器に配置することは明確に不可能です。 物理リソースの点では分離されないため、1人のユーザーが別のユーザーのデータに簡単にアクセスして、それらを破壊できます。



ただし、Virtuozzoがサーバーで実行されている場合、この問題は簡単に解決されます。 コンテナの作成Virtuozzoはサーバーリソースを効果的に共有し、サーバーを真にマルチユーザーにします。 Virtuozzoコンテナーを使用して互いに分離されたクライアントは、物理サーバーと同じ方法でDockerを使用できますが、新しいレベルの分離とリソース管理が追加されます(したがって、クライアントは物理メモリ、ディスクスペース、リソースについて互いに競合しません)プロセッサ)。 その結果、全員が独自のDockerコンテナーを持ち、全体的なパフォーマンスは物理サーバー上にあるかのように残ります。



クラウドでアプリケーションを実行する必要があるユーザーにとってDockerが非常に便利な理由の例を次に示します。 まず、自分のラップトップでDockerアプリケーションを実行してみます。



 $ docker run hello-world Unable to find image 'hello-world:latest' locally Pulling repository hello-world 91c95931e552: Pulling image (latest) from hello-world, endpoint: https://registr91c95931e552: Download complete a8219747be10: Download complete Status: Downloaded newer image for hello-world:latest Hello from Docker. This message shows that your installation appears to be working correctly. ...
      
      







これは何度も行うことができ、コードを修正し、バグを排除します(当然、ハローワールドではなく、より便利な場合)-ある時点で決定を下します-すべての準備ができたら、リリースして実装します。



次に、これを行います。



 $ export DOCKER_HOST=tcp://server:2376 DOCKER_TLS_VERIFY=1
      
      







(TLS証明書は既に拡張されており、Dockerはそれらを信頼するように構成されていると想定されます)。 サーバーは、アプリケーションがクラウドで実行されるサーバーのアドレスです。 その上でアプリケーションの新しいコピーを開始することはすでにおなじみです



 $ docker run hello-world
      
      







完了-アプリケーションは実行されており、重要なことに、デバッグおよびテストに使用された環境およびシステムライブラリと共にサーバーに到達しました。つまり、誤った設定でアプリケーションが破損する可能性はほぼゼロです。

Virtuozzoコンテナー内のdocker unixグループのメンバーとして、各ユーザーは引き続きルートレベルへのアクセスを増やすことができますが、これはサーバーのルートではなく、分離されたコンテナーのルートになります。 つまり、Virtuozzo-containerはシングルユーザーのままです。しかし、物理サーバー上では、すでにDockerで多くのことが可能です。

これは、Virtuozzoがサポートする最初のスクリプトの1つに過ぎず、実装したアプリケーションコンテナについて話し合いたいと思います。 他にもありますので、お楽しみに。



* 2015年3月以降、Parallelsの事業部門はこの新しいブランドで運営され、サービスプロバイダー向けのソリューションを担当しています。



以下のビデオは、Virtuozzoコンテナー内でDockerを使用してWordpressを起動する方法を示しています。






All Articles