名前空間のラベルを使用してPodセキュリティスタンダードを強制する

名前空間にラベルを付与することで、Podセキュリティスタンダードを強制できます。 privilegedbaselinerestrictedの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-namespaceenforce=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