Detalhamento dos Pod Security Standards (PSS) e do Pod Security Admission para o CKS.
Os Pod Security Standards definem três níveis de política para pods: Privileged, Baseline e Restricted. Eles restringem Security Context e outros campos do Pod para reduzir privilégios e superfície de ataque. O Pod Security Admission é o controlador de admissão built-in que aplica essas políticas por namespace usando labels.
| Profile | Descrição |
|---|---|
| Privileged | Sem restrições; para cargas de sistema/infra confiáveis. Permite hostNetwork, hostPID, privileged, etc. |
| Baseline | Restrições mínimas; evita escalações de privilégio conhecidas. Proíbe host namespaces, privileged, hostPath, capabilities além da lista permitida, etc. |
| Restricted | Mais restritivo; boas práticas atuais. Exige runAsNonRoot, allowPrivilegeEscalation=false, drop ALL capabilities (só pode adicionar NET_BIND_SERVICE), seccomp explícito, volumes limitados, etc. |
Baseline e Restricted são cumulativos: Restricted inclui todas as regras do Baseline e adiciona mais.
O Pod Security Admission usa labels no namespace para definir o nível e o modo (enforce, audit, warn):
pod-security.kubernetes.io/<MODE>: <LEVEL>
enforce, audit ou warn.privileged, baseline ou restricted.| Modo | Comportamento |
|---|---|
| enforce | Violações bloqueiam a criação/atualização do Pod (ou do workload que gera o Pod). |
| audit | Violações são registradas no audit log, mas o Pod é permitido. |
| warn | Violações geram aviso para o usuário, mas o Pod é permitido. |
Um namespace pode usar um nível para enforce e outro para audit/warn (ex.: enforce=baseline, warn=restricted).
pod-security.kubernetes.io/enforce=privileged
Nenhuma restrição; equivalente a não usar PSS.
pod-security.kubernetes.io/enforce=baseline
Aplica o perfil Baseline. Rejeita pods que usam hostNetwork/hostPID/hostIPC, privileged, hostPath, capabilities não permitidas, etc.
pod-security.kubernetes.io/enforce=restricted
Aplica o perfil Restricted. Rejeita além disso runAsRoot, allowPrivilegeEscalation=true, seccomp Unconfined/ausente, capabilities além de drop ALL + opcional NET_BIND_SERVICE, etc.
# Aplicar baseline (ou restricted) no namespace
kubectl label ns <namespace> pod-security.kubernetes.io/enforce=baseline --overwrite
# Opcional: audit e warn (para logging/aviso sem bloquear)
kubectl label ns <namespace> pod-security.kubernetes.io/audit=baseline
kubectl label ns <namespace> pod-security.kubernetes.io/warn=baseline
--overwrite: atualiza o label se já existir.Para fixar a versão do padrão (por exemplo à do Kubernetes 1.29):
pod-security.kubernetes.io/enforce-version: v1.29