Avaliando a Segurança em Ambientes Kubernetes com Kubeaudit
Essa é a segunda parte falando de segurança em ambientes Kubernetes. Caso você ainda não tenha visto a Parte 1, fique a vontade para clicar no link abaixo:
No post anterior, falamos de uma avaliação mais geral, focada no cluster inteiro e com uma base de avaliação nas instruções de boas práticas da CIS (Center for Internet Security).
Já nesse post, vamos ser um pouco mais específicos e entender se conseguimos avaliar os Manifests do Kubernetes.
Esses manifests nos permite descrever, em um arquivo YAML, qual vai ser a estrutura da nossa aplicação no cluster Kubernetes e, além disso, faz que esse arquivo seja uma “linguagem” para os mecanismos do Kubernetes entenderem e criarem os objetos que serão necessários para sustentar uma aplicação.
O objeto que vamos focar nesse post é o Deployment, que é o objeto mais comum de ser usado no Kubernetes. É com o deployment que podemos chamar a imagem de container da minha aplicação, relacionar os environments de configuração e associar os volumes corretos.
E devido esse conjunto de estruturas, é importante que a gente saiba quando um Deployment está ou não dentro dos padrões de segurança, e para isso a melhor maneira é auditá-lo.
Mas como fazer essas auditorias? Para isso vamos as seguintes ferramentas Open Source:
- Minikube: Formas mais simples de ter um cluster Kubernetes básico focado para laboratório.
- Kubaudit: Ferramenta focada em auditória de manifests e do cluster Kubernetes.
Preparando o Laboratório
Para que todos possam fazer esse laboratório, vamos utilizar o Minikube. O Minikube tem como propósito criar um ambiente de desenvolvimento ou de testes, virtualizado de forma simples e rápida.
Já que o foco é a parte de Segurança, vamos seguir os passos de instalação do Minikube e Kubectl mencionados no post abaixo:
Então, após garantir a instalação do Minikube e o kubectl (binário para controlar os recursos do K8S) vamos fazer os seguintes comandos:
minikube start kubectl get node
O resultado esperado é semelhante ao seguinte:
Com isso, já temos uma laboratório simples para que nossa avaliação da segurança seja efetiva.
Kubeaudit
Agora, sim! Apresento-vos o kubeaudit. Essa é uma ferramenta open source mantida pela Shopify com o objetivo de conseguir auditar ambientes de Kubernetes fazendo validação de vários pontos focados para a segurança.
Com o kubeaudit é possível avaliar os arquivos ou aplicações que estão em execução no Kubernetes, fazendo a avaliação se estão corretamente configurado. Suas validações vão desde análise de uso abusivo de elevação de privilégio, de capabilities, analise de permissões em volumes entre outros.
Seu uso é bem simples, já que ele é apenas um binário. Sendo assim para instalá-lo, basta acessar a última release no repositório do projeto (https://github.com/Shopify/kubeaudit/releases) escolher o sistema/arquitetura que melhor se adequar a você. Se você usa Linux, os passos são:
sudo wget https://github.com/Shopify/kubeaudit/releases/download/0.16.0/kubeaudit_0.16.0_linux_amd64.tar.gz -O /tmp/kubeaudit.tar.gz cd /tmp/ tar -xf kubeaudit.tar.gz sudo mv kubeaudit /usr/bin/ kubeaudit version
O mais interessante é que o Kubeaudit trabalha em 3 modos, são eles:
- Manifest Mode: Esse é o modo de avaliação de um arquivo de manifest. Nesse caso usamos o parâmetro -f para definir o arquivo e executar o kubeaudit no manifest mode.
- Cluster Mode: Identifica se está sendo executar em um cluster. Caso esteja, faz a auditoria os recursos do cluster.
- Local Mode: Faz a conexão a um cluster usando um kubeconfig local. Utiliza por padrão o ~/.kube/config mas pode esse caminho pode ser alterado com a opção -c
Vamos então ver na prática como usar o kubeaudit.
Execução Prática
O minikube já cria um ~/.kube/config para que possamos fazer os testes. Sendo assim, vamos executar o kubeaudit em Local Mode e com isso, podemos executar uma auditoria em busca de pods que estão sendo executados no cluster e que permitem escalar privilégios, podemos fazer a auditoria assim:
kubeadmin privesc
O resultado deve ser semelhante a imagem abaixo:
Reparem que a saída do comando mostra qual é o tipo do Objeto, o seu nome e o namespace que ele está alocado. E além disse apresenta na mensagem que a diretiva allowPrivilegeEscalation deviria ter sido configurada como false, sendo que isso resolveria o problema.
Outra forma, bem simples também, de usar o kubeadmin é no modo Manifest. Para isso, vamos usar um manifest de Deployment de exemplo Github do Kubernetes, com os seguintes comandos:
wget https://raw.githubusercontent.com/kubernetes/examples/master/guestbook/frontend-deployment.yaml kubeaudit all -f fronted-deployment.yaml
Vocês podem perceber que dessa vez passamos o valor all, isso permite que o kubeaudit realize todas as auditorias possíveis no arquivo. E como podemos ver, ele está em Manifest Mode apenas porque definimos o arquivo de manifest com a opção -f
Sendo assim, o resultado da auditoria deve ser semelhante a imagem abaixo:
Dessa vez o resultado é maior, mostrando desde problemas (identificado por [Error]) até alguns warnings. Podemos identificar que esse manifest, por exemplo, não tem o parâmetro privileded definido no manifest (PrivilegedNil) ou mesmo, algo mais grave, não há nenhum configuração de Security Context (CapabilityOrSecurityContextMissing).
Só essa saída é muito importante, porque dá um norte para as equipes avaliarem os problemas e fazerem as correções. Mas um das funções mais interessantes do kubeaudit é de fazer a correção automática dos problemas. Com isso ele usa o recurso de autofix, para usá-lo siga os passo abaixo:
kubeaudit autofix -f frontend-deployment.yaml -o frontend-fix.yaml kubeaudit all -f frontend-fix.yaml
Nesse passo, perceba que estamos criando um novo arquivo com a correção, assim você pode avaliar melhor as diferenças dos arquivos, porém caso a opção -o seja omitida ele executa os ajustes dos problemas diretamente no arquivo original.
Após os passos, você poderá ver que todos os problemas foram resolvidos e que sobrou apenas uma correção de LimitNotSet, que deve ser corrigida manualmente adicionando um limit de uso de recursos:
Conclusão
O kubeaudit é uma ótima ferramentas para complementar a validação de segurança de um cluster de Kubernetes. É prática e simples de ser manipulada, o que já ajuda na sua implementação e permite que pipelines de entrega de produtos fiquem cada vez mais robustas e façam todas as validações necessárias do inicio ao fim.
Além disso, o aumento da automação, seja para testar ou para corrigir os problemas, permite que as equipes possam focar em melhorar cada vez mais os seus fluxos de entrega.
Mas lembre-se, toda vez que falamos de segurança, mesmo que tenhamos inúmeras automações, ainda é necessário ter um olha critico sobre essas ações para que a cobertura na mitigação de problemas seja a maior possível.
Espero que você tenham gostado! E até a próxima!
About author
Você pode gostar também
Tutorial: Configurando o Traefik no Docker Swarm com arquivos YAML
Neste tutorial, você aprenderá como configurar o Traefik no Docker Swarm usando arquivos YAML, uma forma fácil e eficiente de gerenciar seus aplicativos de contêineres em larga escala. Ao seguir
Guia Completo: Gerenciamento de Disco e Partições Linux
Neste artigo, vamos falar sobre o gerenciamento de disco, uma das partes mais importantes da sua infraestrutura para que você não perca ou corrompa aqueles arquivos que guarda com carinho
Como fazer deploy de uma aplicação Go no Google Cloud Run com Github Actions
Eai galera! Nesse post, o objetivo é mostrar que nem sempre é preciso um Kubernetes ou Jenkins para colocar as suas aplicações no ar. Vamos criar uma Instância no Cloud