|
Kubernetes(通称「K8s」)は、コンテナ化されたワークロードのデプロイ、スケーリング、管理を自動化する、人気の高いオープンソースのコンテナオーケストレーションシステムです。強力なツールであるKubernetesは、コンテナの自己修復、自動スケーリング、サービスディスカバリ機能を備えており、企業ユーザーの間で広く普及しています。しかし、他の革新的なテクノロジーと同様に、Kubernetesにも内在するセキュリティリスクを十分に考慮し、対処する必要があります。 一般に、Kubernetes セキュリティは、クラスター セキュリティ、ノード セキュリティ、アプリケーション セキュリティの 3 つの主要な部分で構成されます。 - クラスター セキュリティには、認証、承認、暗号化を有効にして、API サーバー、etcd、Kubernetes コントローラー マネージャーなどのコントロール プレーン コンポーネントを保護することが含まれます。
- ノード セキュリティとは、主に、ネットワークを適切に構成し、不要なユーザー アカウントを削除し、アプリケーション アクセスのコンプライアンスを確保するなど、Kubernetes ランタイム環境を保護することを指します。
- アプリケーションセキュリティとは、Kubernetesにおいてアプリケーションを実行するコンテナであるポッドを保護することを意味します。これらのアプリケーションを保護するには、ポッド自体を保護することが前提となります。Kubernetesは、アプリケーションを保護するためのセキュリティ機能を複数提供しています。これらの機能は、リソースへのアクセス制限、ネットワークポリシーの適用、コンテナ間の安全な通信のサポートなどに利用できます。
組織が Kubernetes システムをより安全に使用できるようにするために、OWASP Foundation は最近、Kubernetes のセキュリティ リスクのトップ 10 をリストし、これらのリスクを軽減するための推奨事項を示しました。 01 安全でないワークロード構成Kubernetes マニフェストには、関連するワークロードの信頼性、セキュリティ、スケーラビリティに影響を与える膨大な構成が含まれています。これらの構成は、誤構成を防ぐために継続的に監査および修正する必要があります。特に、影響度の高いマニフェスト構成は誤構成が発生する可能性が高くなるため、これは非常に重要です。多くのセキュリティ構成は通常、マニフェスト自身の securityContext 内で設定されますが、誤構成を防ぐために、この情報は実行時やコード内など、他の場所でも検出可能である必要があります。 セキュリティチームは、Open Policy Agentなどのツールをポリシーエンジンとして使用し、Kubernetesの一般的な様々な設定ミスを検出することもできます。さらに、Kubernetes CISベンチマークを使用することも、設定ミスを発見する効果的な方法です。しかし、Kubernetesワークロードのセキュリティと信頼性を確保するために、潜在的な設定ミスを継続的に監視し、修正することも同様に重要です。 02 サプライチェーンのセキュリティ脆弱性コンテナはサプライチェーン開発ライフサイクル全体を通して様々な形で存在し、それぞれが固有のセキュリティ課題を抱えています。これは、単一のコンテナが数百もの外部サードパーティコンポーネントに依存する可能性があるため、各段階で信頼レベルが低下するためです。実際には、サプライチェーンにおける最も一般的なセキュリティ脆弱性は次のとおりです。 - イメージの整合性:コンテナイメージは複数のレイヤーで構成されており、それぞれがセキュリティリスクをもたらす可能性があります。コンテナイメージはサードパーティ製のパッケージを広く使用しているため、信頼できる環境で実行することは危険です。これを軽減するには、各段階で徹底的な検証ソフトウェアを使用してイメージの整合性を確保することが不可欠です。さらに、キーペアを使用してイメージに署名および検証することで、アーティファクトの改ざんを迅速に検出できます。これは、安全なサプライチェーンを構築するための重要なステップです。
- イメージ構成 - コンテナイメージは複数のレイヤーで構成され、それぞれがセキュリティ上の意味合いが異なります。適切に構築されたコンテナイメージは、攻撃対象領域を縮小し、デプロイ効率を向上させることができます。そのため、攻撃対象領域を縮小するためには、最小限のOSパッケージと依存関係を使用してコンテナイメージを作成することが重要です。セキュリティ体制を強化し、イメージサイズを削減するために、代替ベースイメージ(DistrolessやScratchなど)の使用を検討してください。さらに、Docker Slimなどのツールを使用してイメージのフットプリントを最適化することもできます。
- 既知のソフトウェア脆弱性 - コンテナイメージではサードパーティ製パッケージが多用されているため、セキュリティ脆弱性は非常に多く存在します。コンテナイメージ内の既知のセキュリティ問題を列挙するには、イメージの脆弱性スキャンが不可欠です。ClairやTrivyなどのオープンソースツールは、コンテナイメージの静的解析を行い、CVEなどの既知の脆弱性を検出します。そのため、これらのツールは開発サイクルのできるだけ早い段階で活用する必要があります。
03 RBACの過剰承認RBAC(ロールベースアクセス制御)は、正しく設定されていれば、不正アクセスを防止し、機密データを保護するのに役立ちます。しかし、RBACが正しく設定されていない場合、過剰な承認が行われ、ユーザーがアクセスすべきでないリソースにアクセスしたり、不正なアクションを実行したりする可能性があります。これは、データの侵害、損失、破損など、深刻なセキュリティリスクをもたらす可能性があります。 このようなリスクを防ぐには、RBAC 構成の継続的な分析と最小権限の原則(PoLP)の実装が不可欠です。これは、エンドユーザーによるクラスタへの直接アクセスを減らし、クラスタ外でのサービスアカウントトークンの使用を回避し、サードパーティコンポーネントの RBAC を監査することで実現できます。さらに、危険な RBAC 権限を検出してブロックするための集中管理ポリシーを導入し、RoleBinding を使用して権限スコープを特定の名前空間に制限し、公式に義務付けられた RBAC のベストプラクティスに従うことを強くお勧めします。 04 セキュリティポリシーが実装されていないセキュリティポリシーの適用とは、主に組織のポリシーへのコンプライアンスを確保するためのセキュリティルールと規制の実装を指します。Kubernetesアプリケーションにおいて、ポリシーの適用とは、Kubernetesクラスタが組織によって設定されたセキュリティポリシーに準拠していることを確認することを指します。これらのポリシーは、アクセス制御、リソース割り当て、ネットワークセキュリティなど、Kubernetesクラスタのあらゆる側面に関連する場合があります。 ポリシーの適用は、Kubernetes クラスターのセキュリティとコンプライアンスを確保するために不可欠です。セキュリティポリシーの適用を怠ると、セキュリティ上の脆弱性、データ損失、その他の潜在的なリスクにつながる可能性があります。さらに、セキュリティポリシーの適用は、Kubernetes クラスターの整合性と安定性を維持し、リソースが効果的かつ効率的に割り当てられるようにするのに役立ちます。 Kubernetes でのセキュリティ ポリシーの効果的な施行を確保することは非常に重要であり、これには次のものが含まれます。 - 組織の目標と規制要件に沿った戦略を定義します。
- Kubernetes ローカル リソースまたはポリシー コントローラーを使用してポリシーを実装します。
- 定期的に戦略を見直し、更新して、戦略が適切かつ効果的であることを確認します。
- ポリシー違反を監視し、速やかに修正します。
- Kubernetes 戦略とその重要性に関する教育ユーザー。
05 不十分なログ記録ロギングは、アプリケーションを実行するあらゆるシステムにとって基本的なコンポーネントです。Kubernetesのロギングも例外ではありません。これらのログは、システムの問題を特定し、システムパフォーマンスの最適化、セキュリティ脆弱性の修復、データ損失のフォレンジックに役立つ貴重な分析情報を提供します。Kubernetesログは、アプリケーションコード、Kubernetesコンポーネント、システムレベルのプロセスなど、さまざまなソースから生成できます。 Kubernetes システムを安全に活用するには、組織は運用ステータスを完全にログに記録する必要があります。 - 集中ログ システムの使用 - 集中ログ システムは、すべての Kubernetes コンポーネントとアプリケーションからのログを 1 か所に収集して保存するため、システムの問題を特定して対応することがはるかに簡単になります。
- 標準化されたログ形式を使用する - 標準化されたログ形式を使用すると、複数のソースからのログの検索と分析がはるかに容易になります。Kubernetesは、JSONやSyslogなど、複数の標準ログ形式を提供しています。セキュリティチームは、ログシステムでサポートされている形式を選択し、その形式を使用するようにKubernetesコンポーネントとアプリケーションを構成する必要があります。
- 完全なログを維持すること、つまりすべてをログに記録することで、システムの動作を包括的に把握できます。しかし、すべてをログに記録すると、大量のデータが生成されます。このデータを管理するには、ログのローテーションと保持ポリシーの設定を検討してください。
- タグとコメントの使用 - タグとコメントは、ログに追加のコンテキストを提供するKubernetesの強力な機能です。タグとコメントを使用することで、運用担当者は特定の基準に基づいてログをフィルタリングおよび検索できます。
- Kubernetesログの監視:ログを定期的に監視することで、システムの問題を迅速に特定し、タイムリーな対応が可能になります。GrafanaやKibanaなど、Kubernetesログの監視にはさまざまなツールが利用可能です。
- ログ監査 - Kubernetes のログ監査により、Kubernetes API サーバーやその他の Kubernetes コンポーネントへの変更を追跡できるようになり、不正なシステム変更を特定し、セキュリティポリシーの遵守を確保できます。Kubernetes で監査を設定するには、Kubernetes API サーバーを設定して監査イベントをログに記録し、分析のために集中ログシステムに送信する必要があります。
06 認証の破損認証の侵害は深刻なセキュリティ脅威であり、攻撃者が認証を回避してアプリケーションやシステムへの不正アクセスを可能にします。Kubernetesでは、認証侵害につながる要因はいくつかあります。 - 攻撃者がユーザーの認証情報を入手できれば、認証を回避して Kubernetes クラスターに不正アクセスできるようになります。
- Kubernetesは、X.509証明書、静的トークン、OAuthトークンなど、複数の認証メカニズムをサポートしています。認証ルールの設定が不適切だと、Kubernetesクラスターが攻撃に対して脆弱になる可能性があります。
- Kubernetesは、Kubernetes APIサーバー、kubelet、etcdなど、複数の通信チャネルを使用します。これらの通信チャネルが安全でない場合、攻撃者はトラフィックを傍受して操作し、認証をバイパスすることができます。
Kubernetes では、認証侵害を防ぐために、次のようないくつかのプロアクティブなセキュリティ対策を実装できます。 - ユーザーは、簡単に推測できない強力なパスワードまたは認証トークンを使用する必要があります。
- Kubernetes コンポーネント間の通信チャネルは SSL/TLS を使用して暗号化する必要があります。
- Kubernetes で使用される認証メカニズムは、不正アクセスを防ぐために正しく構成する必要があります。
- Kubernetes リソースへのアクセスは、ユーザー ロールに基づいて制限する必要があります。
07 ネットワークセグメント化なしKubernetesネットワークに追加の制御がない場合、あらゆるワークロードが他のワークロードと通信できます。攻撃者はこのデフォルトの動作を悪用し、実行中のワークロードを使用して内部ネットワークをプローブしたり、他のコンテナに移動したり、さらにはプライベートAPIを呼び出したりすることができます。ネットワークセグメンテーションは、ネットワークを複数の小さな独立したサブネットに分割します。これにより、攻撃者がネットワーク内を横方向に移動して機密リソースにアクセスすることがより困難になります。 組織は、Kubernetesクラスタにネットワークセグメンテーションを実装するための様々な手法を用いることで、ラテラルムーブメントを防止しつつ、有効なトラフィックを通常通りルーティングすることが可能です。Kubernetesはネットワークポリシーをサポートしており、これを用いて、どのポッドが相互に通信できるか、またどのポッドをクラスタの他の部分から分離するかを制御できます。多くのサードパーティ製ツールもKubernetesクラスタにネットワークセグメンテーションを実装できます。中でも人気の高いツールには、暗号化、ファイアウォール、侵入検知といった高度なネットワークセグメンテーション機能を提供するCalico、Weave Net、Ciliumなどがあります。 08 クラスタコンポーネントの構成ミスKubernetesクラスタは、etcd、kubelet、kube-apiserverなどの様々なコンポーネントで構成されています。すべてのコンポーネントは高度に構成可能であるため、Kubernetesのコアコンポーネントの構成ミスはクラスタのリークにつながる可能性があります。そのため、Kubernetesコントロールプランでは、各コンポーネントに対して以下の構成ミスチェックを実行する必要があります。 - 匿名認証を拒否する設定になっているかどうかを確認してください。また、Kubeletとの通信では、常に認証チェックを実行する必要があります。
- 使用している API サーバーのインターネット アクセス可能性を確認し、Kubernetes API をパブリック ネットワークから遠ざけてください。
- CISベンチマークスキャンと監査を実施することで、セキュリティチームはコンポーネントの設定ミスを排除できます。EKS、GKE、AKSなどのマネージドサービスを活用することで、安全な設定を実現し、コンポーネント設定の特定のオプションを制限することができます。
09 脆弱なサードパーティコンポーネントKubernetes クラスターは大量のサードパーティ製ソフトウェアを実行するため、セキュリティチームは脆弱なコンポーネントを保護するために多層的な戦略を構築する必要があります。以下にベストプラクティスをいくつか示します。 - CVEデータベースの追跡。Kubernetesの既知および新規の脆弱性を管理する上で重要な要素は、CVEデータベース、セキュリティ情報開示、コミュニティの最新情報を常に把握することです。セキュリティチームは、これらの情報を活用して、定期的なパッチ管理プロセスのための実用的な計画を策定できます。
- 継続的なスキャンを可能にします。OPA Gatekeeperなどのツールは、Kubernetesクラスター内の脆弱なコンポーネントを検出するためのカスタムルールの作成に役立ちます。セキュリティチームはこれらの発見を追跡・記録することで、セキュリティプロセスとポリシーを改善できます。
- サードパーティへの依存を最小限に抑えます。Kubernetesアプリケーションをデプロイする前に、サードパーティ製ソフトウェアを徹底的に監査し、過剰な権限付与RBAC、低レベルのカーネルアクセス、脆弱性の開示などを特定することが重要です。
10. 秘密(機密)管理「シークレット」とは、Kubernetes内のオブジェクトで、パスワード、証明書、APIキーなどの機密データが含まれます。シークレットには、クラスター内の他のユーザーやプロセスがアクセスできない機密データが保存されます。Kubernetesシークレットは、Kubernetesがすべてのクラスターデータを保存するために使用する分散キーバリューストアであるetcdに保存されます。シークレットはKubernetesエコシステムにおいて非常に便利な機能ですが、慎重に扱う必要があります。Kubernetesシークレットの管理は、以下の手順に分けられます。 - 保存時の暗号化を導入する:潜在的な攻撃者は、Kubernetes API経由でアクセス可能なあらゆる情報を含むetcdデータベースにアクセスすることで、クラスターの状態を詳細に把握できる可能性があります。Kubernetesは保存時の暗号化を提供します。保存時の暗号化はetcd内のシークレットリソースを保護し、etcdバックアップにアクセスする第三者からこれらのシークレットの内容が隠蔽された状態を維持します。
- 脆弱性、イメージセキュリティの問題、ポリシー適用といったセキュリティ設定ミスに対処するには、RBAC設定をロックダウンし、すべてのサービスアカウントとエンドユーザーのアクセスを最小限の権限に制限する必要があります。特にシークレットへのアクセスは重要です。Kubernetesシークレットへのアクセスが不必要に許可されないようにするためには、クラスターにインストールされているサードパーティ製プラグインやソフトウェアのRBAC設定を監査することも重要です。
- 適切なログ記録と監査の確保は極めて重要です。これは、シークレットへのアクセスを含む、悪意のある動作や異常な動作の検出に役立ちます。Kubernetes クラスターは、アクティビティに関する有用なメトリクスを生成し、それらを活用してそのような動作を検出できます。そのため、Kubernetes 監査を有効化して設定し、一元的に保存することをお勧めします。
参考リンク: https://www.sentinelone.com/blog/mastering-kubernetes-security-top-strategies-recommended-by-owasp-2/ |