Member-only story

Dockerセキュリティのすべて

gavin.zhou
Dec 1, 2022

--

Dockerとは何か、なぜ使われているのか?

実際に技術的な話に入る前に、あなたがサービスや製品などの開発とデプロイメントに関わる2つの部門を持つ企業で働いていると想像してみましょう。

彼らは制作チーム、運用チームと呼ばれます。何度も何度も打ち合わせを重ね、最終的に企業にとって必要なウェブサイトを決定します。その要件は、開発チームに送られます。そして、いよいよ開発チームの出番です。ご存知のように、Webサイトに組み込むべき機能や特徴が多ければ多いほど、より多くのライブラリやパッケージがインポートされることになります。例えば、NodeJSとexpressフレームワーク、そしてサーバーとしてMongoDBを使用するとします。最終的にWebサイトが完成したら、開発サーバー上で自分たちの端末で問題なく動作しているかどうかを確認し、本番サーバーにデプロイする作業を行う運用チームに送ります。

実際にWebサイトを開発した際に使用したnodeやexpressなどのライブラリのバージョンが、開発サーバーと本番サーバーでインストールされているものが異なる可能性がある場合があるという状況に遭遇したことはありませんか?

結果はどうなるのでしょうか?ウェブサイトがデプロイされたとき、本番サーバーでエラーが発生する可能性は十分にあります。本番サーバーでは、非推奨のライブラリやバージョンがインストールされていたり、コンフィギュレーションの問題があったり、開発サーバーでは、非推奨のライブラリやバージョンがインストールされていたりする可能性があります。いずれにせよ、最終的な結果はウェブサイトがインストールできなかったということなので、これは負けと言えるでしょう。

では、別のシナリオを考えてみましょう。開発チームはウェブサイトを作りますが、生のコードを直接運用チームに送るのではなく、コンテナを作って、その中に入れておくという方法をとります。このコンテナは、一種のサンドボックスだと考えてください。コンテナには、コードやデータベース、コンフィギュレーションファイルなどが入っており、チームはコンテナに入れたいディペンデンシーをすべてインストールすることができます。

あとは運用チームがこのコンテナをネットワークに接続し、このコンテナを実行してウェブサイトを稼働させるだけです。これがdockerです。ディペンデンシー、アーチファクト、コンフィギュレーションはすべてコンテナに保存できます。このコンテナは、サンドボックスや仮想マシンのように、他のパッケージやディペンデンシーなどに関与することなく、個別に実行されます。

なぜDockerのインストールは脆弱になるのか?

--

--

No responses yet