Kubernetesセキュリティとは?
Kubernetesセキュリティは、Kubernetesプラットフォームとそれがオーケストレーションするコンテナを保護するために設計された一連の戦略、手法、およびテクノロジーです。 言い換えれば、K8sのセキュリティとは、コンテナのワークロードを安全に保つことです。
大まかに言うと、これは次のことを意味します。
- クラウドネイティブセキュリティの4つのC(クラウド、クラスタ、コンテナ、コード)の理解と保護。 Kubernetes 4 Csモデルは、クラウドネイティブのセキュリティを4つの異なるレイヤーに分割します。 「K8sセキュリティ」は主にクラスタ層に焦点を当てていますが、真のエンドツーエンドセキュリティを実現するには、これらの各層を脅威から適切に保護する必要があります。
- ポッドコンテナのセキュリティに関するベストプラクティスに従う。 ポッドのセキュリティポリシーとセキュリティコンテキストの取得は、K8sセキュリティの重要な側面です。
- K8s API のセキュリティ保護。 K8sアプリケーションプログラミングインターフェース(API)は、Kubernetesを拡張性とスケーラブルにするための大きな部分を占めています。 また、適切に保護されていない場合、攻撃者が悪用できる大きな攻撃対象領域でもあります。
Kubernetesセキュリティの重要性
Kubernetesは、人為的ミスの余地を減らし、安全な構成をプログラムでスケーリングできるようにすることで、コンテナセキュリティの問題を軽減するのに役立ちます。 しかし、Kubernetesは複雑で広く使用されており、幅広いユースケースで重要なインフラストラクチャの一部となっています。 さらに、CVE-2020-8554やCVE-2021-25735などの脆弱性が教えてくれたように、Kubernetesのネイティブセキュリティの問題が発生する可能性があります。
その結果、K8sプラットフォームは、ハッカーが侵害を狙う価値の高い攻撃対象領域となっています。 つまり、本番環境でコンテナとKubernetesを使用する企業は、K8sのセキュリティを真剣に受け止める必要があります。
Kubernetesのセキュリティ問題
特定のCVE以外にも、Kubernetesのセキュリティに関しては、さまざまなセキュリティ上の問題やトレードオフを考慮する必要があります。
考慮すべき主なK8sセキュリティ問題は次のとおりです。
- K8sセキュリティの人的要素。 技術的なソリューションはKubernetesのセキュリティの重要な部分ですが、企業は人的要素を考慮する必要があります。 許可されたユーザーとワークステーションのみがK8s管理タスクを実行できるようにすることに加えて、セキュリティのベストプラクティスについて管理者をトレーニングし、セキュリティを優先させることは大いに役立ちます。
- K8sとコンテナ構成管理。 多くのK8sのデフォルト設定は、最も安全なオプションではありません。 管理者は、Kubernetesの構成がセキュリティとユーザビリティの適切なバランスをとっていることを確認する必要があります。 さらに、認証トークン、SSHキー、その他の特権情報に、プレーンテキストの構成ファイルの代わりにK8s Secretsを使用することが重要です。
- K8s ネットワーク セキュリティ。 転送中のデータの暗号化は、ほとんどの運用ワークロードで必須です。 さらに、ネットワーク ポリシーを微調整して、不要な East-West トラフィックを制限し、クラスター間で マイクロセグメンテーション を可能にする必要があります。
- K8sストレージ。 転送中のデータの暗号化が必須であるのと同様に、保存データの暗号化はK8sセキュリティの重要な側面です。 企業は、ストレージのマウント方法とタイプを決定する際に、コンプライアンスとデータセキュリティを考慮する必要があります。
- パッチ管理。 常に、新しいセキュリティの問題や脆弱性が発生します。 基盤となるインフラストラクチャ、K8sプラットフォームに直接関連しているもの、コンテナイメージ、コード内の依存関係のいずれに関連している場合でも、それらを軽減するためのパッチ管理計画が必要です。
- コンプライアンス。 PCI-DSS、HIPAA、SOXなどの規制には、K8sセキュリティに関する意思決定に直接影響を与える可能性のある特定の要件があります。
Kubernetes Security Best Practices
万能のKubernetesネイティブセキュリティソリューションはありませんが、全体的なセキュリティ体制を強化するのに役立つK8sセキュリティのベストプラクティスがいくつかあります。
- 最小特権の原則に従います。 一般に、ユーザーとコンテナーには、ビジネス機能を完了するために必要な最小限のアクションのみを実行できるようにします。 K8sセキュリティの場合、これは、ポッドマニフェストでallowPrivilegeEscalation: falseを設定したり、 AppArmor カーネルセキュリティモジュールなどの機能を活用したりすることを意味します。
- セキュリティを「全員の責任」にする。 「セキュリティは全員の責任である」というスローガンがよく使われるのには理由があり、人為的ミスが重大なセキュリティリスクを生み出すからです。 アプリのビルド、テスト、デプロイに関与するすべての人がセキュリティを真剣に受け止めるようにすることで、侵害のリスクを軽減できます。
- セキュリティをパイプラインに統合します。 K8sインフラストラクチャを保護するプロセスを自動化することで、人為的ミスや設定ミスの余地をなくすことができます。 K8sとコンテナセキュリティでは、 セキュリティをシフトレフト することが大きな効果を発揮します。
- API アクセスを制限します。 すべてのAPIトラフィックを暗号化することに加えて、K8s APIにアクセスできる ユーザー と、認証後に特定のユーザーが実行できる 操作 を制限するアクセス制御を実装する必要があります。 たとえば、Kubernetesの ドキュメントは 、K8s APIの強化の出発点として最適です。
- K8s ノードへの SSH アクセスを制限します。 K8sノードへのSSHアクセスを制限することで、全体的な攻撃対象領域を大幅に削減できます。 ユーザーがコンテナーにアクセスする必要がある場合は、K8s ノードへの直接 SSH アクセスではなく、 kubectl exec コマンドのようなものを検討してください。
- ユースケースに一致するセキュリティコンテキストを選択します。 使用シナリオが異なれば、 K8sのセキュリティコンテキストも異なります。 構成で可能な限り最も安全なコンテキストを使用していることを確認してください。
- K8sネットワークをセグメント化します。 アプリケーション間のネットワークセグメンテーションにより、1つのアプリケーションが侵害されただけでインフラストラクチャ全体がダウンする可能性が低くなります。 K8sのネットワークポリシーとサードパーティのセキュリティソリューションは、クラスタにネットワークセグメンテーションを実装するのに役立ちます。
- リソースクォータを使用します。 リソースクォータが定義されていないコンテナを実行すると、さまざまな不要なリスク(例: DoS攻撃にさらされる可能性が高まります)。 ポッド、CPU、メモリにリソースクォータを実装すると、リスクを抑えることができます。
- プロアクティブなスキャンと監視を実行します。 攻撃、パッチが適用されていないソフトウェア、異常な動作、侵害をできるだけ早く検出することは、滞留時間を制限し、全体的なセキュリティ体制を改善するのに大いに役立ちます。 クブレンテスのセキュリティ専用に構築されたツールは、問題発生時の全体的な可視性と応答時間を改善するのに役立ちます。
CloudGuardでKubernetesのセキュリティを強化
これらのK8sセキュリティのベストプラクティスは、Kubernetesインフラストラクチャを保護するための優れた出発点を提供します。 クラウドで真のエンドツーエンドのセキュリティを実現するには、マルチクラウド環境でもすべてのワークロードを安全に保つのに役立つ専用ソリューションが必要です。 CloudGuardを使用すると、まさにそれが可能になります。 CloudGuardは、Kubernetesを含むさまざまなプラットフォームで以下を提供します。
- クラウドネットワークセキュリティと脅威対策
- アプリケーションセキュリティ(API保護を含む)
- コンテナとサーバーレスプラットフォームの保護
- クラウド セキュリティ ポスチャー管理
CloudGuardの動作を確認するには、 今すぐデモにサインアップしてください。 また、CloudGuardがKubernetesインフラストラクチャの保護にどのように役立つかについては、 K8sリソースのライブラリをご覧ください。