Registro de todas as requisições à API Server. Quem fez o quê, quando e em qual recurso. Essencial para compliance (SOC2, PCI-DSS) e investigação pós-incidente.
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "Metadata",
"timestamp": "2024-01-15T10:23:45Z",
"user": {
"username": "arn:aws:iam::123456:user/joao", // quem fez
"groups": ["system:authenticated"]
},
"verb": "delete", // o que fez
"objectRef": {
"resource": "deployments", // em qual recurso
"namespace": "production",
"name": "meu-app"
},
"responseStatus": { "code": 200 },
"sourceIPs": ["10.0.1.55"],
"userAgent": "kubectl/v1.28"
}Requisição chegou na API Server, antes de ser processada.
Headers da resposta foram enviados, body ainda não. Só para long-running (watch).
Resposta foi completamente enviada. O stage mais comum para logar.
Panic interno na API Server. Sempre logado.
No EKS, os logs de auditoria da API Server vão para o CloudWatch Logs automaticamente quando habilitados no Control Plane Logging. Você não gerencia a política de audit — a AWS usa uma política padrão.
aws eks update-cluster-config \
--name meu-cluster \
--logging '{"clusterLogging":[{
"types": ["audit","api","authenticator"],
"enabled": true
}]}'# Log group: /aws/eks/<cluster>/cluster # Stream: kube-apiserver-audit-* fields @timestamp, @message | filter @logStream like /audit/ | filter verb = "delete" | filter objectRef.namespace = "production" | sort @timestamp desc | limit 50
verb=delete em namespaces de prod — quem deletou o quê
verb=get/list em secrets — detectar acesso não autorizado
Criação/modificação de Role, ClusterRole, Bindings
verb=create em pods/exec — quem entrou em qual container
user.username=system:anonymous — requisições não autenticadas
responseStatus.code=403 — tentativas de acesso negado