このチェックリストは、開発者の観点からKubernetes上で動作するアプリケーションのセキュリティ確保に関する基本的なガイドラインを提供することを目的としています。 このリストは包括的なものではなく、時間の経過とともに発展させていくことを意図しています。
この文書の読み方と使い方について:
開発者とはKubernetesクラスターのユーザーで、名前空間スコープのオブジェクトを操作する人を想定しています。以下のチェックリストは、Kubernetesにデプロイするほとんどのアプリケーションに適用されるベースセキュリティ強化の推奨事項を提供します。
default ServiceAccountの使用を避ける。代わりに、各ワークロードまたはマイクロサービス用にServiceAccountを作成する。automountServiceAccountTokenをfalseに設定する。securityContextの推奨事項runAsNonRoot: trueを設定する。runAsUserとrunAsGroupを使用する)、コンテナイメージ内のファイルやディレクトリに適切な権限を設定する。fsGroupを使用して補助グループを追加する。securityContextの推奨事項allowPrivilegeEscalation: falseを使用して権限昇格を無効にする。readOnlyRootFilesystem: trueでルートファイルシステムを読み取り専用に設定する。privileged: falseを設定)。system:unauthenticatedグループのバインディングを確認し、可能な限り削除する。これにより、ネットワークレベルでAPIサーバーに接続できる全ての人にアクセス権が与えられることを防ぐ。create、update、deleteの権限は慎重に許可する必要があります。 patch権限をNamespaceに対して許可すると、ユーザーが名前空間やデプロイメントのラベルを更新できるようになり、攻撃対象領域が拡大する可能性があります。
機密性の高いワークロードについては、許可される書き込みアクションをさらに制限する推奨ValidatingAdmissionPolicyの提供を検討してください。
クラスターがNetworkPolicyを提供し、適用していることを確認してください。 ユーザーが異なるクラスターにデプロイするアプリケーションを作成している場合、NetworkPolicyが利用可能で適用されているとみなすことができるかどうかを確認してください。
このガイドのこのセクションでは、Kubernetes環境の構成に応じて有用となる可能性があるいくつかの高度なセキュリティ強化ポイントについて説明します。
Podとコンテナ用のSecurity Contextを設定する。
一部のコンテナは、クラスターのデフォルトランタイムが提供するものとは異なる分離レベルを必要とする場合があります。
runtimeClassNameをpodspecで使用して、異なるランタイムクラスを定義できます。
機密性の高いワークロードについては、gVisorなどのカーネルエミュレーションツールや、kata-containersなどのメカニズムを使用した仮想化分離の使用を検討してください。
高い信頼性が要求される環境では、クラスターセキュリティをさらに向上させるために機密仮想マシンの使用を検討してください。
このページの項目は、Kubernetesが必要とする機能を提供するサードパーティー製品またはプロジェクトです。Kubernetesプロジェクトの作者は、それらのサードパーティー製品またはプロジェクトに責任を負いません。詳しくは、CNCFウェブサイトのガイドラインをご覧ください。第三者のリンクを追加するような変更を提案する前に、コンテンツガイドを読むべきです。