クラウドネットワークセキュリティとは?
クラウドネットワークセキュリティは、現代のコンピューティング環境において、 コンテナ化されたアプリケーションと そのデータを保護するために重要な側面です。 オーケストレーション・プラットフォームに 関係なく、これらのアプリケーションのネットワーク通信とコンフィギュレーションのセキュリティを確保する必要があります。クラウド・ネットワーク・セキュリティは、ネットワークのセグメンテーション、ネームスペース、オーバーレイ・ネットワーク、トラフィック・フィルタリング、コンテナの暗号化に対応しています。クラウドネットワークセキュリティ技術とベストプラクティスを実装することで、組織はクリプトジャッキング、ランサムウェア、BotNetC2のようなネットワークベースの攻撃を効果的に防ぐことができます。
クラウドネットワークセキュリティの説明
すべての ワークロードは 、ベアメタルサーバー、仮想マシン、コンテナのいずれで実行されるかに関係なく、同じネットワークスタックとプロトコルで実行されます。つまり、コンテナ化されたワークロードは、クリプトジャッキング、ランサムウェア、BotNetC2など、レガシーアプリケーションと同じネットワークベースの攻撃の多くを受けます。
しかし、ネットワークベースのセキュリティ脅威は、アプリケーションをインターネットに接続するパブリック向けネットワークと、Kubernetesコンテナが互いにデータを交換するために使用する内部ネットワークの2つの方法でコンテナに影響を与えます。
クラウドネットワークセキュリティは、オーケストレーションプラットフォームに関係なく、一般的にコンテナ化されたアプリケーションのネットワーク通信と構成のセキュリティを確保することに重点を置いています。ネットワーク・セグメンテーション、ネームスペース、オーバーレイ・ネットワーク、トラフィック・フィルタリング、コンテナの暗号化などの側面を扱っています。
Kubernetesの ネットワークセキュリティは、Kubernetesクラスタ内のネットワークセキュリティを対象としており、ネットワークポリシー、イングレスとイグレスの制御、ネームスペースの分離、ロールベースのアクセス制御(RBAC)、サービスメッシュの実装など、Kubernetes固有の機能を網羅しています。
両方のタイプのネットワークで悪意のある活動の兆候を検出するには、 コンテナセキュリティと Kubernetesネットワークセキュリティの両方が要件となります。これらは別個の領域であるため、それぞれのユニークな側面をカバーするために別々の議論が必要です。このセクションでは、コンテナに関連するクラウドネットワークセキュリティのさまざまな側面を掘り下げ、環境を保護するためのベストプラクティスについて説明します。
クラウドネットワーク セキュリティ
デプロイされたコンテナは、専有データやコンピュートリソースを盗もうとする試みから保護される必要があります。クラウドネットワークセキュリティは、不要な通信をプロアクティブに制限し、デプロイメント後に脅威がアプリケーションを攻撃するのを防ぎます。
コンテナ型次世代ファイアウォール、 WebアプリケーションおよびAPIセキュリティ(WAAS)、 マイクロセグメンテーションツールは 、コンテナに出入りするすべてのトラフィック(南北および東西)を検査および保護し、 レイヤ7の完全な 可視性とKubernetes環境の制御を実現します。さらに、 コンテナ型ファイアウォールは 、急速に変化するコンテナ・インフラストラクチャのサイズや要求に合わせて動的に拡張され、ビジネス運用のためのセキュリティと帯域幅を提供します。

図1:VM-Series(仮想化次世代ファイアウォール)とCN-Series(Kubernetesベースのコンテナ型アプリケーションのセキュリティに特化したコンテナ型ファイアウォール)をオーバーレイした簡素化されたKubernetesアーキテクチャ。
ネットワーク・セグメンテーション
ネットワークのセグメンテーションとは、ネットワークをより小さく分離したセグメントに分割することで、不正アクセスを制限し、潜在的な脅威を封じ込め、ネットワーク全体のパフォーマンスを向上させることです。コンテナ化された環境では、セキュリティチームはさまざまな方法でネットワークのセグメンテーションを実現できます。
ネットワークの名前空間
ネットワーク・ネームスペースは、独自のネットワーク・インターフェイス、ルーティング・テーブル、ファイアウォール・ルールを含む個別のネットワーク・スタックをコンテナごとに作成することで、コンテナ間の分離を実現します。ネットワークネームスペースを活用することで、コンテナ同士が互いのネットワーク構成に干渉するのを防ぎ、必要なネットワークリソースのみに可視性を制限することができます。
オーバーレイネットワーク
オーバーレイネットワークは、既存の物理ネットワークの上に仮想ネットワークレイヤーを作成し、コンテナが異なるホスト間で同じネットワーク上にあるかのように通信できるようにします。コンテナ用の一般的なオーバーレイネットワークソリューションには、Dockerの組み込みオーバーレイドライバ、Flannel、Weaveなどがあります。
ネットワーク・パーティションとセキュリティ・グループ
ネットワーク・パーティションとセキュリティ・グループは、論理的な境界を作成し、特定のファイアウォール・ルールを適用してセグメント間のトラフィックを制限することで、コンテナ・ネットワークをさらにセグメント化できます。
トラフィックフィルタリングとファイアウォールルール
コンテナ型次世代ファイアウォールは、マルウェアのクラスタ内への侵入と拡散を阻止するとともに、データ流出やコマンド&コントロール(C2)攻撃に使用される悪意のあるアウトバウンド接続を防止します。シフトレフトセキュリティツールは、既知の脆弱性に対するデプロイタイムの防御を提供しますが、コンテナ型次世代ファイアウォールは、未知の脆弱性やパッチが適用されていない脆弱性に対する防御を提供します。
トラフィックフィルタリングとファイアウォールルールは、コンテナ間およびコンテナと ホスト間のトラフィックの流れを制御するために不可欠です。
出入口フィルタリング
エグレスフィルタリングはコンテナからのアウトバウンドトラフィックを制御し、イングレスフィルタリングはコンテナへのインバウンドトラフィックを制御します。イグジットとイングレスのフィルタリングを適用することで、コンテナが外部の脅威にさらされるのを制限し、必要なサービスだけに通信を制限することができます。
コンテナトラフィックへのファイアウォールルールの適用
ファイアウォールルールは、ホスト、コンテナ、ネットワークレベルなど、さまざまなレベルで適用できます。例えば、Linuxのiptablesやfirewalldを使用して、コンテナのトラフィックを制御するルールを作成し、不正アクセスや悪意のある活動からインフラを保護することができます。
ロードバランシングとトラフィックルーティング
ロードバランシングとトラフィックルーティングは、複数のコンテナにトラフィックを分散し、アプリケーションの高可用性を確保するために重要です。HAProxy、NGINX、またはKubernetesのビルトインサービスのようなソリューションは、事前に定義されたルールとヘルスチェックに基づいて適切なコンテナにトラフィックをルーティングするために使用できます。
暗号化と安全な通信
コンテナ間、およびコンテナとホスト間の通信を暗号化してセキュリティで保護することは、機密データを保護し、アプリケーションの整合性を維持するために不可欠です。
コンテナトラフィックのトランスポート レイヤー セキュリティ (TLS)
TLSはネットワーク上で送信されるデータの暗号化と認証を提供します。コンテナのトラフィックにTLSを実装することで、コンテナ間やコンテナとホスト間で送信されるデータが暗号化され、盗聴や改ざんから安全に保護されるようになります。OpenSSLやLet's Encryptのようなツールを使ってコンテナ用のTLS証明書を生成・管理することで実現できます。
コンテナ間通信のセキュリティ確保
コンテナ間の通信をセキュアにするには、Dockerの組み込み暗号化ネットワークのようなコンテナネイティブのソリューションや、コンテナ用のAPI認識ネットワークセキュリティを提供するCiliumのようなサードパーティのツールを使用できます。これらのソリューションにより、コンテナ間トラフィックの暗号化、認証、認可を実装できます。
コンテナ間通信のセキュリティ
コンテナとホスト間のセキュアな通信を確保するには、SSHやTLSで保護されたAPIなど、ホストレベルの暗号化と認証メカニズムを使用して、コンテナ管理インターフェイスやデータストレージシステムへのアクセスを制御します。
Kubernetesネットワークセキュリティ
ネットワークポリシー
ネットワークポリシーはKubernetesの重要な機能で、クラスタ内やクラスタと外部ネットワーク間のトラフィックの流れを制御できます。最新のツールにより、セキュリティチームは、基本的に、誰が、どのようなマイクロサービスへのアクセスを許可されるかを決定するポリシーを定義することができます。組織には、これらのポリシーを定義し、高度に分散したコンテナ・アプリケーション環境全体で一貫して維持できるようにするためのフレームワークが必要です。
ネットワークポリシーの定義と実施
KubernetesのネットワークポリシーはYAMLファイルを使用して定義され、ポッド、サービス、名前空間などのコンポーネント間で許可されるトラフィックを指定します。一度定義されると、これらのポリシーは、CalicoやCiliumなどのKubernetesネットワークポリシーAPIをサポートするネットワークプラグインを使用して強制することができます。
トラフィックのホワイトリストとブラックリスト
ネットワーク・ポリシーを使用して、ポッド・ラベル、IPアドレス、またはネームスペースを含む基準に基づいて、クラスタのコンポーネント間のトラフィックをホワイトリストまたはブラックリストに登録できます。これを確立することで、どのサービスが相互に通信できるかを制御し、機密データやリソースへの不正アクセスを防ぐことができます。
名前空間の分離とセグメンテーション
ネームスペース・レベルでネットワーク・ポリシーを適用することで、クラスタ内のアプリケーションや環境を分離してセグメント化し、必要なコンポーネントのみにトラフィックを制限して潜在的なセキュリティ・リスクを予防できます。
出入管理
イングレスとイグレスのトラフィックを制御することは、Kubernetesクラスタへのデータの出入りを管理し、外部の脅威から保護するために重要です。
イングレス・コントローラと負荷分散
KubernetesのIngressコントローラは、事前に定義されたルールに基づいて、外部トラフィックをクラスタ内の適切なサービスにルーティングすることを管理します。ロードバランシングは、Kubernetesの組み込みサービスや、NGINXやHAProxyのようなサードパーティのソリューションで実現できます。これらのソリューションでは、パス、ホスト、ヘッダーなどの基準に基づいてトラフィックをルーティングできます。また、TLSターミネーションやその他のセキュリティ機能を提供することもできます。
イングレス・アクセスのベスト・プラクティス
- すべてのネームスペースにdeny-allポリシーを適用することで、デフォルトの「any-any-any allow」Kubernetesポリシーを修正します。
- ロードバランサーまたはイングレスが接続されていない限り、サービスが外部IPから直接受信トラフィックを受け入れないようにします。ロードバランサーまたはイングレスからの受信トラフィックのみを許可します。
- サービスの要件に応じて、トラフィックを特定のプロトコルとポートに制限します(例:WebサービスのHTTP/HTTPS、DNSサービスのUDP 53)。
- 同じネームスペース内であれ、別のネームスペースであれ、それらを消費する他のサービス(ポッド)からのトラフィックのみを受け入れます。
- 別のネームスペースにあるポッドからイングレス・ポリシーを作成するには、ネームスペースにラベルを追加します。
出口トラフィック管理
Kubernetesクラスタからのイグジットトラフィックを制御することは、データ漏洩を防止し、アウトバウンド接続が要件に沿った宛先のみに制限されるようにするために不可欠です。これを実現するには、ポッドまたはネームスペースからの送信トラフィックのルールを定義できる、イグレス・ネットワーク・ポリシーを使用します。さらに、エグレスゲートウェイやプロキシなどのソリューションを使用して、クラスタからのアウトバウンドトラフィックを制御および監視できます。
出口アクセスのベストプラクティス
- マイクロサービスが利用する各外部サービスの必要性を理解しましょう。Prisma Cloud Compute Defenderのような製品は、マイクロサービスが関与する外部フローを特定するのに役立ちます。
- ポッドが固定IPアドレスを持たないDNS(FQDN)名に接続する必要がある場合は、KubernetesネットワークポリシーがIPアドレスのみをサポートしているため、外部のファイアウォールまたはプロキシを使用してください。
- 外部接続を必要としないポッドからの送信トラフィックを防止し、データの流出や悪意のあるバイナリのダウンロードのリスクを低減します。
- 外部依存がない場合はブロックエグレスポリシーを適用しますが、エグレスポリシーを適用する場合は、Kubernetes DNS Serviceのような重要なサービスが接続されたままであることを確認します。
IDベースの マイクロセグメンテーションは 、レイヤ3およびレイヤ4でのアプリケーション間の通信を制限するのに役立ちます。一方、コンテナ型の次世代ファイアウォールは、 レイヤ7の ディープパケットインスペクションを実行し、許可されたすべてのトラフィックをスキャンして、既知および未知の脅威を識別および防止します。
DNSポリシーとセキュリティ
DNSは、クラスタ内のサービスやその他のコンポーネントの名前解決を提供するため、Kubernetesのネットワークに不可欠です。DNSインフラストラクチャのセキュリティと完全性を確保し、 DNSスプーフィングやキャッシュポイズニングなどの攻撃を防止します。
Kubernetesには、クラスタ内のDNS解決の動作を制御するための組み込みDNSポリシーが用意されており、外部のDNSプロバイダーやDNSSecのようなDNSセキュリティソリューションを使用して、DNSインフラのセキュリティを強化することもできます。
サービスメッシュとネットワーク暗号化
サービスメッシュは、マイクロサービスやコンテナ化されたアプリケーションのために、トラフィックルーティング、ロードバランシング、セキュリティなどの高度なネットワーク機能を提供する専用のインフラストラクチャ層です。
サービスメッシュの実装
IstioやLinkerdのようなサービスメッシュソリューションをKubernetesクラスタに統合することで、高度なネットワーク機能を提供し、コンテナ化されたアプリケーションのセキュリティを強化することができます。これらのソリューションは、相互TLS、アクセス制御、トラフィック暗号化などの機能を提供し、アプリケーション、特にマイクロサービスをさまざまなセキュリティ脅威から保護するのに役立ちます。
セキュアな通信のための相互TLS(mTLS)
Mutual TLS (mTLS) は、クライアントとサーバーの両方が、安全な接続を確立する前にお互いの身元を認証するセキュリティプロトコルです。サーバーだけがクライアントによって認証される従来のTLSとは異なり、mTLSはクライアントに証明書の提示を要件とすることで、セキュリティのレイヤーを追加します。この要件が追加されることで、両者が本人であることが確認され、不正アクセスやデータ漏洩、中間者攻撃を防ぐことができます。
ネットワークトラフィックの観測可能性と制御
また、サービス・メッシュ・ソリューションは、ネットワーク・トラフィックの観測可能性と制御性を提供するため、アプリケーションのパフォーマンスとセキュリティをほぼリアルタイムで監視できます。不正アクセス、異常なトラフィック・パターン、その他の潜在的なセキュリティ問題を早期に特定することで、リスクを軽減するための是正措置を早期に講じることができます。
トラフィックと機密データの暗号化
クラスタ内のデータの機密性と完全性を確保するためには、内部通信と外部通信の両方に暗号化技術を実装することが不可欠です。
ホスト間の通信を暗号化するIPsec
IPsecは、すべてのマスターホストとノードホスト間の通信を暗号化することで、クラスタトラフィックを保護します。IPsecのオーバーヘッドに留意し、クラスタ内でIPsec通信を有効にするには、コンテナ・オーケストレーションのドキュメントを参照してください。必要な証明書を関連する証明書データベースにインポートし、クラスタ内のホスト間の通信を保護するポリシーを作成します。
IPsecオーバーヘッドの最大伝送単位(MTU)の設定
IPsec ヘッダーのオーバーヘッドに対応するために、ルートまたはスイッチングの MTU を調整します。たとえば、クラスタが最大伝送単位 (MTU) 1500 バイトのイーサネットネットワークで動作している場合、IPsec と SDN カプセル化のオーバーヘッドを考慮して SDN MTU 値を変更します。
クラスタ内のAPI通信のTLSの有効化
Kubernetesでは、クラスタ内のAPI通信はデフォルトでTLSを使用して暗号化されているものとします。ほとんどのインストール方法では、必要な証明書を作成してクラスタコンポーネントに配布します。ただし、コンポーネントやインストール方法によっては、HTTP経由のローカルポートが有効になる場合があることに注意してください。管理者は、潜在的に安全でないトラフィックを特定し、対処するために、各コンポーネントの設定について常に情報を得る必要があります。
Kubernetesコントロールプレーンのセキュリティ
特にKubernetesクラスタのコントロールプレーンは、攻撃の格好の標的です。セキュリティを強化するために、以下のコンポーネントを検査し、適切な設定を行うことで、堅牢化を図ります:
- ノードとその周辺
- マスターノード
- コア・コンポーネント
- API
- 共用ポッド
Kubernetesのデフォルト構成は一定レベルのセキュリティを提供しますが、ベストプラクティスを採用することで、ワークロードとランタイム通信のためのクラスタを強化することができます。
ネットワークポリシー(ファイアウォールルール)
Kubernetesのフラットネットワークでは、デフォルトですべてのデプロイメントがネームスペースを越えても他のデプロイメントに到達できます。このようにポッド間で分離されていないため、侵害されたワークロードが他のネットワークコンポーネントへの攻撃を開始する可能性があります。ネットワークポリシーを実装することで、隔離とセキュリティを実現できます。
ポッドセキュリティポリシー
Kubernetesでは、デフォルトでさまざまな安全でない設定でPodを実行することができます。例えば、ホスト上でroot権限を持つ特権コンテナを実行することは、ホストの名前空間やファイルシステムを使用したり、ホストのネットワークを共有したりするのと同様に、高いリスクを伴います。Podセキュリティポリシーにより、管理者はクラスタへのデプロイを許可する前にPodの権限とパーミッションを制限できます。ネットワークポリシーを使用して、非依存ポッドが互いに通信できないように隔離することで、侵害が発生した場合にコンテナ間での横方向の移動を防ぐことができます。
秘密の暗号化
Kubernetesの基本ディストリビューションは、デフォルトでは静止時の秘密を暗号化しません(GKEのようなマネージドサービスは暗号化しますが)。攻撃者がキー・バリュー・ストア(通常はEtcd)にアクセスすると、暗号化されていない秘密も含めてクラスタ内のすべてにアクセスできます。クラスタ状態ストアを暗号化することで、クラスタを静止状態のデータ流出から保護します。
役割ベースのアクセス制御
RBACはKubernetesに限ったものではありませんが、クラスタの侵害を防ぐには正しく設定する必要があります。RBACでは、ポッドまたはユーザーがアクセスできるクラスタ内のコンポーネントをきめ細かく制御できます。クラスタ内で表示、更新、削除、および作成できるユーザとポッドを制限することで、RBACは侵害の潜在的な損害を制限するのに役立ちます。
仮想パッチによる制御プレーンセキュリティへの対応
コントロールプレーンへの管理者レベルのアクセスを最小限に抑え、APIサーバーが一般に公開されないようにすることは、最も重要なセキュリティの基本です。
DevOpsと SecOpsチームはアプリケーションパッケージの脆弱性を特定できますが、これらのリスクを軽減するには時間がかかります。脆弱性のあるパッケージは、デプロイメントの前に置き換えるか、パッチを当ててテストしなければなりません。Prisma Cloudのようなソリューションは、ワークロードごとに脆弱性のマッピングを自動化し、既知の脆弱性に対する仮想パッチを提供します。 WAAS コンポーネントを利用することで、このソリューションはトラフィック検査ポリシーを調整し、リモートのHTTPベースのエクスプロイトを検出してブロックします。
コンテナとKubernetesのネットワークセキュリティのベストプラクティス
以下のベストプラクティスは、 コンテナ化された アプリケーションとデータをネットワークベースの脅威から保護するためのチェックリストです。
ネットワークトラフィックの監視とロギング
ネットワーク・トラフィックを常に監視することは、セキュリティ・インシデントを検出して対応し、コンテナ化された環境全体の健全性を維持するために最も重要です。
集中型ログ監視ソリューション
ELK Stack、Prometheus、Prisma Cloudなど、コンテナおよびKubernetes環境に一元化されたロギングおよびモニタリングソリューションを実装することで、さまざまな領域からのネットワークトラフィックデータを収集、分析、可視化できます。一元化されたデータインテルへの容易なアクセスにより、傾向を特定し、異常を検出し、インフラのパフォーマンスとセキュリティに関する洞察を得ることができます。
セキュリティ・インシデントの検知と対応
ネットワーク・トラフィックを監視し、異常または不審なアクティビティに対するアラートを設定することで、不正アクセス、データ流出、その他の悪意のあるアクティビティを含むインシデントを迅速に検出し、対応することができます。セキュリティチームは、影響を受けるコンポーネントの隔離、悪意のあるIPのブロック、ファイアウォールルールのタイムリーな更新など、適切な測定が可能です。
ネットワークトラフィックの可視化と分析
ネットワーク・トラフィック・データを視覚化して分析することで、潜在的なセキュリティ・リスクを示すパターンや傾向を特定することができます。Kibana、Grafana、またはカスタムメイドのダッシュボードのようなツールを使用して、ネットワークトラフィックの視覚的な表示を作成し、異常を発見してセキュリティインシデントをより効果的に調査できます。
セキュアなネットワーク構成
コンテナやKubernetes環境をセキュリティの脅威から保護するには、ネットワーク構成を強化し、強力なアクセス制御を実装することが不可欠です。
ホストとクラウドのネットワーク設定の強化
環境のセキュリティを維持するには、コンテナホストと個々のコンテナの両方で安全なネットワーク構成を確保する要件があります。重要な対策としては、使用していないネットワークサービスを無効にし、ネットワークアクセスを必要なコンポーネントのみに制限し、ホストオペレーティングシステムとコンテナランタイムにセキュリティパッチとアップデートを適用することです。
ネットワークアクセス制御と認証
不正アクセスを防止し、コンテナとKubernetes環境の整合性を維持するには、強力なアクセス制御と認証メカニズムを実装することが不可欠です。主な対策としては、Kubernetesのユーザー権限管理にロールベースアクセスコントロール(RBAC)を活用すること、多要素認証(MFA)を組み込むこと、VPNやファイアウォールなどのネットワークセキュリティソリューションを採用して環境へのアクセスを制限することなどが挙げられます。
定期的なネットワークセキュリティ評価
コンテナとKubernetes環境の潜在的な弱点を特定するには、脆弱性スキャン、侵入テスト、セキュリティ監査などの定期的なネットワークセキュリティ評価が必須です。このような評価では、ネットワーク構成、ファイアウォールルール、セキュリティポリシーを調査し、業界のベストプラクティスやコンプライアンス要件に準拠していることを確認します。
これらのベストプラクティスに従い、効果的なネットワークセキュリティ対策を実装することで、コンテナとKubernetes環境を潜在的なネットワークベースの脅威から守り、アプリケーションとデータの安全性と完全性を確保することができます。
クラウドネットワークセキュリティFAQ
MTU(最大伝送単位)とは、ネットワーク上で送信できるデータパケットの最大サイズのことです。ネットワークを介したデータ通信の効率とパフォーマンスを決定する上で、寄与するパラメータです。伝送制御プロトコル(TCP)は、インターネット伝送における各パケットの最大サイズを決定するためにMTUを使用します。
暗号化とカプセル化によってもたらされる追加のヘッダーオーバーヘッドに対応するために、安全な通信に IPsec を使用する場合は MTU 値を調整する必要があります。例えば、KubernetesクラスタがデフォルトのMTUが1500バイトのイーサネットネットワークで動作している場合、IPsecとSDNのカプセル化のオーバーヘッドを考慮してMTUの値を減らす必要があります。この調整により、パケットの断片化を防ぎ、より効率的で安全なデータ伝送を実現します。