通常のネットワークでは、攻撃者がすべてのトラフィックを傍受したり操作したりできるため、プレーンテキストデータを送信することはセキュリティリスクです。安全な通信には暗号化が必要です。 Dockerコンテナーを使用する場合、仮想ネットワークインターフェイスを使用してこれらを接続できます。これらは同じセキュリティ問題の影響を受けますか、それともDockerネットワーク接続は盗聴に対して安全ですか? Dockerネットワーク上のトラフィックを暗号化する必要はありますか?
編集:すべてが同じホスト上の同じブリッジネットワーク上にある場合、2つのDockerコンテナー間のトラフィックが3番目のDockerコンテナーによってインターセプトできるかどうかに興味があります。
はい、トラフィックを保護する必要があります。
Docs.docker.comを読む:
「ネットワーク経由で安全にDockerにアクセスできるようにする必要がある場合は、tlsverifyフラグを指定し、Dockerのtlscacertフラグが信頼できるCA証明書を指すようにすることで、TLSを有効にできます。デーモンモードでは、そのCAによって署名された証明書。クライアントモードでは、そのCAによって署名された証明書を持つサーバーにのみ接続します。」
Jeff Haleによる記事 Dockerのセキュリティのヒントのトップ2 で、著者はこう書いています
「Dockerはプライベートコンテナーネットワーキングも提供します。これにより、コンテナーが同じホスト上の他のコンテナーのネットワークインターフェイスへの特権アクセスを取得できなくなります。したがって、Docker環境はある程度分離されますが、ユースケースに十分に分離されていない場合があります。」
この記事では、Dockerセキュリティを強化するための次のようなアイデアを紹介しています。
ソース:
答えは、セキュリティに関するほとんどのことと同様に、状況によって異なります。これが重要かどうかを確認するための関連情報をいくつか示します。
Dockerはデフォルトのブリッジネットワーク(docker0
(デフォルトのインストール)。これは単なる標準のLinuxブリッジネットワークです。脅威モデルはおそらく2つのシナリオのうちの1つです
どちらの場合も、攻撃者はそのネットワーク上のトラフィックやARPスプーフィングを傍受するために十分な特権を必要とします。これは一般的に、ホストに対するroot
特権を持っているか、NET_RAW
機能は、トラフィックスニッフィングとARPスプーフィングに関連する機能です。
1つのケースでは、残念ながら(セキュリティの観点から)DockerはすべてのコンテナにNET_RAW
機能はデフォルトで設定されているため、強化を行わないデフォルトのインストールでは、1つのコンテナにアクセスできる攻撃者がそのネットワーク上の他のコンテナを攻撃できます。これを軽減するには、NET_RAW
コンテナ権限から。
ケース2で、攻撃者がコンテナを実行しているホストへの特権アクセス権を持っている場合、攻撃者はそのネットワークにアクセスできますが、すべてのコンテナにもアクセスできるため、トラフィックだけを心配する必要はないでしょう。スニッフィング:)
これはすべて標準のDockerネットワークを前提としています。Kubernetesを使用している場合、さまざまなネットワークオプションが利用できるため、さらに多くの変数が使用されます。
このトピックに関するいくつかの優れた追加資料。この問題について説明するホワイトペーパー here があります。リズ・ライスは、今年のクベコンでこのトピックについて良い講演をしました(ビデオ ここ )。
もう1つの注意事項は、Dockerのデフォルトネットワークでは、Dockerによって作成された他のネットワークではなく、--icc=false
これは、コンテナー間のリンクによって明示的にホワイトリストに登録されていないコンテナー間通信を防止します。ただし、これはレガシーオプションであるため、今後はこれに依存しません。
Dockerコンテナーがブリッジデバイスを共有できることを考慮する必要があります。これにより、1つのコンテナーからのすべてのトラフィックは、両方が同じホスト上にある場合、別のコンテナーから傍受できます。
考慮すべきもう1つの変数はバグです。 Dockerホストには、Dockerインスタンスが許可されるべきでないトラフィックを盗聴できるバグがある可能性があります。したがって、そのシナリオを検討している場合は、トラフィックを暗号化するのが最善です。