cks

3.3 Pod Security Standards

Detalhamento dos Pod Security Standards (PSS) e do Pod Security Admission para o CKS.

O que é

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.

Documentação oficial

Os três níveis (profiles)

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.

Labels no namespace

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>

O que significa cada modo

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).

Possibilidades de valor para enforce

Comandos no exame

# 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

Versão do policy (opcional)

Para fixar a versão do padrão (por exemplo à do Kubernetes 1.29):

pod-security.kubernetes.io/enforce-version: v1.29

Resumo para o CKS