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
Descubra como o Skaffold pode otimizar seu trabalho com Kubernetes
Olá pessoal! A ideia para este post surgiu quando me deparei com o problema, que todos que trabalham ou vão trabalhar com Kubernetes enfrentam: a necessidade de a cada simples
Teste sua infraestrutura com InSpec: auditoria automatizada e eficiente
Você conhece a ferramenta da Chef, o InSpec? Vamos realizar um teste básico de infraestrutura utilizando InSpec! Muita das vezes quando trabalhamos com integração continua não temos a certeza que
Entendendo os modos de execução do Wildfly para aplicativos Java
Qual modo usar? É comum que ao escolhermos a utilização de uma plataforma de middleware como o Wildfly para a execução de nossos aplicativos Java, nos deparamos com a seguinte