In this article
Segurança do Kubernetes: problemas comuns e boas práticas
Saiba mais sobre os problemas de segurança do Kubernetes em ambientes cloud native
O que é segurança no Kubernetes?
Segurança no Kubernetes é o conjunto de ações, processos e princípios que devem ser seguidos para proteger suas implantações do Kubernetes. Isso inclui, entre outras medidas, proteger contêineres, configurar cargas de trabalho corretamente, proteger a rede do Kubernetes e proteger sua infraestrutura.
Por que a segurança do Kubernetes é importante?
A segurança do Kubernetes é importante devido à variedade de ameaças que afetam clusters e pods, incluindo:
Agentes mal-intencionados
Malware em execução dentro de contêineres
Imagens de contêiner comprometidas
Usuários comprometidos ou não autorizados
Sem os controles adequados, um agente mal-intencionado que invada uma aplicação pode tentar assumir o controle do host ou de todo o cluster.
Onde o Kubernetes se encaixa no processo geral de desenvolvimento?
No diagrama abaixo, vemos onde a segurança do Kubernetes se encaixa no ciclo de vida do desenvolvimento de software (SDLC). O código é testado após a etapa de build para garantir que vulnerabilidades não cheguem ao ambiente Kubernetes em produção. Em seguida, a implantação e a segurança da infraestrutura em nuvem monitoram as aplicações em execução e enviam informações aos desenvolvedores, criando um ciclo de feedback positivo do código à nuvem e de volta ao código.

Principais problemas de segurança do Kubernetes
Embora existam vários problemas de segurança no Kubernetes, os três mais importantes são:
Configuração dos controles de segurança do Kubernetes: Ao implantar o Kubernetes por conta própria a partir do código aberto, nenhum controle de segurança vem configurado por padrão. Entender como eles funcionam e como configurá-los com segurança é responsabilidade exclusiva de quem opera o sistema.
Implantação segura de workloads: Quer você use uma distribuição do Kubernetes com controles de segurança pré-configurados, quer crie um cluster e seus controles por conta própria, desenvolvedores e equipes de aplicação que não conhecem bem os detalhes do Kubernetes podem ter dificuldade para proteger corretamente seus workloads.
Falta de segurança integrada: Embora o Kubernetes ofereça controles de acesso e recursos para ajudar a criar um cluster seguro, a configuração padrão não é 100% segura. As organizações precisam fazer as alterações certas nos workloads, no cluster, na rede e nas configurações da infraestrutura para garantir que os clusters Kubernetes e os contêineres estejam totalmente protegidos.
Desafios e soluções de segurança do Kubernetes
Embora as soluções de segurança integradas ao Kubernetes não cubram todos os problemas possíveis, o ecossistema do Kubernetes oferece muitas opções de segurança.
Algumas áreas desafiadoras do Kubernetes que exigem ferramentas de segurança adicionais incluem:
Segurança de workloads: A maioria dos workloads do Kubernetes consiste em contêineres executados em mecanismos como containerd, cri-o ou Docker. O código e os demais pacotes nesses contêineres não podem ter vulnerabilidades.
Configuração de workloads: Seja usando manifestos do Kubernetes, Helm Charts ou ferramentas de modelagem, a configuração para implantar aplicações no Kubernetes geralmente é feita em código. Esse código afeta os controles de segurança do Kubernetes que determinam como um workload é executado e o que pode ou não acontecer em caso de invasão. Por exemplo, limitar o uso de CPU, memória e rede de cada workload ao máximo esperado ajuda a conter invasões no workload afetado e evita o comprometimento de outros serviços.
Configuração de clusters: Há várias ferramentas disponíveis para avaliar a segurança dos clusters em execução, como Sysdig, Falco e Prometheus. Entre outros recursos, essas ferramentas usam logs de auditoria e outras métricas integradas do Kubernetes para verificar a conformidade com as boas práticas de segurança do Kubernetes e com os benchmarks de segurança CIS e outros relevantes.
Rede do Kubernetes: Proteger a rede é fundamental no Kubernetes. É preciso considerar a comunicação entre pods, o tráfego de entrada e saída, a descoberta de serviços e, se necessário, malhas de serviços (como o Istio). Quando um cluster é invadido, todos os serviços e máquinas da rede ficam em risco. Por isso, é importante garantir que seus serviços e as comunicações entre eles estejam isolados e limitados ao necessário. Isso, combinado ao uso de criptografia para manter suas máquinas e serviços privados, também pode ajudar a conter ameaças e evitar uma invasão que afete toda a rede.
Segurança da infraestrutura: Como uma aplicação distribuída é executada em vários servidores (usando redes e armazenamento físicos ou virtuais), proteger a infraestrutura do Kubernetes — principalmente os nós mestres, bancos de dados e certificados — é fundamental. Se um agente mal-intencionado invadir sua infraestrutura, também poderá acessar tudo o que é necessário para chegar ao cluster e às aplicações.
Cada um desses desafios pode ser enfrentado com ferramentas de segurança disponíveis no ecossistema do Kubernetes. A parceria entre Snyk e Sysdig aproxima as equipes de desenvolvimento e SecOps ao oferecer ferramentas voltadas para desenvolvedores para cada aspecto da segurança do Kubernetes, do contêiner ao cluster. A Snyk oferece ferramentas de segurança centradas em desenvolvedores que atuam em todo o SDLC, como Snyk Container e Snyk Open Source. Ao combinar esses fluxos de trabalho voltados para desenvolvedores com o Sysdig, levamos informações da inteligência de runtime do Sysdig (que usa logs de auditoria para monitorar ambientes Kubernetes) aos desenvolvedores em seus fluxos de trabalho habituais. Essa parceria representa a primeira plataforma de gerenciamento da postura de segurança na nuvem criada para desenvolvedores.

Segurança de contêineres que prioriza os desenvolvedores
O Snyk encontra e corrige automaticamente vulnerabilidades em imagens de contêiner e workloads do Kubernetes.
Proteção dos hosts do Kubernetes
O host de nuvem representa a camada final de um ambiente Kubernetes. Os principais provedores de nuvem oferecem ferramentas de gerenciamento para recursos do Kubernetes, incluindo o Google Kubernetes Engine (GKE), o Azure Kubernetes Service (AKS) e o Elastic Kubernetes Service da Amazon (EKS), mas a segurança ainda segue um modelo de responsabilidade compartilhada.
Há várias maneiras de proteger hosts Kubernetes contra vulnerabilidades:
Proteja a camada de workloads: Garanta que as imagens de contêiner não tenham vulnerabilidades e estejam configuradas corretamente (por exemplo, não permita contêineres privilegiados).
Crie limites entre workloads e hosts: Restrinja o acesso aos recursos do host reduzindo os privilégios dos contêineres e configurando o ambiente de execução para limitar o uso de recursos em caso de invasão.
Monitore os clusters em execução: Monitore os logs de auditoria para identificar configurações incorretas ou comportamentos suspeitos.
Configurações de contexto de segurança do Kubernetes que você deve implementar
Uma maneira de impedir que pods e clusters acessem o restante do sistema Kubernetes é usar securityContexts. Veja dez importantes configurações de contexto de segurança que todo pod e contêiner deve usar:
runAsNonRoot: Definir como “true” impede que os contêineres sejam executados como usuário root.runAsUser/runAsGroup: Essas configurações garantem que os contêineres usem um usuário e um grupo específicos durante a execução.seLinuxOptions: Define o contexto do SELinux para o contêiner ou pod.seccompProfile: Permite definir o perfil seccomp no kernel Linux para restringir o que os contêineres podem fazer.privileged/allowPrivilegeEscalation: Em geral, não é recomendável permitir contêineres privilegiados nem que os processos neles elevem seus privilégios. Portanto, essas configurações devem ser definidas como false.capabilities: Permite controlar o acesso a chamadas no nível do kernel. Conceda apenas o mínimo necessário.readonlyRootFilesystem: Defina como true sempre que possível. Isso ajuda a impedir que invasores instalem software ou alterem configurações no sistema de arquivos.procMount: Use a configuração “Default”, exceto em situações específicas, como contêineres aninhados.fsGroup/fsGroupChangePolicy: Use essa configuração com cautela, pois alterar a propriedade de um volume comfsGrouppode afetar o desempenho de inicialização do pod e causar problemas em sistemas de arquivos compartilhados.sysctls: Evite modificar parâmetros do kernel usandosysctls, a menos que haja requisitos muito específicos, pois isso pode desestabilizar o sistema host.

Observabilidade de segurança do Kubernetes
Quando o assunto é segurança do K8s, usar configurações seguras ajuda a aproveitar os recursos de segurança do Kubernetes. Também é importante adotar processos eficazes de monitoramento para manter a visibilidade dos recursos do Kubernetes. Veja algumas dicas de monitoramento do Kubernetes:
Use tags e labels: Elas definem aplicações com metadados e simplificam o gerenciamento.
Monitore o conjunto completo de contêineres, não cada contêiner individualmente: O Kubernetes gerencia pods, não contêineres. Por isso, é importante monitorar no nível do pod.
Use a descoberta de serviços: Isso ajuda a monitorar os serviços do Kubernetes apesar de sua natureza dinâmica.
Aproveite os alertas: Você pode configurar alertas com base nos critérios que definem um ambiente Kubernetes saudável. Evite alertas excessivos, pois sistemas distribuídos podem ter muitos endpoints de monitoramento.
Inspecione o plano de controle: O plano de controle do Kubernetes funciona como um controlador de tráfego aéreo para workloads e clusters. Inspecionar cada componente ajuda a garantir a orquestração eficiente e o agendamento dos trabalhos.
Boas práticas de segurança do Kubernetes por fase
Veja algumas boas práticas para cada fase da segurança do Kubernetes:
Fase de desenvolvimento e design
Alguns ambientes Kubernetes podem ser mais seguros que outros. Usar uma arquitetura de múltiplos clusters ou vários namespaces com controles RBAC adequados pode ajudar a isolar workloads.
Fase de build
Escolha uma imagem mínima de um repositório confiável.
Use ferramentas de varredura de contêineres para detectar vulnerabilidades ou configurações incorretas nos contêineres.
Fase de implantação
As imagens devem ser verificadas e validadas antes da implantação.
Você pode usar um controlador de admissão para automatizar essa validação e implantar apenas imagens de contêiner confiáveis.
Fase de runtime
O ambiente de runtime representa a camada final de defesa dos recursos do Kubernetes.
A API do Kubernetes gera logs de auditoria que devem ser monitorados com uma ferramenta de segurança de runtime, como o Sysdig.
As imagens e os arquivos de políticas também devem ser verificados continuamente para evitar malware ou configurações incorretas no ambiente de runtime.
Como usar a Snyk para proteger o Kubernetes
A Snyk pode ajudar você a melhorar e manter a postura de segurança do Kubernetes com ferramentas voltadas para desenvolvedores, incluindo Snyk Container e Snyk IaC. A Snyk automatiza a verificação do código das aplicações, das imagens de contêiner e das configurações do Kubernetes, além de fornecer informações e recomendações aos desenvolvedores em seus fluxos de trabalho.
“Um produto como a Snyk nos ajuda a identificar áreas dos nossos serviços que podem estar expostas a ameaças de agentes externos”, explicou Rizzo. ... “Agora que a Snyk faz parte do nosso pipeline de CI/CD, as verificações de segurança são sempre feitas mais cedo durante o desenvolvimento.”
Nossa parceria com a Sysdig amplia nossos recursos de segurança para o ambiente de runtime.
Segurança de contêineres que prioriza os desenvolvedores
O Snyk encontra e corrige automaticamente vulnerabilidades em imagens de contêiner e workloads do Kubernetes.
Perguntas frequentes sobre segurança do Kubernetes
O Kubernetes representa um risco de segurança?
Embora o Kubernetes ofereça recursos e configurações de segurança que podem ajudar, a segurança não vem habilitada por padrão. As equipes responsáveis precisam configurar esses controles para garantir a segurança dos contêineres e do código executados no cluster.
Como cada vez mais os desenvolvedores escrevem as configurações dos contêineres em que suas aplicações são executadas, eles precisam incluir a segurança do Kubernetes em seus planos.
Como proteger os Secrets do Kubernetes?
Os Secrets do Kubernetes são armazenados sem criptografia por padrão. Por isso, o primeiro passo para protegê-los é ativar a criptografia em repouso. Em seguida, aplique controles de acesso baseados em função para limitar as permissões de leitura e gravação dos usuários e definir quem pode modificar ou criar novos Secrets.
Como proteger contêineres no Kubernetes?
A segurança de contêineres no Kubernetes começa com a escolha de uma imagem base confiável e enxuta. Use ferramentas de análise para identificar vulnerabilidades ou configurações incorretas no contêiner antes da implantação em produção. Depois, ferramentas de monitoramento em tempo de execução podem manter a visibilidade dos contêineres ativos por meio de logs de auditoria e outros recursos.
Como manter a segurança no Kubernetes?
O Kubernetes conta com recursos de segurança integrados, mas eles precisam ser configurados corretamente para funcionar de forma eficaz. A segurança começa na fase de planejamento, com a escolha de uma arquitetura segura e de uma imagem base de contêiner. Em seguida, ferramentas de análise ajudam a monitorar o processo de build e identificar vulnerabilidades ou configurações incorretas antes que o contêiner entre em produção. Por fim, ferramentas de monitoramento em tempo de execução ajudam a manter a visibilidade dos contêineres em execução.