Tanzu Kubernetes リリース v1.25 以降では、ポッド セキュリティ アドミッション (PSA) コントローラが有効になります。PSA により、名前空間ラベルを使用してポッド セキュリティを均一に適用できます。

TKR 1.25 以降で有効な PSA

ポッド セキュリティ アドミッション コントローラは Kubernetes のコントローラで、TKG クラスタで実行されているポッドにセキュリティ標準を適用することができます。デフォルトでは、Tanzu Kubernetes リリース v1.25 以降ではポッド セキュリティ アドミッション (PSA) コントローラが有効になります。廃止および削除されたポッド セキュリティ ポリシー (PSP) コントローラは PSA コントローラに置き換えられます。TKR 1.24 以前の PSP の構成も参照してください。

Tanzu Kubernetes リリース v1.25 は、警告するように構成された PSA を含む移行リリースです。Tanzu Kubernetes リリース v1.26 以降では、PSA が適用されます。TKG クラスタのアップグレードを想定して、ポッド ワークロードを PSP から PSA に移行する必要があります。ガイダンスについては、「Migrate from Pod Security Policy to the Built-In Pod Security Admission Controller」を参照してください。

PSA クラスタ全体の構成

vSphere 8 Update 3 以降では、v1beta1 API で使用可能な podSecurityStandard ClusterClass 変数を使用して、PSA クラスタ全体を構成できます。クラスタ v1beta1 APIを参照してください。

PSA モード

PSA コントローラでは、 enforceauditwarn の 3 つのポッド セキュリティ モードがサポートされます。次の表に、各 PSA モードの一覧と説明を示します。
表 1. PSA モード
モード 説明
enforce セキュリティ違反があると、ポッドが拒否されます。
audit セキュリティ違反があると、監査ログに記録されたイベントに対する監査注釈の追加がトリガされますが、それ以外は許容されます。
warn セキュリティ違反があると、ユーザーに対する警告がトリガされますが、それ以外は許容されます。

PSA 標準

PSA コントローラでは、セキュリティ範囲をカバーすることを目的とした 3 つのレベルの ポッド セキュリティ標準が定義されています。ポッド セキュリティ標準は累積的で、許容から制限の範囲です。次の表に、各 PSA 標準の一覧と説明を示します。
表 2. PSA 標準
レベル 説明
privileged 最大限のレベルの権限を提供する無制限のコントロール。このセキュリティ標準では、既知の権限の昇格が許可されます。
baseline 最小限の制限があるコントロール。既知の権限の昇格は許可されません。このセキュリティ標準では、デフォルトの(最小限の指定がされた)ポッド構成が許可されます。
restricted ポッドのセキュリティ強化のベスト プラクティスに従って、コントロールが厳しく制限されています。

PSA 名前空間ラベル

PSA コントローラは、ポッド セキュリティを Kubernetes 名前空間のレベルで適用します。名前空間ラベルを使用して、特定の名前空間のポッドに使用する PSA モードとレベルを定義します。

Kubernetes には、名前空間に使用する標準の定義に使用できる一連のラベルが用意されています。適用するラベルは、PSA 違反が検出された場合に Kubernetes 制御プレーンが実行するアクションを定義します。特定の Kubernetes 名前空間では、任意またはすべてのモードを構成することも、異なるモードに異なるレベルを設定することもできます。

PSA 名前空間ラベルの構文は次のとおりです。
# MODE must be one of `enforce`, `audit`, or `warn`.
# LEVEL must be one of `privileged`, `baseline`, or `restricted`.
pod-security.kubernetes.io/<MODE>=<LEVEL>

また、モードごとのバージョン ラベルを適用することにより、Kubernetes バージョンにセキュリティ標準を結び付けることもできます。詳細については、「Enforce Pod Security Standards with Namespace Labels」を参照してください。

TKG クラスタのデフォルトの PSA

デフォルトでは、Tanzu Kubernetes リリース v1.25 を使用してプロビジョニングされた TKG クラスタでは、システム以外の名前空間の PSA モードである warnauditrestricted に設定されます。これは強制なしの設定です。ポッドがセキュリティに違反している場合、PSA コントローラは警告と監査通知を生成しますが、ポッドは拒否されません。

デフォルトでは、 Tanzu Kubernetes リリース v1.26 以降を使用してプロビジョニングされた TKG クラスタでは、システム以外の名前空間の PSA モードである enforcerestricted に設定されます。セキュリティに違反しているポッドは拒否されます。制限の少ないコントロールでポッドを実行するには、名前空間で PSA を構成する必要があります。
重要: kube-system、tkg-system、および vmware-system-cloud-provider 名前空間で実行されている一部のシステム ポッドには、昇格した権限が必要です。これらの名前空間はポッド セキュリティから除外されます。また、システム名前空間のポッド セキュリティは変更できません。
次の表に、TKG クラスタのデフォルトの PSA 構成を示します。
表 3. TKG クラスタのデフォルトの PSA
TKr バージョン デフォルトの PSA
TKr v1.25

モード:warn | レベル:restricted

モード:audit | レベル:restricted

モード:enforce | レベル:未設定

TKr v1.26 以降

モード:enforce | レベル:restricted

名前空間ラベルを使用した PSA の構成

Tanzu Kubernetes リリース v1.25 の場合は、次の例のコマンドを使用して、PSA 警告と監査通知が生成されないように、特定の名前空間のセキュリティ レベルを変更します。
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/audit=privileged 
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/warn=privileged
Tanzu Kubernetes リリース v1.26 以降の場合は、次の例のコマンドを使用して、PSA 標準を restricted から baseline にダウングレードします。
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=baseline
たとえば、デフォルトの名前空間に baseline 標準を適用するには、次のコマンドを実行します。
kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=baseline
Tanzu Kubernetes リリース v1.26 以降の場合は、次の例のコマンドを使用して、PSA 標準を restricted から privileged にダウングレードします。
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=privileged
たとえば、デフォルトの名前空間に privileged 標準を適用するには、次のコマンドを実行します。
kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=privileged

Tanzu Kubernetes リリース v1.26 以降では、次の例のコマンドを使用して、システム以外のすべての名前空間で PSA を緩和します。

kubectl label --overwrite ns --all pod-security.kubernetes.io/enforce=privileged
kubectl label --overwrite ns --all pod-security.kubernetes.io/warn=restricted

個々のポッドのセキュリティ コンテキストの構成

PSA に違反するポッドを実行すると、そのことを示すエラー メッセージが返されます。次に例を示します。
{"opType":"CREATE_POD","succeeded":false,"err":"creating pod example-pod: pods 
\"example-pod\" is forbidden: violates PodSecurity \"restricted:latest\": 
allowPrivilegeEscalation != false (container \"example-container\" must set 
securityContext.allowPrivilegeEscalation=false), unrestricted capabilities 
(container \"example-container\" must set securityContext.capabilities.drop=[\"ALL\"]), 
runAsNonRoot != true (pod or container \"example-container\" must set securityContext.runAsNonRoot=true), 
seccompProfile (pod or container \"example-container\" must set securityContext.seccompProfile.type to 
\"RuntimeDefault\" or \"Localhost\")","events":[]}
名前空間全体に PSA を設定する代わりに、個々のポッドのセキュリティ コンテキストを構成できます。個々のポッドを実行できるようにするには、ポッド仕様で次のようにセキュリティ コンテキストを設定します。
apiVersion: v1
kind: Pod
metadata:
  name: example-pod 
spec:
  containers:
  - image: gcr.io/google_containers/busybox:1.24
    name: example-container
    command: ["/bin/sh", "-c", "echo 'hello' > /mnt/volume1/index.html && chmod o+rX /mnt /mnt/volume1/index.html && while true ; do sleep 2 ; done"]
    securityContext:
      allowPrivilegeEscalation: false
      runAsNonRoot: true
      seccompProfile:
        type: "RuntimeDefault"
      capabilities:
        drop: [all]
    volumeMounts:
    - name: example-volume-mount
      mountPath: /mnt/volume1
  restartPolicy: Never
  volumes:
  - name: example-volume
    persistentVolumeClaim:
    claimName: example-pvc