LinuCレベル3 セキュリティスペシャリスト 堅牢なコンテナ設計 問10
堅牢なコンテナ設計/Rootless モードRootlessモードのDockerで起動したコンテナは、コンテナの内部からインターネットへの通信はできるが、ホスト上の他のプロセスからコンテナのIPアドレスへは直接到達できない。この動作の原因として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「堅牢なコンテナ設計」に対応。実際の試験問題ではありません)
- Aコンテナはホストと同一のネットワーク名前空間を使うため、コンテナのIPとホストのIPは同じになり、外部への接続だけが許可されない
- BRootlessモードではコンテナに外向きの通信が許可されないため、インターネット接続はポート公開(-p)を経由した場合のみ可能である
- CRootlessモードはiptablesのDNATを使ってコンテナのIPをホストのIPへ変換するため、-p なしではルーティングが成立しない
- DRootlessKitが slirp4netns などのユーザー空間のネットワークスタックを使うため、コンテナのIPはホストのネットワーク名前空間からは直接到達できない
正解:D
解説
RootlessモードのDockerは、コンテナのネットワークを提供するためにRootlessKitを介して slirp4netns(または pasta)などのユーザー空間のネットワークスタックを使います。これによりコンテナはインターネットへの通信が可能ですが、コンテナに割り当てられたIPはホスト側のネットワーク名前空間からは直接到達できません。ホストからコンテナのサービスへ接続するには -p でポートを公開する必要があります。一般ユーザーはiptablesを操作できないため、ルートフルモードのようなDNATベースのネットワークは使われません。
選択肢ごとの解説
- A誤り。Rootlessモードのコンテナはホストとは別の独立したネットワーク名前空間を持ちます。コンテナのIPはホストのIPとは異なり、外向きの通信も制限されません。
- B誤り。Rootlessモードのコンテナは slirp4netns などが提供するNATを通じてインターネットへの外向き通信が可能です。ポート公開(-p)はホストからコンテナへの入方向の接続のために使います。
- C誤り。一般ユーザーはiptablesを操作する権限を持たないため、Rootlessモードではルートフルモードのようなiptablesベースのネットワークは使われません。
- D正しい。RootlessKitは slirp4netns などのユーザー空間のネットワークスタックを使い、コンテナのIPをホストのネットワーク名前空間へ直接公開せずに接続を中継します。