Kubernetes Security Best Practices
Kubernetes revolucionou a orquestração e gerenciamento de containers em escala, tornando-se o padrão de facto para implantação de aplicações cloud-native, mas sua arquitetura distribuída e complexidade inerente introduzem uma superfície de ataque significativamente expandida em comparação com modelos tradicionais de deployment. Um cluster Kubernetes típico envolve dezenas de componentes interconectados - API server, etcd, scheduler, controller manager, kubelet, kube-proxy - cada um com suas próprias vulnerabilidades potenciais e requisitos de hardening específicos. A natureza dinâmica do K8s, onde pods são criados e destruídos constantemente, workloads migram entre nodes, e políticas de rede precisam ser aplicadas em tempo real, torna a segurança um desafio multidimensional que requer abordagem de defesa em profundidade. Configurações inseguras padrão, como permissões excessivamente permissivas em RBAC, ausência de network policies que permitem comunicação irrestrita entre pods, containers rodando como root com capacidades privilegiadas, e secrets armazenados em plain text no etcd não criptografado, representam vetores de ataque comumente explorados em ambientes K8s mal configurados. Este artigo explora práticas fundamentais de hardening de clusters Kubernetes, abrangendo controle de acesso baseado em funções (RBAC), pod security standards, network policies para micro-segmentação, gerenciamento seguro de secrets, admission controllers para policy enforcement, runtime security monitoring com ferramentas como Falco, e compliance com benchmarks da indústria como CIS Kubernetes Benchmark, fornecendo um roadmap completo para construir e operar clusters Kubernetes seguros em ambientes de produção.
Arquitetura de Segurança K8s
Cluster Kubernetes possui múltiplos componentes críticos:
- Control Plane: API Server, etcd, scheduler, controller manager
- Nodes: kubelet, kube-proxy, container runtime
- Add-ons: DNS, dashboard, ingress controllers
RBAC (Role-Based Access Control)
RBAC é fundação da segurança K8s, controlando quem pode acessar o quê via API server.
Configuração RBAC
# Role para ler pods em namespace específico
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: production
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
---
# RoleBinding associa role a usuário
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: production
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
Princípios RBAC
- Least privilege: Conceder apenas permissões necessárias
- Evitar ClusterAdmin: Criar roles específicas por função
- Service accounts: Cada pod deve ter SA dedicada
- Namespace isolation: RoleBindings ao invés de ClusterRoleBindings
Pod Security
Pod Security Standards
Kubernetes 1.25+ usa Pod Security Admission ao invés de deprecated PSPs:
- Privileged: Unrestricted, para workloads confiáveis
- Baseline: Minimamente restritivo, previne escalações conhecidas
- Restricted: Heavily restricted, segue hardening best practices
Security Context
apiVersion: v1
kind: Pod
metadata:
name: secure-pod
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 2000
seccompProfile:
type: RuntimeDefault
containers:
- name: app
image: myapp:latest
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
Network Policies
Por padrão, pods podem comunicar livremente. Network Policies implementam segmentação:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: api-allow-from-frontend
namespace: production
spec:
podSelector:
matchLabels:
app: api
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
Secrets Management
- Nunca hardcode secrets: Usar Kubernetes Secrets ou external vaults
- etcd encryption: Habilitar encryption-at-rest para etcd
- External Secrets Operator: Integrar com Vault, AWS Secrets Manager
- Rotate secrets: Implementar rotação automática
- RBAC para secrets: Restringir quem pode ler secrets
Image Security
- Private registries: Não usar public registries em produção
- Image scanning: Trivy, Clair, Anchore para scan de vulnerabilidades
- Image signing: Cosign para verificar integridade
- Admission controllers: Validar images antes de deploy
- Distroless images: Minimizar attack surface
Admission Controllers
- OPA/Gatekeeper: Policy-as-code para compliance
- Kyverno: Kubernetes-native policy management
- ImagePolicyWebhook: Validar image signatures
- ResourceQuota: Limitar recursos por namespace
- LimitRanger: Enforçar limites de CPU/memoria
API Server Hardening
- Habilitar audit logging
- Usar TLS para todas comunicações
- Desabilitar anonymous auth
- Implementar API rate limiting
- Restringir acesso ao API server (network ACLs)
Runtime Security
- Falco: Runtime threat detection para K8s
- Sysdig Secure: Runtime protection e compliance
- Aqua Security: Full lifecycle container security
Compliance e Auditing
- CIS Kubernetes Benchmark: Framework de hardening
- kube-bench: Automated CIS compliance checks
- kube-hunter: Penetration testing tool para K8s
- Audit logs: Centralizar em SIEM para análise
Service Mesh Security
Service meshes (Istio, Linkerd) adicionam camada de segurança:
- mTLS automático entre pods
- Fine-grained authorization policies
- Traffic encryption in transit
- Observability e auditability
Recomendações Finais
Segurança K8s é responsabilidade compartilhada. Implemente defesa em camadas: RBAC, network policies, pod security, secrets management e runtime protection. Use ferramentas de compliance automatizadas (kube-bench) e monitore continuamente. Treine equipes em K8s security - complexidade requer expertise dedicada.
