最も一般的なKubernetesのセキュリティ問題とそれらを軽減する方法

公開: 2021-03-30

Kubernetesとコンテナは3つのことを約束します。

  • より高速なアプリケーション開発とリリース。
  • より迅速なバグ修正。
  • フィーチャー速度の増加。

ただし、多くの場合、セキュリティが低下するという犠牲が伴います。これは、どのWeb開発テクノロジでも受け入れられないことです。

Kubernetesのセキュリティの状態を実現するために、2020年の終わりにStackRoxが実施した調査の2つの要素を次に示します。

  • 調査の参加者の90%が、過去12か月間にコンテナとKubernetesに関連するセキュリティインシデントに直面したと報告しました。
  • 参加者の44%は、Kubernetesに関するセキュリティ上の懸念から、アプリケーションのリリースを延期する必要がありました。

これらのセキュリティ上の懸念の背後にある最も一般的な理由は何ですか?

Kubernetesに関連する最も一般的なセキュリティの問題
1.設定ミス

調査によると、構成の誤りによって引き起こされるエクスポージャーは、コンテナーおよびKubernetes環境のセキュリティにおいて最も一般的なリスクです。

Kubernetesを使用してコンテナ化されたアプリを作成する場合、構成管理はセキュリティ担当者にとって最大のリスクです。

これは主に、市場が脆弱性スキャンツールでいっぱいであるが、構成管理は依然として人間の考慮に大きく依存しているためです。

ここでは、セキュリティが損なわれないようにするために、コンテナ化されたアプリの一般的なコンポーネントのいくつかを構成するためのアドバイスをいくつか紹介します。

画像:

絶対に必要ではないソフトウェアの使用は避けてください。 これには、パッケージマネージャー、ネットワークツール、curlやUnixシェルなどのクライアントが含まれます。

ソフトウェアを使用すると、セキュリティリスクが高まることを忘れないでください。 また、信頼できるソースからの画像のみを使用してください。

秘密:

画像に秘密を焼き付けたり、不必要に公開したりしないでください。

安全な方法として、信頼できるシークレット管理ツールを使用して、展開でシークレットが必要な場合にのみマウントされるようにします。

名前空間:

名前空間を惜しみなく使用してください。 これらは、Kubernetesとネットワークポリシーの境界として機能します。 名前空間を使用すると、攻撃の影響を制限でき、ミスや攻撃を含めることができるため、それらが拡散してさらに破壊されることはありません。

ランタイム特権:

特権のルールは1つだけです。つまり、ソフトウェアを最も安全にするために、特権の数を最小限に抑えます。

ネットワークポリシー

デフォルト設定によると、ポッドはKubernetesで互いに独立して通信できます。 ただし、ポッドの相互作用を制限するためにネットワークポリシーを実装することをお勧めします。 これにより、脅威がコンテナとアプリ全体に広がるのを防ぐことができます。

永続ストレージ

永続ストレージの構成と使用を適切に把握する必要があります。 これは、これが一時的なコンテナ設定で唯一の永続的なベクトルであるためです。

コントロールプレーン

Kubernetesクラスタを自分で管理している場合は、コントロールプレーンを設定することが非常に重要です。 これは、一部のクラスターがグローバルな決定を下す可能性があり、クラスターが感染するとエコシステム全体が危険にさらされる可能性があるためです。

これらおよびその他のさまざまな構成関連のセキュリティ問題を軽減するための最善のアプローチは、手動と自動の取り組みを組み合わせて、Kubernetesとその一部であるソフトウェアのセキュリティを確保するような方法で構成が行われるようにすることです。の。

2.脆弱性

過去数年間に、Kubernetesやその他のコンテナでさまざまな脆弱性が発見され、悪用されてきました。

脆弱性の最も一般的なエクスプロイトは次のとおりです。

  • 暗号マイニング。
  • マルウェアのインストール。
  • 特権の昇格。
  • ホストアクセス。

脆弱性を管理するための効果的なアプローチは、コンテナのライフサイクルの間継続する必要があるものであり、次のものを含める必要があります。

  • インストールされているオペレーティングシステムの脆弱性を含む、イメージの脆弱性の特定と解決。
  • 使用しているプログラミング言語のランタイムライブラリのすべての脆弱性を検出して軽減します。
  • 危険な脆弱性を持つイメージが本番環境でアクセス可能なコンテナレジストリに到達するのを防ぐための措置を講じます。
  • 一定レベル以上のセキュリティリスクを伴う脅威を封じ込めるための対策を講じる。
  • Kubernetesクラスターでサードパーティのアドミッションコントローラーを使用して、脆弱なコンテナーコンポーネントがスケジュールされないようにします。
3.ランタイムの脅威

Kubernetesセキュリティのすべての問題を軽減すると、ランタイムフェーズには独自のセキュリティ脅威のセットがあります。

セキュリティを強調し、あらゆる方法でリスクを最小限に抑えたとしても、実行時に敵からさまざまな脅威が発生する可能性があります。

これらの脅威を軽減するためにできることがいくつかあります。

ランタイムアクティビティモニタリング:

セキュリティに最も関連する最も多くのコンテナアクティビティから監視プロセスを開始します。 これには、プロセスアクティビティ、コンテナ化されたサービス内およびサービス間のネットワーク通信、外部サーバーおよびクライアントとの間の通信などが含まれます。

宣言型データを活用する

ビルドとデプロイの時間情報を利用して、観察されたアクティビティと期待されるアクティビティの違いを評価し、疑わしいアクティビティがあるかどうかを確認します。

ネットワーク通信を制限する

ランタイムは、許可されているネットワークトラフィックの種類と、システムの実行に必要なトラフィックの種類の違いを確認できる時間です。 これは、Kubernetesのセキュリティに脅威を与える可能性のある不要な通信を削除するために使用できる機会です。

プロセスを注意深く観察する

アプリケーションを一定期間観察して、アプリケーションが適切に機能するために実行されるすべてのプロセスを確認します。 すべての重要なプロセスのリストを作成し、アプリケーションをランダムにチェックして、通常のプロセスではないプロセスが実行されていないかどうかを確認します。

4.コンプライアンス監査の失敗

Kubernetesとコンテナのセキュリティを確保する主なものの1つは、コンプライアンスです。 ソフトウェア開発ライフサイクルでセキュリティが適切に強調されていない場合、コンプライアンス監査の失敗につながる可能性があります。

Kubernetesとコンテナのセキュリティに使用できるコンプライアンス標準は多数あります。

PCI-DSS、HIPAA、およびSOC 2は、業界固有のコンプライアンス標準です。

この点で犯された主な間違いの1つは、コンプライアンス監査を最初からSDLCの一部にしないこと、または実行時にのみ検討することです。 ソフトウェアのすべてが準拠していることを確認するには:

  • コンプライアンスを最初からSDLCの一部にします。
  • ソフトウェアのコンポーネントを準拠させるための業界標準を使用します。