ネイティブコントロールを使用したKubernetesネットワークセグメンテーション

By 清水 孝郎 - SEPTEMBER 20, 2021

SHARE:

本文の内容は、2021年9月16日にOmer Azariaが投稿したブログ(https://sysdig.com/blog/kubernetes-network-segmentation-native-controls)を元に日本語に翻訳・再構成した内容となっております。

ネットワークセグメンテーションの歴史は、コンピュータネットワークの歴史とほぼ同じです。ネットワークセグメンテーションは、スイッチからルーター、ファイアウォールへと進化してきましたが、現代のネットワークが進化するにつれ、OSのネイティブな機能を使ってトラフィックをより適切に制御する機能も進化してきました。IPテーブルのようなネイティブコントロールは、アクセスコントロールリストやプロセスアイソレーションなどと並んで、国際的な共通語となりました。

ネイティブコントロールは新しい概念ではありません。実際、OSやクラウド事業者、最近ではKubernetesにも何年も前から存在しています。しかし、ほとんどのセキュリティ製品はそれらを活用していません。

セキュリティがシフトレフトし始めると、パラダイムの変化によって、組織はセキュリティプロセスの見直しを迫られます。

ここでは、ネットワークセグメンテーションとは何か、Kubernetesの時代にはどのようなものになるのか、そして近い将来、セキュリティツールに何を期待できるのかを考えてみましょう。

偉大なる抽象化

コンテナやKubernetesが登場する前は、アプリケーションはほとんどが静的で、ホストやIPアドレスと結合していました。アプリケーション間の通信には、ネットワークチームが関与してポートを開いたり、ネットワーク機器のセキュリティ設定を変更したりする必要がありました。 そして


ネットワークをセグメント化するプロセスには、複数の関係者が関わっていました。アプリケーションの所有者からネットワークチーム、セキュリティチームまでが協力して、ビジネスの機能を維持しながら必要な分離を実現する適切なルールを作成しました。初期のセグメンテーションが成功した後も、環境の変化に応じてルールを更新する必要がありました。ルールの変更には時間のかかる承認プロセスが必要で、アプリケーションの変更頻度が低いため、頻繁に行われるものではありませんでした。

Kubernetesの登場

ルーティングルールの設定や、内部アプリケーションの通信用にファイアウォールのポートを開くために、チケットを提出する必要はもうありません。サービス間のアクセスはプラットフォームに組み込まれており、複雑なルーティングは下線部のネットワークプラグインで処理されます。必要なのは、対応するサービス名を定義し、変更をデプロイすることだけで、あとは自動的に処理されます。

ルーティングに加えて、Kubernetesにはネットワークポリシーが組み込まれており、ユーザーは環境内のリソースを定義するのと同じ宣言型言語を使って、アクセス制御ルールを適用することができます。ユーザーは、インバウンドおよびアウトバウンドの接続を許可または拒否するポリシーを記述し、アプリケーションの変更ごとにポリシーを修正することができます。


開発サイクルやCI/CDにポリシーを組み込むことができるため、アプリケーションの開発速度が劇的に向上しました。セキュリティコントロールの適用が単一のプラットフォームを使って単一のチームで処理できるようになると、環境への変更の導入がよりシンプルになります。

旧世界と新世界の比較

ネットワークのセグメンテーションルールを定義し、維持するという重たいプロセスがKubernetesでは簡素化されました。アプリ開発者は、アプリが必要とするサービスを正確に表現できるようになり、アンダーライン・プラットフォームがそれを実行するようになりました。

ここで疑問に思うのは、ネイティブな機能がすぐに提供するものを実現するために、なぜ外部からプラットフォームのメカニズムを利用するのかということです。

外部のエンフォースメントを使用した方がより安全だと主張する人もいれば、ネットワークチームがネットワークセグメンテーションを担当しているので、既存のプロプライエタリな製品を使用した方が簡単だと言う人もいますが、それにはどのようなコストがかかるのでしょうか?

ネイティブコントロールを使用しないソリューションは、プラットフォームの動作に干渉する可能性があり、そのような干渉が発生した場合、問題の発見とデバッグはさらに困難になります。

その上、アプリケーションとは別にポリシーを設定・維持することは、日々の開発を複雑にします。サービス間のアクセスを可能にするために、開発者が他のチームに頼らなければならない状況で、どうやって開発プロセスを効率化できるでしょうか。

最後に、独自のセグメンテーション・ポリシーを使用することで生じる、悪名高いベンダーロックインがあります。

その結果、開発に時間がかかり、摩擦が増え、運用環境が複雑になってしまいます。

セグメンテーションソリューションの将来性

この時点で、あなたは疑問に思うかもしれません。なぜKubernetesのセグメンテーションソリューションが存在するのか?

もしKubernetesのネイティブコントロールが強力で他の製品より優れているなら、それを使うことはできないのだろうか?

Kubernetesは、主にサービス間のセグメンテーションをどのように記述、設定、実施するかというセグメンテーションの問題をいくつか解決しましたが、クラウドネイティブ環境の速いペースと常に変化する性質により、新たな課題が生まれました。
  • サービスが必要とするすべてのインバウンドおよびアウトバウンドの接続を特定すること
  • ネットワークポリシーを適用することで、本番の停止が発生しないかどうかの検証
  • アプリケーションの変更に伴うネットワークポリシーの修正
そして最後に、Kubernetesのネットワークポリシーはまだ厄介で、ネイティブなプラットフォーム言語であるにもかかわらず、開発者はそのオーサリングに苦労しています。

今後のセグメンテーションソリューションはここに注目すべきです。ネイティブコントロールはセグメンテーションに使用するのに適したエンジンですが、ポリシーを維持するための継続的なプロセスと開発サイクルへの組み込みは、依然として課題となっています。

Sysdigでは、ネイティブコントロールとオープンテクノロジー上での構築が、お客様に最高の価値を提供すると強く信じています。そのため、Sysdig Secure内でKubernetesのネットワークポリシーを数分で構築できるツールをリリースしました。5分以内に開始できます。今すぐ無料トライアルを開始してください!