ブログ

Kubernetesセキュリティ101:基礎とベストプラクティス

Google Cloudとコンテナの継続的なセキュリティ

本文の内容は、2022年2月28日現在における、Sysdig Cloud Native Learning Hub上のKubernetes Security 101: Fundamentals and Best Practices(https://sysdig.com/learn-cloud-native/kubernetes-security/kubernetes-security-101/) を元に日本語に翻訳・再構成した内容となっております。


Kubernetesのセキュリティ確保は、一見すると謎めいた作業に見えるかもしれません。さまざまなコンポーネントで構成される非常に複雑なシステムであるKubernetesは、単にセキュリティモジュールを有効にしたり、セキュリティツールをインストールしたりするだけでは安全性を確保できません。

その代わり、Kubernetesのセキュリティでは、Kubernetesクラスター内のさまざまなレイヤやサービスに影響を及ぼす可能性のあるセキュリティリスクに対して、チームがそれぞれ対処する必要があります。たとえば、チームはKubernetesのノード、ネットワーク、ポッド、データなどを保護する方法を理解する必要があります。

さらに、Kubernetesの管理者は、Kubernetesがセキュリティの懸念に対処するためにどのツールをネイティブで提供しているか、また、ギャップを埋めるためにどのタイプのサードパーティ製セキュリティツールをクラスタに統合する必要があるかを知っておく必要があります。Kubernetesはセキュリティプラットフォームではありませんが、Role-Based Access Control (RBAC) などの特定の種類のネイティブセキュリティツールを提供しているため、これもまた複雑なトピックです。

Kubernetesの初心者で、全体の仕組みをまだ理解できていない場合、上記のすべてが圧倒的に感じられるかもしれませんし、ましてやそれを安全に保つにはどうしたらよいかもわかりません。しかし、これらの概念は、消化しやすい大きさに分割すれば、実はとてもシンプルなものなのです。この記事では、Kubernetesセキュリティのさまざまな側面について説明し、それぞれの基礎と、各レイヤーおよびサービスレベルにおけるKubernetesセキュリティのベストプラクティスを解説します。

Kubernetesのセキュリティは断片的なもの

Kubernetesのセキュリティにアプローチする最もシンプルな方法は、Kubernetesスタックの各部分に影響を与えるリスクの種類を考え、それらを保護するために利用できるツールやリソースを特定することでしょう。

ノードセキュリティ

ノードとは、Kubernetesクラスターを構成するサーバーのことです。ほとんどの場合、ノードは何らかのバージョンのLinuxを実行しますが、ワーカーノードではWindowsを実行することもあります。ノードには仮想マシンやベアメタルサーバーがありますが、セキュリティの観点からはその違いはあまり重要ではありません。

Kubernetesノードのセキュリティには、あらゆる種類のサーバーのセキュリティに使用するのと同じセキュリティ戦略を採用する必要があります。これには以下が含まれます。

  • 攻撃対象領域を最小化するために、余計なアプリケーション、ライブラリ、オペレーティングシステムの他のコンポーネントを削除する。Alpine Linuxのような最小限のLinuxディストリビューションでノードをプロビジョニングすることがベストプラクティスです。
  • 不要なユーザーアカウントを削除します。
  • 必要なとき以外は root 権限で実行しないようにします。
  • AppArmorやSELinuxのようなOSを強化するフレームワークを導入する。
  • OSのログを収集・分析し、侵入の可能性を検出する。

何らかの環境でOSレベルでサーバーを保護した経験があれば、Kubernetesのノード・セキュリティの扱い方はすでにご存知でしょう。ノードレベルでは、Kubernetesを実行しているノードを扱う場合、セキュリティの考慮事項は他の種類のサーバーと何ら変わりません。

また、マスターノードのセキュリティとワーカーノードのセキュリティに根本的な違いはありません。マスターノードのセキュリティは、マスターノードで侵害が発生するとクラスターに大きなダメージを与える可能性があるため、やや重要度が高くなりますが、マスターノードのOSを保護する手順は、ワーカーノードと同じです。

Kubernetes APIのセキュリティ

Kubernetes APIは、クラスターのさまざまなピースを結びつけるものです。そのため、Kubernetesの中で最も重要なリソースの1つであり、セキュリティを確保する必要があります。

Kubernetes APIは、デフォルトで安全な設計になっています。適切に認証と認可ができるリクエストにのみ応答します。

とはいえ、APIの認証と認可は、あなたが設定したRBACポリシーによって管理されます。したがって、APIの安全性はRBACポリシーと同じでしかありません。したがって、最小特権の原則を強制し、きめ細かく権限を割り当てる安全なRBACポリシーを作成することは、Kubernetes APIのセキュリティを確保するための基本的なベストプラクティスであると言えるでしょう。

また、アドミッションコントローラーを活用することで、APIのセキュリティをさらに強化することができます。アドミッションコントローラーは、APIサーバーがすでに認証・認可した後にリクエストを評価します。このように、アドミッションコントローラーは、許可されるべきでないリクエストに対して、オプションで二次的な防御の層を提供します。アドミッションコントローラーを有効にし、設定することで、API リクエストに関連するさまざまなセキュリティルールを適用することができます。使用可能なルールは、ここに記載されています。

最後に、安全な証明書を設定し、APIサーバーがlocalhostではなく安全なポートでリクエストを提供することを要求することによって、APIリクエストをネットワークレベルで保護することができます。

Kubernetesネットワークセキュリティ

Kubernetesネットワークセキュリティは、あらゆるネットワークのセキュリティに使用されるベスト・プラクティスに従うことから始まるという点で、ポッドのセキュリティと似ています。

可能な限り、ワークロードをパブリックインターネットから分離するネットワークアーキテクチャーを作成し、パブリックインターネットとのインターフェイスが必要な場合を除き、ワークロードを分離することを確認する必要があります。ゲートウェイレベルでファイアウォールを導入し、問題のあるホストからのトラフィックをブロックする必要があります。

ネットワークトラフィックを監視して、侵入の兆候がないかどうかを確認する必要があります。これらはすべて、サービスメッシュなど、Kubernetesの外部にあるツールを使って行うことができる手順です。

しかし、Kubernetesは、ネットワーク・リソースの安全確保に役立つネイティブ・ツールも限定的に提供しています。このツールは、ネットワークポリシーの形で提供されます。ネットワークポリシーはそれ自体セキュリティ機能ではありませんが、管理者はこれを使用して、Kubernetesクラスター内のトラフィックの流れを制御することができます。

そのため、ネットワークレベルでポッド同士を隔離したり、受信トラフィックをフィルタリングしたりするためのネットワークポリシーを作成することができます。

ネットワークポリシーは、Kubernetes以外のネットワーク設定を保護するための代用品ではなく、ネットワークアーキテクチャー全体に構築するセキュリティルールを補完する追加リソースとして考えてください。

Kubernetesポッドセキュリティ

Kubernetesでは、ポッドとは、アプリケーションを実行するために使用するコンテナまたはコンテナの集合のことです。アプリケーションを保護するためには、ポッドを保護する必要があります。

ポッドセキュリティのいくつかの側面は、Kubernetesの外部にあるプラクティスを必要とします。デプロイ前にアプリケーションのセキュリティテストを実施し、実行前にコンテナイメージをスキャンする必要があります。ポッドからログを収集し、それを解析して潜在的な違反や不正使用を検出する必要があります。

しかし、Kubernetesには、ポッドがすでに稼働している状態でポッドのセキュリティを強化できるネイティブツールがいくつか用意されています。これらには以下のようなものがあります。

  • RBACポリシー:クラスター内のユーザーおよびサービスによるポッドへのアクセスを管理するために使用できます。
  • セキュリティコンテキスト:ポッドが実行される特権レベルを定義します。
  • ネットワークポリシー:(前述のように)ネットワーク・レベルでポッドを分離するために使用できます。
  • アドミッションコントローラー:RBAC に基づいて設定したルールを基本的に拡張する追加のルールを強制することができます。

使用するポッドセキュリティツールの種類と構成方法は、ワークロードの性質に依存します。ポッドセキュリティに万能なアプローチはありません。たとえば、ネットワーク・レベルで互いに完全に分離できるポッドもあれば、通信できるようにする必要があるポッドもあります。

しかし、具体的な要件が何であれ、Kubernetesポッドを保護するために利用できるリソースを評価し、それらをフルに活用するようにする必要があります。

Kubernetesのデータセキュリティ

Kubernetesは、実行中のポッド内に存在する非永続的なデータと、ノードに保存されるログデータを除けば、いかなるデータも保存しません。通常、クラスターが作成するデータおよび/またはアクセスするデータは、ストレージプラグインを通じてKubernetesとインターフェイスする何らかの外部ストレージシステムに保存されます。

Kubernetesに関連するデータを保護するためには、あらゆる大規模ストレージシステム内のデータを保護するために使用するベストプラクティスに従う必要があります。可能な限り、静止状態のデータを暗号化する。アクセス制御ツールを使用して、データにアクセスできるユーザーを制限する。ストレージプールを管理するサーバーが適切にロックダウンされていることを確認する。データをバックアップし、データの盗難やランサムウェア攻撃から身を守る。

Kubernetesのポッドやノード内にネイティブに存在する比較的少量のデータに関しては、Kubernetesはそのデータを保護するための特別なツールを提供していません。しかし、上記で説明したベストプラクティスを使用してポッドとノードを保護することで、データを保護することができます。

その他のKubernetesセキュリティ関連リソース

上記のコンポーネント固有のセキュリティ対策に加えて、管理者はKubernetesの追加のセキュリティリソースについて知っておく必要があります。

監査ログ

Kubernetesはオプションで、クラスターでどのアクションが実行され、誰がそれを実行し、その結果がどうなったかを詳細に記録しておくことができます。この監査ログを使用することで、クラスターを包括的に監査して、潜在的なセキュリティ問題をリアルタイムで検出したり、セキュリティインシデントを事後的に調査したりすることができます。

監査ログを使用するには、まず監査ポリシーを作成し、Kubernetesがどのようにイベントを記録するかを定義する必要があります。Kubernetesのドキュメントには、監査ポリシーの確立に関する完全な詳細が記載されています。

また、Kubernetesは監査ログを大規模に分析するためのツールを提供していないため、監査ログを外部の監視プラットフォームや観測プラットフォームに流し、異常の検出や違反の警告に役立てたい場合が多いでしょう。そうでない場合は、監査イベントを手動で監視するしかありませんが、これは大規模な場合には現実的ではありません。

ネームスペース

Kubernetesでは、異なるワークロードを互いに分離するためにネームスペースを使用することができます。

すべてを単一のネームスペース内で実行することもできますが、セキュリティの観点からは、クラスター内のチームやワークロードの種類ごとに異なるネームスペースを作成することがベストプラクティスです。たとえば、開発/テスト環境と本番環境を別のネームスペースで分離することができます。

複数のネームスペースを管理すると、多くの場合(すべてではない)、ネームスペースごとに異なるRBACポリシーを作成する必要があるため、Kubernetesの管理上の複雑さがある程度増します。

しかし、そのような努力は、情報漏えいの潜在的な影響を最小限に抑えることができるため、十分な価値があります。

Kubernetesでの外部セキュリティツールの利用

Kubernetesは、クラスター内で実行されているリソースの堅牢化を支援する特定の種類のツールを提供しますが、Kubernetesはセキュリティ・インシデントの検出や管理を支援するようには設計されていません。

Kubernetesのセキュリティを大規模に管理するには、ほとんどの場合、外部のセキュリティツールを活用する必要があります。これらのツールは、以下のようないくつかの重要なセキュリティ機能を実行できます。

  • RBAC ポリシー、セキュリティコンテキスト、その他の設定データをスキャンし、セキュリティ上の問題を引き起こす可能性のある設定ミスを特定する。
  • アプリケーションとコンテナイメージのスキャン機能を提供し、Kubernetesクラスターに供給する自動化セキュリティパイプラインを構築するために使用することができる。
  • アプリケーションログと監査ログを収集、集約、分析し、侵入のシグナルとなり得る異常の検知に役立てる。

Kubernetes用の外部セキュリティツールは、さまざまなものがあります。もちろん、DevOpsチームがKubernetesやその他のクラウドネイティブ環境のすべてのレイヤーを保護できるよう専用に作られたSysdigもその1つです。

Sysdigに関するお問い合わせはこちらから

最近の投稿

カテゴリー

アーカイブ

ご質問・お問い合わせはこちら

top