名前空間にラベルを付与することで、Podセキュリティスタンダードを強制できます。 privileged、baseline、restrictedの3つのポリシーはセキュリティの幅広い範囲をカバーしており、Podセキュリティアドミッションコントローラーによって実装されています。
Podセキュリティアドミッションは、Kubernetes v1.23でベータとしてデフォルトで利用可能になりました。 バージョン1.25以降、Podセキュリティアドミッションは正式リリース(GA)されています。
バージョンを確認するには次のコマンドを実行してください: kubectl version.
baseline Podセキュリティスタンダードを要求する以下のマニフェストは、my-baseline-namespaceという名前空間を定義します。
この名前空間は:
baselineポリシーの要件を満たさないPodを ブロック します。restrictedポリシーの要件を満たさないPodが作成された場合、ユーザー向けの警告を生成し、監査アノテーションを追加します。baselineおよびrestrictedポリシーのバージョンをv1.35に固定します。apiVersion: v1
kind: Namespace
metadata:
name: my-baseline-namespace
labels:
pod-security.kubernetes.io/enforce: baseline
pod-security.kubernetes.io/enforce-version: v1.35
# 望ましい`enforce`レベルに設定しています。
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/audit-version: v1.35
pod-security.kubernetes.io/warn: restricted
pod-security.kubernetes.io/warn-version: v1.35
kubectl labelを使用して既存の名前空間にラベルを付与するenforceポリシー(またはバージョン)のラベルが追加または変更されると、アドミッションプラグインは名前空間内の各Podを新しいポリシーに対してテストします。
違反は警告としてユーザーに返されます。名前空間に対するセキュリティプロファイルの変更を最初に評価する際は、--dry-runフラグを使用すると便利です。
Podセキュリティスタンダードのチェックは dry run モードでも実行されるため、実際にポリシーを更新することなく、新しいポリシーが既存のPodにどのように適用されるかを確認できます。
kubectl label --dry-run=server --overwrite ns --all \
pod-security.kubernetes.io/enforce=baseline
Podセキュリティスタンダードを使い始める場合、最初のステップとしてすべての名前空間にbaselineのようなより厳格なレベルの監査アノテーションを設定するのが適切です:
kubectl label --overwrite ns --all \
pod-security.kubernetes.io/audit=baseline \
pod-security.kubernetes.io/warn=baseline
ここではenforceレベルを設定していないことに注意してください。 これにより、まだ明示的に評価されていない名前空間を区別できます。 enforceレベルが明示的に設定されていない名前空間は、次のコマンドで一覧表示できます:
kubectl get namespaces --selector='!pod-security.kubernetes.io/enforce'
特定の名前空間を更新することもできます。
次のコマンドはmy-existing-namespaceにenforce=restrictedポリシーを追加し、restrictedポリシーのバージョンをv1.35に固定します。
kubectl label --overwrite ns my-existing-namespace \
pod-security.kubernetes.io/enforce=restricted \
pod-security.kubernetes.io/enforce-version=v1.35