Nuvem
Segurança de containers e Kubernetes: checklist com 25 itens
Checklist prático de segurança para Docker e Kubernetes: imagens, build, registry, configuração de pods, RBAC, rede, segredos e monitoramento em produção.
Neste artigo
Containers e Kubernetes mudaram a forma como aplicações são empacotadas e operadas, e trouxeram uma superfície de ataque própria: imagens com centenas de pacotes que ninguém escolheu, manifestos YAML com permissões generosas e um plano de controle que, se comprometido, entrega tudo.
Este checklist está organizado na ordem em que o container vive: construção da imagem, armazenamento, configuração no cluster e operação.
Imagem
- Use uma imagem base mínima. Distroless, Alpine, Wolfi ou variantes slim reduzem drasticamente o número de pacotes e de CVEs. Trocar a imagem base costuma eliminar mais de 90% das vulnerabilidades de uma vez. Imagens endurecidas levam isso ao limite.
- Fixe a imagem base por digest, não por tag. Tags podem ser movidas.
- Use build em múltiplos estágios. Compiladores, gerenciadores de pacotes e ferramentas de build ficam no estágio de build, fora da imagem final.
- Rode como usuário sem privilégios. Declare
USERcom um UID diferente de zero no Dockerfile. - Nunca copie secrets para a imagem. Nem
.env, nem chaves, nem tokens de registry privado. Use secrets de build, que não ficam nas camadas. - Mantenha um
.dockerignorepara não levar.git, arquivos locais e credenciais para o contexto de build.
FROM node:22-slim@sha256:<digest> AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --ignore-scripts
COPY . .
RUN npm run build && npm prune --omit=dev
FROM gcr.io/distroless/nodejs22-debian12@sha256:<digest>
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
USER 10001
CMD ["dist/server.js"]
Build e registry
- Analise a imagem no CI, antes do push, com política que falha o build em vulnerabilidades críticas com correção disponível. Veja varredura de imagens de container.
- Continue analisando depois do push. CVEs novas aparecem para imagens antigas. O registry precisa de varredura contínua.
- Assine as imagens e verifique a assinatura no deploy.
- Gere SBOM de cada imagem e anexe como atestado. Veja o guia de SBOM.
- Restrinja quem pode fazer push no registry. Pipelines, não pessoas.
Configuração do pod
runAsNonRoot: truee umrunAsUserexplícito.allowPrivilegeEscalation: false.- Remova todas as capabilities e adicione só as necessárias.
readOnlyRootFilesystem: true, com volumes temporários onde a aplicação precisa escrever.- Sem
privileged,hostNetwork,hostPIDouhostPathsem justificativa documentada. - Defina requests e limits de CPU e memória, para que um pod comprometido não derrube o nó.
securityContext:
runAsNonRoot: true
runAsUser: 10001
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop: ["ALL"]
seccompProfile:
type: RuntimeDefault
- Aplique os Pod Security Standards no nível
restrictedpor namespace, com o admission controller nativo.
Identidade e RBAC
- Desative o automount do token da service account nos pods que não falam com a API do Kubernetes.
- Nada de
cluster-adminpara aplicações. Roles com verbos e recursos específicos, por namespace. - Use identidade de workload (IRSA na AWS, Workload Identity no GKE e no AKS) em vez de chaves de nuvem montadas como secret.
Rede
- Network policy padrão de negação em cada namespace, liberando só o tráfego necessário.
- Plano de controle privado ou restrito por IP, com autenticação integrada ao provedor de identidade.
Segredos
- Secrets do Kubernetes não são criptografados por padrão, apenas codificados em base64. Ative a criptografia em repouso no etcd ou use um gerenciador externo com sincronização, e nunca coloque secrets em ConfigMaps.
Operação
- Monitore em runtime. Varredura estática não vê um processo inesperado rodando dentro do container. A proteção em runtime bloqueia injeção e SSRF na aplicação, e a avaliação contínua do cluster detecta mudanças fora do pipeline.
Priorize pelo que está exposto
Um cluster médio tem dezenas de imagens com centenas de CVEs. Comece pelas imagens que:
- Estão rodando (imagens no registry que não rodam em lugar nenhum descem na fila)
- Estão expostas por Ingress ou LoadBalancer
- Têm permissões na nuvem que alcançam dados sensíveis
Essa combinação forma um caminho de ataque, e cortar o caminho no ponto certo vale mais que corrigir cem CVEs isoladas. A avaliação de clusters Kubernetes da TransiTax Security cruza exatamente esses sinais.
Quer ver isso rodando no seu código?
Em 30 minutos mostramos a TransiTax Security num repositório seu, separando o que é explorável do que é ruído.
Falar com um especialistaEscrito por
Equipe de Pesquisa TransiTax Security
Engenheiros de segurança de aplicações e de nuvem que acompanham registros de pacotes, bases de vulnerabilidades e técnicas de ataque. Conheça a equipe.
Perguntas frequentes
Respostas diretas às dúvidas mais comuns sobre o tema.
Como reduzir vulnerabilidades em imagens Docker?
Troque a imagem base por uma versão mínima e atualizada, use build em múltiplos estágios, remova ferramentas desnecessárias da imagem final e reconstrua as imagens com frequência.
Container rodando como root é realmente um problema?
Sim. Se a aplicação for comprometida, o atacante tem privilégios máximos dentro do container e mais chances de escapar para o nó, especialmente combinado com capabilities e montagens do host.
Secrets do Kubernetes são seguros?
Por padrão, eles são apenas codificados em base64 e ficam legíveis para quem tem acesso ao etcd ou permissão de leitura de secrets. Ative criptografia em repouso e restrinja o acesso por RBAC.
O que é Pod Security Standards?
É o conjunto de políticas nativas do Kubernetes (privileged, baseline e restricted) que definem o que um pod pode ou não fazer, aplicadas por namespace pelo admission controller integrado.
Preciso de admission controller?
É altamente recomendado. Ele impede que pods fora da política sejam criados, em vez de apenas detectar depois do deploy.