サーバー上のDockerをより安全にしようとしています。主な問題は、ほとんどの人が「Dockerにアクセスできる場合は、rootになることもできる」と言うことです。管理者のポイントはほとんどありませんが、これはあなたが望むことではありません。
詳細については、-v
を使用して/etc
をコンテナ内の/mnt
にマウントし、シャドウファイルを変更してホストにアクセスできます。 -d
、または特権オプションを使用して、さらに多くのことを行うことができます。
ですから、基本的に、私が「試して」制限したいことがいくつかあります。
--add-cap
-d
(特定のアイテム?)これまでの私の考え:
オプションの項目は、gitコードへのコミット時にコンテナーを作成し、「チェッカー」にDockerfile
の内容を確認させ、それらのイメージを作成させることです。次に、そのイメージに署名して、自動的にデプロイします。 (しかし、これはもはや彼らに多くの自由を与えないでしょう)
また、バインドボリュームを削除するのは良いことではありません。 「ユーザーXとして、/data
にのみマウントできます」というdockerのプラグインがあれば、はるかに簡単になります。ここで、USER
のDockerfile
はそのユーザーXです。
docker-novolume-plugin のようなものは、すでにボリュームの良いスタートですが、バインドボリュームを制限しません。
結局のところ、問題は、ユーザーが自分のユーザー/ドッカーとしてドッカーイメージをビルド/プル/実行し、システムをルート化できないようにするにはどうすればよいかということです。それが機能する限り、完璧である必要はありません。
docker
エンジンを保護するには、さまざまな側面に注意を払う必要があり、多層防御は常に約です。 )セキュリティのレイヤー。
リストした要件の1つである、ユーザーがdocker
エンジンに実行するように命令できることを制限することは、おそらく最も重要なものの1つです。現在のところ、docker
エンジンは承認管理。
あなたの選択肢は次のとおりです。
Twistlock のようなクローズドソースソリューション、docker
APIにアクセスするためのRBACとポリシー制御を実装するプロジェクト
OpenShift Origin 、役割ベースのアクセス制御を セキュリティ制約 および きめ細かい承認ポリシー の形式で実装するオープンソースプロジェクト。展開はかなり簡単で、すぐに使用できるソリューションを用意するのに大いに役立ちます。
また、docker
エンジンを展開できるさまざまなオペレーティングシステムを調べることをお勧めします。また、汎用OSではなく、 Atomic などの特殊なOSを使用することをお勧めします。 AtomicとOpenShiftの両方を一緒に使用すると、次のことができるようになります。
docker
の世界で 進行中の作業 です。docker
ソケットへのアクセスを制限するのに役立ちます 、 コンテナ間でファイル記述子を共有する を許可するかどうかを制御し、割り当てることができます 異なるMCSレベル 各コンテナー/コンテナーのグループに、ホストおよび他のコンテナーからそれらを分離します。