注意
Enhanced Container Isolation は、Docker Business ユーザーのみ利用できます。
Enhanced Container Isolation (強化されたコンテナー分離) は、コンテナー内で実行されている悪意のあるワークロードが Docker Desktop やホストを侵害するのを防ぐための追加のセキュリティ層を提供します。
開発者の生産性に影響を与えることなく、さまざまな高度な技術を使用してコンテナーの分離を強化します。Docker Desktop 4.13.0 以降で利用できます。
これらのテクニックには次のようなものがあります。
--privileged
フラグを指定して起動されたコンテナも含め、Linux ユーザー名前空間を通じてすべてのコンテナを特権なしで実行します。これにより、悪意のあるコンテナー ワークロードがコンテナを脱出して Docker Desktop VM とホストに感染することが困難になります。/proc
と /sys
の一部を部分的に仮想化します。Enhanced Container Isolation が有効になっている場合、これらのメカニズムは自動的に適用され、開発者への機能やパフォーマンスへの影響は最小限に抑えられます。開発者は通常どおり Docker Desktop を使用し続けますが、開発者が起動するコンテナーはより強力に分離されます。
Enhanced Container Isolation により、より強力なコンテナ分離が保証され、IT 管理者が作成したセキュリティ構成 (たとえば、Registry Access Management ポリシーや Settings Management) がロックインされます。
注意
Enhanced Container Isolation は、Docker で使用される他のコンテナー セキュリティ技術に追加されたものです。たとえば、Linux Capabilities、Seccomp、AppArmor の削減などです。
Enhanced Container Isolation をオンにすると、次の機能が有効になります。
/proc
と /sys
の一部がエミュレートされます。--privileged
フラグなど) は機能しますが、Docker Desktop VM ではなく、コンテナーの Linux ユーザー名前空間内でのみ特権が与えられます。したがって、これらを使用して Docker Desktop VM を侵害することはできません。さらに、次の制限が課されます。
--network=host
, --pid=host
は許可されません)。これらの機能と制限により、開発者のエクスペリエンスと生産性への影響を最小限に抑えながら、実行時のコンテナーのセキュリティが強化されます。
Enhanced Container Isolation の仕組みの詳細については、「How does it work (機能の仕組み)」を参照してください。
重要
Enhanced Container Isolation は Kubernetes ポッドを保護しません。既知の制限事項と回避策の詳細については、「FAQs and known issues (FAQ と既知の問題)」を参照してください。
Enhanced Container Isolation (ECI) は、すべてのプラットフォーム (Windows、Mac、Linux) 向けに Docker Desktop 4.13 で導入されました。
Windows ホストの場合、ECI は次のように Docker Desktop Hyper-V と WSL 2 バックエンドの両方で動作します。
詳細および WSL 2 で Enhanced Container Isolation を使用する場合のセキュリティ上の注意事項については、「ECI Support for WSL」を参照してください。
開発者として Enhanced Container Isolation を有効にするには:
重要
Enhanced Container Isolation では、ECI を有効にする前に作成されたコンテナは保護されません。既知の制限事項と回避策の詳細については、「FAQs and known issues (FAQ と既知の問題)」を参照してください。
管理者として Enhanced Container Isolation を有効にするには、まずサインインを強制するように registry.json
ファイルを構成する必要があります。これは、Enhanced Container Isolation 機能には Docker Business サブスクリプションが必要なため、この構成を有効にするには Docker Desktop ユーザーが組織に対して認証される必要があるためです。
次に、admin-settings.json
ファイルを作成して構成し、以下を指定する必要があります。
{
"configurationFileVersion": 2,
"enhancedContainerIsolation": {
"value": true,
"locked": true
}
}
"value": true
を設定することで、管理者は ECI がデフォルトで有効になるようにします。"locked": true
を設定することで、管理者は開発者が ECI を無効にできないようにします。開発者がこの機能を無効にできるようにしたい場合は、"locked": false
を設定します。
これを有効にするには:
重要
Docker メニューから Restart を選択するだけでは、 Docker Desktop の一部のコンポーネントが再起動されるだけなので十分ではありません。
Enhanced Container Isolation が有効になっている場合、ユーザーには次が表示されます。
確認するには、次を実行します。
$ docker run --rm alpine cat /proc/self/uid_map
次の出力が表示されます。
0 100000 65536
これは、コンテナーの root ユーザー (0) が Docker Desktop VM の非特権ユーザー (100000) にマップされていること、およびマッピングが 64K のユーザー ID の範囲に拡張されていることを示します。コンテナー プロセスがコンテナーからエスケープすると、VM レベルでの権限がなくなってしまいます。各コンテナは分離のためにホスト ユーザー ID の排他的な範囲を取得するため、ユーザー ID マッピングは新しいコンテナごとに異なります。ユーザー ID マッピングは Docker Desktop によって自動的に管理されます。詳細については、「How Enhanced Container Isolation works (拡張コンテナ分離の仕組み)」を参照してください。
対照的に、ECI を使用しない場合、Linux ユーザー名前空間はコンテナーに使用されず、次のように表示されます。
0 0 4294967295
これは、コンテナー (0) の root ユーザーが実際には Docker Desktop VM (0) の root ユーザーであることを意味し、コンテナーの分離が軽減されます。
Enhanced Container Isolation では、Docker Desktop Linux VM に埋め込まれた Sysbox コンテナー ランタイムが使用されるため、コンテナーが Enhanced Container Isolation で実行されているかどうかを確認するには、 docker inspect
を使用します。
出力は次のとおりです。
sysbox-runc
Enhanced Container Isolation を使用しない場合、docker inspect
は標準の OCI ランタイムである runc
を出力します。