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 モード
enforce
、
audit
、
warn
の 3 つのポッド セキュリティ モードがサポートされます。次の表に、各 PSA モードの一覧と説明を示します。
モード | 説明 |
---|---|
enforce |
セキュリティ違反があると、ポッドが拒否されます。 |
audit |
セキュリティ違反があると、監査ログに記録されたイベントに対する監査注釈の追加がトリガされますが、それ以外は許容されます。 |
warn |
セキュリティ違反があると、ユーザーに対する警告がトリガされますが、それ以外は許容されます。 |
PSA 標準
レベル | 説明 |
---|---|
privileged |
最大限のレベルの権限を提供する無制限のコントロール。このセキュリティ標準では、既知の権限の昇格が許可されます。 |
baseline |
最小限の制限があるコントロール。既知の権限の昇格は許可されません。このセキュリティ標準では、デフォルトの(最小限の指定がされた)ポッド構成が許可されます。 |
restricted |
ポッドのセキュリティ強化のベスト プラクティスに従って、コントロールが厳しく制限されています。 |
PSA 名前空間ラベル
PSA コントローラは、ポッド セキュリティを Kubernetes 名前空間のレベルで適用します。名前空間ラベルを使用して、特定の名前空間のポッドに使用する PSA モードとレベルを定義します。
Kubernetes には、名前空間に使用する標準の定義に使用できる一連のラベルが用意されています。適用するラベルは、PSA 違反が検出された場合に Kubernetes 制御プレーンが実行するアクションを定義します。特定の Kubernetes 名前空間では、任意またはすべてのモードを構成することも、異なるモードに異なるレベルを設定することもできます。
# 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 モードである warn
と audit
が restricted
に設定されます。これは強制なしの設定です。ポッドがセキュリティに違反している場合、PSA コントローラは警告と監査通知を生成しますが、ポッドは拒否されません。
enforce
が
restricted
に設定されます。セキュリティに違反しているポッドは拒否されます。制限の少ないコントロールでポッドを実行するには、名前空間で PSA を構成する必要があります。
TKr バージョン | デフォルトの PSA |
---|---|
TKr v1.25 | モード:warn | レベル:restricted モード:audit | レベル:restricted モード:enforce | レベル:未設定 |
TKr v1.26 以降 | モード:enforce | レベル:restricted |
名前空間ラベルを使用した PSA の構成
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/audit=privileged kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/warn=privileged
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
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
個々のポッドのセキュリティ コンテキストの構成
{"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":[]}
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