K01:2022 安全でないワークロード設定
Last updated
Last updated
Kubernetes におけるワークロードのセキュリティコンテキストは高度に設定できてしまうため、深刻なセキュリティの設定ミスが組織のワークロードやクラスタ全体に広がる可能性があります。 Redhat が実施した Kubernetes adoption, security, and market trends report 2022 によると、回答者の 53% 近くが過去 12 か月間に Kubernetes 環境での設定ミスのインシデントを経験しています。
Kubernetes マニフェストには特定のワークロードの信頼性、セキュリティ、スケーラビリティに影響を与える可能性のあるさまざまな設定が多く含まれています。 これらの設定は継続的に監査し修正する必要があります。影響の大きいマニフェスト設定の例をいくつか以下に示します。
アプリケーションプロセスは root として実行すべきではない: コンテナ内のプロセスを root
ユーザーで実行することは多くのクラスタに共通する設定ミスです。 ワークロードによっては root
が絶対に必要となることもありますが、可能であれば避けるべきです。コンテナが侵害された場合、攻撃者はルートレベルの権限を持ち、悪意のあるプロセスを開始するなど、システム上の他のユーザーが許可されていないアクションが可能になります。
読み取り専用ファイルシステムを使用すべきである: Kubernetes ノード上で侵害されたコンテナの影響を制限するために、可能な限り読み取り専用のファイルシステムを利用することをお勧めします。 これにより悪意のあるプロセスやアプリケーションがホストシステムに書き戻すことを防ぎます。読み取り専用のファイルシステムはコンテナのブレイクアウトを防ぐための重要なコンポーネントです。
特権コンテナを禁止すべきである: Kubernetes 内でコンテナを privileged
に設定すると、コンテナがホストの他のリソースやカーネル機能にアクセスできます。 root で実行しているワークロードを特権コンテナと組み合わせると、ユーザーがホストへ完全にアクセスできるため壊滅的となる可能性があります。 ただし、非 root ユーザーで実行している場合、これは制限されます。特権コンテナはビルトインのコンテナ分離メカニズムの多くを完全に取り除いてしまうため危険です。
リソース制約を強制すべきである: デフォルトでは、コンテナは Kubernetes クラスタ上の無制限のコンピュータリソースで実行します。 CPU リクエストと制限は Pod 内の個々のコンテナに帰属できます。 コンテナは CPU 制限を指定しない場合、コンテナが消費できる CPU リソースに上限がないことを意味します。 この柔軟性は好都合なこともありますが、コンテナがホスティングノード上で利用可能なすべての CPU リソースを利用する可能性があるため、クリプトマイニングなどの潜在的なリソース乱用のリスクももたらします。
大規模で分散した Kubernetes 環境全体でセキュアな設定を維持することは、困難な作業となる可能性があります。 多くのセキュリティ設定はマニフェスト自体の securityContext
に設定されることが多いのですが、他の場所で検出される設定ミスも多くあります。 設定ミスを防ぐには、まず実行時とコード内の両方で検出しなければなりません。 アプリケーションを以下のように適用できます。
非 root ユーザーで実行する
非特権モードで実行する
AllowPrivilegeEscalation: False を設定して、子プロセスが親プロセスより高い権限を取得できないようにする
LimitRange を設定して、ネームスペース内の該当するオブジェクトの種類ごとにリソース割り当てを制限する
Open Policy Agent などのツールは一般的な設定ミスを検出するポリシーエンジンとして使用できます。 また Kubernetes 要の CIS ベンチマークも設定ミスを発見するための出発点として使用できます。
TODO
CIS Benchmarks for Kubernetes: https://www.cisecurity.org/benchmark/kubernetes
Open Policy Agent: https://github.com/open-policy-agent/opa
Pod Security Standards: https://kubernetes.io/docs/concepts/security/pod-security-standards/