Tanzu Kubernetes v1.25 e versioni successive abilitano il controller PSA (Pod Security Admission). Con PSA è possibile applicare in modo uniforme la sicurezza dei pod utilizzando le etichette dello spazio dei nomi.
PSA abilitato in TKR 1.25 e versioni successive
Il controller Pod Security Admission è un controller Kubernetes che consente di applicare gli standard di sicurezza ai pod in esecuzione nei cluster TKG. Per impostazione predefinita, Tanzu Kubernetes v1.25 e versioni successive abilitano il controller Pod Security Admission (PSA). Il controller PSA sostituisce il controller PSP (Pod Security Policy), che è stato deprecato e rimosso. Vedere anche Configurazione di PSP per TKR 1.24 e versioni precedenti.
Tanzu Kubernetes v1.25 è una versione di transizione con PSA impostato su warn. A partire da Tanzu Kubernetes v1.26, viene applicato PSA. È consigliabile pianificare la migrazione dei carichi di lavoro del pod da PSP a PSA prima dell'aggiornamento dei cluster TKG. Per istruzioni, fare riferimento a Migrazione da Pod Security Policy al controller Pod Security Admission integrato.
Configurazione di PSA a livello di cluster
A partire da vSphere 8 Update 3, è possibile configurare PSA a livello di cluster utilizzando la variabile ClusterClass podSecurityStandard
disponibile con l'API v1beta1. Vedere API v1beta1 del cluster.
Modalità di PSA
enforce
,
audit
e
warn
. La tabella include e descrive tutte le modalità di PSA.
MODALITÀ | Descrizione |
---|---|
enforce |
Le violazioni della sicurezza causano il rifiuto del pod. |
audit |
Le violazioni della sicurezza attivano l'aggiunta di un'annotazione audit all'evento registrato nel registro di controllo, ma sono comunque consentite. |
warn |
Le violazioni della sicurezza attivano un avviso per l'utente, ma sono comunque consentite. |
Standard di PSA
LIVELLO | Descrizione |
---|---|
privileged |
Controllo senza restrizioni che fornisce il più ampio livello di autorizzazioni possibile. Questo standard di sicurezza consente l'escalation nota dei privilegi. |
baseline |
Criterio minimamente restrittivo che impedisce l'escalation nota dei privilegi. Questo standard di sicurezza consente la configurazione del pod predefinita (con specifica minima). |
restricted |
Criterio con molte restrizioni che applica le procedure consigliate per la protezione avanzata del pod. |
Etichette dello spazio dei nomi di PSA
Il controller PSA applica la sicurezza del pod a livello dello spazio dei nomi di Kubernetes. È possibile utilizzare le etichette dello spazio dei nomi per definire le modalità e i livelli di PSA che si desidera utilizzare per i pod in un determinato spazio dei nomi.
Kubernetes include un set di etichette che è possibile utilizzare per definire quale standard utilizzare per uno spazio dei nomi. L'etichetta applicata definisce l'azione che il piano di controllo Kubernetes esegue se viene rilevata una violazione di PSA. Per uno spazio dei nomi specifico, è possibile configurare una o tutte le modalità oppure impostare un livello diverso per ogni modalità.
# MODE must be one of `enforce`, `audit`, or `warn`. # LEVEL must be one of `privileged`, `baseline`, or `restricted`. pod-security.kubernetes.io/<MODE>=<LEVEL>
È inoltre possibile applicare un'etichetta di versione per modalità che possa essere utilizzata per aggiungere lo standard di sicurezza alla versione di Kubernetes. Per ulteriori informazioni, vedere Applicazione degli standard di sicurezza del pod con etichette dello spazio dei nomi.
PSA predefinito per i cluster TKG
Per impostazione predefinita, i cluster TKG di cui è stato eseguito il provisioning con Tanzu Kubernetes v1.25 hanno le modalità di PSA warn
e audit
impostate su restricted
per gli spazi dei nomi non di sistema. Si tratta di un'impostazione senza imposizione. Il controller PSA genera un avviso e una notifica di controllo se un pod viola la sicurezza, ma il pod non viene rifiutato.
enforce
di PSA è impostata su
restricted
per gli spazi dei nomi non di sistema. Se un pod viola la sicurezza, viene rifiutato. È necessario configurare PSA nello spazio dei nomi per eseguire i pod con un controllo meno restrittivo.
Versione di TKr | PSA predefinito |
---|---|
TKr v1.25 | modalità: warn | livello: limitato modalità: audit | livello: limitato modalità: enforce | livello: non impostato |
TKr v1.26 e versioni successive | modalità: enforce | livello: limitato |
Configurazione di PSA mediante le etichette dello spazio dei nomi
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/audit=privileged kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/warn=privileged
restricted
a
baseline
.
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=baseline
baseline
nello spazio dei nomi predefinito:
kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=baseline
restricted
a
privileged
.
kubectl label --overwrite ns NAMESPACE pod-security.kubernetes.io/enforce=privileged
privileged
nello spazio dei nomi predefinito:
kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=privileged
Per Tanzu Kubernetes v1.26 e versioni successive, utilizzare i comandi di esempio seguenti per rilassare rendere PSA meno restrittivo in tutti gli spazi dei nomi non di sistema.
kubectl label --overwrite ns --all pod-security.kubernetes.io/enforce=privileged
kubectl label --overwrite ns --all pod-security.kubernetes.io/warn=restricted
Configurazione del contesto di sicurezza per singoli pod
{"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